diff --git a/lib/appframework/controller/controller.php b/lib/appframework/controller/controller.php
index a7498ba0e1e7c579b706449d217e0f88c4c16ac2..0ea0a38cc090e36906de3a9782edc603a8567481 100644
--- a/lib/appframework/controller/controller.php
+++ b/lib/appframework/controller/controller.php
@@ -106,16 +106,6 @@ abstract class Controller {
 	}
 
 
-	/**
-	 * Shortcut for getting session variables
-	 * @param string $key the key that will be taken from the $_SESSION array
-	 * @return array the value in the $_SESSION element
-	 */
-	public function session($key) {
-		return $this->request->getSession($key);
-	}
-
-
 	/**
 	 * Shortcut for getting cookie variables
 	 * @param string $key the key that will be taken from the $_COOKIE array
diff --git a/lib/appframework/http/request.php b/lib/appframework/http/request.php
index 4f1775182a1e89da5b23d5656a7644d1dbdc3357..34605acdfead8b7073f19702fd6965799e1b776c 100644
--- a/lib/appframework/http/request.php
+++ b/lib/appframework/http/request.php
@@ -33,16 +33,15 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 
 	protected $items = array();
 	protected $allowedKeys = array(
-		'get', 
-		'post', 
-		'files', 
-		'server', 
-		'env', 
-		'session', 
-		'cookies', 
-		'urlParams', 
-		'params', 
-		'parameters', 
+		'get',
+		'post',
+		'files',
+		'server',
+		'env',
+		'cookies',
+		'urlParams',
+		'params',
+		'parameters',
 		'method'
 	);
 
@@ -156,7 +155,6 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 			case 'files':
 			case 'server':
 			case 'env':
-			case 'session':
 			case 'cookies':
 			case 'parameters':
 			case 'params':
@@ -229,8 +227,7 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 	 * @param mixed $default If the key is not found, this value will be returned
 	 * @return mixed the content of the array
 	 */
-	public function getParam($key, $default = null)
-	{
+	public function getParam($key, $default = null) {
 		return isset($this->parameters[$key])
 			? $this->parameters[$key]
 			: $default;
@@ -241,8 +238,7 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 	 * (as GET or POST) or throuh the URL by the route
 	 * @return array the array with all parameters
 	 */
-	public function getParams()
-	{
+	public function getParams() {
 		return $this->parameters;
 	}
 
@@ -250,8 +246,7 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 	 * Returns the method of the request
 	 * @return string the method of the request (POST, GET, etc)
 	 */
-	public function getMethod()
-	{
+	public function getMethod() {
 		return $this->method;
 	}
 
@@ -260,8 +255,7 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 	 * @param string $key the key that will be taken from the $_FILES array
 	 * @return array the file in the $_FILES element
 	 */
-	public function getUploadedFile($key)
-	{
+	public function getUploadedFile($key) {
 		return isset($this->files[$key]) ? $this->files[$key] : null;
 	}
 
@@ -270,28 +264,16 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 	 * @param string $key the key that will be taken from the $_ENV array
 	 * @return array the value in the $_ENV element
 	 */
-	public function getEnv($key)
-	{
+	public function getEnv($key) {
 		return isset($this->env[$key]) ? $this->env[$key] : null;
 	}
 
-	/**
-	 * Shortcut for getting session variables
-	 * @param string $key the key that will be taken from the $_SESSION array
-	 * @return array the value in the $_SESSION element
-	 */
-	function getSession($key)
-	{
-		return isset($this->session[$key]) ? $this->session[$key] : null;
-	}
-
 	/**
 	 * Shortcut for getting cookie variables
 	 * @param string $key the key that will be taken from the $_COOKIE array
 	 * @return array the value in the $_COOKIE element
 	 */
-	function getCookie($key)
-	{
+	function getCookie($key) {
 		return isset($this->cookies[$key]) ? $this->cookies[$key] : null;
 	}
 
@@ -304,8 +286,7 @@ class Request implements \ArrayAccess, \Countable, IRequest {
 	 *
 	 * @throws \LogicException
 	 */
-	function getContent($asResource = false)
-	{
+	function getContent($asResource = false) {
 		return null;
 //		if (false === $this->content || (true === $asResource && null !== $this->content)) {
 //			throw new \LogicException('getContent() can only be called once when using the resource return type.');
diff --git a/lib/base.php b/lib/base.php
index 1720a5fd7e1a04490f52a7203ae94ecc708bdd95..0650361be91f7d99bfda70e3acd68a8425bef39d 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -564,11 +564,13 @@ class OC {
 		if (OC_Config::getValue('installed', false)) { //don't try to do this before we are properly setup
 			// register cache cleanup jobs
 			try { //if this is executed before the upgrade to the new backgroundjob system is completed it will throw an exception
-				\OCP\BackgroundJob::registerJob('OC_Cache_FileGlobalGC');
+				\OCP\BackgroundJob::registerJob('OC\Cache\FileGlobalGC');
 			} catch (Exception $e) {
 
 			}
-			OC_Hook::connect('OC_User', 'post_login', 'OC_Cache_File', 'loginListener');
+			// NOTE: This will be replaced to use OCP
+			$userSession = \OC_User::getUserSession();
+			$userSession->listen('postLogin', '\OC\Cache\File', 'loginListener');
 		}
 	}
 
diff --git a/lib/cache.php b/lib/cache.php
index 48b9964ba9d19dd0713f3b5d188e0daa9b20e4e0..a311f10a00fa4736136ab6a1e6bf3c5e3b7166d9 100644
--- a/lib/cache.php
+++ b/lib/cache.php
@@ -6,34 +6,36 @@
  * See the COPYING-README file.
  */
 
-class OC_Cache {
+namespace OC;
+
+class Cache {
 	/**
-	 * @var OC_Cache $user_cache
+	 * @var Cache $user_cache
 	 */
 	static protected $user_cache;
 	/**
-	 * @var OC_Cache $global_cache
+	 * @var Cache $global_cache
 	 */
 	static protected $global_cache;
 
 	/**
 	 * get the global cache
-	 * @return OC_Cache
+	 * @return Cache
 	 */
 	static public function getGlobalCache() {
 		if (!self::$global_cache) {
-			self::$global_cache = new OC_Cache_FileGlobal();
+			self::$global_cache = new Cache\FileGlobal();
 		}
 		return self::$global_cache;
 	}
 
 	/**
 	 * get the user cache
-	 * @return OC_Cache
+	 * @return Cache
 	 */
 	static public function getUserCache() {
 		if (!self::$user_cache) {
-			self::$user_cache = new OC_Cache_File();
+			self::$user_cache = new Cache\File();
 		}
 		return self::$user_cache;
 	}
@@ -85,7 +87,7 @@ class OC_Cache {
 
 	/**
 	 * clear the user cache of all entries starting with a prefix
-	 * @param string prefix (optional)
+	 * @param string $prefix (optional)
 	 * @return bool
 	 */
 	static public function clear($prefix='') {
@@ -93,6 +95,11 @@ class OC_Cache {
 		return $user_cache->clear($prefix);
 	}
 
+	/**
+	 * creates cache key based on the files given
+	 * @param $files
+	 * @return string
+	 */
 	static public function generateCacheKeyFromFiles($files) {
 		$key = '';
 		sort($files);
diff --git a/lib/cache/broker.php b/lib/cache/broker.php
index a161dbfa3bb1c2664b9eb4ab25c0ddf57da90633..9b7e837e1bc96f4c4fbb32e2f607142438c23d8b 100644
--- a/lib/cache/broker.php
+++ b/lib/cache/broker.php
@@ -6,8 +6,18 @@
  * See the COPYING-README file.
  */
 
-class OC_Cache_Broker {
+namespace OC\Cache;
+
+class Broker {
+
+	/**
+	 * @var \OC\Cache
+	 */
 	protected $fast_cache;
+
+	/**
+	 * @var \OC\Cache
+	 */
 	protected $slow_cache;
 
 	public function __construct($fast_cache, $slow_cache) {
diff --git a/lib/cache/file.php b/lib/cache/file.php
index 361138e47362138295c67873ca611aa26c12fd55..2ab914d17b891b421fd573a1ad98edc233d52a99 100644
--- a/lib/cache/file.php
+++ b/lib/cache/file.php
@@ -6,24 +6,25 @@
  * See the COPYING-README file.
  */
 
+namespace OC\Cache;
 
-class OC_Cache_File{
+class File {
 	protected $storage;
 	protected function getStorage() {
 		if (isset($this->storage)) {
 			return $this->storage;
 		}
-		if(OC_User::isLoggedIn()) {
-			\OC\Files\Filesystem::initMountPoints(OC_User::getUser());
+		if(\OC_User::isLoggedIn()) {
+			\OC\Files\Filesystem::initMountPoints(\OC_User::getUser());
 			$subdir = 'cache';
-			$view = new \OC\Files\View('/'.OC_User::getUser());
+			$view = new \OC\Files\View('/' . \OC_User::getUser());
 			if(!$view->file_exists($subdir)) {
 				$view->mkdir($subdir);
 			}
-			$this->storage = new \OC\Files\View('/'.OC_User::getUser().'/'.$subdir);
+			$this->storage = new \OC\Files\View('/' . \OC_User::getUser().'/'.$subdir);
 			return $this->storage;
 		}else{
-			OC_Log::write('core', 'Can\'t get cache storage, user not logged in', OC_Log::ERROR);
+			\OC_Log::write('core', 'Can\'t get cache storage, user not logged in', \OC_Log::ERROR);
 			return false;
 		}
 	}
diff --git a/lib/cache/fileglobal.php b/lib/cache/fileglobal.php
index c0bd8e45f39a67729a37baf60ee7073599baa076..bd049bba4d0a5ebc2c0bb56bc807cce26fb2e2c4 100644
--- a/lib/cache/fileglobal.php
+++ b/lib/cache/fileglobal.php
@@ -6,10 +6,11 @@
  * See the COPYING-README file.
  */
 
+namespace OC\Cache;
 
-class OC_Cache_FileGlobal{
+class FileGlobal {
 	static protected function getCacheDir() {
-		$cache_dir = get_temp_dir().'/owncloud-'.OC_Util::getInstanceId().'/';
+		$cache_dir = get_temp_dir().'/owncloud-' . \OC_Util::getInstanceId().'/';
 		if (!is_dir($cache_dir)) {
 			mkdir($cache_dir);
 		}
@@ -80,13 +81,13 @@ class OC_Cache_FileGlobal{
 	}
 
 	static public function gc() {
-		$last_run = OC_AppConfig::getValue('core', 'global_cache_gc_lastrun', 0);
+		$last_run = \OC_AppConfig::getValue('core', 'global_cache_gc_lastrun', 0);
 		$now = time();
 		if (($now - $last_run) < 300) {
 			// only do cleanup every 5 minutes
 			return;
 		}
-		OC_AppConfig::setValue('core', 'global_cache_gc_lastrun', $now);
+		\OC_AppConfig::setValue('core', 'global_cache_gc_lastrun', $now);
 		$cache_dir = self::getCacheDir();
 		if($cache_dir and is_dir($cache_dir)) {
 			$dh=opendir($cache_dir);
diff --git a/lib/cache/fileglobalgc.php b/lib/cache/fileglobalgc.php
index a29c31f9063087a49dd9d0d3c498d1e1fe23e68d..399dd5e6f9468f5595596fd9d64a87d988628779 100644
--- a/lib/cache/fileglobalgc.php
+++ b/lib/cache/fileglobalgc.php
@@ -1,8 +1,9 @@
 <?php
 
+namespace OC\Cache;
 
-class OC_Cache_FileGlobalGC extends \OC\BackgroundJob\Job{
+class FileGlobalGC extends \OC\BackgroundJob\Job{
 	public function run($argument){
-		OC_Cache_FileGlobal::gc();
+		FileGlobal::gc();
 	}
 }
diff --git a/lib/cache/usercache.php b/lib/cache/usercache.php
new file mode 100644
index 0000000000000000000000000000000000000000..baa8820700b9c652e0ed0e39bf4b1f008c61d26b
--- /dev/null
+++ b/lib/cache/usercache.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net)
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Cache;
+
+/**
+ * This interface defines method for accessing the file based user cache.
+ */
+class UserCache implements \OCP\ICache {
+
+	/**
+	 * @var \OC\Cache\File $userCache
+	 */
+	protected $userCache;
+
+	public function __construct() {
+		$this->userCache = new File();
+	}
+
+	/**
+	 * Get a value from the user cache
+	 *
+	 * @param string $key
+	 * @return mixed
+	 */
+	public function get($key) {
+		return $this->userCache->get($key);
+	}
+
+	/**
+	 * Set a value in the user cache
+	 *
+	 * @param string $key
+	 * @param mixed $value
+	 * @param int $ttl Time To Live in seconds. Defaults to 60*60*24
+	 * @return bool
+	 */
+	public function set($key, $value, $ttl = 0) {
+		if (empty($key)) {
+			return false;
+		}
+		return $this->userCache->set($key, $value, $ttl);
+	}
+
+	/**
+	 * Check if a value is set in the user cache
+	 *
+	 * @param string $key
+	 * @return bool
+	 */
+	public function hasKey($key) {
+		return $this->userCache->hasKey($key);
+	}
+
+	/**
+	 * Remove an item from the user cache
+	 *
+	 * @param string $key
+	 * @return bool
+	 */
+	public function remove($key) {
+		return $this->userCache->remove($key);
+	}
+
+	/**
+	 * clear the user cache of all entries starting with a prefix
+	 * @param string $prefix (optional)
+	 * @return bool
+	 */
+	public function clear($prefix = '') {
+		return $this->userCache->clear($prefix);
+	}
+}
diff --git a/lib/filechunking.php b/lib/filechunking.php
index e6d69273a44a6e08e4ad1bcf728c6cea78808ea2..313a6ee87d2975d6139b2a3a8691a63d6994784e 100644
--- a/lib/filechunking.php
+++ b/lib/filechunking.php
@@ -29,7 +29,7 @@ class OC_FileChunking {
 
 	protected function getCache() {
 		if (!isset($this->cache)) {
-			$this->cache = new OC_Cache_File();
+			$this->cache = new \OC\Cache\File();
 		}
 		return $this->cache;
 	}
diff --git a/lib/legacy/cache.php b/lib/legacy/cache.php
new file mode 100644
index 0000000000000000000000000000000000000000..f915eb516b1e538c5db80b91b5fc17f1382426f2
--- /dev/null
+++ b/lib/legacy/cache.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net)
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class OC_Cache extends \OC\Cache {
+}
\ No newline at end of file
diff --git a/lib/public/icache.php b/lib/public/icache.php
new file mode 100644
index 0000000000000000000000000000000000000000..436ee71b2b99e511fe239bda82d5c7d9bce50a6b
--- /dev/null
+++ b/lib/public/icache.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net)
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OCP;
+
+/**
+ * This interface defines method for accessing the file based user cache.
+ */
+interface ICache {
+
+	/**
+	 * Get a value from the user cache
+	 *
+	 * @param string $key
+	 * @return mixed
+	 */
+	public function get($key);
+
+	/**
+	 * Set a value in the user cache
+	 *
+	 * @param string $key
+	 * @param mixed $value
+	 * @param int $ttl Time To Live in seconds. Defaults to 60*60*24
+	 * @return bool
+	 */
+	public function set($key, $value, $ttl = 0);
+
+	/**
+	 * Check if a value is set in the user cache
+	 *
+	 * @param string $key
+	 * @return bool
+	 */
+	public function hasKey($key);
+
+	/**
+	 * Remove an item from the user cache
+	 * 
+	 * @param string $key
+	 * @return bool
+	 */
+	public function remove($key);
+
+	/**
+	 * clear the user cache of all entries starting with a prefix
+	 * @param string $prefix (optional)
+	 * @return bool
+	 */
+	public function clear($prefix = '');
+}
diff --git a/lib/public/irequest.php b/lib/public/irequest.php
index cd39855950bc875324dbb8e5e8dbf782829c016c..9f335b06f2ac85093f6ff92f6749d8dbd48d2129 100644
--- a/lib/public/irequest.php
+++ b/lib/public/irequest.php
@@ -76,15 +76,6 @@ interface IRequest {
 	public function getEnv($key);
 
 
-	/**
-	 * Shortcut for getting session variables
-	 *
-	 * @param string $key the key that will be taken from the $_SESSION array
-	 * @return array the value in the $_SESSION element
-	 */
-	function getSession($key);
-
-
 	/**
 	 * Shortcut for getting cookie variables
 	 *
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index e44acee6533927b224ac5c68b41b4c5e228299bf..a9c49a78737db583a994aa6e57dbcf8f46997bed 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -69,4 +69,18 @@ interface IServerContainer {
 	 */
 	function getRootFolder();
 
+	/**
+	 * Returns an ICache instance
+	 *
+	 * @return \OCP\ICache
+	 */
+	function getCache();
+
+	/**
+	 * Returns the current session
+	 *
+	 * @return \OCP\ISession
+	 */
+	function getSession();
+
 }
diff --git a/lib/public/isession.php b/lib/public/isession.php
new file mode 100644
index 0000000000000000000000000000000000000000..0a77b0c823b042cef5d840bc66723bcf4adc2bea
--- /dev/null
+++ b/lib/public/isession.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net)
+ * @author Thomas Tanghus
+ * @author Robin Appelman
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP;
+
+/**
+ * Interface ISession
+ *
+ * wrap PHP's internal session handling into the ISession interface
+ */
+interface ISession {
+
+	/**
+	 * Set a value in the session
+	 *
+	 * @param string $key
+	 * @param mixed $value
+	 */
+	public function set($key, $value);
+
+	/**
+	 * Get a value from the session
+	 *
+	 * @param string $key
+	 * @return mixed should return null if $key does not exist
+	 */
+	public function get($key);
+
+	/**
+	 * Check if a named key exists in the session
+	 *
+	 * @param string $key
+	 * @return bool
+	 */
+	public function exists($key);
+
+	/**
+	 * Remove a $key/$value pair from the session
+	 *
+	 * @param string $key
+	 */
+	public function remove($key);
+
+	/**
+	 * Reset and recreate the session
+	 */
+	public function clear();
+
+}
diff --git a/lib/server.php b/lib/server.php
index f25216b746d3bd9d9df7c1d1e1407e7cdc2de660..e97bc296ca0bb78e3f6197ea77cab5f71ec29713 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -4,6 +4,7 @@ namespace OC;
 
 use OC\AppFramework\Http\Request;
 use OC\AppFramework\Utility\SimpleContainer;
+use OC\Cache\UserCache;
 use OC\Files\Node\Root;
 use OC\Files\View;
 use OCP\IServerContainer;
@@ -17,10 +18,10 @@ use OCP\IServerContainer;
 class Server extends SimpleContainer implements IServerContainer {
 
 	function __construct() {
-		$this->registerService('ContactsManager', function($c){
+		$this->registerService('ContactsManager', function($c) {
 			return new ContactsManager();
 		});
-		$this->registerService('Request', function($c){
+		$this->registerService('Request', function($c) {
 			$params = array();
 
 			// we json decode the body only in case of content type json
@@ -36,7 +37,6 @@ class Server extends SimpleContainer implements IServerContainer {
 					'files' => $_FILES,
 					'server' => $_SERVER,
 					'env' => $_ENV,
-					'session' => $_SESSION,
 					'cookies' => $_COOKIE,
 					'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD']))
 						? $_SERVER['REQUEST_METHOD']
@@ -46,13 +46,15 @@ class Server extends SimpleContainer implements IServerContainer {
 				)
 			);
 		});
-		$this->registerService('PreviewManager', function($c){
+		$this->registerService('PreviewManager', function($c) {
 			return new PreviewManager();
 		});
-		$this->registerService('TagManager', function($c){
-			return new Tags();
+		$this->registerService('TagManager', function($c) {
+			// TODO: get user and user manager from container as well
+			$user = \OC_User::getUser();
+			return new Tags($user);
 		});
-		$this->registerService('RootFolder', function($c){
+		$this->registerService('RootFolder', function($c) {
 			// TODO: get user and user manager from container as well
 			$user = \OC_User::getUser();
 			$user = \OC_User::getManager()->get($user);
@@ -60,6 +62,9 @@ class Server extends SimpleContainer implements IServerContainer {
 			$view = new View();
 			return new Root($manager, $view, $user);
 		});
+		$this->registerService('UserCache', function($c) {
+			return new UserCache();
+		});
 	}
 
 	/**
@@ -70,14 +75,13 @@ class Server extends SimpleContainer implements IServerContainer {
 	}
 
 	/**
-	 * The current request object holding all information about the request currently being processed
-	 * is returned from this method.
+	 * The current request object holding all information about the request
+	 * currently being processed is returned from this method.
 	 * In case the current execution was not initiated by a web request null is returned
 	 *
 	 * @return \OCP\IRequest|null
 	 */
-	function getRequest()
-	{
+	function getRequest() {
 		return $this->query('Request');
 	}
 
@@ -86,8 +90,7 @@ class Server extends SimpleContainer implements IServerContainer {
 	 *
 	 * @return \OCP\IPreview
 	 */
-	function getPreviewManager()
-	{
+	function getPreviewManager() {
 		return $this->query('PreviewManager');
 	}
 
@@ -105,8 +108,26 @@ class Server extends SimpleContainer implements IServerContainer {
 	 *
 	 * @return \OCP\Files\Folder
 	 */
-	function getRootFolder()
-	{
+	function getRootFolder() {
 		return $this->query('RootFolder');
 	}
+
+	/**
+	 * Returns an ICache instance
+	 *
+	 * @return \OCP\ICache
+	 */
+	function getCache() {
+		return $this->query('UserCache');
+	}
+
+	/**
+	 * Returns the current session
+	 *
+	 * @return \OCP\ISession
+	 */
+	function getSession() {
+		return \OC::$session;
+	}
+
 }
diff --git a/lib/session/session.php b/lib/session/session.php
index 55515f57a87d186adb11c407655b50f943350eda..c55001eccaca570e9381679646be0526855580ee 100644
--- a/lib/session/session.php
+++ b/lib/session/session.php
@@ -8,7 +8,7 @@
 
 namespace OC\Session;
 
-abstract class Session implements \ArrayAccess {
+abstract class Session implements \ArrayAccess, \OCP\ISession {
 	/**
 	 * $name serves as a namespace for the session keys
 	 *
diff --git a/tests/lib/appframework/controller/ControllerTest.php b/tests/lib/appframework/controller/ControllerTest.php
index 246371d249ccfdd9674e199a130943b888a98795..4441bddfca9f4685385744aafa29671592222843 100644
--- a/tests/lib/appframework/controller/ControllerTest.php
+++ b/tests/lib/appframework/controller/ControllerTest.php
@@ -152,9 +152,4 @@ class ControllerTest extends \PHPUnit_Framework_TestCase {
 		$this->assertEquals('daheim', $this->controller->env('PATH'));
 	}
 
-	public function testGetSessionVariable(){
-		$this->assertEquals('kein', $this->controller->session('sezession'));
-	}
-
-
 }
diff --git a/tests/lib/cache.php b/tests/lib/cache.php
index 3dcf39f7d605df9b0c325264b25414c6f8d037e5..8fefa25f65d97f55468cd3835b33dd5031d30f3c 100644
--- a/tests/lib/cache.php
+++ b/tests/lib/cache.php
@@ -8,7 +8,7 @@
 
 abstract class Test_Cache extends PHPUnit_Framework_TestCase {
 	/**
-	 * @var OC_Cache cache;
+	 * @var \OC\Cache cache;
 	 */
 	protected $instance;
 
diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php
index 038cb21b2576a54ac1b76d635a3279951a0a94d5..3767c83fcb1c28d76153c0e6de733ee4705d728a 100644
--- a/tests/lib/cache/file.php
+++ b/tests/lib/cache/file.php
@@ -20,7 +20,9 @@
 *
 */
 
-class Test_Cache_File extends Test_Cache {
+namespace Test\Cache;
+
+class FileCache extends \Test_Cache {
 	private $user;
 	private $datadir;
 
@@ -30,8 +32,8 @@ class Test_Cache_File extends Test_Cache {
 	
 	public function setUp() {
 		//clear all proxies and hooks so we can do clean testing
-		OC_FileProxy::clearProxies();
-		OC_Hook::clear('OC_Filesystem');
+		\OC_FileProxy::clearProxies();
+		\OC_Hook::clear('OC_Filesystem');
 
 		//disabled atm
 		//enable only the encryption hook if needed
@@ -44,27 +46,27 @@ class Test_Cache_File extends Test_Cache {
 		$storage = new \OC\Files\Storage\Temporary(array());
 		\OC\Files\Filesystem::mount($storage,array(),'/');
 		$datadir = str_replace('local::', '', $storage->getId());
-		$this->datadir = OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data');
-		OC_Config::setValue('datadirectory', $datadir);
+		$this->datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT.'/data');
+		\OC_Config::setValue('datadirectory', $datadir);
 
-		OC_User::clearBackends();
-		OC_User::useBackend(new OC_User_Dummy());
+		\OC_User::clearBackends();
+		\OC_User::useBackend(new \OC_User_Dummy());
 		
 		//login
-		OC_User::createUser('test', 'test');
+		\OC_User::createUser('test', 'test');
 		
-		$this->user=OC_User::getUser();
-		OC_User::setUserId('test');
+		$this->user = \OC_User::getUser();
+		\OC_User::setUserId('test');
 
 		//set up the users dir
-		$rootView=new \OC\Files\View('');
+		$rootView = new \OC\Files\View('');
 		$rootView->mkdir('/test');
 		
-		$this->instance=new OC_Cache_File();
+		$this->instance=new \OC\Cache\File();
 	}
 
 	public function tearDown() {
-		OC_User::setUserId($this->user);
-		OC_Config::setValue('datadirectory', $this->datadir);
+		\OC_User::setUserId($this->user);
+		\OC_Config::setValue('datadirectory', $this->datadir);
 	}
 }
diff --git a/tests/lib/cache/usercache.php b/tests/lib/cache/usercache.php
new file mode 100644
index 0000000000000000000000000000000000000000..21b7f848ab6d85f4a4ce83c6a71cf414826b423d
--- /dev/null
+++ b/tests/lib/cache/usercache.php
@@ -0,0 +1,68 @@
+<?php
+/**
+* ownCloud
+*
+* @author Robin Appelman
+* @copyright 2012 Robin Appelman icewind@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+namespace Test\Cache;
+
+class UserCache extends \Test_Cache {
+	private $user;
+	private $datadir;
+
+	public function setUp() {
+		//clear all proxies and hooks so we can do clean testing
+		\OC_FileProxy::clearProxies();
+		\OC_Hook::clear('OC_Filesystem');
+
+		//disabled atm
+		//enable only the encryption hook if needed
+		//if(OC_App::isEnabled('files_encryption')) {
+		//	OC_FileProxy::register(new OC_FileProxy_Encryption());
+		//}
+
+		//set up temporary storage
+		\OC\Files\Filesystem::clearMounts();
+		$storage = new \OC\Files\Storage\Temporary(array());
+		\OC\Files\Filesystem::mount($storage,array(),'/');
+		$datadir = str_replace('local::', '', $storage->getId());
+		$this->datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT.'/data');
+		\OC_Config::setValue('datadirectory', $datadir);
+
+		\OC_User::clearBackends();
+		\OC_User::useBackend(new \OC_User_Dummy());
+		
+		//login
+		\OC_User::createUser('test', 'test');
+		
+		$this->user = \OC_User::getUser();
+		\OC_User::setUserId('test');
+
+		//set up the users dir
+		$rootView=new \OC\Files\View('');
+		$rootView->mkdir('/test');
+		
+		$this->instance=new \OC\Cache\UserCache();
+	}
+
+	public function tearDown() {
+		\OC_User::setUserId($this->user);
+		\OC_Config::setValue('datadirectory', $this->datadir);
+	}
+}