Index: src/mlx/acft.py
===================================================================
--- src/mlx/acft.py	(revision 215)
+++ src/mlx/acft.py	(revision 241)
@@ -145,4 +145,11 @@
         """Get the current aircraft state."""
         return self._aircraftState
+
+    @property
+    def speedInKnots(self):
+        """Indicate if the speed is in knots.
+
+        This default implementation returns True."""
+        return True
     
     def getFlapsSpeedLimit(self, flaps):
@@ -200,5 +207,6 @@
                                    5)
             elif newStage==const.STAGE_TAKEOFF:
-                self.logger.message(aircraftState.timestamp, "Flight time start")
+                self.logger.message(aircraftState.timestamp,
+                                    "Flight time start")
                 self.logger.message(aircraftState.timestamp, 
                                     "Takeoff weight: %.0f kg, MTOW: %.0f kg" % \
@@ -281,6 +289,9 @@
                             "Touchdown rate was calculated by the %s" % \
                             ("simulator" if tdRateCalculatedByFS else "logger",))
+        flight = self._flight
         self.logger.message(self._aircraftState.timestamp,
-                            "Touchdown speed: %.0f knots" % (ias,))
+                            "Touchdown speed: %.0f %s" % \
+                            (flight.speedFromKnots(ias),
+                             flight.getEnglishSpeedUnit()))
         self.logger.message(self._aircraftState.timestamp,
                             "Touchdown pitch: %.1f degrees" % (pitch,))
@@ -329,14 +340,19 @@
         self._checkers.append(checks.StrobeLightsChecker())
 
+    def _speedToLog(self, speed):
+        """Convert the given speed (being either None or expressed in the
+        flight's speed unit into a string."""
+        if speed is None:
+            return "-"
+        else:
+            return str(speed) + " " + self._flight.getEnglishSpeedUnit()
+
     def _logV1R2(self):
         """Log the V1, Vr and V2 value either newly, or by updating the
         corresponding line."""
         message = "Speeds calculated by the pilot: V1: %s, VR: %s, V2: %s" % \
-                  ("-" if self._flight.v1 is None
-                   else str(self._flight.v1),
-                   "-" if self._flight.vr is None
-                   else str(self._flight.vr),
-                   "-" if self._flight.v2 is None
-                   else str(self._flight.v2))
+                  (self._speedToLog(self._flight.v1),
+                   self._speedToLog(self._flight.vr),
+                   self._speedToLog(self._flight.v2))
 
         if self._v1r2LineIndex is None:
@@ -356,5 +372,5 @@
         line."""
         message = "VRef speed calculated by the pilot: %s" % \
-                  ("-" if self._flight.vref is None else str(self._flight.vref))
+                  (self._speedToLog(self._flight.vref),)
         if self._vrefLineIndex is None:
             self._vrefLineIndex = \
@@ -710,4 +726,9 @@
                                  30 : 300 }
 
+    @property
+    def speedInKnots(self):
+        """Indicate if the speed is in knots."""
+        return False
+    
     def logFuel(self, aircraftState):
         """Log the amount of fuel"""
@@ -758,4 +779,9 @@
                                  45 : 162 }
 
+    @property
+    def speedInKnots(self):
+        """Indicate if the speed is in knots."""
+        return False
+    
     def logFuel(self, aircraftState):
         """Log the amount of fuel"""
@@ -804,4 +830,9 @@
                                  35 : 135 }
 
+    @property
+    def speedInKnots(self):
+        """Indicate if the speed is in knots."""
+        return False
+    
     def logFuel(self, aircraftState):
         """Log the amount of fuel"""
Index: src/mlx/checks.py
===================================================================
--- src/mlx/checks.py	(revision 211)
+++ src/mlx/checks.py	(revision 241)
@@ -135,5 +135,7 @@
            self._onTheGround and not state.onTheGround:
             logger.message(state.timestamp,
-                           "Takeoff speed: %.0f knots" % (state.ias,))
+                           "Takeoff speed: %.0f %s" % \
+                           (flight.speedFromKnots(state.ias),
+                            flight.getEnglishSpeedUnit()))
             logger.message(state.timestamp,
                            "Takeoff heading: %03.0f degrees" % (state.heading,))
@@ -160,5 +162,7 @@
                 else:
                     logger.message(state.timestamp,
-                                   "Cruise speed: %.0f knots" % (state.ias,))
+                                   "Cruise speed: %.0f %s" %
+                                   (flight.speedFromKnots(state.ias),
+                                    flight.getEnglishSpeedUnit()))
                 self._lastTime = state.timestamp
 
@@ -225,6 +229,6 @@
         - _changed(self, oldState, state): returns a boolean indicating if the
         value has changed or not
-        - _getMessage(self, state): return a strings containing the message to log
-        with the new value
+        - _getMessage(self, flight, state): return a strings containing the
+        message to log with the new value
         """
         self._logInitial = logInitial    
@@ -243,7 +247,8 @@
         
         if shouldLog:
-            logger.message(self._getLogTimestamp(state), self._getMessage(state))
+            logger.message(self._getLogTimestamp(state),
+                           self._getMessage(flight, state))
         
-#---------------------------------------------------------------------------------------
+#-------------------------------------------------------------------------------
 
 class SimpleChangeMixin(object):
@@ -322,5 +327,5 @@
         self._template = template
 
-    def _getMessage(self, state):
+    def _getMessage(self, flight, state):
         """Get the message."""
         return self._template % (self._getValue(state),)
@@ -355,5 +360,5 @@
                                 DelayedChangeMixin._getLogTimestamp(self, state)
 
-    def _getMessage(self, state):
+    def _getMessage(self, flight, state):
         """Get the message to log on a change."""
         logState = self._lastChangeState if \
@@ -398,5 +403,5 @@
         self._template = template
 
-    def _getMessage(self, state):
+    def _getMessage(self, flight, state):
         """Get the message from the given state."""
         return self._template % ("ON" if self._getValue(state) else "OFF")
@@ -443,8 +448,10 @@
         SingleValueMixin.__init__(self, "flapsSet")
 
-    def _getMessage(self, state):
+    def _getMessage(self, flight, state):
         """Get the message to log on a change."""
         speed = state.groundSpeed if state.groundSpeed<80.0 else state.ias
-        return "Flaps set to %.0f at %.0f knots" % (state.flapsSet, speed)
+        return "Flaps set to %.0f at %.0f %s" % \
+               (state.flapsSet, flight.speedFromKnots(speed),
+                flight.getEnglishSpeedUnit())
 
 #---------------------------------------------------------------------------------------
@@ -457,9 +464,10 @@
         SingleValueMixin.__init__(self, "gearControlDown")
 
-    def _getMessage(self, state):
+    def _getMessage(self, flight, state):
         """Get the message to log on a change."""
-        return "Gears SET to %s at %.0f knots, %.0f feet" % \
+        return "Gears SET to %s at %.0f %s, %.0f feet" % \
             ("DOWN" if state.gearControlDown else "UP",
-             state.ias, state.altitude)
+             flight.speedFromKnots(state.ias),
+             flight.getEnglishSpeedUnit(), state.altitude)
 
 #---------------------------------------------------------------------------------------
@@ -889,8 +897,9 @@
     def logFault(self, flight, aircraft, logger, oldState, state):
         """Log the fault."""
+        message = "Reverser used below %.0f %s" % \
+                  (flight.speedFromKnots(60), flight.getEnglishSpeedUnit())
         flight.handleFault(ReverserChecker, state.timestamp,
-                           FaultChecker._appendDuring(flight,
-                                                      "Reverser used below 60 knots"),
-                           15)        
+                           FaultChecker._appendDuring(flight, message),
+                           15)
 
 #---------------------------------------------------------------------------------------
@@ -906,7 +915,8 @@
     def logFault(self, flight, aircraft, logger, oldState, state):
         """Log the fault."""
+        message = "Taxi speed over %.0f %s" % \
+                  (flight.speedFromKnots(50), flight.getEnglishSpeedUnit())
         flight.handleFault(SpeedChecker, state.timestamp,
-                           FaultChecker._appendDuring(flight,
-                                                      "Taxi speed over 50 knots"),
+                           FaultChecker._appendDuring(flight, message),
                            FaultChecker._getLinearScore(50, 80, 10, 15,
                                                         state.groundSpeed))
Index: src/mlx/const.py
===================================================================
--- src/mlx/const.py	(revision 231)
+++ src/mlx/const.py	(revision 241)
@@ -4,5 +4,5 @@
 
 # The version of the program
-VERSION="0.3"
+VERSION="0.4"
 
 #-------------------------------------------------------------------------------
@@ -16,4 +16,12 @@
 # The ratio between feet and metre
 FEETTOMETRES=0.3048
+
+#-------------------------------------------------------------------------------
+
+# The ratio between knots and km/h
+KNOTSTOKMPH=1.852
+
+# The ratio between km/h and knots
+KMPHTOKNOTS=1/1.852
 
 #-------------------------------------------------------------------------------
Index: src/mlx/flight.py
===================================================================
--- src/mlx/flight.py	(revision 215)
+++ src/mlx/flight.py	(revision 241)
@@ -116,4 +116,11 @@
         """Get the touchdown rate if known, None otherwise."""
         return self._tdRate
+
+    @property
+    def speedInKnots(self):
+        """Determine if the speeds for the flight are to be expressed in
+        knots."""
+        return self.aircraft.speedInKnots if self.aircraft is not None \
+               else True
 
     def handleState(self, oldState, currentState):
@@ -207,4 +214,22 @@
         self._checklistHotkeyPressed = True
 
+    def speedFromKnots(self, knots):
+        """Convert the given speed value expressed in knots into the flight's
+        speed unit."""
+        return knots if self.speedInKnots else knots * const.KNOTSTOKMPH
+
+    def speedToKnots(self, speed):
+        """Convert the given speed expressed in the flight's speed unit into
+        knots."""        
+        return speed if self.speedInKnots else speed * const.KMPHTOKNOTS
+
+    def getEnglishSpeedUnit(self):
+        """Get the English name of the speed unit used by the flight."""
+        return "knots" if self.speedInKnots else "km/h"
+
+    def getI18NSpeedUnit(self):
+        """Get the speed unit suffix for i18n message identifiers."""
+        return "_knots" if self.speedInKnots else "_kmph"
+
     def _updateFlownDistance(self, currentState):
         """Update the flown distance."""
Index: src/mlx/gui/common.py
===================================================================
--- src/mlx/gui/common.py	(revision 232)
+++ src/mlx/gui/common.py	(revision 241)
@@ -179,4 +179,8 @@
         return self._currentInteger
 
+    def reset(self):
+        """Reset the integer."""
+        self.set_int(None)
+
     def set_int(self, value):
         """Set the integer."""
Index: src/mlx/gui/flight.py
===================================================================
--- src/mlx/gui/flight.py	(revision 233)
+++ src/mlx/gui/flight.py	(revision 241)
@@ -1888,10 +1888,11 @@
         self._v1 = IntegerEntry()
         self._v1.set_width_chars(4)
-        self._v1.set_tooltip_markup(xstr("takeoff_v1_tooltip"))
+        self._v1.set_tooltip_markup(xstr("takeoff_v1_tooltip_knots"))
         self._v1.connect("integer-changed", self._valueChanged)
         table.attach(self._v1, 2, 3, 2, 3)
         label.set_mnemonic_widget(self._v1)
-        
-        table.attach(gtk.Label(xstr("label_knots")), 3, 4, 2, 3)
+
+        self._v1Unit = gtk.Label(xstr("label_knots"))
+        table.attach(self._v1Unit, 3, 4, 2, 3)
         
         label = gtk.Label(xstr("takeoff_vr"))
@@ -1903,10 +1904,11 @@
         self._vr = IntegerEntry()
         self._vr.set_width_chars(4)
-        self._vr.set_tooltip_markup(xstr("takeoff_vr_tooltip"))
+        self._vr.set_tooltip_markup(xstr("takeoff_vr_tooltip_knots"))
         self._vr.connect("integer-changed", self._valueChanged)
         table.attach(self._vr, 2, 3, 3, 4)
         label.set_mnemonic_widget(self._vr)
         
-        table.attach(gtk.Label(xstr("label_knots")), 3, 4, 3, 4)
+        self._vrUnit = gtk.Label(xstr("label_knots"))
+        table.attach(self._vrUnit, 3, 4, 3, 4)
         
         label = gtk.Label(xstr("takeoff_v2"))
@@ -1918,10 +1920,11 @@
         self._v2 = IntegerEntry()
         self._v2.set_width_chars(4)
-        self._v2.set_tooltip_markup(xstr("takeoff_v2_tooltip"))
+        self._v2.set_tooltip_markup(xstr("takeoff_v2_tooltip_knots"))
         self._v2.connect("integer-changed", self._valueChanged)
         table.attach(self._v2, 2, 3, 4, 5)
         label.set_mnemonic_widget(self._v2)
         
-        table.attach(gtk.Label(xstr("label_knots")), 3, 4, 4, 5)
+        self._v2Unit = gtk.Label(xstr("label_knots"))
+        table.attach(self._v2Unit, 3, 4, 4, 5)
 
         self.addCancelFlightButton()
@@ -1968,4 +1971,15 @@
         self._v2.set_int(None)
         self._v2.set_sensitive(True)
+
+        i18nSpeedUnit = self._wizard.gui.flight.getI18NSpeedUnit()
+        speedUnit = xstr("label" + i18nSpeedUnit)
+        self._v1Unit.set_text(speedUnit)
+        self._vrUnit.set_text(speedUnit)
+        self._v2Unit.set_text(speedUnit)
+
+        self._v1.set_tooltip_markup(xstr("takeoff_v1_tooltip" + i18nSpeedUnit))
+        self._vr.set_tooltip_markup(xstr("takeoff_vr_tooltip" + i18nSpeedUnit))
+        self._v2.set_tooltip_markup(xstr("takeoff_v2_tooltip" + i18nSpeedUnit))
+
         self._button.set_sensitive(False)
         self._forwardAllowed = False
@@ -1985,4 +1999,11 @@
         self._updateForwardButton()
 
+    def reset(self):
+        """Reset the page if the wizard is reset."""
+        super(TakeoffPage, self).reset()
+        self._v1.reset()
+        self._vr.reset()
+        self._v2.reset()
+        
     def _updateForwardButton(self):
         """Update the sensitivity of the forward button based on some conditions."""
@@ -2103,10 +2124,11 @@
         self._vref = IntegerEntry()
         self._vref.set_width_chars(5)
-        self._vref.set_tooltip_markup(xstr("landing_vref_tooltip"))
+        self._vref.set_tooltip_markup(xstr("landing_vref_tooltip_knots"))
         self._vref.connect("integer-changed", self._vrefChanged)
         table.attach(self._vref, 3, 4, 5, 6)
         label.set_mnemonic_widget(self._vref)
-        
-        table.attach(gtk.Label(xstr("label_knots")), 4, 5, 5, 6)
+
+        self._vrefUnit = gtk.Label(xstr("label_knots"))
+        table.attach(self._vrefUnit, 4, 5, 5, 6)
 
         self.addCancelFlightButton()
@@ -2149,6 +2171,7 @@
         """Reset the page if the wizard is reset."""
         super(LandingPage, self).reset()
+        self._vref.reset()
         self._flightEnded = False
-
+        
     def activate(self):
         """Called when the page is activated."""
@@ -2169,4 +2192,11 @@
         self._vref.set_int(None)
         self._vref.set_sensitive(True)
+
+        i18nSpeedUnit = self._wizard.gui.flight.getI18NSpeedUnit()
+        speedUnit = xstr("label" + i18nSpeedUnit)
+        self._vrefUnit.set_text(speedUnit)
+
+        self._vref.set_tooltip_markup(xstr("landing_vref_tooltip" +
+                                           i18nSpeedUnit))
 
         self._updateForwardButton()
Index: src/mlx/gui/gui.py
===================================================================
--- src/mlx/gui/gui.py	(revision 239)
+++ src/mlx/gui/gui.py	(revision 241)
@@ -338,5 +338,6 @@
         """Called when we have connected to the simulator."""
         self._connected = True
-        self._logger.untimedMessage("Connected to the simulator %s" % (descriptor,))
+        self._logger.untimedMessage("MLX %s connected to the simulator %s" % \
+                                    (const.VERSION, descriptor))
         fs.sendMessage(const.MESSAGETYPE_INFORMATION,
                        "Welcome to MAVA Logger X " + const.VERSION)
Index: src/mlx/i18n.py
===================================================================
--- src/mlx/i18n.py	(revision 237)
+++ src/mlx/i18n.py	(revision 241)
@@ -477,11 +477,15 @@
         self.add("takeoff_sid_tooltip",
                  "The name of the Standard Instrument Deparature procedure followed.")
+        self.add("label_knots", "knots")
+        self.add("label_kmph", "km/h")
         self.add("takeoff_v1", "V<sub>_1</sub>:")
-        self.add("takeoff_v1_tooltip", "The takeoff decision speed in knots.")
-        self.add("label_knots", "knots")
+        self.add("takeoff_v1_tooltip_knots", "The takeoff decision speed in knots.")
+        self.add("takeoff_v1_tooltip_kmph", "The takeoff decision speed in km/h.")
         self.add("takeoff_vr", "V<sub>_R</sub>:")
-        self.add("takeoff_vr_tooltip", "The takeoff rotation speed in knots.")
+        self.add("takeoff_vr_tooltip_knots", "The takeoff rotation speed in knots.")
+        self.add("takeoff_vr_tooltip_kmph", "The takeoff rotation speed in km/h.")
         self.add("takeoff_v2", "V<sub>_2</sub>:")
-        self.add("takeoff_v2_tooltip", "The takeoff safety speed in knots.")
+        self.add("takeoff_v2_tooltip_knots", "The takeoff safety speed in knots.")
+        self.add("takeoff_v2_tooltip_kmph", "The takeoff safety speed in km/h.")
 
         self.add("landing_title", "Landing")
@@ -505,6 +509,8 @@
                  "The type of the approach, e.g. ILS or VISUAL.")
         self.add("landing_vref", "V<sub>_Ref</sub>:")
-        self.add("landing_vref_tooltip",
+        self.add("landing_vref_tooltip_knots",
                  "The landing reference speed in knots.")
+        self.add("landing_vref_tooltip_kmph",
+                 "The landing reference speed in km/h.")
 
         self.add("flighttype_scheduled", "scheduled")
@@ -1313,10 +1319,16 @@
                  "Az alkalmazott szabványos műszeres indulási eljárás neve.")
         self.add("takeoff_v1", "V<sub>_1</sub>:")
-        self.add("takeoff_v1_tooltip", "Az elhatározási sebesség csomóban.")
+        self.add("takeoff_v1_tooltip_knots", "Az elhatározási sebesség csomóban.")
+        self.add("takeoff_v1_tooltip_kmph", "Az elhatározási sebesség km/órában.")
         self.add("label_knots", "csomó")
+        self.add("label_kmph", "km/h")
         self.add("takeoff_vr", "V<sub>_R</sub>:")
-        self.add("takeoff_vr_tooltip", "Az elemelkedési sebesség csomóban.")
+        self.add("takeoff_vr_tooltip_knots", "Az elemelkedési sebesség csomóban.")
+        self.add("takeoff_vr_tooltip_kmph", "Az elemelkedési sebesség km/órában.")
         self.add("takeoff_v2", "V<sub>_2</sub>:")
-        self.add("takeoff_v2_tooltip", "A biztonságos emelkedési sebesség csomóban.")
+        self.add("takeoff_v2_tooltip_knots",
+                 "A biztonságos emelkedési sebesség csomóban.")
+        self.add("takeoff_v2_tooltip_kmph",
+                 "A biztonságos emelkedési sebesség km/órában.")
         
         self.add("landing_title", "Leszállás")
@@ -1341,6 +1353,8 @@
                  "A megközelítgés típusa, pl. ILS vagy VISUAL.")
         self.add("landing_vref", "V<sub>_Ref</sub>:")
-        self.add("landing_vref_tooltip",
+        self.add("landing_vref_tooltip_knots",
                  "A leszállási sebesség csomóban.")
+        self.add("landing_vref_tooltip_km/h",
+                 "A leszállási sebesség km/órában.")
         
         self.add("flighttype_scheduled", "menetrendszerinti")
Index: test/test1.txt
===================================================================
--- test/test1.txt	(revision 183)
+++ test/test1.txt	(revision 241)
@@ -1,7 +1,14 @@
+set lights=0
 set zfw=46741 hour=7 min=50
 set latitude=47.44 longitude=19.26
 set parking=no
+set gs=10 ias=10
 set flapsControl=37.5
+set gs=60 ias=60
 set lights=21
+set gs=80 ias=80
+set gs=90 ias=90
+set gs=100 ias=100
+set gs=120 ias=120
 set onTheGround=no
 set altitude=600
@@ -11,8 +18,11 @@
 set altitude=10000
 set lights=17
+set ias=400
 set altitude=22001
 set vs=-200
 set flapsControl=87.5
+set ias=130 gs=130
 set altitude=557
+set ias=125 gs=125
 set noseGear=100
 set altitude=547
@@ -22,3 +32,7 @@
 set latitude=47.49 longitude=21.62
 set onTheGround=yes
+set ias=45 gs=45
+set ias=35 gs=35
+set ias=20 gs=20
+set ias=0 gs=0
 set parking=yes
