diff --git a/library/Unl/Cas.php b/library/Unl/Cas.php
index 4a2499bf2e7bb887979b1d0ca9ba7ce1dc958798..71354c0a478bd8884a8345703f02cee053df6808 100644
--- a/library/Unl/Cas.php
+++ b/library/Unl/Cas.php
@@ -41,8 +41,9 @@ class Unl_Cas
     const PARAM_RENEW   = 3;
     
     /**
-     * Session storage use to prevent infinate redirect loops when in gateway mode.
-     * @var Zend_Session_Namespace
+     * Session storage use to prevent infinite redirect loops when in gateway mode.
+     * Do not use this directly, use $this->_session()
+     * @var Zend_Session_Namespace|array
      */
     private $_session;
     
@@ -75,13 +76,10 @@ class Unl_Cas
             $this->_session = new Zend_Session_Namespace(__CLASS__);
         } catch (Zend_Session_Exception $e) {
         	//Problem starting Zend_Session (probably because it was already started, use standard PHP sessions.
-        	if (!array_key_exists(__CLASS__, $_SESSION) || !$_SESSION[__CLASS__] instanceof ArrayObject) {
-                $_SESSION[__CLASS__] = new ArrayObject();
+            if (!array_key_exists(__CLASS__, $_SESSION) || !is_array($_SESSION[__CLASS__])) {
+                $_SESSION[__CLASS__] = array();
         	}
-        	$this->_session = $_SESSION[__CLASS__];
-        }
-        if (!isset($this->_session->ticket)) {
-            $this->_session->ticket = NULL;
+            $this->_session = NULL;
         }
     }
     
@@ -160,7 +158,7 @@ class Unl_Cas
      */
     public function getUsername()
     {
-        return $this->_session->username;
+        return $this->_session('username');
     }
     
     /**
@@ -290,7 +288,7 @@ class Unl_Cas
         $response = $client->request();
         if ($response->isSuccessful() && $this->_parseResponse($response->getBody())) {
             $this->_addValidTicket($ticket);
-            $this->_session->ticket = $ticket;
+            $this->_session('ticket', $ticket);
             return true;
         }
         return false;
@@ -308,7 +306,7 @@ class Unl_Cas
         if ($xml->loadXML($response)) {
             if ($success = $xml->getElementsByTagName('authenticationSuccess')) {
                 if ($success->length > 0 && $uid = $success->item(0)->getElementsByTagName('user')) {
-                    $this->_session->username = $uid->item(0)->nodeValue;
+                    $this->_session('username', $uid->item(0)->nodeValue);
                     return true;
                 }
             }
@@ -362,7 +360,7 @@ class Unl_Cas
     
     public function isTicketExpired()
     {
-        return !$this->_isStillValidTicket($this->_session->ticket);
+        return !$this->_isStillValidTicket($this->_session('ticket'));
     }
     
     public function handleLogoutRequest($saml)
@@ -382,9 +380,30 @@ class Unl_Cas
     
     public function destroySession()
     {
-        $this->_removeValidTicket($this->_session->ticket);
-        $this->_session->ticket = NULL;
-        $this->_session->username = NULL;
+        $this->_removeValidTicket($this->_session('ticket'));
+        $this->_session('ticket', NULL);
+        $this->_session('username', NULL);
+    }
+
+    // Wrapper to use either Zend sessions or native PHP sessions
+    protected function _session($key, $val = NULL)
+    {
+        if ($this->_session instanceof Zend_Session_Namespace) {
+            if (func_num_args() == 2) {
+                $this->_session->$key = $val;
+            } else {
+                return $this->_session->$key;
+            }
+        } else {
+            if (func_num_args() == 2) {
+                $_SESSION[__CLASS__][$key] = $val;
+            } else {
+                if (!isset($_SESSION[__CLASS__][$key])) {
+                    return NULL;
+                }
+                return $_SESSION[__CLASS__][$key];
+            }
+        }
     }
 }