Index: src/mlx/common.py
===================================================================
--- src/mlx/common.py	(revision 585)
+++ src/mlx/common.py	(revision 651)
@@ -18,5 +18,6 @@
 #-------------------------------------------------------------------------------
 
-if os.name=="nt" or "FORCE_PYGTK" in os.environ:
+# Due to CEF, PyGTK is the default
+if "FORCE_PYGOBJECT" not in os.environ:
     print "Using PyGTK"
     pygobject = False
Index: src/mlx/config.py
===================================================================
--- src/mlx/config.py	(revision 503)
+++ src/mlx/config.py	(revision 652)
@@ -211,5 +211,5 @@
 class Config(object):
     """Our configuration."""
-    DEFAULT_UPDATE_URL = "http://mlx.varadiistvan.hu/update"
+    DEFAULT_UPDATE_URL = "http://mlx.varadiistvan.hu/update/cef"
 
     _messageTypesSection = "messageTypes"
Index: src/mlx/gui/acars.py
===================================================================
--- src/mlx/gui/acars.py	(revision 649)
+++ src/mlx/gui/acars.py	(revision 649)
@@ -0,0 +1,36 @@
+
+from common import *
+
+from mlx.i18n import xstr
+import mlx.const as const
+
+import cef
+
+#------------------------------------------------------------------------------
+
+## @package mlx.gui.acars
+#
+# The ACARS tab.
+#
+# This module implements to \ref ACRS class, which displays the MAVA ACARS in a
+# browser window using CEF
+
+#------------------------------------------------------------------------------
+
+class ACARS(gtk.VBox):
+    """The flight info tab."""
+    # The URL of the ACARS map
+    URL = "http://virtualairlines.hu/acars2/show.html"
+
+    def __init__(self, gui):
+        """Construct the flight info tab."""
+        super(ACARS, self).__init__()
+        self._gui = gui
+
+    def start(self):
+        """Start the browser."""
+        container = cef.getContainer()
+
+        self.pack_start(container, True, True, 0)
+
+        cef.startInContainer(container, ACARS.URL)
Index: src/mlx/gui/cef.py
===================================================================
--- src/mlx/gui/cef.py	(revision 648)
+++ src/mlx/gui/cef.py	(revision 648)
@@ -0,0 +1,103 @@
+from common import *
+
+import platform
+import json
+
+from cefpython3 import cefpython
+
+import os
+import re
+
+#------------------------------------------------------------------------------
+
+## @package mlx.gui.cef
+#
+# Some helper stuff related to the Chrome Embedded Framework
+
+#------------------------------------------------------------------------------
+
+# Indicate if we should quit
+_toQuit = False
+
+#------------------------------------------------------------------------------
+
+def initialize():
+    """Initialize the Chrome Embedded Framework."""
+    global _toQuit
+    _toQuit = False
+
+    gobject.threads_init()
+
+    settings = {
+        "debug": True, # cefpython debug messages in console and in log_file
+        "log_severity": cefpython.LOGSEVERITY_VERBOSE, # LOGSEVERITY_VERBOSE
+        "log_file": "", # Set to "" to disable
+        "release_dcheck_enabled": True, # Enable only when debugging
+        # This directories must be set on Linux
+        "locales_dir_path": os.path.join(cefpython.GetModuleDirectory(), "locales"),
+        "resources_dir_path": cefpython.GetModuleDirectory(),
+        "browser_subprocess_path": "%s/%s" % \
+            (cefpython.GetModuleDirectory(), "subprocess"),
+    }
+
+    cefpython.Initialize(settings, {})
+
+    gobject.timeout_add(10, _handleTimeout)
+
+#------------------------------------------------------------------------------
+
+def getContainer():
+    """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.VBox(True, 0)
+
+    container.show()
+
+    return container
+
+#------------------------------------------------------------------------------
+
+def startInContainer(container, url, browserSettings = {}):
+    """Start a browser instance in the given container with the given URL."""
+    if os.name=="nt":
+        windowID = container.get_window().handle
+    else:
+        m = re.search("GtkVBox at 0x(\w+)", str(container))
+        hexID = m.group(1)
+        windowID = int(hexID, 16)
+
+    windowInfo = cefpython.WindowInfo()
+    windowInfo.SetAsChild(windowID)
+
+    return cefpython.CreateBrowserSync(windowInfo,
+                                       browserSettings = browserSettings,
+                                       navigateUrl = url)
+
+#------------------------------------------------------------------------------
+
+def finalize():
+    """Finalize the Chrome Embedded Framework."""
+    global _toQuit
+    toQuit = True
+    cefpython.Shutdown()
+
+#------------------------------------------------------------------------------
+
+def _handleTimeout():
+    """Handle the timeout by running the CEF message loop."""
+    if _toQuit:
+        return False
+    else:
+        cefpython.MessageLoopWork()
+        return True
+
+#------------------------------------------------------------------------------
+
+def _handleSizeAllocate(widget, sizeAlloc):
+    """Handle the size-allocate event."""
+    cefpython.WindowUtils.OnSize(widget.get_window().handle, 0, 0, 0)
Index: src/mlx/gui/gui.py
===================================================================
--- src/mlx/gui/gui.py	(revision 620)
+++ src/mlx/gui/gui.py	(revision 652)
@@ -15,4 +15,6 @@
 from mlx.gui.pirep import PIREPViewer
 from mlx.gui.bugreport import BugReportDialog
+from mlx.gui.acars import ACARS
+import cef
 
 import mlx.const as const
@@ -102,6 +104,9 @@
         window.connect("delete-event", self.deleteMainWindow)
         window.connect("window-state-event", self._handleMainWindowState)
+        if os.name=="nt":
+            window.connect("leave-notify-event", self._handleLeaveNotify)
         accelGroup = gtk.AccelGroup()
         window.add_accel_group(accelGroup)
+        window.realize()
 
         mainVBox = gtk.VBox()
@@ -151,4 +156,9 @@
         self._notebook.append_page(self._fleetGateStatus, label)
 
+        self._acars = ACARS(self)
+        label = gtk.Label("ACARS")
+        label.set_use_underline(True)
+        self._notebook.append_page(self._acars, label)
+
         (self._debugLogWidget, self._debugLogView) = self._buildLogWidget()
         self._debugLogWidget.show_all()
@@ -170,4 +180,6 @@
 
         window.show_all()
+        if os.name=="nt":
+            window.get_window().focus()
 
         self._wizard.grabDefault()
@@ -427,11 +439,16 @@
             self._updater = Updater(self,
                                     self._programDirectory,
-                                    self.config.updateURL,
+                                    self.config.DEFAULT_UPDATE_URL,
                                     self._mainWindow)
             self._updater.start()
+
+        cef.initialize()
+        self._acars.start()
 
         singleton.raiseCallback = self.raiseCallback
         gtk.main()
         singleton.raiseCallback = None
+
+        cef.finalize()
 
         self._disconnect()
@@ -687,4 +704,11 @@
              (event.new_window_state&WINDOW_STATE_ICONIFIED)==0:
             self._mainWindow.present()
+
+    def _handleLeaveNotify(self, widget, event):
+        """Handle the leave-notify event.
+
+        Here we reset the focus to the main window as CEF might have acquired
+        it earlier."""
+        self._mainWindow.get_window().focus()
 
     def raiseCallback(self):
Index: src/mlx/update.py
===================================================================
--- src/mlx/update.py	(revision 672)
+++ src/mlx/update.py	(revision 681)
@@ -525,6 +525,4 @@
         return
 
-    print "update: result:", result
-
     (manifest, updateManifest, modifiedAndNew, removed) = result        
     localRemoved = getToremoveFiles(directory)
