Index: src/mlx/gui/common.py
===================================================================
--- src/mlx/gui/common.py	(revision 29)
+++ src/mlx/gui/common.py	(revision 32)
@@ -28,2 +28,38 @@
 import cairo
 
+#------------------------------------------------------------------------------
+
+class FlightStatusHandler(object):
+    """Base class for objects that handle the flight status in some way."""
+    def __init__(self):
+        self._stage = None
+        self._rating = 100
+        self._noGoReason = None
+
+    def resetFlightStatus(self):
+        """Reset the flight status."""
+        self._stage = None
+        self._rating = 100
+        self._noGoReason = None
+        self._updateFlightStatus()
+        
+    def setStage(self, stage):
+        """Set the stage of the flight."""
+        if stage!=self._stage:
+            self._stage = stage
+            self._updateFlightStatus()
+
+    def setRating(self, rating):
+        """Set the rating to the given value."""
+        if rating!=self._rating:
+            self._rating = rating
+            if self._noGoReason is None:
+                self._updateFlightStatus()
+
+    def setNoGo(self, reason):
+        """Set a No-Go condition with the given reason."""
+        if self._noGoReason is None:
+            self._noGoReason = reason
+            self._updateFlightStatus()
+
+#------------------------------------------------------------------------------
Index: src/mlx/gui/gui.py
===================================================================
--- src/mlx/gui/gui.py	(revision 31)
+++ src/mlx/gui/gui.py	(revision 32)
@@ -2,4 +2,5 @@
 
 from statusicon import StatusIcon
+from statusbar import Statusbar
 from mlx.gui.common import *
 
@@ -10,5 +11,4 @@
 import mlx.acft as acft
 
-import math
 import time
 
@@ -64,5 +64,10 @@
         logFrame.set_border_width(8)
         mainVBox.pack_start(logFrame, True, True, 0)
-        
+
+        mainVBox.pack_start(gtk.HSeparator(), False, False, 0)
+
+        self._statusbar = Statusbar()
+        mainVBox.pack_start(self._statusbar, False, False, 0)
+
         win.show_all()        
 
@@ -82,12 +87,14 @@
         """Called when we have connected to the simulator."""
         self._connected = True
-        self._updateConnState()
         self._logger.untimedMessage("Connected to the simulator %s" % (descriptor,))
+        gobject.idle_add(self._statusbar.updateConnection,
+                         self._connecting, self._connected)
         
     def disconnected(self):
         """Called when we have disconnected from the simulator."""
         self._connected = False
-        self._updateConnState()
         self._logger.untimedMessage("Disconnected from the simulator")
+        gobject.idle_add(self._statusbar.updateConnection,
+                         self._connecting, self._connected)
 
     def write(self, msg):
@@ -101,4 +108,5 @@
     def resetFlightStatus(self):
         """Reset the status of the flight."""
+        self._statusbar.resetFlightStatus()
         self._statusIcon.resetFlightStatus()
 
@@ -109,4 +117,5 @@
     def _setStage(self, stage):
         """Set the stage of the flight."""
+        self._statusbar.setStage(stage)
         self._statusIcon.setStage(stage)
 
@@ -117,4 +126,5 @@
     def _setRating(self, rating):
         """Set the rating of the flight."""
+        self._statusbar.setRating(rating)
         self._statusIcon.setRating(rating)
 
@@ -125,4 +135,5 @@
     def _setNoGo(self, reason):
         """Set the rating of the flight."""
+        self._statusbar.setNoGo(reason)
         self._statusIcon.setNoGo(reason)
 
@@ -156,28 +167,4 @@
             self.showMainWindow()
             
-    def _drawConnState(self, connStateArea, eventOrContext):
-        """Draw the connection state."""
-        context = eventOrContext if pygobject else connStateArea.window.cairo_create()
-
-        if self._connecting:
-            if self._connected:
-                context.set_source_rgb(0.0, 1.0, 0.0)
-            else:
-                context.set_source_rgb(1.0, 0.0, 0.0)
-        else:
-            context.set_source_rgb(0.75, 0.75, 0.75)
-
-        width = connStateArea.get_allocated_width() if pygobject \
-                else connStateArea.allocation.width
-        height = connStateArea.get_allocated_height() if pygobject \
-                 else connStateArea.allocation.height
-        context.arc(width/2, height/2, 8, 0, 2*math.pi)
-
-        context.fill()
-
-    def _updateConnState(self):
-        """Initiate the updating of the connection state icon."""
-        self._connStateArea.queue_draw()
-
     def _connectToggled(self, button):
         """Callback for the connection button."""
@@ -211,5 +198,5 @@
             self._flight = None
 
-        self._updateConnState()
+        self._statusbar.updateConnection(self._connecting, self._connected)
 
     def _buildSetupFrame(self):
@@ -299,23 +286,4 @@
 
         setupBox.pack_start(self._connectButton, False, False, 0)
-
-        setupBox.pack_start(gtk.VSeparator(), False, False, 8)    
-
-        self._connStateArea = gtk.DrawingArea()
-        self._connStateArea.set_size_request(16, 16)
-        self._connStateArea.set_tooltip_markup('The state of the connection.\n'
-                                               '<span foreground="grey">Grey</span> means idle.\n'
-                                               '<span foreground="red">Red</span> means trying to connect.\n'
-                                               '<span foreground="green">Green</span> means connected.')
-
-        if pygobject:
-            self._connStateArea.connect("draw", self._drawConnState)
-        else:
-            self._connStateArea.connect("expose_event", self._drawConnState)
-
-        alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5)
-        alignment.add(self._connStateArea)
-
-        setupBox.pack_start(alignment, False, False, 8)
 
         setupBox.pack_start(gtk.VSeparator(), False, False, 8)    
Index: src/mlx/gui/statusbar.py
===================================================================
--- src/mlx/gui/statusbar.py	(revision 32)
+++ src/mlx/gui/statusbar.py	(revision 32)
@@ -0,0 +1,107 @@
+# Implementation of the status bar.
+
+#-------------------------------------------------------------------------------
+
+from common import *
+
+import mlx.const as const
+
+import math
+
+#-------------------------------------------------------------------------------
+
+class Statusbar(gtk.Frame, FlightStatusHandler):
+    """A status bar for the logger."""
+    def __init__(self):
+        """Construct the status bar."""
+        gtk.Frame.__init__(self)
+        FlightStatusHandler.__init__(self)
+
+        self._connecting = False
+        self._connected = False
+        
+        self.set_shadow_type(gtk.ShadowType.NONE if pygobject
+                             else gtk.SHADOW_NONE)
+
+        frameAlignment = gtk.Alignment(xscale = 1.0, yscale = 1.0)
+
+        frameAlignment.set_padding(padding_top = 2, padding_bottom = 2,
+                                   padding_left = 16, padding_right = 16)
+        self.add(frameAlignment)
+
+        statusBox = gtk.HBox()
+        frameAlignment.add(statusBox)
+
+        self._connStateArea = gtk.DrawingArea()
+        self._connStateArea.set_size_request(16, 16)
+        self._connStateArea.set_tooltip_markup('The state of the connection.\n'
+                                               '<span foreground="grey">Grey</span> means idle.\n'
+                                               '<span foreground="red">Red</span> means trying to connect.\n'
+                                               '<span foreground="green">Green</span> means connected.')
+
+        if pygobject:
+            self._connStateArea.connect("draw", self._drawConnState)
+        else:
+            self._connStateArea.connect("expose_event", self._drawConnState)
+
+        alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5)
+        alignment.add(self._connStateArea)        
+
+        statusBox.pack_start(alignment, False, False, 8)
+
+        statusBox.pack_start(gtk.VSeparator(), False, False, 8)
+
+        self._stageLabel = gtk.Label()
+        self._stageLabel.set_width_chars(20)
+        self._stageLabel.set_tooltip_text("The flight stage")
+        self._stageLabel.set_alignment(0.0, 0.5)
+        
+        statusBox.pack_start(self._stageLabel, False, False, 8)
+
+        statusBox.pack_start(gtk.VSeparator(), False, False, 8)
+
+        self._ratingLabel = gtk.Label()
+        self._ratingLabel.set_width_chars(10)
+        self._ratingLabel.set_tooltip_text("The flight rating")
+        self._ratingLabel.set_alignment(0.0, 0.5)
+        
+        statusBox.pack_start(self._ratingLabel, False, False, 8)
+
+        self._updateFlightStatus()
+
+    def updateConnection(self, connecting, connected):
+        """Update the connection status."""
+        self._connecting = connecting
+        self._connected = connected
+        self._connStateArea.queue_draw()
+    
+    def _drawConnState(self, connStateArea, eventOrContext):
+        """Draw the connection state."""
+        context = eventOrContext if pygobject else connStateArea.window.cairo_create()
+
+        if self._connecting:
+            if self._connected:
+                context.set_source_rgb(0.0, 1.0, 0.0)
+            else:
+                context.set_source_rgb(1.0, 0.0, 0.0)
+        else:
+            context.set_source_rgb(0.75, 0.75, 0.75)
+
+        width = connStateArea.get_allocated_width() if pygobject \
+                else connStateArea.allocation.width
+        height = connStateArea.get_allocated_height() if pygobject \
+                 else connStateArea.allocation.height
+        context.arc(width/2, height/2, width/2, 0, 2*math.pi)
+
+        context.fill()
+
+    def _updateFlightStatus(self):
+        """Update the flight status information."""
+        self._stageLabel.set_text("-" if self._stage is None
+                                  else const.stage2string(self._stage).upper())
+    
+        if self._noGoReason is None:
+            rating = "%.0f%%" % (self._rating,)
+        else:
+            rating = '<span foreground="red">' + self._noGoReason + '</span>'
+        self._ratingLabel.set_markup(rating)
Index: src/mlx/gui/statusicon.py
===================================================================
--- src/mlx/gui/statusicon.py	(revision 31)
+++ src/mlx/gui/statusicon.py	(revision 32)
@@ -9,24 +9,20 @@
 #-------------------------------------------------------------------------------
 
-class StatusIcon(object):
+class StatusIcon(FlightStatusHandler):
     """The class handling the status icon."""
     def __init__(self, iconDirectory, gui):
         """Construct the status icon."""
+        super(StatusIcon, self).__init__()
+
         self._gui = gui
 
-        self._stage = None
-        self._rating = 100
-        self._noGoReason = None
-        
         menu = gtk.Menu()
 
         if appIndicator:
             self._stageMenuItem = gtk.MenuItem()
-            self._stageMenuItem.set_label("Stage: -")
             self._stageMenuItem.show()
             menu.append(self._stageMenuItem)
 
             self._ratingMenuItem = gtk.MenuItem()
-            self._ratingMenuItem.set_label("Rating: 100%")
             self._ratingMenuItem.show()
             menu.append(self._ratingMenuItem)
@@ -71,5 +67,6 @@
                                lambda status: self._gui.toggleMainWindow())
             self._statusIcon = statusIcon
-            self._setTooltip()
+
+        self._updateFlightStatus()
 
     def mainWindowHidden(self):
@@ -81,46 +78,4 @@
         self._showHideMenuItem.set_active(True)
 
-    def resetFlightStatus(self):
-        """Reset the status of the flight."""
-        if not appIndicator:
-            self._statusIcon.set_blinking(False)
-        self._noGoReason = None
-        self.setStage(None)
-        self.setRating(100)
-        
-    def setStage(self, stage):
-        """Set the stage of the flight."""
-        self._stage = stage
-        if appIndicator:
-            label = "Stage: %s" % ("-" if self._stage is None \
-                                   else (const.stage2string(stage),))
-            self._stageMenuItem.set_label(label)
-        else:
-            self._setTooltip()
-
-    def setRating(self, rating):
-        """Set the rating to the given value."""
-        if rating==self._rating:
-            return
-        self._rating = rating
-
-        if appIndicator:
-            if self._noGoReason is None:
-                self._ratingMenuItem.set_label("Rating: %.0f%%" % (rating,))
-            else:
-                self._setTooltip()
-
-    def setNoGo(self, reason):
-        """Set a No-Go condition with the given reason."""
-        if self._noGoReason is not None:
-            return
-
-        self._noGoReason = reason
-        if appIndicator:
-            self._ratingMenuItem.set_label("Rating: %s" % (reason,))
-        else:
-            self._setTooltip()
-            self._statusIcon.set_blinking(True)
-
     def _showHideToggled(self, menuitem):
         """Called when the show/hide menu item is toggled."""
@@ -130,16 +85,20 @@
             self._gui.hideMainWindow()
 
-    def _setTooltip(self):
-        """Set the tooltip of the status icon."""
+    def _updateFlightStatus(self):
+        """Update the flight status."""
+        stage = "-" if self._stage is None else const.stage2string(self._stage)
+        
         if self._noGoReason is None:
             rating = "%.0f%%" % (self._rating,)
         else:
-            rating = '<span foreground="red">' + self._noGoReason + '</span>'
+            rating = self._noGoReason
 
-        markup = "MAVA Logger X %s\n\nStage: %s\nRating: %s" %\
-                 (const.VERSION, ("-" if self._stage is None else
-                                  const.stage2string(self._stage)),
-                  rating)
-        
-        self._statusIcon.set_tooltip_markup(markup)
-        
+        if appIndicator:
+            self._stageMenuItem.set_label("Stage: %s" % (stage,))
+            self._ratingMenuItem.set_label("Rating: %s" % (rating,))
+        else:
+            if self._noGoReason is not None:
+                rating = '<span foreground="red">' + rating + '</span>'
+            markup = "MAVA Logger X %s\n\nStage: %s\nRating: %s" %\
+                     (const.VERSION, stage, rating)
+            self._statusIcon.set_tooltip_markup(markup)
