Index: src/mlx/gui/acars.py
===================================================================
--- src/mlx/gui/acars.py	(revision 996)
+++ src/mlx/gui/acars.py	(revision 1083)
@@ -27,4 +27,5 @@
         super(ACARS, self).__init__()
         self._gui = gui
+        self._browser = None
 
     def start(self):
@@ -34,3 +35,9 @@
         self.pack_start(container, True, True, 0)
 
-        cef.startInContainer(container, ACARS.URL)
+        self._browser = cef.startInContainer(container, ACARS.URL)
+
+    def stop(self):
+        """Close the browser."""
+        if self._browser is not None:
+            self._browser.CloseBrowser(False)
+            self._browser = None
Index: src/mlx/gui/cef.py
===================================================================
--- src/mlx/gui/cef.py	(revision 997)
+++ src/mlx/gui/cef.py	(revision 1083)
@@ -92,10 +92,8 @@
         self._browser.SetFocus(True)
         self._browser.SetClientCallback("OnLoadEnd", self._onLoadEnd)
-
-        bindings = cefpython.JavascriptBindings(bindToFrames=True,
-                                                bindToPopups=True)
-        bindings.SetFunction("briefingData", self._briefingDataAvailable)
-        bindings.SetFunction("formFilled", self._formFilled)
-        self._browser.SetJavascriptBindings(bindings)
+        self._browser.SetClientCallback("OnLoadError", self._onLoadError)
+        self._browser.SetClientCallback("OnBeforeBrowse",
+                                        lambda browser, frame, request,
+                                        user_gesture, is_redirect: False)
 
     def call(self, plan, getCredentials, updateProgress, htmlFilePath):
@@ -112,4 +110,9 @@
         self._updateProgress(SIMBRIEF_PROGRESS_LOADING_FORM,
                              SIMBRIEF_RESULT_NONE, None)
+
+    def finalize(self):
+        """Close the browser and release it."""
+        self._browser.CloseBrowser()
+        self._browser = None
 
     def _onLoadEnd(self, browser, frame, http_code):
@@ -182,12 +185,10 @@
                                  SIMBRIEF_RESULT_ERROR_OTHER, None)
 
-    def _resultsAvailable(self, flightInfo):
-        """Called from the result retrieval thread when the result is
-        available.
-
-        It checks for the plan being not None, as we may time out."""
-        if self._plan is not None:
-            self._updateProgress(SIMBRIEF_PROGRESS_DONE,
-                                 SIMBRIEF_RESULT_OK, flightInfo)
+    def _onLoadError(self, browser, frame, error_code, error_text_out,
+                     failed_url):
+        """Called when loading of an URL fails."""
+        print("gui.cef.SimBriefHandler._onLoadError", browser, frame, error_code, error_text_out, failed_url)
+        self._updateProgress(self._lastProgress,
+                             SIMBRIEF_RESULT_ERROR_OTHER, None)
 
     def _updateProgress(self, progress, results, flightInfo):
@@ -281,4 +282,7 @@
         "browser_subprocess_path": "%s/%s" % \
             (cefpython.GetModuleDirectory(), "subprocess"),
+        "windowless_rendering_enabled": True,
+        "cache_path": os.path.join(GLib.get_user_cache_dir(),
+                                   "mlxcef")
     }
 
@@ -307,11 +311,7 @@
     """Get a container object suitable for running a browser instance
     within."""
-    if os.name=="nt":
-        container = Gtk.DrawingArea()
-        container.set_property("can-focus", True)
-        container.connect("size-allocate", _handleSizeAllocate)
-    else:
-        container = Gtk.DrawingArea()
-
+    container = Gtk.DrawingArea()
+    container.set_property("can-focus", True)
+    container.connect("size-allocate", _handleSizeAllocate)
     container.show()
 
@@ -333,15 +333,20 @@
         container.windowID = windowID
         Gdk.threads_leave()
+        windowRect = [0, 0, 1, 1]
     else:
         container.set_visual(container.get_screen().lookup_visual(0x21))
         windowID = container.get_window().get_xid()
+        windowRect = None
 
     windowInfo = cefpython.WindowInfo()
     if windowID is not None:
-        windowInfo.SetAsChild(windowID)
-
-    return cefpython.CreateBrowserSync(windowInfo,
-                                       browserSettings = browserSettings,
-                                       navigateUrl = url)
+        windowInfo.SetAsChild(windowID, windowRect = windowRect)
+
+    browser = cefpython.CreateBrowserSync(windowInfo,
+                                          browserSettings = browserSettings,
+                                          navigateUrl = url)
+    container.browser = browser
+
+    return browser
 
 #------------------------------------------------------------------------------
@@ -350,10 +355,10 @@
     def GetRootScreenRect(self, browser, rect_out):
         #print "GetRootScreenRect"
-        rect_out += [0, 0, 800, 600]
+        rect_out += [0, 0, 1920, 1080]
         return True
 
     def GetViewRect(self, browser, rect_out):
         #print "GetViewRect"
-        rect_out += [0, 0, 800, 600]
+        rect_out += [0, 40, 1920, 1040]
         return True
 
@@ -387,11 +392,13 @@
         pass
 
-    def OnBeforePopup(self, browser, frame, targetURL, targetFrameName,
-                      popupFeatures, windowInfo, client, browserSettings,
-                      noJavascriptAccess):
+    def OnBeforePopup(self, browser, frame, target_url, target_frame_name,
+                      target_disposition, user_gesture,
+                      popup_features, window_info_out, client,
+                      browser_settings_out, no_javascript_access_out,
+                      **kwargs):
         wInfo = cefpython.WindowInfo()
         wInfo.SetAsOffscreen(int(0))
 
-        windowInfo.append(wInfo)
+        window_info_out.append(wInfo)
 
         return False
@@ -417,4 +424,7 @@
     global _toQuit
     _toQuit = True
+
+    _simBriefHandler.finalize()
+
     cefpython.Shutdown()
 
@@ -433,4 +443,10 @@
 def _handleSizeAllocate(widget, sizeAlloc):
     """Handle the size-allocate event on Windows."""
-    if widget is not None:
-        cefpython.WindowUtils.OnSize(widget.windowID, 0, 0, 0)
+    if os.name=="nt":
+        if widget is not None and hasattr(widget, "windowID"):
+            cefpython.WindowUtils.OnSize(widget.windowID, 0, 0, 0)
+    else:
+         if widget is not None and hasattr(widget, "browser") and \
+            widget.browser is not None:
+             widget.browser.SetBounds(sizeAlloc.x, sizeAlloc.y,
+                                      sizeAlloc.width, sizeAlloc.height)
Index: src/mlx/gui/common.py
===================================================================
--- src/mlx/gui/common.py	(revision 1002)
+++ src/mlx/gui/common.py	(revision 1083)
@@ -35,4 +35,5 @@
 from gi.repository import Pango
 from gi.repository import PangoCairo
+from gi.repository import GLib
 
 import codecs
Index: src/mlx/gui/gui.py
===================================================================
--- src/mlx/gui/gui.py	(revision 1081)
+++ src/mlx/gui/gui.py	(revision 1083)
@@ -484,4 +484,6 @@
         singleton.raiseCallback = None
 
+        self._acars.stop()
+
         cef.finalize()
 
