Index: src/mlx/flight.py
===================================================================
--- src/mlx/flight.py	(revision 30)
+++ src/mlx/flight.py	(revision 31)
@@ -29,4 +29,6 @@
         self._gui = gui
 
+        gui.resetFlightStatus()
+
         self.cruiseAltitude = None
         self.flareTimeFromFS = False
@@ -57,4 +59,5 @@
             self._stage = stage
             self.logger.stage(timestamp, stage)
+            self._gui.setStage(stage)
             if stage==const.STAGE_END:
                 with self._endCondition:
@@ -72,8 +75,10 @@
         the report comes from."""
         self.logger.fault(faultID, timestamp, what, score)
+        self._gui.setRating(self.logger.getRating())
 
     def handleNoGo(self, faultID, timestamp, what, shortReason):
         """Handle a No-Go fault."""
         self.logger.noGo(faultID, timestamp, what)
+        self._gui.setNoGo(shortReason)
 
     def flareStarted(self, flareStart, flareStartFS):
Index: src/mlx/gui/gui.py
===================================================================
--- src/mlx/gui/gui.py	(revision 30)
+++ src/mlx/gui/gui.py	(revision 31)
@@ -99,4 +99,32 @@
         gobject.idle_add(self._setData, state)
 
+    def resetFlightStatus(self):
+        """Reset the status of the flight."""
+        self._statusIcon.resetFlightStatus()
+
+    def setStage(self, stage):
+        """Set the stage of the flight."""
+        gobject.idle_add(self._setStage, stage)
+
+    def _setStage(self, stage):
+        """Set the stage of the flight."""
+        self._statusIcon.setStage(stage)
+
+    def setRating(self, rating):
+        """Set the rating of the flight."""
+        gobject.idle_add(self._setRating, rating)
+
+    def _setRating(self, rating):
+        """Set the rating of the flight."""
+        self._statusIcon.setRating(rating)
+
+    def setNoGo(self, reason):
+        """Set the rating of the flight to No-Go with the given reason."""
+        gobject.idle_add(self._setNoGo, reason)
+
+    def _setNoGo(self, reason):
+        """Set the rating of the flight."""
+        self._statusIcon.setNoGo(reason)
+
     def _handleMainWindowState(self, window, event):
         """Hande a change in the state of the window"""
@@ -177,4 +205,5 @@
             self._simulator.startMonitoring()
         else:
+            self.resetFlightStatus()
             self._connecting = False
             self._simulator.stopMonitoring()
Index: src/mlx/gui/statusicon.py
===================================================================
--- src/mlx/gui/statusicon.py	(revision 29)
+++ src/mlx/gui/statusicon.py	(revision 31)
@@ -4,4 +4,6 @@
 
 from common import *
+
+import mlx.const as const
 
 #-------------------------------------------------------------------------------
@@ -12,6 +14,25 @@
         """Construct the status icon."""
         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)
+
+            separator = gtk.SeparatorMenuItem()
+            separator.show()
+            menu.append(separator)
 
         self._showHideMenuItem = gtk.CheckMenuItem()  
@@ -38,5 +59,4 @@
             indicator.set_menu(menu)
             self._indicator = indicator
-            self._usingIndicator = True
         else:
             def popup_menu(status, button, time):
@@ -46,5 +66,4 @@
             statusIcon = gtk.StatusIcon()
             statusIcon.set_from_file(iconFile)
-            statusIcon.set_tooltip_markup("MAVA Logger X")
             statusIcon.set_visible(True)
             statusIcon.connect('popup-menu', popup_menu)
@@ -52,5 +71,5 @@
                                lambda status: self._gui.toggleMainWindow())
             self._statusIcon = statusIcon
-            self._usingIndicator = False
+            self._setTooltip()
 
     def mainWindowHidden(self):
@@ -61,5 +80,47 @@
         """Called when the main window is shown."""
         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."""
@@ -68,2 +129,17 @@
         else:
             self._gui.hideMainWindow()
+
+    def _setTooltip(self):
+        """Set the tooltip of the status icon."""
+        if self._noGoReason is None:
+            rating = "%.0f%%" % (self._rating,)
+        else:
+            rating = '<span foreground="red">' + self._noGoReason + '</span>'
+
+        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)
+        
Index: src/mlx/logger.py
===================================================================
--- src/mlx/logger.py	(revision 30)
+++ src/mlx/logger.py	(revision 31)
@@ -65,8 +65,5 @@
         self.message(timestamp, "--- %s ---" % (s,))
         if stage==const.STAGE_END:
-            totalScore = 100
-            for (id, score) in self._faults.iteritems():
-                totalScore -= score
-            self.untimedMessage("Score: %.0f" % (totalScore,))
+            self.untimedMessage("Rating: %.0f" % (self.getRating(),))
         
     def fault(self, faultID, timestamp, what, score):
@@ -90,6 +87,6 @@
         self.fault(faultID, timestamp, what, Logger.NO_GO_SCORE)
 
-    def getScore(self):
-        """Get the score of the flight so far."""
+    def getRating(self):
+        """Get the rating of the flight so far."""
         totalScore = 100
         for (id, score) in self._faults.iteritems():
