Index: locale/en/mlx.po
===================================================================
--- locale/en/mlx.po	(revision 276)
+++ locale/en/mlx.po	(revision 277)
@@ -393,4 +393,10 @@
 msgid "flightsel_load_failed_sec"
 msgstr "Check the debug log for more details."
+
+msgid "flightsel_popup_select"
+msgstr "_Select"
+
+msgid "flightsel_popup_save"
+msgstr "S_ave..."
 
 msgid "fleet_busy"
Index: locale/hu/mlx.po
===================================================================
--- locale/hu/mlx.po	(revision 276)
+++ locale/hu/mlx.po	(revision 277)
@@ -396,4 +396,10 @@
 msgstr "A további részleteket lásd a debug naplóban."
 
+msgid "flightsel_popup_select"
+msgstr "_Kiválasztás"
+
+msgid "flightsel_popup_save"
+msgstr "_Mentés..."
+
 msgid "fleet_busy"
 msgstr "Flottaadatok letöltése..."
Index: msgcmp.sh
===================================================================
--- msgcmp.sh	(revision 277)
+++ msgcmp.sh	(revision 277)
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+set -e -u
+
+scriptdir=`dirname $0`
+
+language="${1:-}"
+if test -z "${language}"; then
+    language="hu"
+fi
+
+msgcmp "${scriptdir}/locale/en/mlx.po" "${scriptdir}/locale/${language}/mlx.po"
Index: src/mlx/gui/common.py
===================================================================
--- src/mlx/gui/common.py	(revision 276)
+++ src/mlx/gui/common.py	(revision 277)
@@ -65,4 +65,6 @@
     SORT_ASCENDING = gtk.SORT_ASCENDING
     SORT_DESCENDING = gtk.SORT_DESCENDING
+
+    EVENT_BUTTON_PRESS = gdk.BUTTON_PRESS
 
     pixbuf_new_from_file = gdk.pixbuf_new_from_file
@@ -128,4 +130,6 @@
     SORT_DESCENDING = gtk.SortType.DESCENDING
 
+    EVENT_BUTTON_PRESS = gdk.EventType.BUTTON_PRESS
+
     pixbuf_new_from_file = gdkPixbuf.Pixbuf.new_from_file
 
Index: src/mlx/gui/flight.py
===================================================================
--- src/mlx/gui/flight.py	(revision 275)
+++ src/mlx/gui/flight.py	(revision 277)
@@ -381,7 +381,11 @@
         column.set_expand(True)
         self._flightList.append_column(column)
+        self._flightList.connect("row-activated", self._rowActivated)
+        self._flightList.connect("button-press-event", self._listButtonPressed)
+
+        self._flightListPopupMenu = None
 
         flightSelection = self._flightList.get_selection()
-        flightSelection.connect("changed", self._selectionChanged)
+        flightSelection.connect("changed", self._selectionChanged)        
 
         scrolledWindow = gtk.ScrolledWindow()
@@ -454,4 +458,8 @@
     def _saveClicked(self, button):
         """Called when the Save flight button is clicked."""
+        self._saveSelected()
+
+    def _saveSelected(self):
+        """Save the selected flight."""
         flight = self._getSelectedFlight()
         date = flight.departureTime.date()
@@ -533,9 +541,18 @@
             self._wizard.jumpPage(self._nextDistance, finalize = False)
         else:
-            flight = self._getSelectedFlight()
-            self._wizard._bookedFlight = flight
-            self._wizard.gui.enableFlightInfo()
-
-            self._updateDepartureGate()
+            self._flightSelected()
+
+    def _rowActivated(self, flightList, path, column):
+        """Called when a row is activated."""
+        if not self._completed:
+            self._flightSelected()
+
+    def _flightSelected(self):
+        """Called when a flight has been selected."""
+        flight = self._getSelectedFlight()
+        self._wizard._bookedFlight = flight
+        self._wizard.gui.enableFlightInfo()
+        
+        self._updateDepartureGate()
 
     def _getSelectedFlight(self):
@@ -547,4 +564,21 @@
         
         return self._flights[index]
+
+    def _listButtonPressed(self, widget, event):
+        """Called when a mouse button is pressed on the flight list."""
+        if event.type!=EVENT_BUTTON_PRESS or event.button!=3:
+            return
+
+        (path, _, _, _) = self._flightList.get_path_at_pos(int(event.x),
+                                                           int(event.y))
+        selection = self._flightList.get_selection()
+        selection.unselect_all()
+        selection.select_path(path)
+
+        menu = self._getListPopupMenu()
+        if pygobject:
+            menu.popup(None, None, None, None, event.button, event.time)
+        else:
+            menu.popup(None, None, None, event.button, event.time)
         
     def _updateDepartureGate(self):
@@ -645,4 +679,39 @@
         
         return dialog        
+
+    def _getListPopupMenu(self):
+        """Get the flight list popup menu."""
+        if self._flightListPopupMenu is None:
+            menu = gtk.Menu()
+
+            menuItem = gtk.MenuItem()
+            menuItem.set_label(xstr("flightsel_popup_select"))
+            menuItem.set_use_underline(True)
+            menuItem.connect("activate", self._popupSelect)
+            menuItem.show()
+
+            menu.append(menuItem)
+        
+            menuItem = gtk.MenuItem()
+            menuItem.set_label(xstr("flightsel_popup_save"))
+            menuItem.set_use_underline(True)
+            menuItem.connect("activate", self._popupSave)
+            menuItem.show()
+
+            menu.append(menuItem)
+
+            self._flightListPopupMenu = menu
+
+        return self._flightListPopupMenu
+
+    def _popupSelect(self, menuItem):
+        """Called when the Select menu item is activated in the popup menu."""
+        if not self._completed:
+            self._flightSelected()
+    
+    def _popupSave(self, menuItem):
+        """Called when the Save menu item is activated in the popup menu."""
+        if not self._completed:
+            self._saveSelected()
     
 #-----------------------------------------------------------------------------
