Index: src/mlx/config.py
===================================================================
--- src/mlx/config.py	(revision 392)
+++ src/mlx/config.py	(revision 401)
@@ -2,5 +2,5 @@
 
 import const
-from util import secondaryInstallation
+from util import secondaryInstallation, utf2unicode
 
 import os
@@ -788,5 +788,6 @@
             self._modified = False
         except Exception, e:
-            print >> sys.stderr, "Failed to update config: " + str(e)
+            print >> sys.stderr, "Failed to update config: " + \
+                                 utf2unicode(str(e))
 
     def _getBoolean(self, config, section, option, default):
Index: src/mlx/fsuipc.py
===================================================================
--- src/mlx/fsuipc.py	(revision 394)
+++ src/mlx/fsuipc.py	(revision 401)
@@ -104,5 +104,5 @@
             return fun()
         except Exception, e:
-            print >> sys.stderr, str(e)
+            print >> sys.stderr, util.utf2unicode(str(e))
             return None
 
@@ -386,5 +386,6 @@
                 return attempts
             except Exception, e:
-                print "fsuipc.Handler._connect: connection failed: " + str(e) + \
+                print "fsuipc.Handler._connect: connection failed: " + \
+                      util.utf2unicode(str(e)) + \
                       " (attempts: %d)" % (attempts,)
                 if attempts<self.NUM_CONNECTATTEMPTS:
@@ -446,5 +447,6 @@
             except Exception as e:
                 print "fsuipc.Handler._processRequest: FSUIPC connection failed (" + \
-                      str(e) + "), reconnecting (attempts=%d)." % (attempts,)
+                      util.utf2unicode(str(e)) + \
+                      "), reconnecting (attempts=%d)." % (attempts,)
                 needReconnect = True
 
@@ -895,4 +897,7 @@
 
         Return if a new model was created."""
+        name = self._latin1decoder(name)[0]
+        airPath = self._latin1decoder(airPath)[0]
+
         aircraftName = (name, airPath)
         if aircraftName==self._aircraftName:
@@ -912,9 +917,8 @@
 
         if needNew:
-            self._setAircraftModel(AircraftModel.create(self._aircraft, aircraftName))
-
-
-        self._aircraft.modelChanged(timestamp, self._latin1decoder(name)[0],
-                                    self._aircraftModel.name)
+            self._setAircraftModel(AircraftModel.create(self._aircraft,
+                                                        aircraftName))
+
+        self._aircraft.modelChanged(timestamp, name, self._aircraftModel.name)
 
         return needNew
Index: src/mlx/gui/common.py
===================================================================
--- src/mlx/gui/common.py	(revision 373)
+++ src/mlx/gui/common.py	(revision 401)
@@ -96,4 +96,5 @@
         """Convert the given text, returned by xstr to a string."""
         return str(text)
+
 else:
     print "Using PyGObject"
@@ -106,5 +107,5 @@
     from gi.repository import Pango as pango
     appIndicator = True
-    
+
     MESSAGETYPE_ERROR = gtk.MessageType.ERROR
     MESSAGETYPE_QUESTION = gtk.MessageType.QUESTION
@@ -156,5 +157,5 @@
     import codecs
     _utf8Decoder = codecs.getdecoder("utf-8")
-    
+
     def text2unicode(str):
         """Convert the given text, returned by a Gtk widget, to Unicode."""
@@ -182,5 +183,5 @@
         self._noGoReason = None
         self._updateFlightStatus()
-        
+
     def setStage(self, stage):
         """Set the stage of the flight."""
@@ -233,5 +234,5 @@
             self.emit("integer-changed", self._currentInteger)
         self._set_text()
-    
+
     def _handle_changed(self, widget):
         """Handle the changed signal."""
@@ -253,5 +254,5 @@
                       else str(self._currentInteger))
         self._selfSetting = False
-                
+
 #------------------------------------------------------------------------------
 
Index: src/mlx/gui/flight.py
===================================================================
--- src/mlx/gui/flight.py	(revision 393)
+++ src/mlx/gui/flight.py	(revision 401)
@@ -512,5 +512,5 @@
                     flight.writeIntoFile(f)
             except Exception, e:
-                print "Failed to save flight:", str(e)
+                print "Failed to save flight:", util.utf2unicode(str(e))
                 dialog = gtk.MessageDialog(parent = self._wizard.gui.mainWindow,
                                            type = MESSAGETYPE_ERROR,
@@ -555,5 +555,5 @@
                 self._addFlight(bookedFlight)
             except Exception, e:
-                print "Failed to load flight:", str(e)
+                print "Failed to load flight:", util.utf2unicode(str(e))
                 dialog = gtk.MessageDialog(parent = self._wizard.gui.mainWindow,
                                            type = MESSAGETYPE_ERROR,
Index: src/mlx/pirep.py
===================================================================
--- src/mlx/pirep.py	(revision 393)
+++ src/mlx/pirep.py	(revision 401)
@@ -1,2 +1,4 @@
+
+from util import utf2unicode
 
 import const
@@ -52,5 +54,6 @@
                 return pirep
         except Exception, e:
-            print "Failed loading PIREP from %s: %s" % (path, str(e))
+            print "Failed loading PIREP from %s: %s" % (path,
+                                                        utf2unicode(str(e)))
             return None
 
@@ -157,5 +160,5 @@
             return None
         except Exception, e:
-            error = str(e)
-            #print u"Failed saving PIREP to %s: %s" % (path, error)
+            error = utf2unicode(str(e))
+            print u"Failed saving PIREP to %s: %s" % (path, error)
             return error
Index: src/mlx/singleton.py
===================================================================
--- src/mlx/singleton.py	(revision 298)
+++ src/mlx/singleton.py	(revision 401)
@@ -1,2 +1,4 @@
+
+from util import utf2unicode
 
 import os
@@ -72,10 +74,12 @@
                                 print "singleton._PipeServer.run: failed to read from the pipe"
                     except Exception, e:
-                        print "singleton._PipeServer.run: exception:", str(e)
+                        print "singleton._PipeServer.run: exception:",
+                        print utf2unicode(str(e))
                     finally:
                         win32pipe.DisconnectNamedPipe(handle)
                         win32file.CloseHandle(handle)
             except Exception, e:
-                print "singleton._PipeServer.run: fatal exception:", str(e)
+                print "singleton._PipeServer.run: fatal exception:",
+                print utf2unicode(str(e))
                             
         def _createPipe(self):
@@ -141,5 +145,6 @@
                     return
                 except Exception, e:
-                    print "SingleInstance._notifySingleton: failed:", str(e)
+                    print "SingleInstance._notifySingleton: failed:",
+                    print utf2unicode(str(e))
                     time.sleep(0.5)
         
@@ -190,5 +195,6 @@
                     self._raiseCallback()
             except Exception, e:
-                print "singleton._SocketServer.run: fatal exception:", str(e)            
+                print "singleton._SocketServer.run: fatal exception:",
+                print utf2unicode(str(e))
     
     class SingleInstance(object):
@@ -254,5 +260,6 @@
                     return
                 except Exception, e:
-                    print "singleton.SingleInstance._notifySingleton: failed:", str(e)
+                    print "singleton.SingleInstance._notifySingleton: failed:",
+                    print utf2unicode(str(e))
                     time.sleep(0.5)
 
Index: src/mlx/sound.py
===================================================================
--- src/mlx/sound.py	(revision 299)
+++ src/mlx/sound.py	(revision 401)
@@ -1,2 +1,4 @@
+
+from util import utf2unicode
 
 import os
@@ -115,5 +117,6 @@
                         print "Closed", alias
                     except Exception, e:
-                        print "Failed closing " + alias + ":", str(e)
+                        print "Failed closing " + alias + ":",
+                        print utf2unicode(str(e))
                         success = False
 
@@ -143,5 +146,6 @@
                         print "Started to play", path
                     except Exception, e:
-                        print "Failed to start playing " + path + ":", str(e)                        
+                        print "Failed to start playing " + path + ":",
+                        print utf2unicode(str(e))
                         (finishCallback, extra) = finishData
                         if finishCallback is not None:
Index: src/mlx/update.py
===================================================================
--- src/mlx/update.py	(revision 298)
+++ src/mlx/update.py	(revision 401)
@@ -1,4 +1,5 @@
 
 from config import Config
+from util import utf2unicode
 
 import os
@@ -206,5 +207,5 @@
             manifest.readFrom(f)
     except Exception, e:
-        print "Error reading the manifest, ignoring:", str(e)
+        print "Error reading the manifest, ignoring:", utf2unicode(str(e))
         manifest = Manifest()
 
@@ -228,6 +229,7 @@
 
     except Exception, e:
-        print >> sys.stderr, "Error downloading manifest:", str(e)
-        listener.failed(str(e))
+        error = utf2unicode(str(e))
+        print >> sys.stderr, "Error downloading manifest:", error
+        listener.failed(error)
         return None
     finally:
@@ -291,5 +293,5 @@
             os.rename(path, os.path.join(toremoveDir, sum.hexdigest()))
         except Exception, e:
-            print "Cannot remove file " + path + ": " + str(e)    
+            print "Cannot remove file " + path + ": " + utf2unicode(str(e))
 
 #------------------------------------------------------------------------------
@@ -370,6 +372,7 @@
         listener.done()
     except Exception, e:
-        print >> sys.stderr, "Error:", str(e)
-        listener.failed(str(e))        
+        error = utf2unicode(str(e))
+        print >> sys.stderr, "Error:", error
+        listener.failed(error)
 
 #------------------------------------------------------------------------------
@@ -432,5 +435,5 @@
         except Exception, e:
             print >> sys.stderr, "Failed to parse line '%s': %s" % \
-                  (line, str(e))                
+                  (line, utf2unicode(str(e)))
 
     return buffer
@@ -488,6 +491,7 @@
         
     except Exception, e:
-        print >> sys.stderr, "Failed updating:", str(e)
-        listener.failed(str(e))
+        error = utf2unicode(str(e))
+        print >> sys.stderr, "Failed updating:", error
+        listener.failed(error)
     finally:
         if serverSocket is not None:
Index: src/mlx/util.py
===================================================================
--- src/mlx/util.py	(revision 373)
+++ src/mlx/util.py	(revision 401)
@@ -3,4 +3,5 @@
 import time
 import sys
+import codecs
 
 #------------------------------------------------------------------------------
@@ -165,2 +166,10 @@
 
 secondaryInstallation="secondary" in sys.argv
+
+#------------------------------------------------------------------------------
+
+_utf8decoder = codecs.getdecoder("utf-8")
+
+def utf2unicode(text):
+    """Convert the given text from UTF-8 encoding to unicode."""
+    return unicode(_utf8decoder(text)[0])
Index: src/mlx/web.py
===================================================================
--- src/mlx/web.py	(revision 326)
+++ src/mlx/web.py	(revision 401)
@@ -465,5 +465,5 @@
             self._callback(returned, result)
         except Exception, e:
-            print >> sys.stderr, "web.Handler.Request.perform: callback throwed an exception: " + str(e)
+            print >> sys.stderr, "web.Handler.Request.perform: callback throwed an exception: " + util.utf2unicode(str(e))
             traceback.print_exc()
 
