diff --git a/include/class_standAlonePage.inc b/include/class_standAlonePage.inc
index be278aca593c8ab1e7b618a2b6a1da13ac4cb879..cc4b012e1b456c7b5d73e241deb3c678fe88984a 100644
--- a/include/class_standAlonePage.inc
+++ b/include/class_standAlonePage.inc
@@ -94,16 +94,47 @@ class standAlonePage {
     if ($this->interactive) {
       Language::init();
 
+      $ui = new userinfoNoAuth(get_class($this));
+      session::global_set('ui', $ui);
+
       if (session::global_is_set('plist')) {
         session::global_un_set('plist');
       }
-      $ui = new userinfoNoAuth(get_class($this));
       pluglist::load();
 
       $ssl = $this->checkForSSL();
     }
   }
 
+  function init()
+  {
+    global $config, $ssl, $ui;
+
+    reset_errors();
+
+    static::securityHeaders();
+
+    CSRFProtection::check();
+
+    $ui     = session::global_get('ui');
+    $config = session::global_get('config');
+
+    /* If SSL is forced, just forward to the SSL enabled site */
+    if (($config->get_cfg_value('forcessl') == 'TRUE') && ($ssl != '')) {
+      header ("Location: $ssl");
+      exit;
+    }
+
+    timezone::setDefaultTimezoneFromConfig();
+
+    Language::init();
+
+    $this->setupSmarty();
+
+    /* Prepare plugin list */
+    pluglist::load();
+  }
+
   function loadConfig()
   {
     global $BASE_DIR;
@@ -155,6 +186,7 @@ class standAlonePage {
     $smarty->assign('rtl',          Language::isRTL($lang));
     $smarty->assign('must',         '<span class="must">*</span>');
     $smarty->assign('usePrototype', 'FALSE');
+    $smarty->assign('CSRFtoken',    CSRFProtection::getToken());
   }
 
   function assignSmartyVars()
@@ -239,6 +271,22 @@ class standAlonePage {
     return preg_replace('/^&amp;/', '?', $params);
   }
 
+  static function run()
+  {
+    session::start();
+
+    $class = get_called_class();
+    if (session::is_set('standAlonePage_'.$class)) {
+      $page = session::get('standAlonePage_'.$class);
+      $page->init();
+    } else {
+      $page = new $class();
+    }
+    session::set('standAlonePage_'.$class, $page);
+
+    $page->execute();
+  }
+
   static function securityHeaders()
   {
     header('X-XSS-Protection: 1; mode=block');