Index: src/mlx/gui/flightlist.py
===================================================================
--- src/mlx/gui/flightlist.py	(revision 822)
+++ src/mlx/gui/flightlist.py	(revision 823)
@@ -79,5 +79,6 @@
 
     def __init__(self, columnDescriptors = defaultColumnDescriptors,
-                 popupMenuProducer = None, widthRequest = None):
+                 popupMenuProducer = None, widthRequest = None,
+                 multiSelection = False):
         """Construct the flight list with the given column descriptors."""
 
@@ -114,4 +115,6 @@
         selection = self._view.get_selection()
         selection.connect("changed", self._selectionChanged)
+        if multiSelection:
+            selection.set_mode(SELECTION_MULTIPLE)
 
         scrolledWindow = gtk.ScrolledWindow()
@@ -132,13 +135,14 @@
 
     @property
-    def selectedIndex(self):
-        """Get the index of the selected entry, if any."""
+    def selectedIndexes(self):
+        """Get the indexes of the selected entries, if any.
+
+        The indexes are sorted."""
         selection = self._view.get_selection()
-        (model, iter) = selection.get_selected()
-        if iter is None:
-            return None
-        else:
-            index = model.get_value(iter, 0)
-            return index
+        (model, rows) = selection.get_selected_rows()
+
+        indexes = [self._getIndexForPath(path) for path in rows]
+        indexes.sort()
+        return indexes
 
     @property
@@ -158,6 +162,6 @@
         self._model.append(values)
 
-    def removeFlight(self, index):
-        """Remove the flight with the given index."""
+    def removeFlights(self, indexes):
+        """Remove the flights with the given indexes."""
         model = self._model
         idx = 0
@@ -165,5 +169,5 @@
         while iter is not None:
             nextIter = model.iter_next(iter)
-            if model.get_value(iter, 0)==index:
+            if model.get_value(iter, 0) in indexes:
                 model.remove(iter)
             else:
@@ -172,7 +176,12 @@
             iter = nextIter
 
+    def _getIndexForPath(self, path):
+        """Get the index for the given path."""
+        iter = self._model.get_iter(path)
+        return self._model.get_value(iter, 0)
+
     def _rowActivated(self, flightList, path, column):
         """Called when a row is selected."""
-        self.emit("row-activated", self.selectedIndex)
+        self.emit("row-activated", self._getIndexForPath(path))
 
     def _buttonPressEvent(self, widget, event):
@@ -198,5 +207,5 @@
     def _selectionChanged(self, selection):
         """Called when the selection has changed."""
-        self.emit("selection-changed", self.selectedIndex)
+        self.emit("selection-changed", self.selectedIndexes)
 
 #-------------------------------------------------------------------------------
@@ -250,5 +259,5 @@
         self._flightList = FlightList(columnDescriptors =
                                       PendingFlightsFrame.columnDescriptors,
-                                      widthRequest = 500)
+                                      widthRequest = 500, multiSelection = True)
         self._flightList.connect("selection-changed", self._selectionChanged)
 
@@ -290,10 +299,9 @@
         self._flightList.addFlight(flight)
 
-    def _selectionChanged(self, flightList, selectedIndex):
+    def _selectionChanged(self, flightList, selectedIndexes):
         """Called when the selection in the list has changed."""
-        sensitive = selectedIndex is not None
-        self._editButton.set_sensitive(sensitive)
-        self._reflyButton.set_sensitive(sensitive)
-        self._deleteButton.set_sensitive(sensitive)
+        self._editButton.set_sensitive(len(selectedIndexes)==1)
+        self._reflyButton.set_sensitive(len(selectedIndexes)>0)
+        self._deleteButton.set_sensitive(len(selectedIndexes)>0)
 
     def _reflyClicked(self, button):
@@ -303,6 +311,7 @@
         self.set_sensitive(False)
 
-        flight = self._flights[self._flightList.selectedIndex]
-        gui.webHandler.reflyFlights(self._reflyResultCallback, [flight.id])
+        flightIDs = [self._flights[i].id
+                     for i in self._flightList.selectedIndexes]
+        gui.webHandler.reflyFlights(self._reflyResultCallback, flightIDs)
 
     def _reflyResultCallback(self, returned, result):
@@ -320,12 +329,14 @@
 
         if returned:
-            index = self._flightList.selectedIndex
-
-            flight = self._flights[index]
-
-            self._flightList.removeFlight(index)
-            del self._flights[index]
-
-            self._wizard.reflyFlight(flight)
+            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.reflyFlight(flight)
 
 
