Index: src/mlx/gui/acars.py
===================================================================
--- src/mlx/gui/acars.py	(revision 747)
+++ src/mlx/gui/acars.py	(revision 919)
@@ -1,9 +1,9 @@
 
-from common import *
+from .common import *
 
 from mlx.i18n import xstr
 import mlx.const as const
 
-import cef
+from . import cef
 
 #------------------------------------------------------------------------------
Index: src/mlx/gui/bugreport.py
===================================================================
--- src/mlx/gui/bugreport.py	(revision 492)
+++ src/mlx/gui/bugreport.py	(revision 919)
@@ -1,4 +1,4 @@
 
-from common import *
+from .common import *
 
 from mlx.i18n import xstr
@@ -105,5 +105,5 @@
         response = super(BugReportDialog, self).run()
 
-        print "response", response, RESPONSETYPE_ACCEPT
+        print("response", response, RESPONSETYPE_ACCEPT)
         if response==RESPONSETYPE_ACCEPT:
             self._send()
Index: src/mlx/gui/callouts.py
===================================================================
--- src/mlx/gui/callouts.py	(revision 300)
+++ src/mlx/gui/callouts.py	(revision 919)
@@ -1,4 +1,4 @@
 
-from common import *
+from .common import *
 
 from mlx.i18n import xstr
@@ -208,5 +208,5 @@
             config = self._gui.config
             for (aircraftType, approachCallouts) in \
-                    self._approachCallouts.iteritems():
+                    self._approachCallouts.items():
                 config.setApproachCallouts(aircraftType, approachCallouts)
             config.save()
Index: src/mlx/gui/cef.py
===================================================================
--- src/mlx/gui/cef.py	(revision 915)
+++ src/mlx/gui/cef.py	(revision 919)
@@ -1,3 +1,3 @@
-from common import *
+from .common import *
 
 from mlx.util import secondaryInstallation
@@ -10,11 +10,11 @@
 import os
 import re
-import thread
+import _thread
 import threading
 import tempfile
 import traceback
-import urllib2
+import urllib.request, urllib.error, urllib.parse
 from lxml import etree
-from StringIO import StringIO
+from io import StringIO
 import lxml.html
 
@@ -115,5 +115,5 @@
         """Called when a page has been loaded in the SimBrief browser."""
         url = frame.GetUrl()
-        print "gui.cef.SimBriefHandler._onLoadEnd", httpCode, url
+        print("gui.cef.SimBriefHandler._onLoadEnd", httpCode, url)
         if httpCode>=300:
             self._updateProgress(self._lastProgress,
@@ -127,7 +127,7 @@
 
             js = "form=document.getElementById(\"sbapiform\");"
-            for (name, value) in self._plan.iteritems():
+            for (name, value) in self._plan.items():
                 js += "form." + name + ".value=\"" + value + "\";"
-            for (name, value) in SimBriefHandler._querySettings.iteritems():
+            for (name, value) in SimBriefHandler._querySettings.items():
                 if isinstance(value, bool):
                     js += "form." + name + ".checked=" + \
@@ -175,6 +175,6 @@
 
             thread = threading.Thread(target = self._getResults, args = (link,))
-            thread.daemon = True
-            thread.start()
+            _thread.daemon = True
+            _thread.start()
         else:
             self._updateProgress(SIMBRIEF_PROGRESS_RETRIEVING_BRIEFING,
@@ -219,5 +219,5 @@
 
         # Obtaining the xml
-        response = urllib2.urlopen(link)
+        response = urllib.request.urlopen(link)
         xmlContent = response.read()
         # Processing xml
@@ -242,5 +242,5 @@
                     imageLinks.append(imageLink[2])
         flightInfo["image_links"] = imageLinks
-        print(sorted(availableInfo.keys()))
+        print((sorted(availableInfo.keys())))
         htmlFilePath = "simbrief_plan.html" if self._htmlFilePath is None \
           else self._htmlFilePath
@@ -266,5 +266,5 @@
 def _initializeCEF(args, initializedCallback):
     """Perform the actual initialization of CEF using the given arguments."""
-    print "Initializing CEF with args:", args
+    print("Initializing CEF with args:", args)
 
     settings = {
@@ -290,5 +290,5 @@
                     switches[arg[2:assignIndex]] = arg[assignIndex+1:]
         else:
-            print "Unhandled switch", arg
+            print("Unhandled switch", arg)
 
     cefpython.Initialize(settings, switches)
@@ -296,5 +296,5 @@
     gobject.timeout_add(10, _handleTimeout)
 
-    print "Initialized, executing callback..."
+    print("Initialized, executing callback...")
     initializedCallback()
 
@@ -322,5 +322,5 @@
         window = container.get_window()
         if window is None:
-            print "mlx.gui.cef.startInContainer: no window found!"
+            print("mlx.gui.cef.startInContainer: no window found!")
             windowID = None
         else:
Index: src/mlx/gui/checklist.py
===================================================================
--- src/mlx/gui/checklist.py	(revision 300)
+++ src/mlx/gui/checklist.py	(revision 919)
@@ -1,4 +1,4 @@
 
-from common import *
+from .common import *
 
 from mlx.i18n import xstr
@@ -190,5 +190,5 @@
             self._saveChecklist()
             config = self._gui.config
-            for (aircraftType, checklist) in self._checklists.iteritems():
+            for (aircraftType, checklist) in self._checklists.items():
                 config.setChecklist(aircraftType, checklist)
             config.save()
Index: src/mlx/gui/common.py
===================================================================
--- src/mlx/gui/common.py	(revision 863)
+++ src/mlx/gui/common.py	(revision 919)
@@ -31,5 +31,5 @@
 
 if not pygobject:
-    print "Using PyGTK"
+    print("Using PyGTK")
     pygobject = False
     import pygtk
@@ -42,5 +42,5 @@
         import appindicator
         appIndicator = True
-    except Exception, e:
+    except Exception as e:
         pass
 
@@ -113,5 +113,5 @@
     def text2unicode(text):
         """Convert the given text, returned by a Gtk widget, to Unicode."""
-        return unicode(text)
+        return str(text)
 
     def text2str(text):
Index: src/mlx/gui/delaycodes.py
===================================================================
--- src/mlx/gui/delaycodes.py	(revision 840)
+++ src/mlx/gui/delaycodes.py	(revision 919)
@@ -3,5 +3,5 @@
 #------------------------------------------------------------------------------
 
-from dcdata import CAPTION, DELAYCODE, getTable
+from .dcdata import CAPTION, DELAYCODE, getTable
 
 from mlx.gui.common import *
Index: src/mlx/gui/faultexplain.py
===================================================================
--- src/mlx/gui/faultexplain.py	(revision 842)
+++ src/mlx/gui/faultexplain.py	(revision 919)
@@ -247,5 +247,5 @@
     def reset(self):
         """Reset the widget by removing all faults."""
-        for (alignment, faultFrame) in self._faultWidgets.itervalues():
+        for (alignment, faultFrame) in self._faultWidgets.values():
             self._faults.remove(alignment)
         self._faults.show_all()
Index: src/mlx/gui/flight.py
===================================================================
--- src/mlx/gui/flight.py	(revision 872)
+++ src/mlx/gui/flight.py	(revision 919)
@@ -405,10 +405,10 @@
     def _offlineClicked(self, button):
         """Called when the offline button was clicked."""
-        print "mlx.flight.LoginPage: offline flight selected"
+        print("mlx.flight.LoginPage: offline flight selected")
         self._wizard.nextPage()
 
     def _loginClicked(self, button):
         """Called when the login button was clicked."""
-        print "mlx.flight.LoginPage: logging in"
+        print("mlx.flight.LoginPage: logging in")
         self._wizard.login(self._handleLoginResult,
                            self._pilotID.get_text(),
@@ -649,10 +649,10 @@
         if response==RESPONSETYPE_OK:
             fileName = text2unicode(dialog.get_filename())
-            print "Saving", fileName
+            print("Saving", fileName)
             try:
                 with open(fileName, "wt") as f:
                     flight.writeIntoFile(f)
-            except Exception, e:
-                print "Failed to save flight:", util.utf2unicode(str(e))
+            except Exception as e:
+                print("Failed to save flight:", util.utf2unicode(str(e)))
                 dialog = gtk.MessageDialog(parent = self._wizard.gui.mainWindow,
                                            type = MESSAGETYPE_ERROR,
@@ -706,5 +706,5 @@
         flight=self._getSelectedFlight()
 
-        print "DPI", context.get_dpi_x(), context.get_dpi_y()
+        print("DPI", context.get_dpi_x(), context.get_dpi_y())
 
         scale = context.get_dpi_x() / 72.0
@@ -719,5 +719,5 @@
 
         layout = cr.create_layout()
-        layout.set_text(u"Malév VA official briefing")
+        layout.set_text("Malév VA official briefing")
         font = pango.FontDescription("sans")
         font.set_size(int(32 * scale * pango.SCALE))
@@ -740,5 +740,5 @@
 
         layout = cr.create_layout()
-        layout.set_text(u"%s (%s) részére" %
+        layout.set_text("%s (%s) részére" %
                         (loginResult.pilotName, loginResult.pilotID))
         font = pango.FontDescription("sans")
@@ -940,5 +940,5 @@
         if response==RESPONSETYPE_OK:
             fileName = text2unicode(dialog.get_filename())
-            print "Loading", fileName
+            print("Loading", fileName)
             bookedFlight = web.BookedFlight()
             try:
@@ -946,6 +946,6 @@
                     bookedFlight.readFromFile(f)
                 self.addFlight(bookedFlight)
-            except Exception, e:
-                print "Failed to load flight:", util.utf2unicode(str(e))
+            except Exception as e:
+                print("Failed to load flight:", util.utf2unicode(str(e)))
                 dialog = gtk.MessageDialog(parent = self._wizard.gui.mainWindow,
                                            type = MESSAGETYPE_ERROR,
@@ -1629,13 +1629,13 @@
                                             self.phoneNumber, self.nationality,
                                             self.password)
-        print "Registering with data:"
-        print "  name:", self.name1, self.name2, registrationData.firstName, registrationData.surName, requestedNameOrder
-        print "  yearOfBirth:", self.yearOfBirth, registrationData.yearOfBirth
-        print "  emailAddress:", self.emailAddress, registrationData.emailAddress
-        print "  emailAddressPublic:", self.emailAddressPublic, registrationData.emailAddressPublic
-        print "  vatsimID:", self.vatsimID, registrationData.vatsimID
-        print "  ivaoID:", self.ivaoID, registrationData.ivaoID
-        print "  phoneNumber:", self.phoneNumber, registrationData.phoneNumber
-        print "  nationality:", self.nationality, registrationData.nationality
+        print("Registering with data:")
+        print("  name:", self.name1, self.name2, registrationData.firstName, registrationData.surName, requestedNameOrder)
+        print("  yearOfBirth:", self.yearOfBirth, registrationData.yearOfBirth)
+        print("  emailAddress:", self.emailAddress, registrationData.emailAddress)
+        print("  emailAddressPublic:", self.emailAddressPublic, registrationData.emailAddressPublic)
+        print("  vatsimID:", self.vatsimID, registrationData.vatsimID)
+        print("  ivaoID:", self.ivaoID, registrationData.ivaoID)
+        print("  phoneNumber:", self.phoneNumber, registrationData.phoneNumber)
+        print("  nationality:", self.nationality, registrationData.nationality)
 
         gui = self._wizard.gui
@@ -1653,13 +1653,13 @@
         gui.endBusy()
 
-        print "Registration result:"
-        print "  returned:", returned
+        print("Registration result:")
+        print("  returned:", returned)
         if returned:
-            print "  registered:", result.registered
+            print("  registered:", result.registered)
             if result.registered:
-                print "  pilotID", result.pilotID
-                print "  loggedIn", result.loggedIn
-            print "  emailAlreadyRegistered:", result.emailAlreadyRegistered
-            print "  invalidData:", result.invalidData
+                print("  pilotID", result.pilotID)
+                print("  loggedIn", result.loggedIn)
+            print("  emailAlreadyRegistered:", result.emailAlreadyRegistered)
+            print("  invalidData:", result.invalidData)
 
         registrationOK = returned and result.registered
@@ -1830,5 +1830,5 @@
     def activate(self):
         """Activate the student page."""
-        print "StudentPage.activate"
+        print("StudentPage.activate")
         self._getEntryExamStatusCancelled = False
 
@@ -1844,5 +1844,5 @@
     def finalize(self):
         """Finalize the page."""
-        print "StudentPage.finalize"
+        print("StudentPage.finalize")
         self._getEntryExamStatusCancelled = True
 
@@ -1864,5 +1864,5 @@
     def _handleEntryExamStatus(self, returned, result):
         """Called when the entry exam status is availabe."""
-        print "_handleEntryExamStatus", returned, result
+        print("_handleEntryExamStatus", returned, result)
         if returned and not self._getEntryExamStatusCancelled:
             self._entryExamLink = result.entryExamLink
@@ -2991,5 +2991,5 @@
 
             plan = self._getPlan()
-            print "plan:", plan
+            print("plan:", plan)
 
             takeoffRunway = self._takeoffRunway.get_text()
@@ -3027,5 +3027,5 @@
         are returned. Otherwise a dialog box is displayed informing the user of
         invalid credentials and requesting another set of them."""
-        print "_getCredentials", count
+        print("_getCredentials", count)
         if count==0:
             return (self._userName.get_text(), self._password.get_text())
@@ -3061,5 +3061,5 @@
     def _simBriefProgress(self, progress, result, flightInfo):
         """The real SimBrief progress handler."""
-        print "_simBriefProgress", progress, result, flightInfo
+        print("_simBriefProgress", progress, result, flightInfo)
         if result==cef.SIMBRIEF_RESULT_NONE:
             message = SimBriefSetupPage.progress2Message.get(progress,
@@ -3758,5 +3758,5 @@
     def _metarChanged(self, buffer):
         """Called when the METAR has changed."""
-        print "BriefingPage.metarChanged", self._updatingMETAR
+        print("BriefingPage.metarChanged", self._updatingMETAR)
         if not self._updatingMETAR:
             self.metarEdited = True
@@ -3770,5 +3770,5 @@
 
         It uppercases all characters."""
-        print "BriefingPage.metarInserted", self._updatingMETAR
+        print("BriefingPage.metarInserted", self._updatingMETAR)
         if not self._updatingMETAR:
             self._updatingMETAR = True
@@ -4025,5 +4025,5 @@
     def activate(self):
         """Activate the page."""
-        print "TakeoffPage.activate"
+        print("TakeoffPage.activate")
 
         self._updatingMETAR = True
@@ -4069,5 +4069,5 @@
     def allowForward(self):
         """Allow going to the next page."""
-        print "TakeoffPage.allowForward"
+        print("TakeoffPage.allowForward")
         self._forwardAllowed = True
         self._updateForwardButton()
@@ -4075,5 +4075,5 @@
     def reset(self):
         """Reset the page if the wizard is reset."""
-        print "TakeoffPage.reset"
+        print("TakeoffPage.reset")
 
         super(TakeoffPage, self).reset()
@@ -4095,5 +4095,5 @@
         pages."""
         if self._active:
-            print "TakeoffPage.changeMETAR"
+            print("TakeoffPage.changeMETAR")
             self._updatingMETAR = True
             self._metar.get_buffer().set_text(metar, -1)
@@ -4116,14 +4116,14 @@
                      self.derate is not None)
 
-        print "TakeoffPage._updateForwardButton: forwardAllowed:", self._forwardAllowed, ", sensitive:", sensitive
+        print("TakeoffPage._updateForwardButton: forwardAllowed:", self._forwardAllowed, ", sensitive:", sensitive)
         if self._forwardAllowed:
-            print "  METAR: ", self._metar.get_text()
-            print "  runway: ", self._runway.get_text()
-            print "  SID:", self.sid
-            print "  V1:", self.v1
-            print "  VR:", self.vr
-            print "  V2:", self.v2
-            print "  derateType:", self._derateType
-            print "  derate:", self.derate
+            print("  METAR: ", self._metar.get_text())
+            print("  runway: ", self._runway.get_text())
+            print("  SID:", self.sid)
+            print("  V1:", self.v1)
+            print("  VR:", self.vr)
+            print("  V2:", self.v2)
+            print("  derateType:", self._derateType)
+            print("  derate:", self.derate)
 
         self._button.set_sensitive(sensitive)
@@ -4131,5 +4131,5 @@
     def _valueChanged(self, widget, arg = None):
         """Called when the value of some widget has changed."""
-        print "TakeoffPage._valueChanged"
+        print("TakeoffPage._valueChanged")
 
         self._updateForwardButton()
@@ -4138,5 +4138,5 @@
         """Called when the value of some entry widget has changed and the value
         should be converted to uppercase."""
-        print "TakeoffPage._upperChanged"
+        print("TakeoffPage._upperChanged")
         entry.set_text(entry.get_text().upper())
         self._valueChanged(entry, arg)
@@ -4151,5 +4151,5 @@
     def _derateChanged(self, entry):
         """Called when the value of the derate is changed."""
-        print "TakeoffPage._derateChanged"
+        print("TakeoffPage._derateChanged")
         self._updateForwardButton()
 
@@ -4262,5 +4262,5 @@
     def _metarChanged(self, entry):
         """Called when the METAR has changed."""
-        print "TakeoffPage.metarChanged", self._updatingMETAR
+        print("TakeoffPage.metarChanged", self._updatingMETAR)
         if not self._updatingMETAR:
             self._updateForwardButton()
@@ -4271,5 +4271,5 @@
 
         It uppercases all characters."""
-        print "TakeoffPage.metarInserted", self._updatingMETAR
+        print("TakeoffPage.metarInserted", self._updatingMETAR)
         if not self._updatingMETAR:
             self._updatingMETAR = True
@@ -4628,5 +4628,5 @@
         pages."""
         if self._active:
-            print "LandingPage.changeMETAR"
+            print("LandingPage.changeMETAR")
             self._updatingMETAR = True
             self._metar.get_buffer().set_text(metar, -1)
@@ -4689,5 +4689,5 @@
     def _metarChanged(self, entry):
         """Called when the METAR has changed."""
-        print "LandingPage.metarChanged", self._updatingMETAR
+        print("LandingPage.metarChanged", self._updatingMETAR)
         if not self._updatingMETAR:
             self._updateForwardButton()
@@ -4698,5 +4698,5 @@
 
         It uppercases all characters."""
-        print "LandingPage.metarInserted", self._updatingMETAR
+        print("LandingPage.metarInserted", self._updatingMETAR)
         if not self._updatingMETAR:
             self._updatingMETAR = True
@@ -5217,7 +5217,8 @@
         pass
 
-    def _formatTime(self, scheduledTime, realTimestamp, (warning, error)):
+    def _formatTime(self, scheduledTime, realTimestamp, xxx_todo_changeme):
         """Format the departure or arrival time based on the given data as a
         markup for a label."""
+        (warning, error) = xxx_todo_changeme
         realTime = time.gmtime(realTimestamp)
 
@@ -5752,5 +5753,5 @@
         elif stage==const.STAGE_LANDING:
             if not self._arrivalBriefingPage.metarEdited:
-                print "Downloading arrival METAR again"
+                print("Downloading arrival METAR again")
                 self.gui.webHandler.getMETARs(self._arrivalMETARCallback,
                                               [self._bookedFlight.arrivalICAO])
Index: src/mlx/gui/flightlist.py
===================================================================
--- src/mlx/gui/flightlist.py	(revision 868)
+++ src/mlx/gui/flightlist.py	(revision 919)
@@ -61,5 +61,5 @@
 
         if self._extraColumnAttributes is not None:
-            for (key, value) in self._extraColumnAttributes.iteritems():
+            for (key, value) in self._extraColumnAttributes.items():
                 if key=="alignment":
                     self._renderer.set_alignment(value, 0.5)
@@ -401,5 +401,5 @@
         gui.endBusy()
 
-        print "PendingFlightsFrame._handleReflyResult", returned, result
+        print("PendingFlightsFrame._handleReflyResult", returned, result)
 
         if returned:
@@ -444,5 +444,5 @@
         gui.endBusy()
 
-        print "PendingFlightsFrame._handleDeleteResult", returned, result
+        print("PendingFlightsFrame._handleDeleteResult", returned, result)
 
         if returned:
Index: src/mlx/gui/gates.py
===================================================================
--- src/mlx/gui/gates.py	(revision 619)
+++ src/mlx/gui/gates.py	(revision 919)
@@ -143,5 +143,5 @@
         self._fleetStore.clear()
         if fleet is None:
-            for (gateNumber, label) in self._gateLabels.iteritems():
+            for (gateNumber, label) in self._gateLabels.items():
                 label.set_markup("<b>" + gateNumber + "</b>")
         else:        
Index: src/mlx/gui/gui.py
===================================================================
--- src/mlx/gui/gui.py	(revision 869)
+++ src/mlx/gui/gui.py	(revision 919)
@@ -1,8 +1,8 @@
 # -*- coding: utf-8 -*-
 
-from statusicon import StatusIcon
-from statusbar import Statusbar
-from info import FlightInfo
-from update import Updater
+from .statusicon import StatusIcon
+from .statusbar import Statusbar
+from .info import FlightInfo
+from .update import Updater
 from mlx.gui.common import *
 from mlx.gui.flight import Wizard
@@ -18,5 +18,5 @@
 from mlx.gui.acars import ACARS
 from mlx.gui.timetable import TimetableWindow
-import cef
+from . import cef
 
 import mlx.const as const
@@ -51,13 +51,13 @@
 class GUI(fs.ConnectionListener):
     """The main GUI class."""
-    _authors = [ (u"Váradi", u"István", "prog_test"),
-                 (u"Galyassy", u"Tamás", "negotiation"),
-                 (u"Kurják", u"Ákos", "test"),
-                 (u"Nagy", u"Dániel", "test"),
-                 (u"Radó", u"Iván", "test"),
-                 (u"Petrovszki", u"Gábor", "test"),
-                 (u"Serfőző", u"Tamás", "test"),
-                 (u"Szebenyi", u"Bálint", "test"),
-                 (u"Zsebényi-Loksa", u"Gergely", "test") ]
+    _authors = [ ("Váradi", "István", "prog_test"),
+                 ("Galyassy", "Tamás", "negotiation"),
+                 ("Kurják", "Ákos", "test"),
+                 ("Nagy", "Dániel", "test"),
+                 ("Radó", "Iván", "test"),
+                 ("Petrovszki", "Gábor", "test"),
+                 ("Serfőző", "Tamás", "test"),
+                 ("Szebenyi", "Bálint", "test"),
+                 ("Zsebényi-Loksa", "Gergely", "test") ]
 
     def __init__(self, programDirectory, config):
@@ -1462,5 +1462,5 @@
                 secondaryMarkup = xstr("sendPIREP_unknown_sec")
         else:
-            print "PIREP sending failed", result
+            print("PIREP sending failed", result)
             messageFormat = xstr("sendPIREP_failed")
             secondaryMarkup = xstr("sendPIREP_failed_sec")
@@ -1686,5 +1686,5 @@
                 secondaryMarkup = xstr("sendPIREP_unknown_sec")
         else:
-            print "PIREP sending failed", result
+            print("PIREP sending failed", result)
             messageFormat = xstr("sendPIREP_failed")
             secondaryMarkup = xstr("sendPIREP_failed_sec")
@@ -1711,5 +1711,5 @@
 
         for (timestampString, text) in self._logger.lines:
-            description += unicode(formatFlightLogLine(timestampString, text))
+            description += str(formatFlightLogLine(timestampString, text))
 
         description += "\n\n" + ("=" * 40)
@@ -1798,11 +1798,11 @@
             for index in hotkeys:
                 if index==self._pilotHotkeyIndex:
-                    print "gui.GUI._handleHotkeys: pilot hotkey pressed"
+                    print("gui.GUI._handleHotkeys: pilot hotkey pressed")
                     self._flight.pilotHotkeyPressed()
                 elif index==self._checklistHotkeyIndex:
-                    print "gui.GUI._handleHotkeys: checklist hotkey pressed"
+                    print("gui.GUI._handleHotkeys: checklist hotkey pressed")
                     self._flight.checklistHotkeyPressed()
                 else:
-                    print "gui.GUI._handleHotkeys: unhandled hotkey index:", index
+                    print("gui.GUI._handleHotkeys: unhandled hotkey index:", index)
 
     def _showManual(self, menuitem):
Index: src/mlx/gui/info.py
===================================================================
--- src/mlx/gui/info.py	(revision 846)
+++ src/mlx/gui/info.py	(revision 919)
@@ -1,4 +1,4 @@
 
-from common import *
+from .common import *
 
 from mlx.gui.delaycodes import DelayCodeTable
Index: src/mlx/gui/pirep.py
===================================================================
--- src/mlx/gui/pirep.py	(revision 855)
+++ src/mlx/gui/pirep.py	(revision 919)
@@ -1,7 +1,7 @@
 
-from common import *
-from dcdata import getTable
-from info import FlightInfo
-from flight import comboModel
+from .common import *
+from .dcdata import getTable
+from .info import FlightInfo
+from .flight import comboModel
 
 from mlx.pirep import PIREP
Index: src/mlx/gui/prefs.py
===================================================================
--- src/mlx/gui/prefs.py	(revision 738)
+++ src/mlx/gui/prefs.py	(revision 919)
@@ -1,4 +1,4 @@
 
-from common import *
+from .common import *
 
 from mlx.i18n import xstr
@@ -6,5 +6,5 @@
 import mlx.config as config
 
-import urlparse
+import urllib.parse
 
 #------------------------------------------------------------------------------
@@ -63,5 +63,5 @@
 
         self._hotkeyModel = gtk.ListStore(str)
-        for keyCode in range(ord("0"), ord("9")+1) + range(ord("A"), ord("Z")+1):
+        for keyCode in list(range(ord("0"), ord("9")+1)) + list(range(ord("A"), ord("Z")+1)):
             self._hotkeyModel.append([chr(keyCode)])
 
@@ -829,5 +829,5 @@
         sensitive = False
         try:
-            result = urlparse.urlparse(self._updateURL.get_text())
+            result = urllib.parse.urlparse(self._updateURL.get_text())
             sensitive = result.scheme!="" and (result.netloc + result.path)!=""
         except:
Index: src/mlx/gui/statusbar.py
===================================================================
--- src/mlx/gui/statusbar.py	(revision 679)
+++ src/mlx/gui/statusbar.py	(revision 919)
@@ -1,4 +1,4 @@
 
-from common import *
+from .common import *
 
 import mlx.const as const
Index: src/mlx/gui/statusicon.py
===================================================================
--- src/mlx/gui/statusicon.py	(revision 544)
+++ src/mlx/gui/statusicon.py	(revision 919)
@@ -1,4 +1,4 @@
 
-from common import *
+from .common import *
 
 import mlx.const as const
@@ -154,5 +154,5 @@
     def _updateFlightStatus(self):
         """Update the flight status."""
-        stage = u"-" if self._stage is None \
+        stage = "-" if self._stage is None \
                 else xstr("flight_stage_" + const.stage2string(self._stage))
 
@@ -172,5 +172,5 @@
             if self._noGoReason is not None:
                 rating = '<span foreground="red">' + rating + '</span>'
-            markup = u"MAVA Logger X %s\n\n%s: %s\n%s: %s" %\
+            markup = "MAVA Logger X %s\n\n%s: %s\n%s: %s" %\
                      (const.VERSION, xstr("statusicon_stage"), stage,
                       xstr("statusicon_rating"), rating)
Index: src/mlx/gui/timetable.py
===================================================================
--- src/mlx/gui/timetable.py	(revision 879)
+++ src/mlx/gui/timetable.py	(revision 919)
@@ -4,5 +4,5 @@
 
 from mlx.gui.common import *
-from flightlist import ColumnDescriptor
+from .flightlist import ColumnDescriptor
 from mlx.rpc import ScheduledFlight
 
@@ -249,6 +249,6 @@
                     self._tooltips.set_tip(widget, "")
                     self._tooltips.disable()
-        except Exception, e:
-            print e
+        except Exception as e:
+            print(e)
             self._tooltips.set_tip(widget, "")
             self._tooltips.disable()
@@ -656,5 +656,5 @@
             typeFamilies.add(const.aircraftType2Family(aircraftType))
 
-        for (typeFamily, checkButton) in self._typeFamilyButtons.iteritems():
+        for (typeFamily, checkButton) in self._typeFamilyButtons.items():
             checkButton.set_sensitive(typeFamily in typeFamilies)
 
@@ -712,5 +712,5 @@
         """Update the timetable list."""
         aircraftTypes = []
-        for (aircraftFamily, button) in self._typeFamilyButtons.iteritems():
+        for (aircraftFamily, button) in self._typeFamilyButtons.items():
             if button.get_active():
                 aircraftTypes += const.aircraftFamily2Types[aircraftFamily]
