diff --git a/application/modules/courses/controllers/EditController.php b/application/modules/courses/controllers/EditController.php
index ae6ab5dddd90ec66a0f48c318f7bd34bdcd90229..9b38c25bb7b09445354912679035fb88aae40eda 100644
--- a/application/modules/courses/controllers/EditController.php
+++ b/application/modules/courses/controllers/EditController.php
@@ -143,9 +143,11 @@ class Courses_EditController extends App_Controller_Action
     	$session = new Zend_Session_Namespace('Edit Request');
     	if ($in['sessionId'] !== null) {
     		$id = $in['sessionId'];
-            $request = $session->savedRequests[$id]['request'];
-            $course = $session->savedRequests[$id]['course'];
-            $parentCourse = $session->savedRequests[$id]['parentCourse'];
+            $user = Auth_UserModel::findCurrentUser();
+    		$savedRequests = RegistryModel::findByNamespaceAndKey($user->getId(), 'savedRequests')->getData();
+            $request = $savedRequests[$id]['request'];
+            $course = $savedRequests[$id]['course'];
+            $parentCourse = $savedRequests[$id]['parentCourse'];
             $session->currentSavedRequestId = $id;
     	} else {
     		$id = $in['id'];
@@ -202,7 +204,10 @@ class Courses_EditController extends App_Controller_Action
     protected function _saveForLater()
     {
     	$session = new Zend_Session_Namespace('Edit Request');
-    	$savedRequests = $session->savedRequests;
+    	$user = Auth_UserModel::findCurrentUser();
+    	$savedRequestRegistry = RegistryModel::findByNamespaceAndKey($user->getId(), 'savedRequests');
+    	$savedRequests = $savedRequestRegistry->getData();
+    	
     	if (!Unl_Util::isArray($savedRequests)) {
     		$savedRequests = array();
     	}
@@ -219,12 +224,30 @@ class Courses_EditController extends App_Controller_Action
     		$savedRequests[] = $newSavedRequest;
     	}
 
-    	$session->savedRequests = $savedRequests;
+    	$savedRequestRegistry->setData($savedRequests);
+    	$collection = new Unl_Model_Collection('RegistryModel');
+    	$collection[] = $savedRequestRegistry;
+    	RegistryModel::save($collection);
     }
 
     protected function _saveRequest()
-    {
+    { 
     	$session = new Zend_Session_Namespace('Edit Request');
+    
+        if ($session->currentSavedRequestId !== null) {
+            $id = $session->currentSavedRequestId;
+            $user = Auth_UserModel::findCurrentUser();
+            
+	        $savedRequestRegistry = RegistryModel::findByNamespaceAndKey($user->getId(), 'savedRequests');
+	        $savedRequests = $savedRequestRegistry->getData();
+	        unset($savedRequests[$id]);
+	        $savedRequestRegistry->setData($savedRequests);
+	        $collection = new Unl_Model_Collection('RegistryModel');
+	        $collection[] = $savedRequestRegistry;
+	        RegistryModel::save($collection);
+            unset($session->currentSavedRequestId);
+        }
+        
     	Requests_RequestModel::save($session->request);
     	$session->course->setRequest($session->request);
     	Courses_CourseModel::save($session->course);
diff --git a/application/modules/default/models/RegistryModel.php b/application/modules/default/models/RegistryModel.php
new file mode 100644
index 0000000000000000000000000000000000000000..29147f17a7fc95b920d230e2395a41bc68dc1e3e
--- /dev/null
+++ b/application/modules/default/models/RegistryModel.php
@@ -0,0 +1,200 @@
+<?php
+
+class RegistryModel extends Unl_Model
+{
+    static public function find($id)
+    {
+        $db = Zend_Registry::get('db');
+        $select = new Zend_Db_Select($db);
+
+        $select->from(array('r' => 'creqRegistry'));
+
+        if (Unl_Util::isArray($id)) {
+            if (count($id) == 0) {
+                return new Unl_Model_Collection(__CLASS__);
+            }
+            $select->where('registryId IN(?)', $id);
+        } else {
+            $select->where('registryId = ?', $id);
+        }
+        $records = $select->query()->fetchAll();
+        $objects = new Unl_Model_Collection(__CLASS__);
+        foreach ($records as $record) {
+            $object = Unl_Model_Registry::getInstance()->getOrAdd(new self($record));
+            $objects[$object->getId()] = $object;
+        }
+
+        // if we were passed an array of users, return an array for each user
+        if (Unl_Util::isArray($id)) {
+            return $objects;
+        // otherwise, return an array of groups for the single user we were passed
+        } else {
+            return $objects[$id];
+        }
+    }
+
+    static public function findByNamespaceAndKey($namespace, $key)
+    {
+        $db = Zend_Registry::get('db');
+
+        $select = new Zend_Db_Select($db);
+        $select->from(array('r' => 'creqRegistry'), array('registryId'));
+        $select->where('`namespace` = ?', $namespace);
+        $select->where('`key` = ?', $key);
+        $data = $select->query()->fetchAll();
+
+        $registryId = $data[0]['registryId'];
+
+        if ($registryId) {
+            return self::find($registryId);
+        } else {
+            $new = self::fetchNew();
+            $new->_data['namespace'] = $namespace;
+            $new->_data['key'] = $key;
+            return $new;
+        }
+        
+    }
+
+    /**
+     * Returns a new, empty model.
+     *
+     * @return RegistryModel
+     */
+    static public function fetchNew()
+    {
+        $data = array(
+            'registryId' => NULL,
+            'namespace'  => NULL,
+            'key'        => NULL,
+            'data'       => NULL
+        );
+
+        $new = new self($data);
+        $new->_setClean();
+
+        return $new;
+    }
+    
+    static public function save($models)
+    {
+        $modelsToInsert = new Unl_Model_Collection(__CLASS__);
+        $modelsToUpdate = new Unl_Model_Collection(__CLASS__);
+
+        if (!Unl_Util::isArray($models)) {
+            $model = $models;
+            $models = new Unl_Model_Collection(__CLASS__);
+            $models[$model->getId()] = $model;
+        }
+
+        foreach ($models as $model) {
+            if ($model->getId()) {
+                if ($model->_cleanData != $model->_data) {
+                    $modelsToUpdate[] = $model;
+                }
+            } else {
+                $modelsToInsert[] = $model;
+            }
+        }
+
+        if (count($modelsToInsert) > 0) {
+            self::_insert($modelsToInsert);
+        }
+
+        if (count($modelsToUpdate) > 0) {
+            self::_update($modelsToUpdate);
+        }
+
+        foreach ($models as $model)
+        {
+            $model->_setClean();
+        }
+    }
+
+    static protected function _update(Unl_Model_Collection $models)
+    {
+        $db = Zend_Registry::get('db');
+
+        $sql = 'CREATE TEMPORARY TABLE creqRegistryUpdate '
+             . 'SELECT * FROM creqRegistry LIMIT 0';
+        $db->query($sql);
+
+        $sql = 'INSERT INTO creqRegistryUpdate VALUES ';
+        $sqlParts = array();
+        foreach ($models as $model) {
+            $sqlParts[] = $db->quoteInto('(?, ', $model->_data['registryId'])
+                        . $db->quoteInto('?, ' , $model->_data['namespace'])
+                        . $db->quoteInto('?, ' , $model->_data['key'])
+                        . $db->quoteInto('?)'  , base64_encode(serialize($model->_data['data'])));
+        }
+        $sql .= implode(', ', $sqlParts);
+        $db->query($sql);
+
+        $sql = 'UPDATE creqRegistry AS a, '
+             . '       creqRegistryUpdate AS b '
+             . 'SET a.namespace = b.namespace, '
+             . '    a.key       = b.key, '
+             . '    a.data      = b.data '
+             . 'WHERE a.registryId = b.registryId ';
+        $db->query($sql);
+    }
+
+    static protected function _insert(Unl_Model_Collection $models)
+    {
+        $db = Zend_Registry::get('db');
+
+        $sql = 'INSERT INTO creqRegistry (`namespace`, `key`, `data`) VALUES ';
+        $sqlParts = array();
+        foreach ($models as $model) {
+            $sqlParts[] = $db->quoteInto('(?, ', $model->_data['namespace'])
+                        . $db->quoteInto('?, ' , $model->_data['key'])
+                        . $db->quoteInto('?)'  , base64_encode(serialize($model->_data['data'])));
+        }
+        $sql .= implode(', ', $sqlParts);
+        $db->query($sql);
+
+        $lastId = $db->lastInsertId();
+        foreach ($models as $model) {
+            $model->_data['registryId'] = $lastId;
+            $lastId++;
+        }
+    }
+
+    static public function delete($models)
+    {
+        if (!Unl_Util::isArray($models)) {
+            $model = $models;
+            $models = new Unl_Model_Collection(__CLASS__);
+            $models[$model->getId()] = $model;
+        }
+
+        if (count($models) == 0) {
+            return;
+        }
+
+        $db = Zend_Registry::get('db');
+        $sql = $db->quoteInto('DELETE FROM creqRegistry WHERE registryId IN (?)', $models->getId());
+        $db->query($sql);
+    }
+    
+    public function __construct($data)
+    {
+    	parent::__construct($data);
+    	$this->_data['data'] = unserialize(base64_decode($this->_data['data']));
+    }
+    
+    public function getId()
+    {
+    	return $this->_data['registryId'];
+    }
+    
+    public function getData()
+    {
+    	return $this->_data['data'];
+    }
+    
+    public function setData($data)
+    {
+        $this->_data['data'] = $data;
+    }
+}
\ No newline at end of file
diff --git a/application/modules/requests/controllers/EditController.php b/application/modules/requests/controllers/EditController.php
index 45acc7552941d1cd3176dbcdb2dc10072dfae694..195407e431247ac7273ab96d2d4cd0a193e8c0a0 100644
--- a/application/modules/requests/controllers/EditController.php
+++ b/application/modules/requests/controllers/EditController.php
@@ -8,7 +8,9 @@ class Requests_EditController extends App_Controller_Action
 		if ($in['sessionId'] !== null) {
 			$id = $in['sessionId'];
 			$session = new Zend_Session_Namespace('Edit Request');
-			$request = $session->savedRequests[$id]['request'];
+            $user = Auth_UserModel::findCurrentUser();
+            $savedRequests = RegistryModel::findByNamespaceAndKey($user->getId(), 'savedRequests')->getData();
+			$request = $savedRequests[$id]['request'];
 	        $module = $request->getModule();
 	        $redirectUrl = '/' . $module . '/edit/load/sessionId/' . $id;
 		} else {
@@ -24,8 +26,15 @@ class Requests_EditController extends App_Controller_Action
 	public function deleteSavedAction()
 	{
 		$id = $this->getRequest()->getParam('id');
-		$session = new Zend_Session_Namespace('Edit Request');
-		unset($session->savedRequests[$id]);
+		$user = Auth_UserModel::findCurrentUser();
+        $savedRequestRegistry = RegistryModel::findByNamespaceAndKey($user->getId(), 'savedRequests');
+        $savedRequests = $savedRequestRegistry->getData();
+        unset($savedRequests[$id]);
+        $savedRequestRegistry->setData($savedRequests);
+        $collection = new Unl_Model_Collection('RegistryModel');
+        $collection[] = $savedRequestRegistry;
+        RegistryModel::save($collection);
+		
 		
 		$this->_redirect('/requests');
 	}
diff --git a/application/modules/requests/controllers/IndexController.php b/application/modules/requests/controllers/IndexController.php
index d06986cc900db31a190072f3765affc0db4d942d..1cbb3cfd27cc24a601c23263dcc7ea9014e986b7 100644
--- a/application/modules/requests/controllers/IndexController.php
+++ b/application/modules/requests/controllers/IndexController.php
@@ -40,7 +40,7 @@ class Requests_IndexController extends App_Controller_Action
 		$requestVotes = Requests_ApproverVoteModel::findUsersVotesForRequsets($user, $allRequests);
 
 		$session = new Zend_Session_Namespace('Edit Request');
-		$savedRequests = $session->savedRequests;
+		$savedRequests = RegistryModel::findByNamespaceAndKey($user->getId(), 'savedRequests')->getData();
 
 		if (!Unl_Util::isArray($savedRequests)) {
             $savedRequests = array();