Index: src/mlx/gui/flight.py
===================================================================
--- src/mlx/gui/flight.py	(revision 823)
+++ src/mlx/gui/flight.py	(revision 824)
@@ -544,4 +544,8 @@
         """Refly the given flight."""
         self._addFlight(flight)
+        self._updatePending()
+
+    def _updatePending(self):
+        """Update the stuff depending on the set of pending flights."""
         self._setupHelp()
         self._updatePendingButton()
@@ -5492,4 +5496,9 @@
         self._removePendingFlight(bookedFlight)
         self._flightSelectionPage._reflyFlight(bookedFlight)
+
+    def deleteFlight(self, bookedFlight):
+        """Remove the given flight from the pending flight list."""
+        self._removePendingFlight(bookedFlight)
+        self._flightSelectionPage._updatePending()
 
     def cancelFlight(self, reloadCallback):
Index: src/mlx/gui/flightlist.py
===================================================================
--- src/mlx/gui/flightlist.py	(revision 823)
+++ src/mlx/gui/flightlist.py	(revision 824)
@@ -243,5 +243,5 @@
     ]
 
-    def __init__(self, which, wizard):
+    def __init__(self, which, wizard, window):
         """Construct the frame with the given title."""
         super(PendingFlightsFrame, self).__init__(xstr("pendflt_title_" + which))
@@ -249,4 +249,5 @@
         self._which = which
         self._wizard = wizard
+        self._window = window
 
         alignment = gtk.Alignment(xscale = 1.0, yscale = 1.0)
@@ -277,4 +278,5 @@
         self._deleteButton = gtk.Button(xstr("pendflt_delete_" + which))
         self._deleteButton.set_sensitive(False)
+        self._deleteButton.connect("clicked", self._deleteClicked)
         buttonBox.pack_start(self._deleteButton, False, False, 2)
 
@@ -340,4 +342,50 @@
                 self._wizard.reflyFlight(flight)
 
+    def _deleteClicked(self, button):
+        """Called when the Delete button is clicked."""
+        dialog = gtk.MessageDialog(parent = self._window,
+                                   type = MESSAGETYPE_QUESTION,
+                                   message_format = xstr("flight_delete_question"))
+
+        dialog.add_button(xstr("button_no"), RESPONSETYPE_NO)
+        dialog.add_button(xstr("button_yes"), RESPONSETYPE_YES)
+
+        dialog.set_title(WINDOW_TITLE_BASE)
+        result = dialog.run()
+        dialog.hide()
+
+        if result==RESPONSETYPE_YES:
+            gui = self._wizard.gui
+            gui.beginBusy(xstr("pendflt_refly_busy"))
+            self.set_sensitive(False)
+
+            flightIDs = [self._flights[i].id
+                        for i in self._flightList.selectedIndexes]
+            gui.webHandler.deleteFlights(self._deleteResultCallback, flightIDs)
+
+    def _deleteResultCallback(self, returned, result):
+        """Called when the deletion result is available."""
+        gobject.idle_add(self._handleDeleteResult, returned, result)
+
+    def _handleDeleteResult(self, returned, result):
+        """Handle the delete result."""
+
+        self.set_sensitive(True)
+        gui = self._wizard.gui
+        gui.endBusy()
+
+        print "PendingFlightsFrame._handleDeleteResult", returned, result
+
+        if returned:
+            indexes = self._flightList.selectedIndexes
+
+            flights = [self._flights[index] for index in indexes]
+
+            self._flightList.removeFlights(indexes)
+            for index in indexes[::-1]:
+                del self._flights[index]
+
+            for flight in flights:
+                self._wizard.deleteFlight(flight)
 
 #-----------------------------------------------------------------------------
@@ -364,8 +412,8 @@
         vbox = gtk.VBox()
 
-        self._reportedFrame = PendingFlightsFrame("reported", wizard)
+        self._reportedFrame = PendingFlightsFrame("reported", wizard, self)
         vbox.pack_start(self._reportedFrame, True, True, 2)
 
-        self._rejectedFrame = PendingFlightsFrame("rejected", wizard)
+        self._rejectedFrame = PendingFlightsFrame("rejected", wizard, self)
         vbox.pack_start(self._rejectedFrame, True, True, 2)
 
Index: src/mlx/rpc.py
===================================================================
--- src/mlx/rpc.py	(revision 821)
+++ src/mlx/rpc.py	(revision 824)
@@ -345,4 +345,9 @@
                           self._server.reflyFlights(sessionID, flightIDs))
 
+    def deleteFlights(self, flightIDs):
+        """Delete the flights with the given IDs."""
+        self._performCall(lambda sessionID:
+                          self._server.deleteFlights(sessionID, flightIDs))
+
     def _performCall(self, callFn, acceptResults = []):
         """Perform a call using the given call function.
Index: src/mlx/web.py
===================================================================
--- src/mlx/web.py	(revision 821)
+++ src/mlx/web.py	(revision 824)
@@ -1256,4 +1256,18 @@
 #------------------------------------------------------------------------------
 
+class DeleteFlights(RPCRequest):
+    """A request to delete certain flights."""
+    def __init__(self, client, callback, flightIDs):
+        """Construct the request."""
+        super(DeleteFlights, self).__init__(client, callback)
+        self._flightIDs = flightIDs
+
+    def run(self):
+        """Perform the update."""
+        self._client.deleteFlights(self._flightIDs)
+        return Result()
+
+#------------------------------------------------------------------------------
+
 class Handler(threading.Thread):
     """The handler for the web services.
@@ -1341,4 +1355,8 @@
         self._addRequest(ReflyFlights(self._rpcClient, callback, flightIDs))
 
+    def deleteFlights(self, callback, flightIDs):
+        """Delete the flights with the given IDs."""
+        self._addRequest(DeleteFlights(self._rpcClient, callback, flightIDs))
+
     def run(self):
         """Process the requests."""
