Index: src/mlx/gui/acars.py
===================================================================
--- src/mlx/gui/acars.py	(revision 649)
+++ src/mlx/gui/acars.py	(revision 747)
@@ -13,5 +13,5 @@
 # The ACARS tab.
 #
-# This module implements to \ref ACRS class, which displays the MAVA ACARS in a
+# This module implements to \ref ACARS class, which displays the MAVA ACARS in a
 # browser window using CEF
 
@@ -21,5 +21,5 @@
     """The flight info tab."""
     # The URL of the ACARS map
-    URL = "http://virtualairlines.hu/acars2/show.html"
+    URL = MAVA_BASE_URL + "/acars2/show.html"
 
     def __init__(self, gui):
Index: src/mlx/gui/common.py
===================================================================
--- src/mlx/gui/common.py	(revision 732)
+++ src/mlx/gui/common.py	(revision 741)
@@ -279,4 +279,119 @@
                       else str(self._currentInteger))
         self._selfSetting = False
+
+#------------------------------------------------------------------------------
+
+class CredentialsDialog(gtk.Dialog):
+    """A dialog window to ask for a user name and a password."""
+    def __init__(self, gui, userName, password,
+                 titleLabel, cancelButtonLabel, okButtonLabel,
+                 userNameLabel, userNameTooltip,
+                 passwordLabel, passwordTooltip,
+                 infoText = None,
+                 rememberPassword = None,
+                 rememberLabel = None, rememberTooltip = None):
+        """Construct the dialog."""
+        super(CredentialsDialog, self).__init__(WINDOW_TITLE_BASE + " - " +
+                                                titleLabel,
+                                                gui.mainWindow,
+                                                DIALOG_MODAL)
+        self.add_button(cancelButtonLabel, RESPONSETYPE_CANCEL)
+        self.add_button(okButtonLabel, RESPONSETYPE_OK)
+
+        contentArea = self.get_content_area()
+
+        contentAlignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
+                                         xscale = 0.0, yscale = 0.0)
+        contentAlignment.set_padding(padding_top = 4, padding_bottom = 16,
+                                     padding_left = 8, padding_right = 8)
+
+        contentArea.pack_start(contentAlignment, False, False, 0)
+
+        contentVBox = gtk.VBox()
+        contentAlignment.add(contentVBox)
+
+        if infoText is not None:
+            label = gtk.Label(infoText)
+            label.set_alignment(0.0, 0.0)
+
+            contentVBox.pack_start(label, False, False, 0)
+
+        tableAlignment = gtk.Alignment(xalign = 0.5, yalign = 0.5,
+                                       xscale = 0.0, yscale = 0.0)
+        tableAlignment.set_padding(padding_top = 24, padding_bottom = 0,
+                                   padding_left = 0, padding_right = 0)
+
+        table = gtk.Table(3, 2)
+        table.set_row_spacings(4)
+        table.set_col_spacings(16)
+        table.set_homogeneous(False)
+
+        tableAlignment.add(table)
+        contentVBox.pack_start(tableAlignment, True, True, 0)
+
+        label = gtk.Label(userNameLabel)
+        label.set_use_underline(True)
+        label.set_alignment(0.0, 0.5)
+        table.attach(label, 0, 1, 0, 1)
+
+        self._userName = gtk.Entry()
+        self._userName.set_width_chars(16)
+        # FIXME: enabled the OK button only when there is something in thr
+        # user name and password fields
+        #self._userName.connect("changed",
+        #                       lambda button: self._updateForwardButton())
+        self._userName.set_tooltip_text(userNameTooltip)
+        self._userName.set_text(userName)
+        table.attach(self._userName, 1, 2, 0, 1)
+        label.set_mnemonic_widget(self._userName)
+
+        label = gtk.Label(passwordLabel)
+        label.set_use_underline(True)
+        label.set_alignment(0.0, 0.5)
+        table.attach(label, 0, 1, 1, 2)
+
+        self._password = gtk.Entry()
+        self._password.set_visibility(False)
+        #self._password.connect("changed",
+        #                       lambda button: self._updateForwardButton())
+        self._password.set_tooltip_text(passwordTooltip)
+        self._password.set_text(password)
+        table.attach(self._password, 1, 2, 1, 2)
+        label.set_mnemonic_widget(self._password)
+
+        if rememberPassword is not None:
+            self._rememberButton = gtk.CheckButton(rememberLabel)
+            self._rememberButton.set_use_underline(True)
+            self._rememberButton.set_tooltip_text(rememberTooltip)
+            self._rememberButton.set_active(rememberPassword)
+            table.attach(self._rememberButton, 1, 2, 2, 3, ypadding = 8)
+        else:
+            self._rememberButton = None
+
+    @property
+    def userName(self):
+        """Get the user name entered."""
+        return self._userName.get_text()
+
+    @property
+    def password(self):
+        """Get the password entered."""
+        return self._password.get_text()
+
+    @property
+    def rememberPassword(self):
+        """Get whether the password is to be remembered."""
+        return None if self._rememberButton is None \
+               else self._rememberButton.get_active()
+
+    def run(self):
+        """Run the dialog."""
+        self.show_all()
+
+        response = super(CredentialsDialog, self).run()
+
+        self.hide()
+
+        return response
 
 #------------------------------------------------------------------------------
Index: src/mlx/gui/flight.py
===================================================================
--- src/mlx/gui/flight.py	(revision 728)
+++ src/mlx/gui/flight.py	(revision 739)
@@ -4682,5 +4682,4 @@
         """Handle the login result."""
         self.gui.endBusy()
-        returned = True
         isReload = self._loginResult is not None
         if returned:
Index: src/mlx/gui/gui.py
===================================================================
--- src/mlx/gui/gui.py	(revision 733)
+++ src/mlx/gui/gui.py	(revision 746)
@@ -90,5 +90,10 @@
         self._sendBugReportCallback = None
 
-        self.webHandler = web.Handler()
+        self._credentialsCondition = threading.Condition()
+        self._credentialsAvailable = False
+        self._credentialsUserName = None
+        self._credentialsPassword = None
+
+        self.webHandler = web.Handler(config, self._getCredentialsCallback)
         self.webHandler.start()
 
@@ -1635,2 +1640,56 @@
         """Set the anti-ice on indicator."""
         self._wizard.landingAntiIceOn = value
+
+    def _getCredentialsCallback(self):
+        """Called when the web handler asks for the credentials."""
+        # FIXME: this is almost the same as
+        # SimBriefSetupPage._getCredentialsCallback
+        with self._credentialsCondition:
+            self._credentialsAvailable = False
+
+            gobject.idle_add(self._getCredentials)
+
+            while not self._credentialsAvailable:
+                self._credentialsCondition.wait()
+
+            return (self._credentialsUserName, self._credentialsPassword)
+
+    def _getCredentials(self):
+        """Get the credentials."""
+        # FIXME: this is almost the same as
+        # SimBriefSetupPage._getCredentials
+        with self._credentialsCondition:
+            config = self.config
+
+            dialog = CredentialsDialog(self, config.pilotID, config.password,
+                                       xstr("login_title"),
+                                       xstr("button_cancel"),
+                                       xstr("button_ok"),
+                                       xstr("label_pilotID"),
+                                       xstr("login_pilotID_tooltip"),
+                                       xstr("label_password"),
+                                       xstr("login_password_tooltip"),
+                                       xstr("login_info"),
+                                       config.rememberPassword,
+                                       xstr("remember_password"),
+                                       xstr("login_remember_tooltip"))
+            response = dialog.run()
+
+            if response==RESPONSETYPE_OK:
+                self._credentialsUserName = dialog.userName
+                self._credentialsPassword = dialog.password
+                rememberPassword = dialog.rememberPassword
+
+                config.pilotID = self._credentialsUserName
+
+                config.password = \
+                  self._credentialsPassword if rememberPassword else ""
+                config.rememberPassword = rememberPassword
+
+                config.save()
+            else:
+                self._credentialsUserName = None
+                self._credentialsPassword = None
+
+            self._credentialsAvailable = True
+            self._credentialsCondition.notify()
Index: src/mlx/gui/monitor.py
===================================================================
--- src/mlx/gui/monitor.py	(revision 765)
+++ src/mlx/gui/monitor.py	(revision 680)
@@ -378,8 +378,5 @@
                 for n1 in aircraftState.n1:
                     if n1Str: n1Str += ", "
-                    if n1 is None:
-                        n1Str += "?"
-                    else:
-                        n1Str += "%.0f" % (n1,)
+                    n1Str += "%.0f" % (n1,)
             elif aircraftState.rpm is not None:
                 n1Str = ""
Index: src/mlx/gui/prefs.py
===================================================================
--- src/mlx/gui/prefs.py	(revision 684)
+++ src/mlx/gui/prefs.py	(revision 738)
@@ -276,4 +276,6 @@
 
         self._updateURL.set_text(config.updateURL)
+
+        self._useRPC.set_active(config.useRPC)
 
         self._settingFromConfig = False
@@ -320,4 +322,5 @@
         config.autoUpdate = self._autoUpdate.get_active()
         config.updateURL = self._updateURL.get_text()
+        config.useRPC = self._useRPC.get_active()
 
     def _buildGeneral(self):
@@ -814,4 +817,10 @@
         updateURLBox.pack_start(self._updateURL, True, True, 4)
 
+        self._useRPC = gtk.CheckButton(xstr("prefs_use_rpc"))
+        mainBox.pack_start(self._useRPC, False, False, 16)
+
+        self._useRPC.set_use_underline(True)
+        self._useRPC.set_tooltip_text(xstr("prefs_use_rpc_tooltip"))
+
         return mainAlignment
 
