Index: src/mlx/acft.py
===================================================================
--- src/mlx/acft.py	(revision 101)
+++ src/mlx/acft.py	(revision 117)
@@ -28,4 +28,6 @@
         self._v1r2LineIndex = None
         self._vrefLineIndex = None
+
+        self.humanWeight = 82.0
 
         self._checkers = []
Index: src/mlx/fsuipc.py
===================================================================
--- src/mlx/fsuipc.py	(revision 97)
+++ src/mlx/fsuipc.py	(revision 117)
@@ -531,4 +531,12 @@
         self._handler.requestRead([(0x3bfc, "d")], self._handleZFW, extra = callback)
 
+    def requestWeights(self, callback):
+        """Request the following weights: DOW, ZFW, payload.
+
+        These values will be passed to the callback function in this order, as
+        separate arguments."""        
+        self._handler.requestRead([(0x13fc, "d")], self._handlePayloadCount,
+                                  extra = callback)
+
     def requestTime(self, callback):
         """Request the time from the simulator."""
@@ -737,4 +745,22 @@
         """Callback for a time retrieval request."""
         callback(Simulator._getTimestamp(data))
+
+    def _handlePayloadCount(self, data, callback):
+        """Callback for the payload count retrieval request."""
+        payloadCount = data[0]
+        data = [(0x3bfc, "d"), (0x30c0, "f")]
+        for i in range(0, payloadCount):
+            data.append((0x1400 + i*48, "f"))
+        
+        self._handler.requestRead(data, self._handleWeights,
+                                  extra = callback)
+
+    def _handleWeights(self, data, callback):
+        """Callback for the weights retrieval request."""
+        zfw = data[0] * const.LBSTOKG / 256.0
+        grossWeight = data[1] * const.LBSTOKG
+        payload = sum(data[2:]) * const.LBSTOKG
+        dow = zfw - payload
+        callback(dow, payload, zfw, grossWeight)
                                                   
 #------------------------------------------------------------------------------
Index: src/mlx/gui/flight.py
===================================================================
--- src/mlx/gui/flight.py	(revision 107)
+++ src/mlx/gui/flight.py	(revision 117)
@@ -799,4 +799,5 @@
         """Finalize the payload page."""
         self._cargoWeight.set_sensitive(False)
+        self._wizard.gui.initializeWeightHelp()
 
     def calculateZFW(self):
@@ -1908,4 +1909,5 @@
         self._payloadPage = PayloadPage(self) 
         self._pages.append(self._payloadPage)
+        self._payloadIndex = len(self._pages)
         self._pages.append(TimePage(self))
         self._routePage = RoutePage(self)
@@ -1915,4 +1917,5 @@
         self._arrivalBriefingPage = BriefingPage(self, False)
         self._pages.append(self._arrivalBriefingPage)
+        self._arrivalBriefingIndex = len(self._pages)
         self._takeoffPage = TakeoffPage(self) 
         self._pages.append(self._takeoffPage)
Index: src/mlx/gui/gui.py
===================================================================
--- src/mlx/gui/gui.py	(revision 110)
+++ src/mlx/gui/gui.py	(revision 117)
@@ -8,4 +8,5 @@
 from mlx.gui.flight import Wizard
 from mlx.gui.monitor import MonitorWindow
+from mlx.gui.weighthelp import WeightHelp
 
 import mlx.const as const
@@ -88,4 +89,10 @@
         self._flightInfo.disable()
 
+        self._weightHelp = WeightHelp(self)
+        label = gtk.Label(xstr("tab_weight_help"))
+        label.set_use_underline(True)
+        label.set_tooltip_text(xstr("tab_weight_help_tooltip"))
+        self._notebook.append_page(self._weightHelp, label)
+        
         (logWidget, self._logView)  = self._buildLogWidget()
         label = gtk.Label(xstr("tab_log"))
@@ -112,4 +119,6 @@
         window.show_all()
         self._wizard.grabDefault()
+        self._weightHelp.reset()
+        self._weightHelp.disable()
 
         self._mainWindow = window
@@ -353,4 +362,6 @@
         self.resetFlightStatus()
 
+        self._weightHelp.reset()
+        self._weightHelp.disable()
         self._wizard.reset()
         self._notebook.set_current_page(0)
@@ -518,4 +529,5 @@
         """Begin a period of background processing."""
         self._wizard.set_sensitive(False)
+        self._weightHelp.set_sensitive(False)
         self._mainWindow.get_window().set_cursor(self._busyCursor)
         self._statusbar.updateBusyState(message)
@@ -524,6 +536,12 @@
         """End a period of background processing."""
         self._mainWindow.get_window().set_cursor(None)
+        self._weightHelp.set_sensitive(True)
         self._wizard.set_sensitive(True)
         self._statusbar.updateBusyState(None)
+
+    def initializeWeightHelp(self):
+        """Initialize the weight help tab."""
+        self._weightHelp.reset()
+        self._weightHelp.enable()
 
     def _writeStdIO(self):
Index: src/mlx/gui/weighthelp.py
===================================================================
--- src/mlx/gui/weighthelp.py	(revision 117)
+++ src/mlx/gui/weighthelp.py	(revision 117)
@@ -0,0 +1,487 @@
+# The weight calculation help window
+
+#-------------------------------------------------------------------------------
+
+from mlx.gui.common import *
+
+from mlx.i18n import xstr
+from mlx.checks import PayloadChecker
+
+#-------------------------------------------------------------------------------
+
+class WeightHelp(gtk.VBox):
+    """The weight calculation help tab."""
+    @staticmethod
+    def _getMarkup(value, expectedValue = None, tolerance = None):
+        """Get the markup for the given value.
+
+        If it is too much different from the expected value, it will be
+        colored yellow (if within the tolerance), or red (if out of the tolerance)."""
+        markup = "%.0f" % (value,)
+        if expectedValue is not None and tolerance is not None:
+            colour = None
+            diff = abs(value - expectedValue)
+            if diff>tolerance: colour = "red"
+            elif (diff*10)>=tolerance: colour = "orange"
+            else: colour = "darkgreen"
+            if colour is not None:
+                markup = '<span foreground="' + colour + '">' + markup + '</span>'
+        return markup
+
+    def __init__(self, gui):
+        """Construct the tab."""
+        super(WeightHelp, self).__init__()
+
+        self._gui = gui
+
+        mainAlignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
+                                      xscale = 1.0, yscale = 1.0)
+        mainAlignment.set_padding(padding_top = 4, padding_bottom = 4,
+                                  padding_left = 12, padding_right = 12)
+        self.add(mainAlignment)
+
+        self._mainBox = mainBox = gtk.VBox()
+        mainAlignment.add(mainBox)
+
+        self._usingHelp = gtk.CheckButton(xstr("weighthelp_usinghelp"))
+        self._usingHelp.set_use_underline(True)
+        self._usingHelp.set_tooltip_text(xstr("weighthelp_usinghelp_tooltip"))
+        self._usingHelp.connect("toggled", self._usingHelpToggled)
+        mainBox.pack_start(self._usingHelp, False, False, 4)
+
+        
+        self._weightsTable = table = gtk.Table(16, 5)
+        table.set_homogeneous(False)
+        table.set_row_spacings(4)
+        table.set_col_spacings(16)
+        alignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(table)
+        mainBox.pack_start(alignment, True, True, 4)
+
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.0,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.set_padding(padding_bottom = 16, padding_top = 0,
+                              padding_left = 0, padding_right = 0)
+        label = gtk.Label(xstr("weighthelp_header_calculated"))
+        label.set_use_markup(True)
+        # FIXME: should be a constant in common
+        label.set_justify(gtk.Justification.CENTER if pygobject
+                          else gtk.JUSTIFY_CENTER)        
+        alignment.add(label)
+        table.attach(alignment, 1, 2, 0, 1)
+        
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.0,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.set_padding(padding_bottom = 16, padding_top = 0,
+                              padding_left = 0, padding_right = 0)
+        button = gtk.Button(xstr("weighthelp_header_simulator"))
+        button.set_tooltip_markup(xstr("weighthelp_header_simulator_tooltip"))
+        button.connect("clicked", self._fsButtonClicked)
+        label = button.get_child()
+        label.set_justify(gtk.Justification.CENTER if pygobject
+                          else gtk.JUSTIFY_CENTER)        
+        alignment.add(button)
+        table.attach(alignment, 3, 4, 0, 1)
+        
+
+        self._crewLabel = gtk.Label(xstr("weighthelp_crew") % ("99",))
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._crewLabel)
+        table.attach(alignment, 0, 1, 1, 2)
+
+        self._crewWeight = gtk.Label("0")
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._crewWeight)
+        table.attach(alignment, 1, 2, 1, 2)
+        
+        table.attach(gtk.Label("kg"), 2, 3, 1, 2)
+
+        text = xstr("weighthelp_pax") % ("999",)
+        self._paxLabel = gtk.Label(text)
+        self._paxLabel.set_width_chars(len(text))
+        self._paxLabel.set_alignment(0.0, 0.5)
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._paxLabel)
+        table.attach(alignment, 0, 1, 2, 3)
+
+        self._paxWeight = gtk.Label("20000")
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._paxWeight)
+        table.attach(alignment, 1, 2, 2, 3)
+        
+        table.attach(gtk.Label("kg"), 2, 3, 2, 3)
+        
+        label = gtk.Label(xstr("weighthelp_baggage"))
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(label)
+        table.attach(alignment, 0, 1, 3, 4)
+
+        self._bagWeight = gtk.Label("2000")
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._bagWeight)
+        table.attach(alignment, 1, 2, 3, 4)
+        
+        table.attach(gtk.Label("kg"), 2, 3, 3, 4)
+        
+        label = gtk.Label(xstr("weighthelp_cargo"))
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(label)
+        table.attach(alignment, 0, 1, 4, 5)
+
+        self._cargoWeight = gtk.Label("2000")
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._cargoWeight)
+        table.attach(alignment, 1, 2, 4, 5)
+        
+        table.attach(gtk.Label("kg"), 2, 3, 4, 5)
+        
+        label = gtk.Label(xstr("weighthelp_mail"))
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(label)
+        table.attach(alignment, 0, 1, 5, 6)
+
+        self._mailWeight = gtk.Label("2000")
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._mailWeight)
+        table.attach(alignment, 1, 2, 5, 6)
+        
+        table.attach(gtk.Label("kg"), 2, 3, 5, 6)
+
+        table.attach(gtk.HSeparator(), 1, 2, 6, 7)
+
+        label = gtk.Label("<b>" + xstr("weighthelp_payload") + "</b>")
+        label.set_use_markup(True)
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(label)
+        table.attach(alignment, 0, 1, 7, 8)
+
+        self._payload = gtk.Label("<b>32000</b>")
+        self._payload.set_use_markup(True)
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._payload)
+        table.attach(alignment, 1, 2, 7, 8)
+        
+        table.attach(gtk.Label("kg"), 2, 3, 7, 8)
+
+        self._fsPayload = gtk.Label("<b>32001</b>")
+        self._fsPayload.set_use_markup(True)
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._fsPayload)
+        table.attach(alignment, 3, 4, 7, 8)
+        
+        table.attach(gtk.Label("kg"), 4, 5, 7, 8)
+
+        label = gtk.Label(xstr("weighthelp_dow"))
+        label.set_use_markup(True)
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(label)
+        table.attach(alignment, 0, 1, 8, 9)
+
+        self._dow = gtk.Label("35000")
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._dow)
+        table.attach(alignment, 1, 2, 8, 9)
+        
+        table.attach(gtk.Label("kg"), 2, 3, 8, 9)
+
+        self._fsDOW = gtk.Label("33012")
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._fsDOW)
+        table.attach(alignment, 3, 4, 8, 9)
+        
+        table.attach(gtk.Label("kg"), 4, 5, 8, 9)
+
+        table.attach(gtk.HSeparator(), 1, 2, 9, 10)
+
+        table.attach(gtk.HSeparator(), 3, 4, 9, 10)
+
+        label = gtk.Label("<b>" + xstr("weighthelp_zfw") + "</b>")
+        label.set_use_markup(True)
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(label)
+        table.attach(alignment, 0, 1, 10, 11)
+
+        self._zfw = gtk.Label("<b>122000</b>")
+        self._zfw.set_use_markup(True)
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._zfw)
+        table.attach(alignment, 1, 2, 10, 11)
+        
+        table.attach(gtk.Label("kg"), 2, 3, 10, 11)
+
+        self._fsZFW = gtk.Label("<b>124000</b>")
+        self._fsZFW.set_use_markup(True)
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._fsZFW)
+        table.attach(alignment, 3, 4, 10, 11)
+        
+        table.attach(gtk.Label("kg"), 4, 5, 10, 11)
+
+        table.attach(gtk.HSeparator(), 0, 5, 11, 12)
+        
+        label = gtk.Label(xstr("weighthelp_gross"))
+        label.set_use_markup(True)
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(label)
+        table.attach(alignment, 0, 1, 12, 13)
+
+        self._fsGross = gtk.Label("124000")
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._fsGross)
+        table.attach(alignment, 3, 4, 12, 13)
+        
+        table.attach(gtk.Label("kg"), 4, 5, 12, 13)
+
+        label = gtk.Label(xstr("weighthelp_mzfw"))
+        label.set_use_markup(True)
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(label)
+        table.attach(alignment, 0, 1, 13, 14)
+
+        self._mzfw = gtk.Label("35000")
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._mzfw)
+        table.attach(alignment, 1, 2, 13, 14)
+        
+        table.attach(gtk.Label("kg"), 2, 3, 13, 14)
+
+        label = gtk.Label(xstr("weighthelp_mtow"))
+        label.set_use_markup(True)
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(label)
+        table.attach(alignment, 0, 1, 14, 15)
+
+        self._mtow = gtk.Label("35000")
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._mtow)
+        table.attach(alignment, 1, 2, 14, 15)
+        
+        table.attach(gtk.Label("kg"), 2, 3, 14, 15)
+
+        label = gtk.Label(xstr("weighthelp_mlw"))
+        label.set_use_markup(True)
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(label)
+        table.attach(alignment, 0, 1, 15, 16)
+
+        self._mlw = gtk.Label("35000")
+        alignment = gtk.Alignment(xalign = 1.0, yalign = 0.5,
+                                  xscale = 0.0, yscale = 0.0)
+        alignment.add(self._mlw)
+        table.attach(alignment, 1, 2, 15, 16)
+        
+        table.attach(gtk.Label("kg"), 2, 3, 15, 16)
+
+        self.show_all()
+
+    def disable(self):
+        """Disable the widget."""
+        self._mainBox.set_sensitive(False)
+    
+    def enable(self):
+        """Enable the widget."""
+        self._mainBox.set_sensitive(True)
+    
+    def reset(self):
+        """Reset all calculated and FS data."""
+        
+        self._usingHelp.set_active(False)
+        self._usingHelp.set_sensitive(True)
+        self._weightsTable.set_sensitive(False)
+        
+        self._crew = -1
+        self._pax = -1
+        self._humanWeight = 82.0
+        self._bag = -1
+        self._cargo = -1
+        self._mail = -1        
+        self._dowValue = -1
+        self._mzfwValue = -1
+        self._mtowValue = -1
+        self._mlwValue = -1
+
+        self._fsPayloadValue = -1
+        self._fsDOWValue = -1
+        self._fsZFWValue = -1
+        self._fsGrossValue = -1
+        
+        self._setupCalculated()
+        self._setupFS()
+
+    def _setupCalculated(self):
+        """Setup the labels for the calculated values."""
+        if self._crew<0:
+            self._crewLabel.set_text(xstr("weighthelp_crew") % ("-",))
+            self._crewWeight.set_text("-")
+        else:
+            self._crewLabel.set_text(xstr("weighthelp_crew") % (str(self._crew),))
+            crewWeight = self._crew * self._humanWeight
+            self._crewWeight.set_text("%.0f" % (crewWeight,))
+            
+        if self._pax<0:
+            self._paxLabel.set_text(xstr("weighthelp_pax") % ("-",))
+            self._paxWeight.set_text("-")
+        else:
+            self._paxLabel.set_text(xstr("weighthelp_pax") % (str(self._pax),))
+            paxWeight = self._pax * self._humanWeight
+            self._paxWeight.set_text("%.0f" % (paxWeight,))
+
+        self._setWeightLabel(self._bagWeight, self._bag)
+
+        self._setWeightLabel(self._cargoWeight, self._cargo)
+        
+        self._setWeightLabel(self._mailWeight, self._mail)
+            
+        (payload, zfw) = self._calculateWeights()
+
+        self._setWeightLabel(self._payload, payload, bold = True)
+            
+        self._setWeightLabel(self._dow, self._dowValue)
+
+        if zfw<0:
+            self._zfw.set_text("-")
+        else:
+            markup = "%.0f" % (zfw,)
+            if self._mzfwValue>0 and zfw>self._mzfwValue:
+                markup = '<span foreground="red">' + markup + '</span>'
+            markup = '<b>' + markup + '</b>'
+            self._zfw.set_markup(markup)
+
+        self._setWeightLabel(self._mzfw, self._mzfwValue)
+        
+        self._setWeightLabel(self._mtow, self._mtowValue)
+        
+        self._setWeightLabel(self._mlw, self._mlwValue)
+
+    def _setupFS(self):
+        if self._dowValue<0:
+            self._dow.set_text("-")
+        else:
+            self._dow.set_text("%.0f" % (self._dowValue,))
+
+        """Setup the labels for the FS values."""        
+        (payload, zfw) = self._calculateWeights()
+
+        if self._fsPayloadValue<0:
+            self._fsPayload.set_text("-")
+        else:
+            markup = WeightHelp._getMarkup(self._fsPayloadValue, payload,
+                                           PayloadChecker.TOLERANCE)
+            self._fsPayload.set_markup("<b>" + markup + "</b>")
+
+        if self._fsDOWValue<0:
+            self._fsDOW.set_text("-")
+        else:            
+            markup = WeightHelp._getMarkup(self._fsDOWValue,  self._dowValue,
+                                           PayloadChecker.TOLERANCE)
+            self._fsDOW.set_markup(markup)
+
+        if self._fsZFWValue<0:
+            self._fsZFW.set_text("-")
+        else:
+            markup = WeightHelp._getMarkup(self._fsZFWValue,  zfw,
+                                           PayloadChecker.TOLERANCE)
+            self._fsZFW.set_markup("<b>" + markup + "</b>")
+
+        self._setWeightLabel(self._fsGross, self._fsGrossValue)
+
+    def _calculateWeights(self):
+        """Calculate the payload and the zero-fuel weight.
+
+        It returns a tuple with these two items. If any of the items cannot be
+        calculated, that is -1."""
+        if self._crew<0 or self._pax<0 or \
+               self._bag<0 or self._cargo<0 or self._mail<0:
+            payload = -1
+        else:
+            payload = (self._crew + self._pax) * self._humanWeight + \
+                      self._bag + self._cargo + self._mail
+
+        if payload<0 or self._dowValue<0:
+            zfw = -1
+        else:
+            zfw = payload + self._dowValue
+
+        return (payload, zfw)
+
+    def _usingHelpToggled(self, button):
+        """Called when the Using help button is toggled."""
+        assert self._usingHelp.get_active()
+        self._usingHelp.set_sensitive(False)
+
+        self._gui.logger.untimedMessage("The weight calculation help function was used by the pilot")
+
+        bookedFlight = self._gui.bookedFlight
+        self._crew = bookedFlight.numCrew
+        self._pax = bookedFlight.numPassengers
+        self._bag = bookedFlight.bagWeight
+        self._cargo = self._gui.cargoWeight
+        self._mail = bookedFlight.mailWeight
+        
+        aircraft = self._gui.flight.aircraft
+        self._humanWeight = aircraft.humanWeight
+        self._dowValue = aircraft.dow
+        self._mzfwValue = aircraft.mzfw
+        self._mtowValue = aircraft.mtow
+        self._mlwValue = aircraft.mlw
+
+        self._setupCalculated()
+        self._weightsTable.set_sensitive(True)
+
+    def _fsButtonClicked(self, button):
+        """Callback for the FS button being clicked."""
+        gui = self._gui
+        gui.beginBusy(xstr("weighthelp_busy"))
+        gui.simulator.requestWeights(self._handleWeights)
+
+    def _handleWeights(self, dow, payload, zfw, grossWeight):
+        """Handle the given weights."""
+        gobject.idle_add(self._processWeights, dow, payload, zfw, grossWeight)
+
+    def _processWeights(self, dow, payload, zfw, grossWeight):
+        """Process the given weights."""
+        self._gui.endBusy()
+        if self._usingHelp.get_active():
+            self._fsPayloadValue = payload
+            self._fsDOWValue = dow
+            self._fsZFWValue = zfw
+            self._fsGrossValue = grossWeight
+            self._setupFS()
+
+    def _setWeightLabel(self, label, weight, bold = False):
+        """Set the given weight label to the given weight."""
+        if weight<0:
+            label.set_text("-")
+        else:
+            markup = "%.0f" % (weight,)
+            if bold: markup = "<b>" + markup + "</b>"
+            label.set_markup(markup)
+                
+        
Index: src/mlx/i18n.py
===================================================================
--- src/mlx/i18n.py	(revision 115)
+++ src/mlx/i18n.py	(revision 117)
@@ -139,11 +139,12 @@
         self.add("tab_flight_info", "Flight _info")
         self.add("tab_flight_info_tooltip", "Further information regarding the flight")
+        self.add("tab_weight_help", "_Help")
+        self.add("tab_weight_help_tooltip", "Help to calculate the weights")
         self.add("tab_log", "_Log")
         self.add("tab_log_tooltip",
                  "The log of your flight that will be sent to the MAVA website")
+        self.add("tab_gates", "_Gates")        
         self.add("tab_debug_log", "_Debug log")
         self.add("tab_debug_log_tooltip", "Log with debugging information.")
-        self.add("tab_help", "_Help")
-        self.add("tab_gates", "_Gates")
 
         self.add("conn_failed", "Cannot connect to the simulator.")
@@ -475,4 +476,34 @@
         self.add("update_nothing", "There was nothing to update")
         self.add("update_failed", "Failed, see the debug log for details.")
+
+        self.add("weighthelp_usinghelp", "_Using help")
+        self.add("weighthelp_usinghelp_tooltip",
+                 "If you check this, some help will be displayed on how "
+                 "to calculate the payload weight for your flight. "
+                 "Note, that the usage of this facility will be logged.")
+        self.add("weighthelp_header_calculated", "Requested/\ncalculated")
+        self.add("weighthelp_header_simulator", "Simulator\ndata")
+        self.add("weighthelp_header_simulator_tooltip",
+                 "Click this button to retrieve the weight values from the "
+                 "simulator, which will be displayed below. If a value is "
+                 "within 10% of the tolerance, it is displayed in "
+                 '<b><span foreground="darkgreen">green</span></b>, '
+                 "if it is out of the tolerance, it is displayed in "
+                 '<b><span foreground="red">red</span></b>, '
+                 "otherwise in"
+                 '<b><span foreground="orange">yellow</span></b>.')
+        self.add("weighthelp_crew", "Crew (%s):")
+        self.add("weighthelp_pax", "Passengers (%s):")
+        self.add("weighthelp_baggage", "Baggage:")
+        self.add("weighthelp_cargo", "Cargo:")
+        self.add("weighthelp_mail", "Mail:")
+        self.add("weighthelp_payload", "Payload:")
+        self.add("weighthelp_dow", "DOW:")
+        self.add("weighthelp_zfw", "ZFW:")
+        self.add("weighthelp_gross", "Gross weight:")
+        self.add("weighthelp_mzfw", "MZFW:")
+        self.add("weighthelp_mtow", "MTOW:")
+        self.add("weighthelp_mlw", "MLW:")
+        self.add("weighthelp_busy", "Querying weight data...")
                  
 #------------------------------------------------------------------------------
@@ -501,4 +532,6 @@
         self.add("tab_flight_info", "Járat _info")
         self.add("tab_flight_info_tooltip", "Egyéb információk a járat teljesítésével kapcsolatban")
+        self.add("tab_weight_help", "_Segítség")
+        self.add("tab_weight_help_tooltip", "Segítség a súlyszámításhoz")
         self.add("tab_log", "_Napló")
         self.add("tab_log_tooltip",
@@ -507,5 +540,4 @@
         self.add("tab_debug_log_tooltip",
                  "Hibakereséshez használható információkat tartalmazó napló.")
-        self.add("tab_help", "_Segítség")
         self.add("tab_gates", "_Kapuk")        
 
@@ -842,4 +874,36 @@
         self.add("update_failed", "Nem sikerült, a részleteket lásd a debug naplóban.")
 
+        self.add("weighthelp_usinghelp", "_Használom a segítséget")
+        self.add("weighthelp_usinghelp_tooltip",
+                 "Ha bejelölöd, az alábbiakban kapsz egy kis segítséget "
+                 "a járathoz szükséges hasznos teher megállapításához. "
+                 "Ha igénybe veszed ezt a szolgáltatást, ez a tény "
+                 "a naplóba bekerül.")
+        self.add("weighthelp_header_calculated", "Elvárt/\nszámított")
+        self.add("weighthelp_header_simulator", "Szimulátor\nadatok")
+        self.add("weighthelp_header_simulator_tooltip",
+                 "Kattints erre a gombra a súlyadatoknak a szimulátortól "
+                 "való lekérdezéséhez. Az értékek lent jelennek meg. Ha "
+                 "egy érték a tűrés 10%-án belül van, akkor az "
+                 '<b><span foreground="darkgreen">zöld</span></b> '
+                 "színnel jelenik meg. Ha nem fér bele a tűrésbe, akkor "
+                 '<b><span foreground="red">piros</span></b>, '
+                 "egyébként "
+                 '<b><span foreground="orange">sárga</span></b> '
+                 "színben olvasható.")
+        self.add("weighthelp_crew", "Legénység (%s):")
+        self.add("weighthelp_pax", "Utasok (%s):")
+        self.add("weighthelp_baggage", "Poggyász:")
+        self.add("weighthelp_cargo", "Teher:")
+        self.add("weighthelp_mail", "Posta:")
+        self.add("weighthelp_payload", "Hasznos teher:")
+        self.add("weighthelp_dow", "DOW:")
+        self.add("weighthelp_zfw", "ZFW:")
+        self.add("weighthelp_gross", "Teljes tömeg:")
+        self.add("weighthelp_mzfw", "MZFW:")
+        self.add("weighthelp_mtow", "MTOW:")
+        self.add("weighthelp_mlw", "MLW:")
+        self.add("weighthelp_busy", "A tömegadatok lekérdezése...")
+
 #------------------------------------------------------------------------------
 
Index: src/mlx/pyuipc_sim.py
===================================================================
--- src/mlx/pyuipc_sim.py	(revision 89)
+++ src/mlx/pyuipc_sim.py	(revision 117)
@@ -243,4 +243,8 @@
         self.n1 = [0.0, 0.0, 0.0]
         self.throttles = [0.0, 0.0, 0.0]
+
+        self.payloadCount = 1
+        self.payload = []
+        for i in range(0, 61): self.payload.append(0.0)
 
     def read(self, offset):
@@ -402,4 +406,9 @@
         elif offset==0x1260:       # External 2 tank capacity
             return self._getFuelCapacity(self.FUEL_EXTERNAL_2)
+        elif offset==0x13fc:       # The number of the payload stations
+            return self.payloadCount
+        elif offset>=0x1400 and offset<=0x1f40 and \
+             ((offset-0x1400)%48)==0: # Payload
+            return self.payload[ (offset - 0x1400) / 48 ]
         elif offset==0x2000:       # Engine #1 N1
             return self.n1[self.ENGINE_1]
@@ -581,4 +590,9 @@
         elif offset==0x1260:       # External 2 tank capacity
             self._setFuelCapacity(self.FUEL_EXTERNAL_2, value)
+        elif offset==0x13fc:       # The number of the payload stations
+            self.payloadCount = int(value)
+        elif offset>=0x1400 and offset<=0x1f40 and \
+             ((offset-0x1400)%48)==0: # Payload
+            self.payload[ (offset - 0x1400) / 48 ] = value
         elif offset==0x2000:       # Engine #1 N1
             self.n1[self.ENGINE_1] = value
@@ -1114,4 +1128,14 @@
                                                               100.0/1609.344))
                                                             
+        self._valueHandlers["payloadCount"] = (0x13fc, "d",
+                                               lambda value: value,
+                                               lambda word: int(word))
+        for i in range(0, 61):
+            self._valueHandlers["payload%d" % (i,)] = (0x1400 + i * 48, "f",
+                                                       lambda value:
+                                                       value * const.LBSTOKG,
+                                                       lambda word:
+                                                       float(word)*const.KGSTOLB)
+                                                            
     def default(self, line):
         """Handle unhandle commands."""
