Index: src/mlx/checks.py
===================================================================
--- src/mlx/checks.py	(revision 344)
+++ src/mlx/checks.py	(revision 346)
@@ -1292,5 +1292,6 @@
                            FaultChecker._appendDuring(flight, message),
                            FaultChecker._getLinearScore(50, 80, 10, 15,
-                                                        state.groundSpeed))
+                                                        state.groundSpeed),
+                           updatePrevious = True)
 
     def isCondition(self, flight, aircraft, oldState, state):
Index: src/mlx/flight.py
===================================================================
--- src/mlx/flight.py	(revision 304)
+++ src/mlx/flight.py	(revision 346)
@@ -269,5 +269,6 @@
             return False
 
-    def handleFault(self, faultID, timestamp, what, score):
+    def handleFault(self, faultID, timestamp, what, score,
+                    updatePrevious = False):
         """Handle the given fault.
 
@@ -276,5 +277,6 @@
         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)
+        self.logger.fault(faultID, timestamp, what, score,
+                          updatePrevious = updatePrevious)
         self._gui.setRating(self.logger.getRating())
 
Index: src/mlx/logger.py
===================================================================
--- src/mlx/logger.py	(revision 345)
+++ src/mlx/logger.py	(revision 346)
@@ -96,11 +96,23 @@
             return self._faultScore
 
-        def copy(self, text = None):
+        def copy(self, timestamp = None, clearTimestamp = False, text = None,
+                 faultScore = None):
             """Create a copy of this entry with the given values changed."""
-            return Logger.Entry(self._timestamp,
+            assert faultScore is None or self._faultID is not None
+
+            return Logger.Entry(None if clearTimestamp
+                                else self._timestamp if timestamp is None
+                                else timestamp,
+
                                 self._text if text is None else text,
+
                                 showTimestamp = self._showTimestamp,
+
                                 faultID = self._faultID,
-                                faultScore = self._faultScore,
+
+                                faultScore =
+                                self._faultScore if faultScore is None
+                                else faultScore,
+
                                 id = self._id)
 
@@ -151,4 +163,8 @@
 
             return len(entries)>0
+
+        def getLatestEntry(self):
+            """Get the entry with the highest score."""
+            return self._entries[0]
 
     # FIXME: shall we use const.stage2string() instead?
@@ -231,5 +247,6 @@
             sendMessage(messageType, "Flight stage: " + s, 3)
 
-    def fault(self, faultID, timestamp, what, score):
+    def fault(self, faultID, timestamp, what, score,
+              updatePrevious = False):
         """Report a fault.
 
@@ -239,14 +256,30 @@
         the report comes from.
 
+        If updatePrevious is True, and an instance of the given fault is
+        already in the log, only that instance will be updated with the new
+        timestamp and score. If there are several instances, the latest one
+        (with the highest score) will be updated. If updatePrevious is True,
+        and the new score is not greater than the latest one, the ID of the
+        latest one is returned.
+
         Returns an ID of the fault, or -1 if it was not logged."""
-        if faultID in self._faults:
-            if score<=self._faults[faultID].score:
-                return -1
+        fault = self._faults[faultID] if faultID in self._faults else None
+
+        if fault is not None and score<=fault.score:
+            return fault.getLatestEntry().id if updatePrevious else -1
 
         text = "%s (NO GO)" % (what) if score==Logger.NO_GO_SCORE \
                else "%s (%.1f)" % (what, score)
 
-        id = self._addEntry(Logger.Entry(timestamp, text, faultID = faultID,
-                                         faultScore = score))
+        if updatePrevious and fault is not None:
+            latestEntry = fault.getLatestEntry()
+            id = latestEntry.id
+            newEntry = latestEntry.copy(timestamp = timestamp,
+                                        text = text,
+                                        faultScore = score)
+            self._updateEntry(id, newEntry)
+        else:
+            id = self._addEntry(Logger.Entry(timestamp, text, faultID = faultID,
+                                             faultScore = score))
 
         (messageType, duration) = (const.MESSAGETYPE_NOGO, 10) \
