Index: src/mlx/checks.py
===================================================================
--- src/mlx/checks.py	(revision 27)
+++ src/mlx/checks.py	(revision 30)
@@ -486,7 +486,8 @@
     def logFault(self, flight, aircraft, logger, oldState, state):
         """Log the fault."""
-        logger.fault(AntiCollisionLightsChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, "Anti-collision lights were off"),
-                     1)
+        flight.handleFault(AntiCollisionLightsChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight,
+                                                      "Anti-collision lights were off"),
+                           1)
 
 #---------------------------------------------------------------------------------------
@@ -508,7 +509,7 @@
     def logFault(self, flight, aircraft, logger, oldState, state):
         """Log the fault."""
-        logger.fault(BankChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, "Bank too steep"),
-                     2)
+        flight.handleFault(BankChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight, "Bank too steep"),
+                           2)
 
 #---------------------------------------------------------------------------------------
@@ -537,7 +538,7 @@
     def logFault(self, flight, aircraft, logger, oldState, state):
         """Log the fault."""
-        logger.fault(FlapsRetractChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, "Flaps retracted"),
-                     20)
+        flight.handleFault(FlapsRetractChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight, "Flaps retracted"),
+                           20)
 
 #---------------------------------------------------------------------------------------
@@ -552,7 +553,7 @@
     def logFault(self, flight, aircraft, logger, oldState, state):
         """Log the fault."""
-        logger.fault(FlapsSpeedLimitChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, "Flap speed limit fault"),
-                     5)
+        flight.handleFault(FlapsSpeedLimitChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight, "Flap speed limit fault"),
+                           5)
 
 #---------------------------------------------------------------------------------------
@@ -567,8 +568,8 @@
     def logFault(self, flight, aircraft, logger, oldState, state):
         """Log the fault."""
-        logger.noGo(GearsDownChecker, state.timestamp,
-                    "Gears not down at %.0f feet radio altitude" % \
-                    (state.radioAltitude,),
-                    "GEAR DOWN NO GO")
+        flight.handleNoGo(GearsDownChecker, state.timestamp,
+                          "Gears not down at %.0f feet radio altitude" % \
+                          (state.radioAltitude,),
+                          "GEAR DOWN NO GO")
 
 #---------------------------------------------------------------------------------------
@@ -582,7 +583,7 @@
     def logFault(self, flight, aircraft, logger, oldState, state):
         """Log the fault."""
-        logger.fault(GearSpeedLimitChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, "Gear speed limit fault"),
-                     5)
+        flight.handleFault(GearSpeedLimitChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight, "Gear speed limit fault"),
+                           5)
 
 #---------------------------------------------------------------------------------------
@@ -597,7 +598,7 @@
     def logFault(self, flight, aircraft, logger, oldState, state):
         """Log the fault."""
-        logger.fault(GLoadChecker, state.timestamp,
-                     "G-load was %.2f" % (state.gLoad,),
-                     10)
+        flight.handleFault(GLoadChecker, state.timestamp,
+                           "G-load was %.2f" % (state.gLoad,),
+                           10)
 
 #---------------------------------------------------------------------------------------
@@ -630,7 +631,7 @@
         score = 0 if flight.stage==const.STAGE_LANDING else 1
         message = "Landing lights were %s" % (("on" if state.landingLightsOn else "off"),)
-        logger.fault(LandingLightsChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, message),
-                     score)        
+        flight.handleFault(LandingLightsChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight, message),
+                           score)   
 
 #---------------------------------------------------------------------------------------
@@ -659,8 +660,8 @@
         """Log the fault."""
         mname = "M" + self._name
-        logger.noGo(self.__class__, state.timestamp,
-                    "%s exceeded: %s is %.0f kg" % \
-                    (mname, self._name, self.getWeight(state)),
-                    "%s NO GO" % (mname,))
+        flight.handleNoGo(self.__class__, state.timestamp,
+                          "%s exceeded: %s is %.0f kg" % \
+                                    (mname, self._name, self.getWeight(state)),
+                          "%s NO GO" % (mname,))
 
     def getWeight(self, state):
@@ -721,7 +722,8 @@
     def logFault(self, flight, aircraft, logger, oldState, state):
         """Log the fault."""
-        logger.fault(NavLightsChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, "Navigation lights were off"),
-                     1)        
+        flight.handleFault(NavLightsChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight,
+                                                      "Navigation lights were off"),
+                           1)
 
 #---------------------------------------------------------------------------------------
@@ -739,7 +741,7 @@
     def logFault(self, flight, aircraft, logger, oldState, state):
         """Log the fault."""
-        logger.fault(OverspeedChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, "Overspeed"),
-                     20)        
+        flight.handleFault(OverspeedChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight, "Overspeed"),
+                           20)        
 
 #---------------------------------------------------------------------------------------
@@ -757,7 +759,8 @@
     def logFault(self, flight, aircraft, logger, oldState, state):
         """Log the fault."""
-        logger.noGo(PayloadChecker, state.timestamp,
-                    "ZFW difference is more than %d kgs" % (PayloadChecker.TOLERANCE,),
-                    "ZFW NO GO")
+        flight.handleNoGo(PayloadChecker, state.timestamp,
+                          "ZFW difference is more than %d kgs" % \
+                          (PayloadChecker.TOLERANCE,),
+                          "ZFW NO GO")
 
 #---------------------------------------------------------------------------------------
@@ -778,7 +781,7 @@
                                       const.STAGE_CRUISE, const.STAGE_DESCENT,
                                       const.STAGE_LANDING] else 0
-        logger.fault(PitotChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, "Pitot heat was off"),
-                     score)        
+        flight.handleFault(PitotChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight, "Pitot heat was off"),
+                           score)   
 
 #---------------------------------------------------------------------------------------
@@ -794,7 +797,8 @@
     def logFault(self, flight, aircraft, logger, oldState, state):
         """Log the fault."""
-        logger.fault(ReverserChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, "Reverser used below 60 knots"),
-                     15)        
+        flight.handleFault(ReverserChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight,
+                                                      "Reverser used below 60 knots"),
+                           15)        
 
 #---------------------------------------------------------------------------------------
@@ -810,7 +814,9 @@
     def logFault(self, flight, aircraft, logger, oldState, state):
         """Log the fault."""
-        logger.fault(SpeedChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, "Taxi speed over 50 knots"),
-                     FaultChecker._getLinearScore(50, 80, 10, 15, state.groundSpeed))
+        flight.handleFault(SpeedChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight,
+                                                      "Taxi speed over 50 knots"),
+                           FaultChecker._getLinearScore(50, 80, 10, 15,
+                                                        state.groundSpeed))
 
 #---------------------------------------------------------------------------------------
@@ -828,7 +834,7 @@
         score = 40 if flight.stage in [const.STAGE_TAKEOFF,
                                        const.STAGE_LANDING] else 30
-        logger.fault(StallChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, "Stalled"),
-                     score)        
+        flight.handleFault(StallChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight, "Stalled"),
+                           score)   
 
 #---------------------------------------------------------------------------------------
@@ -856,7 +862,7 @@
         """Log the fault."""
         message = "Strobe lights were %s" % (("on" if state.strobeLightsOn else "off"),)
-        logger.fault(StrobeLightsChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, message),
-                     1)        
+        flight.handleFault(StrobeLightsChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight, message),
+                           1)
 
 #---------------------------------------------------------------------------------------
@@ -873,7 +879,8 @@
         """Log the fault."""
         print state.n1
-        logger.fault(ThrustChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, "Thrust setting was too high (>97%)"),
-                     FaultChecker._getLinearScore(97, 110, 0, 10, max(state.n1)))
+        flight.handleFault(ThrustChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight,
+                                                      "Thrust setting was too high (>97%)"),
+                           FaultChecker._getLinearScore(97, 110, 0, 10, max(state.n1)))
 
 #---------------------------------------------------------------------------------------
@@ -911,7 +918,7 @@
         score = 10 if vs<-8000 or vs>8000 else 0
 
-        logger.fault(VSChecker, state.timestamp,
-                     FaultChecker._appendDuring(flight, message),
-                     score)
-
-#---------------------------------------------------------------------------------------
+        flight.handleFault(VSChecker, state.timestamp,
+                           FaultChecker._appendDuring(flight, message),
+                           score)
+
+#---------------------------------------------------------------------------------------
Index: src/mlx/flight.py
===================================================================
--- src/mlx/flight.py	(revision 29)
+++ src/mlx/flight.py	(revision 30)
@@ -64,4 +64,17 @@
             return False
 
+    def handleFault(self, faultID, timestamp, what, score):
+        """Handle the given fault.
+
+        faultID as a unique ID for the given kind of fault. If another fault of
+        this ID has been reported earlier, it will be reported again only if
+        the score is greater than last time. This ID can be, e.g. the checker
+        the report comes from."""
+        self.logger.fault(faultID, timestamp, what, score)
+
+    def handleNoGo(self, faultID, timestamp, what, shortReason):
+        """Handle a No-Go fault."""
+        self.logger.noGo(faultID, timestamp, what)
+
     def flareStarted(self, flareStart, flareStartFS):
         """Called when the flare time has started."""
Index: src/mlx/gui/gui.py
===================================================================
--- src/mlx/gui/gui.py	(revision 29)
+++ src/mlx/gui/gui.py	(revision 30)
@@ -156,5 +156,5 @@
         if self._connectButton.get_active():
             self._logger.reset()
-            self._flight = flight.Flight(self._logger)
+            self._flight = flight.Flight(self._logger, self)
 
             acftListModel = self._acftList.get_model()
Index: src/mlx/logger.py
===================================================================
--- src/mlx/logger.py	(revision 27)
+++ src/mlx/logger.py	(revision 30)
@@ -25,6 +25,6 @@
                 const.STAGE_GOAROUND : "Go-Around",
                 const.STAGE_END : "End" }
-
-    _noGoScore = 10000
+    
+    NO_GO_SCORE = 10000
 
     def __init__(self, output = sys.stdout):
@@ -81,12 +81,22 @@
                 return
         self._faults[faultID] = score
-        if score==Logger._noGoScore:
+        if score==Logger.NO_GO_SCORE:
             self.message(timestamp, "%s (NO GO)" % (what))
         else:
             self.message(timestamp, "%s (%.1f)" % (what, score))
 
-    def noGo(self, faultID, timestamp, what, shortReason):
+    def noGo(self, faultID, timestamp, what):
         """Report a No-Go fault."""
-        self.fault(faultID, timestamp, what, Logger._noGoScore)
+        self.fault(faultID, timestamp, what, Logger.NO_GO_SCORE)
 
+    def getScore(self):
+        """Get the score of the flight so far."""
+        totalScore = 100
+        for (id, score) in self._faults.iteritems():
+            if score==Logger.NO_GO_SCORE:
+                return -score
+            else:
+                totalScore -= score
+        return totalScore
+        
 #--------------------------------------------------------------------------------------
