Index: src/mlx/gui/flight.py
===================================================================
--- src/mlx/gui/flight.py	(revision 118)
+++ src/mlx/gui/flight.py	(revision 119)
@@ -416,5 +416,5 @@
         flight = self._wizard._bookedFlight
         if flight.departureICAO=="LHBP":
-            self._wizard._getFleet(self._fleetRetrieved)
+            self._wizard.gui.getFleet(self._fleetRetrieved)
         else:
             self._nextDistance = 2
@@ -532,5 +532,5 @@
             dialog.hide()
 
-            self._wizard._getFleet(self._fleetRetrieved)
+            self._wizard.gui.getFleet(self._fleetRetrieved)
 
     def _fleetRetrieved(self, fleet):
@@ -2121,40 +2121,4 @@
         self.setCurrentPage(0)
         
-    def _getFleet(self, callback, force = False):
-        """Get the fleet, if needed.
-
-        callback is function that will be called, when the feet is retrieved,
-        or the retrieval fails. It should have a single argument that will
-        receive the fleet object on success, None otherwise.
-        """
-        if self._fleet is not None and not force:
-            callback(self._fleet)
-
-        self.gui.beginBusy(xstr("fleet_busy"))
-        self._fleetCallback = callback
-        self.gui.webHandler.getFleet(self._fleetResultCallback)
-
-    def _fleetResultCallback(self, returned, result):
-        """Called when the fleet has been queried."""
-        gobject.idle_add(self._handleFleetResult, returned, result)
-
-    def _handleFleetResult(self, returned, result):
-        """Handle the fleet result."""
-        self.gui.endBusy()
-        if returned:
-            self._fleet = result.fleet
-        else:
-            self._fleet = None
-
-            dialog = gtk.MessageDialog(parent = self.gui.mainWindow,
-                                       type = MESSAGETYPE_ERROR,
-                                       buttons = BUTTONSTYPE_OK,
-                                       message_format = xstr("fleet_failed"))
-            dialog.set_title(WINDOW_TITLE_BASE)
-            dialog.run()
-            dialog.hide()
-
-        self._fleetCallback(self._fleet)
-
     def _updatePlane(self, callback, tailNumber, status, gateNumber = None):
         """Update the given plane's gate information."""
Index: src/mlx/gui/gates.py
===================================================================
--- src/mlx/gui/gates.py	(revision 118)
+++ src/mlx/gui/gates.py	(revision 119)
@@ -124,18 +124,15 @@
     def _refreshClicked(self, button):
         """Called when the Refresh data button is clicked."""
-        self._gui.beginBusy(xstr("fleet_busy"))
-        # FIXME: put this into the GUI, where it refreshes everything
-        self._gui.webHandler.getFleet(self._fleetCallback)
+        self._gui.getFleet(force = True)
 
-    def _fleetCallback(self, returned, result):
-        """Callback for the fleet retrieval."""
-        gobject.idle_add(self._handleFleet, returned, result)
+    def handleFleet(self, fleet):
+        """Handle new fleet information.
 
-    def _handleFleet(self, returned, result):
-        """Callback for the fleet retrieval."""
-        self._gui.endBusy()
-        if returned:
-            self._fleetStore.clear()
-            fleet = result.fleet
+        If fleet is None, the data will be cleared."""
+        self._fleetStore.clear()
+        if fleet is None:
+            for (gateNumber, label) in self._gateLabels.iteritems():
+                label.set_markup("<b>" + gateNumber + "</b>")
+        else:        
             for plane in fleet:
                 conflicting = False
@@ -169,6 +166,6 @@
                 self._gateLabels[gateNumber].set_markup(markup)
             
-        self._fleetFrame.set_sensitive(True)
-        self._gatesFrame.set_sensitive(True)
+        self._fleetFrame.set_sensitive(fleet is not None)
+        self._gatesFrame.set_sensitive(fleet is not None)
 
 
Index: src/mlx/gui/gui.py
===================================================================
--- src/mlx/gui/gui.py	(revision 118)
+++ src/mlx/gui/gui.py	(revision 119)
@@ -47,4 +47,6 @@
         self._simulator = None
         self._monitoring = False
+        self._fleet = None
+        self._fleetCallback = None
 
         self._stdioLock = threading.Lock()
@@ -551,4 +553,41 @@
         self._weightHelp.reset()
         self._weightHelp.enable()
+
+    def getFleet(self, callback = None, force = False):
+        """Get the fleet.
+
+        If force is False, and we already have a fleet retrieved,
+        that one will be used."""
+        if self._fleet is None or force:
+            self._fleetCallback = callback
+            self.beginBusy(xstr("fleet_busy"))
+            self.webHandler.getFleet(self._fleetResultCallback)
+        else:
+            callback(self._fleet)
+
+    def _fleetResultCallback(self, returned, result):
+        """Called when the fleet has been queried."""
+        gobject.idle_add(self._handleFleetResult, returned, result)
+
+    def _handleFleetResult(self, returned, result):
+        """Handle the fleet result."""
+        self.endBusy()
+        if returned:
+            self._fleet = result.fleet
+        else:
+            self._fleet = None
+
+            dialog = gtk.MessageDialog(parent = self.gui.mainWindow,
+                                       type = MESSAGETYPE_ERROR,
+                                       buttons = BUTTONSTYPE_OK,
+                                       message_format = xstr("fleet_failed"))
+            dialog.set_title(WINDOW_TITLE_BASE)
+            dialog.run()
+            dialog.hide()
+
+        if self._fleetCallback is not None:
+            self._fleetCallback(self._fleet)
+            self._fleetCallback = None
+        self._fleetGateStatus.handleFleet(self._fleet)
 
     def _writeStdIO(self):
