diff --git a/include/class_standAlonePage.inc b/include/class_standAlonePage.inc
index aea81fef693366dd427c001f48b7c5161c7f0546..1ee6558bb2e5bec9736e9b8adf3f56f6d80608cc 100644
--- a/include/class_standAlonePage.inc
+++ b/include/class_standAlonePage.inc
@@ -21,6 +21,7 @@
 
 /* base class for passwordRecovery and such classes handling requests on their own */
 class standAlonePage {
+  protected $directories;
   protected $directory;
   protected $activated;
   protected $interactive;
@@ -38,45 +39,43 @@ class standAlonePage {
     session::start();
 
     $config = $this->loadConfig();
+    session::global_set('config', $config);
 
     /* Generate server list */
-    $servers = array();
+    $this->directories = array();
     foreach ($config->data['LOCATIONS'] as $key => $ignored) {
-      $servers[$key] = $key;
+      $this->directories[$key] = $key;
     }
 
-    if (isset($_POST['server']) && isset($servers[$_POST['server']])) {
+    $ui = new userinfoNoAuth(get_class($this));
+    session::global_set('ui', $ui);
+
+    static::init();
+  }
+
+  function checkDirectoryChooser()
+  {
+    global $config;
+
+    $olddirectory = $this->directory;
+
+    if (isset($_POST['server']) && isset($this->directories[$_POST['server']])) {
       $this->directory = validate($_POST['server']);
-    } elseif (isset($_GET['directory']) && isset($servers[$_GET['directory']])) {
+    } elseif (isset($_GET['directory']) && isset($this->directories[$_GET['directory']])) {
       $this->directory = validate($_GET['directory']);
-    } else {
+    } elseif (empty($this->directory)) {
       $this->directory = $config->data['MAIN']['DEFAULT'];
 
-      if (!isset($servers[$this->directory])) {
-        $this->directory = key($servers);
+      if (!isset($this->directories[$this->directory])) {
+        $this->directory = key($this->directories);
       }
     }
 
-    /* Set config to selected one */
-    $config->set_current($this->directory);
-    session::global_set('config', $config);
+    if ($this->directory != $olddirectory) {
+      /* Set config to selected one */
+      $config->set_current($this->directory);
 
-    $this->activated = $this->readLdapConfig();
-
-    $ui = new userinfoNoAuth(get_class($this));
-    session::global_set('ui', $ui);
-
-    static::init();
-
-    if ($this->interactive) {
-      $smarty = get_smarty();
-      if (count($servers) > 1) {
-        $smarty->assign('show_directory_chooser', TRUE);
-        $smarty->assign('server_options',         $servers);
-        $smarty->assign('server_id',              $this->directory);
-      } else {
-        $smarty->assign('show_directory_chooser', FALSE);
-      }
+      $this->activated = $this->readLdapConfig();
     }
   }
 
@@ -84,6 +83,8 @@ class standAlonePage {
   {
     global $config, $ssl, $ui;
 
+    static::checkDirectoryChooser();
+
     reset_errors();
 
     static::securityHeaders();
@@ -159,6 +160,14 @@ class standAlonePage {
     $smarty->assign('must',         '<span class="must">*</span>');
     $smarty->assign('usePrototype', 'FALSE');
     $smarty->assign('CSRFtoken',    CSRFProtection::getToken());
+
+    if (count($this->directories) > 1) {
+      $smarty->assign('show_directory_chooser', TRUE);
+      $smarty->assign('server_options',         $this->directories);
+      $smarty->assign('server_id',              $this->directory);
+    } else {
+      $smarty->assign('show_directory_chooser', FALSE);
+    }
   }
 
   function assignSmartyVars()
@@ -222,7 +231,7 @@ class standAlonePage {
 
     $pageURL = $protocol.'://';
     $pageURL .= $host;
-    if ($port != '80') {
+    if ((($protocol == 'http') && ($port != '80')) || (($protocol == 'https') && ($port != '443'))) {
       $pageURL .= ':'.$port;
     }
     if (empty($_SERVER['PATH_INFO'])) {