Index: src/mlx/gui/flight.py
===================================================================
--- src/mlx/gui/flight.py	(revision 1008)
+++ src/mlx/gui/flight.py	(revision 1033)
@@ -15,4 +15,5 @@
 from mlx.i18n import xstr, getLanguage
 from mlx.sound import startSound
+from mlx.rpc import BookedFlight
 import mlx.web as web
 
@@ -2105,5 +2106,5 @@
         super(PayloadPage, self).__init__(wizard, "payload",
                                           xstr("payload_title"),
-                                          xstr("payload_help"),
+                                          xstr("payload_help") + "\n\n \n \n",
                                           completedHelp = xstr("payload_chelp"))
 
@@ -2118,17 +2119,30 @@
         self.setMainWidget(alignment)
 
-        label = Gtk.Label(xstr("payload_crew"))
+        self._crewLabel = label = Gtk.Label(xstr("payload_crew"))
         label.set_use_underline(True)
         label.set_alignment(0.0, 0.5)
         table.attach(label, 0, 1, 0, 1)
 
-        self._numCrew = IntegerEntry(defaultValue = 0)
-        self._numCrew.set_width_chars(6)
-        self._numCrew.connect("integer-changed", self._weightChanged)
-        self._numCrew.set_tooltip_text(xstr("payload_crew_tooltip"))
-        table.attach(self._numCrew, 1, 2, 0, 1)
-        label.set_mnemonic_widget(self._numCrew)
-
-        label = Gtk.Label(xstr("payload_pax"))
+        self._numCockpitCrew = Gtk.Label()
+
+        self._numCabinCrew = IntegerEntry(defaultValue = 0)
+        self._numCabinCrew.set_width_chars(6)
+        self._numCabinCrew.connect("integer-changed", self._weightChanged)
+        self._numCabinCrew.set_tooltip_text(xstr("payload_crew_tooltip"))
+
+        crewBox = Gtk.HBox()
+        crewBox.pack_start(self._numCockpitCrew, False, False, 0)
+        crewBox.pack_start(Gtk.Label("+"), False, False, 4)
+        crewBox.pack_start(self._numCabinCrew, False, False, 0)
+        crewBox.set_halign(Gtk.Align.END)
+
+        table.attach(crewBox, 1, 2, 0, 1)
+        label.set_mnemonic_widget(self._numCabinCrew)
+
+        label = Gtk.Label(xstr("payload_crew_info"))
+        label.set_halign(Gtk.Align.START)
+        table.attach(label, 2, 3, 0, 1)
+
+        self._paxLabel = label = Gtk.Label(xstr("payload_pax"))
         label.set_use_underline(True)
         label.set_alignment(0.0, 0.5)
@@ -2139,6 +2153,28 @@
         self._numPassengers.connect("integer-changed", self._weightChanged)
         self._numPassengers.set_tooltip_text(xstr("payload_pax_tooltip"))
-        table.attach(self._numPassengers, 1, 2, 1, 2)
+
+        self._numChildren = IntegerEntry(defaultValue = 0)
+        self._numChildren.set_width_chars(6)
+        self._numChildren.connect("integer-changed", self._weightChanged)
+        self._numChildren.set_tooltip_text(xstr("payload_pax_children_tooltip"))
+
+        self._numInfants = IntegerEntry(defaultValue = 0)
+        self._numInfants.set_width_chars(6)
+        self._numInfants.connect("integer-changed", self._weightChanged)
+        self._numInfants.set_tooltip_text(xstr("payload_pax_infants_tooltip"))
+
+        paxBox = Gtk.HBox()
+        paxBox.pack_start(self._numPassengers, False, False, 0)
+        paxBox.pack_start(Gtk.Label("+"), False, False, 4)
+        paxBox.pack_start(self._numChildren, False, False, 0)
+        paxBox.pack_start(Gtk.Label("+"), False, False, 4)
+        paxBox.pack_start(self._numInfants, False, False, 0)
+
+        table.attach(paxBox, 1, 2, 1, 2)
         label.set_mnemonic_widget(self._numPassengers)
+
+        label = Gtk.Label(xstr("payload_pax_info"))
+        label.set_halign(Gtk.Align.START)
+        table.attach(label, 2, 3, 1, 2)
 
         label = Gtk.Label(xstr("payload_bag"))
@@ -2151,8 +2187,12 @@
         self._bagWeight.connect("integer-changed", self._weightChanged)
         self._bagWeight.set_tooltip_text(xstr("payload_bag_tooltip"))
+        self._bagWeight.set_hexpand(False)
+        self._bagWeight.set_halign(Gtk.Align.END)
         table.attach(self._bagWeight, 1, 2, 2, 3)
         label.set_mnemonic_widget(self._bagWeight)
 
-        table.attach(Gtk.Label("kg"), 2, 3, 2, 3)
+        label = Gtk.Label("kg")
+        label.set_halign(Gtk.Align.START)
+        table.attach(label, 2, 3, 2, 3)
 
         label = Gtk.Label(xstr("payload_cargo"))
@@ -2165,8 +2205,12 @@
         self._cargoWeight.connect("integer-changed", self._weightChanged)
         self._cargoWeight.set_tooltip_text(xstr("payload_cargo_tooltip"))
+        self._cargoWeight.set_hexpand(False)
+        self._cargoWeight.set_halign(Gtk.Align.END)
         table.attach(self._cargoWeight, 1, 2, 3, 4)
         label.set_mnemonic_widget(self._cargoWeight)
 
-        table.attach(Gtk.Label("kg"), 2, 3, 3, 4)
+        label = Gtk.Label("kg")
+        label.set_halign(Gtk.Align.START)
+        table.attach(label, 2, 3, 3, 4)
 
         label = Gtk.Label(xstr("payload_mail"))
@@ -2179,8 +2223,12 @@
         self._mailWeight.connect("integer-changed", self._weightChanged)
         self._mailWeight.set_tooltip_text(xstr("payload_mail_tooltip"))
+        self._mailWeight.set_hexpand(False)
+        self._mailWeight.set_halign(Gtk.Align.END)
         table.attach(self._mailWeight, 1, 2, 4, 5)
         label.set_mnemonic_widget(self._mailWeight)
 
-        table.attach(Gtk.Label("kg"), 2, 3, 4, 5)
+        label = Gtk.Label("kg")
+        label.set_halign(Gtk.Align.START)
+        table.attach(label, 2, 3, 4, 5)
 
         label = Gtk.Label("<b>" + xstr("payload_zfw") + "</b>")
@@ -2194,5 +2242,7 @@
         table.attach(self._calculatedZFW, 1, 2, 5, 6)
 
-        table.attach(Gtk.Label("kg"), 2, 3, 5, 6)
+        label = Gtk.Label("kg")
+        label.set_halign(Gtk.Align.START)
+        table.attach(label, 2, 3, 5, 6)
 
         self._zfwButton = Gtk.Button(xstr("payload_fszfw"))
@@ -2208,5 +2258,7 @@
         self._simulatorZFWValue = None
 
-        table.attach(Gtk.Label("kg"), 2, 3, 6, 7)
+        label = Gtk.Label("kg")
+        label.set_halign(Gtk.Align.START)
+        table.attach(label, 2, 3, 6, 7)
 
         self.addCancelFlightButton()
@@ -2215,12 +2267,27 @@
 
     @property
-    def numCrew(self):
-        """The number of the crew members on the flight."""
-        return self._numCrew.get_int()
+    def numCockpitCrew(self):
+        """The number of the cockpit crew members on the flight."""
+        return self._wizard._bookedFlight.numCockpitCrew
+
+    @property
+    def numCabinCrew(self):
+        """The number of the cabin members on the flight."""
+        return self._numCabinCrew.get_int()
 
     @property
     def numPassengers(self):
-        """The number of the passengers on the flight."""
+        """The number of the adult passengers on the flight."""
         return self._numPassengers.get_int()
+
+    @property
+    def numChildren(self):
+        """The number of the child passengers on the flight."""
+        return self._numChildren.get_int()
+
+    @property
+    def numInfants(self):
+        """The number of the infant passengers on the flight."""
+        return self._numInfants.get_int()
 
     @property
@@ -2243,15 +2310,33 @@
         bookedFlight = self._wizard._bookedFlight
 
-        self._numCrew.set_int(bookedFlight.numCrew)
-        self._numCrew.set_sensitive(True)
+        self._numCockpitCrew.set_markup("<b>" +
+                                        str(bookedFlight.numCockpitCrew) +
+                                        "</b>")
+        self._numCabinCrew.set_int(bookedFlight.numCabinCrew)
+        self._numCabinCrew.set_sensitive(True)
+
+
         self._numPassengers.set_int(bookedFlight.numPassengers)
         self._numPassengers.set_sensitive(True)
 
+        self._numChildren.set_int(bookedFlight.numChildren)
+        self._numChildren.set_sensitive(True)
+
+        self._numInfants.set_int(bookedFlight.numInfants)
+        self._numInfants.set_sensitive(True)
+
         self._bagWeight.set_int(bookedFlight.bagWeight)
         self._bagWeight.set_sensitive(True)
-        self._cargoWeight.set_int(bookedFlight.cargoWeight)
-        self._cargoWeight.set_sensitive(True)
-        self._mailWeight.set_int(bookedFlight.mailWeight)
-        self._mailWeight.set_sensitive(True)
+
+        if bookedFlight.flightType==BookedFlight.FLIGHT_TYPE_CHARTER:
+            self._cargoWeight.set_int(0)
+            self._cargoWeight.set_sensitive(False)
+            self._mailWeight.set_int(0)
+            self._mailWeight.set_sensitive(False)
+        else:
+            self._cargoWeight.set_int(bookedFlight.cargoWeight)
+            self._cargoWeight.set_sensitive(True)
+            self._mailWeight.set_int(bookedFlight.mailWeight)
+            self._mailWeight.set_sensitive(True)
 
         self._simulatorZFW.set_text("-")
@@ -2262,6 +2347,8 @@
     def finalize(self):
         """Finalize the payload page."""
-        self._numCrew.set_sensitive(False)
+        self._numCabinCrew.set_sensitive(False)
         self._numPassengers.set_sensitive(False)
+        self._numChildren.set_sensitive(False)
+        self._numInfants.set_sensitive(False)
         self._bagWeight.set_sensitive(False)
         self._cargoWeight.set_sensitive(False)
@@ -2271,6 +2358,15 @@
     def calculateZFW(self):
         """Calculate the ZFW value."""
-        zfw = self._wizard.gui._flight.aircraft.dow
-        zfw += (self._numCrew.get_int() + self._numPassengers.get_int()) * 82
+        bookedFlight = self._wizard._bookedFlight
+
+        zfw = bookedFlight.dow
+        zfw += (self._numCabinCrew.get_int() - bookedFlight.dowNumCabinCrew) *  \
+            const.WEIGHT_CABIN_CREW
+        zfw += self._numPassengers.get_int() * \
+            (const.WEIGHT_PASSENGER_CHARTER
+             if bookedFlight.flightType==BookedFlight.FLIGHT_TYPE_CHARTER
+             else const.WEIGHT_PASSENGER)
+        zfw += self._numChildren.get_int() * const.WEIGHT_CHILD
+        zfw += self._numInfants.get_int() * const.WEIGHT_INFANT
         zfw += self._bagWeight.get_int()
         zfw += self._cargoWeight.get_int()
@@ -2291,5 +2387,45 @@
 
     def _weightChanged(self, entry, weight):
-        """Called when one of the weight values or humanm counts has changed."""
+        """Called when one of the weight values or humanm counts has
+        changed."""
+        bookedFlight = self._wizard._bookedFlight
+        numPassengers = \
+            self._numPassengers.get_int() + \
+            self._numChildren.get_int() + \
+            self._numInfants.get_int()
+        minCabinCrew = 0 if numPassengers==0 else \
+            (bookedFlight.maxPassengers // 50) + 1
+
+        extraHelp = []
+        enoughCrew = self._numCabinCrew.get_int() >= minCabinCrew
+        if enoughCrew:
+            self._crewLabel.set_text(xstr("payload_crew"))
+            self.setHelp(xstr("payload_help"))
+        else:
+            self._crewLabel.set_markup("<b><span foreground=\"red\">" +
+                                       xstr("payload_crew") +
+                                       "</span></b>")
+            extraHelp.append(xstr("payload_help_few_crew") % (minCabinCrew,))
+        self._crewLabel.set_use_underline(True)
+
+        tooManyPassengers = numPassengers>bookedFlight.maxPassengers
+        if tooManyPassengers:
+            self._paxLabel.set_markup("<b><span foreground=\"red\">" +
+                                      xstr("payload_pax") +
+                                      "</span></b>")
+            extraHelp.append(xstr("payload_help_many_pax") % (bookedFlight.maxPassengers,))
+        else:
+            self._paxLabel.set_text(xstr("payload_pax"))
+        self._paxLabel.set_use_underline(True)
+
+        hlp = xstr("payload_help") + "\n\n"
+        for eh in extraHelp:
+            hlp += "<b><span foreground=\"red\">" + eh + "</span></b>\n"
+        hlp += " \n" * (2-len(extraHelp))
+        self.setHelp(hlp)
+
+        self._button.set_sensitive(enoughCrew and not tooManyPassengers)
+
+
         self._updateCalculatedZFW()
 
@@ -5539,7 +5675,12 @@
 
     @property
-    def numCrew(self):
-        """Get the number of crew members."""
-        return self._payloadPage.numCrew
+    def numCockpitCrew(self):
+        """Get the number of cockpit crew members."""
+        return self._payloadPage.numCockpitCrew
+
+    @property
+    def numCabinCrew(self):
+        """Get the number of cabin crew members."""
+        return self._payloadPage.numCabinCrew
 
     @property
@@ -5547,4 +5688,14 @@
         """Get the number of passengers."""
         return self._payloadPage.numPassengers
+
+    @property
+    def numChildren(self):
+        """Get the number of child passengers."""
+        return self._payloadPage.numChildren
+
+    @property
+    def numInfants(self):
+        """Get the number of infant passengers."""
+        return self._payloadPage.numInfants
 
     @property
Index: src/mlx/gui/flightlist.py
===================================================================
--- src/mlx/gui/flightlist.py	(revision 999)
+++ src/mlx/gui/flightlist.py	(revision 1033)
@@ -610,5 +610,5 @@
                          extraColumnAttributes =
                              { "alignment": 0.5 } ),
-        ColumnDescriptor("numPassengers", xstr("acceptedflt_num_pax"),
+        ColumnDescriptor("totalNumPassengers", xstr("acceptedflt_num_pax"),
                          type = int, sortable = True,
                          extraColumnAttributes =
Index: src/mlx/gui/gui.py
===================================================================
--- src/mlx/gui/gui.py	(revision 1010)
+++ src/mlx/gui/gui.py	(revision 1033)
@@ -263,7 +263,12 @@
 
     @property
-    def numCrew(self):
-        """Get the number of crew members."""
-        return self._wizard.numCrew
+    def numCockpitCrew(self):
+        """Get the number of cockpit crew members."""
+        return self._wizard.numCockpitCrew
+
+    @property
+    def numCabinCrew(self):
+        """Get the number of cabin crew members."""
+        return self._wizard.numCabinCrew
 
     @property
@@ -271,4 +276,14 @@
         """Get the number of passengers."""
         return self._wizard.numPassengers
+
+    @property
+    def numChildren(self):
+        """Get the number of child passengers."""
+        return self._wizard.numChildren
+
+    @property
+    def numInfants(self):
+        """Get the number of infant passengers."""
+        return self._wizard.numInfants
 
     @property
Index: src/mlx/gui/pirep.py
===================================================================
--- src/mlx/gui/pirep.py	(revision 999)
+++ src/mlx/gui/pirep.py	(revision 1033)
@@ -336,6 +336,9 @@
                                     bookedFlight.arrivalTime.minute))
 
-        self._numPassengers.set_text(str(bookedFlight.numPassengers))
-        self._numCrew.set_text(str(bookedFlight.numCrew))
+        self._numPassengers.set_text(str(bookedFlight.numPassengers) + " + " +
+                                     str(bookedFlight.numChildren) + " + " +
+                                     str(bookedFlight.numInfants))
+        self._numCrew.set_text(str(bookedFlight.numCockpitCrew) + " + " +
+                               str(bookedFlight.numCabinCrew))
         self._bagWeight.set_text(str(bookedFlight.bagWeight))
         self._cargoWeight.set_text(str(bookedFlight.cargoWeight))
@@ -378,5 +381,5 @@
             self._rating.set_text("%.1f %%" % (rating,))
 
-        self._flownNumCrew.set_text("%d" % (pirep.numCrew,))
+        self._flownNumCabinCrew.set_text("%d" % (pirep.numCabinCrew,))
         self._flownNumPassengers.set_text("%d" % (pirep.numPassengers,))
         self._flownBagWeight.set_text("%.0f" % (pirep.bagWeight,))
@@ -696,5 +699,5 @@
                                     width = 4)
 
-        self._flownNumCrew = \
+        self._flownNumCabinCrew = \
             PIREPViewer.tableAttach(table, 1, 0,
                                     xstr("pirepView_numCrew"),
@@ -898,6 +901,9 @@
                                     bookedFlight.arrivalTime.minute))
 
-        self._numPassengers.set_text(str(bookedFlight.numPassengers))
-        self._numCrew.set_text(str(bookedFlight.numCrew))
+        self._numPassengers.set_text(str(bookedFlight.numPassengers) + " + " +
+                                     str(bookedFlight.numChildren) + " + " +
+                                     str(bookedFlight.numInfants))
+        self._numCrew.set_text(str(bookedFlight.numCockpitCrew) + " + " +
+                               str(bookedFlight.numCabinCrew))
         self._bagWeight.set_text(str(bookedFlight.bagWeight))
         self._cargoWeight.set_text(str(bookedFlight.cargoWeight))
@@ -943,6 +949,8 @@
             self._rating.set_text("%.1f %%" % (rating,))
 
-        self._flownNumCrew.set_value(pirep.numCrew)
+        self._flownNumCabinCrew.set_value(pirep.numCabinCrew)
         self._flownNumPassengers.set_value(pirep.numPassengers)
+        self._flownNumChildren.set_value(pirep.numChildren)
+        self._flownNumInfants.set_value(pirep.numInfants)
         self._flownBagWeight.set_value(pirep.bagWeight)
         self._flownCargoWeight.set_value(pirep.cargoWeight)
@@ -1362,17 +1370,56 @@
         table.set_homogeneous(False)
 
-        self._flownNumPassengers = \
-            PIREPEditor.tableAttachSpinButton(table, 0, 0,
-                                              xstr("pirepView_numPassengers"),
-                                              300)
-        self._flownNumPassengers.connect("value-changed", self._updateButtons)
-        self._flownNumPassengers.set_tooltip_text(xstr("payload_pax_tooltip"))
-
-        self._flownNumCrew = \
-            PIREPEditor.tableAttachSpinButton(table, 2, 0,
+        label = Gtk.Label("<b>" + xstr("pirepView_numPassengers") + "</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, 0, 1)
+
+
+
+        self._flownNumPassengers = button = Gtk.SpinButton()
+        button.set_range(min = 0, max = 300)
+        button.set_increments(step = 1, page = 10)
+        button.set_numeric(True)
+        button.set_width_chars(2)
+        button.set_alignment(1.0)
+        button.connect("value-changed", self._updateButtons)
+        button.set_tooltip_text(xstr("payload_pax_tooltip"))
+
+        self._flownNumChildren = button = Gtk.SpinButton()
+        button.set_range(min = 0, max = 300)
+        button.set_increments(step = 1, page = 10)
+        button.set_numeric(True)
+        button.set_width_chars(2)
+        button.set_alignment(1.0)
+        button.connect("value-changed", self._updateButtons)
+        button.set_tooltip_text(xstr("payload_pax_children_tooltip"))
+
+        self._flownNumInfants = button = Gtk.SpinButton()
+        button.set_range(min = 0, max = 300)
+        button.set_increments(step = 1, page = 10)
+        button.set_numeric(True)
+        button.set_width_chars(2)
+        button.set_alignment(1.0)
+        button.connect("value-changed", self._updateButtons)
+        button.set_tooltip_text(xstr("payload_pax_infants_tooltip"))
+
+        paxBox = Gtk.HBox()
+        paxBox.pack_start(self._flownNumPassengers, False, False, 0)
+        paxBox.pack_start(Gtk.Label("+"), False, False, 4)
+        paxBox.pack_start(self._flownNumChildren, False, False, 0)
+        paxBox.pack_start(Gtk.Label("+"), False, False, 4)
+        paxBox.pack_start(self._flownNumInfants, False, False, 0)
+        paxBox.set_halign(Gtk.Align.END)
+
+        table.attach(paxBox, 1, 4, 0, 1)
+
+        self._flownNumCabinCrew = \
+            PIREPEditor.tableAttachSpinButton(table, 4, 0,
                                               xstr("pirepView_numCrew"),
                                               10)
-        self._flownNumCrew.connect("value-changed", self._updateButtons)
-        self._flownNumCrew.set_tooltip_text(xstr("payload_crew_tooltip"))
+        self._flownNumCabinCrew.connect("value-changed", self._updateButtons)
+        self._flownNumCabinCrew.set_tooltip_text(xstr("payload_crew_tooltip"))
 
         self._flownBagWeight = \
@@ -1493,8 +1540,16 @@
                                  buffer.get_end_iter(), True)
 
+        numPassengers = \
+            self._flownNumPassengers.get_value_as_int() + \
+            self._flownNumChildren.get_value_as_int() + \
+            self._flownNumInfants.get_value_as_int()
+
+        minCabinCrew = 0 if numPassengers==0 else \
+            (bookedFlight.maxPassengers // 50) + 1
+
         self._okButton.set_sensitive(self._modified and timesOK and
                                      self._flightInfo.faultsFullyExplained and
-                                     self._flownNumPassengers.get_value_as_int()>0 and
-                                     self._flownNumCrew.get_value_as_int()>2 and
+                                     numPassengers<=bookedFlight.maxPassengers and
+                                     self._flownNumCabinCrew.get_value_as_int()>=minCabinCrew and
                                      self._fuelUsed.get_value_as_int()>0 and
                                      self._departureRunway.get_text_length()>0 and
@@ -1547,5 +1602,5 @@
         pirep.fuelUsed = self._fuelUsed.get_value()
 
-        pirep.numCrew = self._flownNumCrew.get_value()
+        pirep.numCabinCrew = self._flownNumCabinCrew.get_value()
         pirep.numPassengers = self._flownNumPassengers.get_value()
         pirep.bagWeight = self._flownBagWeight.get_value()
Index: src/mlx/gui/weighthelp.py
===================================================================
--- src/mlx/gui/weighthelp.py	(revision 996)
+++ src/mlx/gui/weighthelp.py	(revision 1033)
@@ -4,4 +4,7 @@
 from mlx.i18n import xstr
 from mlx.checks import PayloadChecker
+from mlx.rpc import BookedFlight
+
+import mlx.const as const
 
 #-------------------------------------------------------------------------------
@@ -319,8 +322,12 @@
         self._usingHelp.set_sensitive(True)
         self._weightsTable.set_sensitive(False)
-        
-        self._crew = -1
+
+        self._flightType = -1
+        self._dowCabinCrew = -1
+        self._cockpitCrew = -1
+        self._cabinCrew = -1
         self._pax = -1
-        self._humanWeight = 82.0
+        self._children = -1
+        self._infants = -1
         self._bag = -1
         self._cargo = -1
@@ -341,18 +348,23 @@
     def _setupCalculated(self):
         """Setup the labels for the calculated values."""
-        if self._crew<0:
+        crewWeight = self._getCrewWeight()
+        if crewWeight is None:
             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._crewLabel.set_text(xstr("weighthelp_crew") %
+                                    (str(self._cockpitCrew) + "+" +
+                                     str(self._cabinCrew),))
             self._crewWeight.set_text("%.0f" % (crewWeight,))
-            
-        if self._pax<0:
+
+        paxWeight = self._getPaxWeight()
+        if paxWeight<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._paxLabel.set_text(xstr("weighthelp_pax") %
+                                    (str(self._pax) + "+" +
+                                     str(self._children) + "+" +
+                                     str(self._infants),))
             self._paxWeight.set_text("%.0f" % (paxWeight,))
 
@@ -416,4 +428,24 @@
         self._setWeightLabel(self._fsGross, self._fsGrossValue)
 
+    def _getCrewWeight(self):
+        """Get the crew weight for the flight."""
+        if self._cockpitCrew>=0 and self._dowCabinCrew>=0 and self._cabinCrew>=0:
+            return (self._cabinCrew - self._dowCabinCrew) * const.WEIGHT_CABIN_CREW
+        else:
+            return None
+        
+    def _getPaxWeight(self):
+        """Get the passenger weight for the flight."""
+        if self._flightType>=0 and self._pax>=0 and self._children>=0 and \
+           self._infants>=0:
+            return self._pax * \
+                (const.WEIGHT_PASSENGER_CHARTER
+                 if self._flightType==BookedFlight.FLIGHT_TYPE_CHARTER
+                 else const.WEIGHT_PASSENGER) + \
+                self._children * const.WEIGHT_CHILD + \
+                self._infants * const.WEIGHT_INFANT
+        else:
+            return -1
+
     def _calculateWeights(self):
         """Calculate the payload and the zero-fuel weight.
@@ -421,10 +453,11 @@
         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 \
+        crewWeight = self._getCrewWeight()
+        paxWeight = self._getPaxWeight()
+        if crewWeight is None or paxWeight<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
+            payload = crewWeight + paxWeight + self._bag + self._cargo + self._mail
 
         if payload<0 or self._dowValue<0:
@@ -442,13 +475,18 @@
         self._gui.logger.untimedMessage("The weight calculation help function was used by the pilot")
 
-        self._crew = self._gui.numCrew
+        bookedFlight = self._gui.bookedFlight
+        self._flightType = bookedFlight.flightType
+        self._dowCabinCrew = bookedFlight.dowNumCabinCrew
+        self._cockpitCrew = self._gui.numCockpitCrew
+        self._cabinCrew = self._gui.numCabinCrew
         self._pax = self._gui.numPassengers
+        self._children = self._gui.numChildren
+        self._infants = self._gui.numInfants
         self._bag = self._gui.bagWeight
         self._cargo = self._gui.cargoWeight
         self._mail = self._gui.mailWeight
+        self._dowValue = bookedFlight.dow
         
         aircraft = self._gui.flight.aircraft
-        self._humanWeight = aircraft.humanWeight
-        self._dowValue = aircraft.dow
         self._mzfwValue = aircraft.mzfw
         self._mtowValue = aircraft.mtow
