Index: src/mlx/acft.py
===================================================================
--- src/mlx/acft.py	(revision 96)
+++ src/mlx/acft.py	(revision 101)
@@ -26,4 +26,5 @@
         self._minVS = 10000.0
 
+        self._v1r2LineIndex = None
         self._vrefLineIndex = None
 
@@ -140,12 +141,5 @@
                                     (aircraftState.windDirection, 
                                      aircraftState.windSpeed))
-                self.logger.message(aircraftState.timestamp,
-                                    "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._logV1R2()
             elif newStage==const.STAGE_TAXIAFTERLAND:
                 self.logger.message(aircraftState.timestamp, "Flight time end")
@@ -191,9 +185,5 @@
                             "Altimeter setting: %.0f hPa" % \
                             (self._aircraftState.altimeter,))
-        self._vrefLineIndex = \
-            self.logger.message(self._aircraftState.timestamp,
-                                "VRef speed calculated by the pilot: %s" % \
-                                ("-" if self._flight.vref is None
-                                 else str(self._flight.vref)))
+        self._logVRef()
         self.flight.flareStarted(flareStart, flareStartFS)
          
@@ -233,4 +223,27 @@
             if n1>=0.5: return False
         return True
+
+    def updateV1R2(self):
+        """Update the V1, Vr and V2 values from the flight, if the these values
+        have already been logged."""
+        if self._v1r2LineIndex is not None:
+            self._logV1R2()
+
+    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))
+
+        if self._v1r2LineIndex is None:
+            self._v1r2LineIndex = \
+                self.logger.message(self._aircraftState.timestamp, message)
+        else:
+            self.logger.updateLine(self._v1r2LineIndex, message)
 
     def updateVRef(self):
Index: src/mlx/gui/flight.py
===================================================================
--- src/mlx/gui/flight.py	(revision 97)
+++ src/mlx/gui/flight.py	(revision 101)
@@ -1300,4 +1300,6 @@
                                           completedHelp = completedHelp)
 
+        self._forwardAllowed = False
+
         alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
                                   xscale = 0.0, yscale = 0.0)
@@ -1318,4 +1320,5 @@
         self._runway.set_width_chars(10)
         self._runway.set_tooltip_text("The runway the takeoff is performed from.")
+        self._runway.connect("changed", self._valueChanged)
         table.attach(self._runway, 1, 3, 0, 1)
         label.set_mnemonic_widget(self._runway)
@@ -1329,4 +1332,5 @@
         self._sid.set_width_chars(10)
         self._sid.set_tooltip_text("The name of the Standard Instrument Deparature procedure followed.")
+        self._sid.connect("changed", self._valueChanged)
         table.attach(self._sid, 1, 3, 1, 2)
         label.set_mnemonic_widget(self._sid)
@@ -1341,4 +1345,5 @@
         self._v1.set_width_chars(4)
         self._v1.set_tooltip_markup("The takeoff decision speed in knots.")
+        self._v1.connect("integer-changed", self._valueChanged)
         table.attach(self._v1, 2, 3, 2, 3)
         label.set_mnemonic_widget(self._v1)
@@ -1355,4 +1360,5 @@
         self._vr.set_width_chars(4)
         self._vr.set_tooltip_markup("The takeoff rotation speed in knots.")
+        self._vr.connect("integer-changed", self._valueChanged)
         table.attach(self._vr, 2, 3, 3, 4)
         label.set_mnemonic_widget(self._vr)
@@ -1369,4 +1375,5 @@
         self._v2.set_width_chars(4)
         self._v2.set_tooltip_markup("The takeoff safety speed in knots.")
+        self._v2.connect("integer-changed", self._valueChanged)
         table.attach(self._v2, 2, 3, 4, 5)
         label.set_mnemonic_widget(self._v2)
@@ -1421,6 +1428,6 @@
         self._button.set_sensitive(False)
         
-    def freezeValues(self):
-        """Freeze the values on the page, and enable the forward button."""
+    def finalize(self):
+        """Finalize the page."""
         self._runway.set_sensitive(False)
         self._sid.set_sensitive(False)
@@ -1428,5 +1435,26 @@
         self._vr.set_sensitive(False)
         self._v2.set_sensitive(False)
-        self._button.set_sensitive(True)
+        self._wizard.gui.flight.aircraft.updateV1R2()
+
+    def allowForward(self):
+        """Allow going to the next page."""
+        self._forwardAllowed = True
+        self._updateForwardButton()
+
+    def _updateForwardButton(self):
+        """Update the sensitivity of the forward button based on some conditions."""
+        sensitive = self._forwardAllowed and \
+                    self._runway.get_text()!="" and \
+                    self._sid.get_text()!="" and \
+                    self.v1 is not None and \
+                    self.vr is not None and \
+                    self.v2 is not None and \
+                    self.v1 <= self.vr and \
+                    self.vr <= self.v2
+        self._button.set_sensitive(sensitive)
+
+    def _valueChanged(self, widget, arg = None):
+        """Called when the value of some widget has changed."""
+        self._updateForwardButton()
         
     def _backClicked(self, button):
@@ -2086,5 +2114,5 @@
         """Set the flight stage to the given one."""
         if stage==const.STAGE_TAKEOFF:
-            self._takeoffPage.freezeValues()
+            self._takeoffPage.allowForward()
         elif stage==const.STAGE_END:
             self._landingPage.flightEnded()
