diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index 1725b7c74e04bdd8d6c68495e6bae8312d57b191..ad714276660b5399d72f32b0be16425d94ed0bfd 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -62,6 +62,13 @@ interface IServerContainer {
 	 */
 	function getRootFolder();
 
+	/**
+	 * Returns the user session
+	 *
+	 * @return \OCP\IUserSession
+	 */
+	function getUserSession();
+
 	/**
 	 * Returns an ICache instance
 	 *
diff --git a/lib/public/iusersession.php b/lib/public/iusersession.php
new file mode 100644
index 0000000000000000000000000000000000000000..5dc1ecf71e647b14dba6676f5f6d59d2853e2687
--- /dev/null
+++ b/lib/public/iusersession.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ * 
+ */
+
+namespace OCP;
+
+/**
+ * User session
+ */
+interface IUserSession {
+	/**
+	 * Do a user login
+	 * @param string $user the username
+	 * @param string $password the password
+	 * @return bool true if successful
+	 */
+	public function login($user, $password);
+
+	/**
+	 * @brief Logs the user out including all the session data
+	 * Logout, destroys session
+	 */
+	public function logout();
+
+}
diff --git a/lib/server.php b/lib/server.php
index f4dc22a2be49da1f52078214bc8867aebcb7c959..316ed39665bb015081b7b5941bb57125261ebbd1 100644
--- a/lib/server.php
+++ b/lib/server.php
@@ -56,6 +56,47 @@ class Server extends SimpleContainer implements IServerContainer {
 			$view = new View();
 			return new Root($manager, $view, $user);
 		});
+		$this->registerService('UserManager', function($c) {
+			return new \OC\User\Manager();
+		});
+		$this->registerService('UserSession', function($c) {
+			$manager = $c->query('UserManager');
+			$userSession = new \OC\User\Session($manager, \OC::$session);
+			$userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) {
+				\OC_Hook::emit('OC_User', 'pre_createUser', array('run' => true, 'uid' => $uid, 'password' => $password));
+			});
+			$userSession->listen('\OC\User', 'postCreateUser', function ($user, $password) {
+				/** @var $user \OC\User\User */
+				\OC_Hook::emit('OC_User', 'post_createUser', array('uid' => $user->getUID(), 'password' => $password));
+			});
+			$userSession->listen('\OC\User', 'preDelete', function ($user) {
+				/** @var $user \OC\User\User */
+				\OC_Hook::emit('OC_User', 'pre_deleteUser', array('run' => true, 'uid' => $user->getUID()));
+			});
+			$userSession->listen('\OC\User', 'postDelete', function ($user) {
+				/** @var $user \OC\User\User */
+				\OC_Hook::emit('OC_User', 'post_deleteUser', array('uid' => $user->getUID()));
+			});
+			$userSession->listen('\OC\User', 'preSetPassword', function ($user, $password, $recoveryPassword) {
+				/** @var $user \OC\User\User */
+				\OC_Hook::emit('OC_User', 'pre_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword));
+			});
+			$userSession->listen('\OC\User', 'postSetPassword', function ($user, $password, $recoveryPassword) {
+				/** @var $user \OC\User\User */
+				\OC_Hook::emit('OC_User', 'post_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword));
+			});
+			$userSession->listen('\OC\User', 'preLogin', function ($uid, $password) {
+				\OC_Hook::emit('OC_User', 'pre_login', array('run' => true, 'uid' => $uid, 'password' => $password));
+			});
+			$userSession->listen('\OC\User', 'postLogin', function ($user, $password) {
+				/** @var $user \OC\User\User */
+				\OC_Hook::emit('OC_User', 'post_login', array('run' => true, 'uid' => $user->getUID(), 'password' => $password));
+			});
+			$userSession->listen('\OC\User', 'logout', function () {
+				\OC_Hook::emit('OC_User', 'logout', array());
+			});
+			return $userSession;
+		});
 		$this->registerService('UserCache', function($c) {
 			return new UserCache();
 		});
@@ -97,6 +138,20 @@ class Server extends SimpleContainer implements IServerContainer {
 		return $this->query('RootFolder');
 	}
 
+	/**
+	 * @return \OC\User\Manager
+	 */
+	function getUserManager() {
+		return $this->query('UserManager');
+	}
+
+	/**
+	 * @return \OC\User\Session
+	 */
+	function getUserSession() {
+		return $this->query('UserSession');
+	}
+
 	/**
 	 * Returns an ICache instance
 	 *
diff --git a/lib/user.php b/lib/user.php
index 0f6f40aec9ae414fc0318f2d33ef1fa2bcb3de9f..7f6a296c3eaba6141e6d44e2853e901337727a5f 100644
--- a/lib/user.php
+++ b/lib/user.php
@@ -37,54 +37,15 @@
  *   logout()
  */
 class OC_User {
-	public static $userSession = null;
-
 	public static function getUserSession() {
-		if (!self::$userSession) {
-			$manager = new \OC\User\Manager();
-			self::$userSession = new \OC\User\Session($manager, \OC::$session);
-			self::$userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) {
-				\OC_Hook::emit('OC_User', 'pre_createUser', array('run' => true, 'uid' => $uid, 'password' => $password));
-			});
-			self::$userSession->listen('\OC\User', 'postCreateUser', function ($user, $password) {
-				/** @var $user \OC\User\User */
-				\OC_Hook::emit('OC_User', 'post_createUser', array('uid' => $user->getUID(), 'password' => $password));
-			});
-			self::$userSession->listen('\OC\User', 'preDelete', function ($user) {
-				/** @var $user \OC\User\User */
-				\OC_Hook::emit('OC_User', 'pre_deleteUser', array('run' => true, 'uid' => $user->getUID()));
-			});
-			self::$userSession->listen('\OC\User', 'postDelete', function ($user) {
-				/** @var $user \OC\User\User */
-				\OC_Hook::emit('OC_User', 'post_deleteUser', array('uid' => $user->getUID()));
-			});
-			self::$userSession->listen('\OC\User', 'preSetPassword', function ($user, $password, $recoveryPassword) {
-				/** @var $user \OC\User\User */
-				OC_Hook::emit('OC_User', 'pre_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword));
-			});
-			self::$userSession->listen('\OC\User', 'postSetPassword', function ($user, $password, $recoveryPassword) {
-				/** @var $user \OC\User\User */
-				OC_Hook::emit('OC_User', 'post_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword));
-			});
-			self::$userSession->listen('\OC\User', 'preLogin', function ($uid, $password) {
-				\OC_Hook::emit('OC_User', 'pre_login', array('run' => true, 'uid' => $uid, 'password' => $password));
-			});
-			self::$userSession->listen('\OC\User', 'postLogin', function ($user, $password) {
-				/** @var $user \OC\User\User */
-				\OC_Hook::emit('OC_User', 'post_login', array('run' => true, 'uid' => $user->getUID(), 'password' => $password));
-			});
-			self::$userSession->listen('\OC\User', 'logout', function () {
-				\OC_Hook::emit('OC_User', 'logout', array());
-			});
-		}
-		return self::$userSession;
+		return OC::$server->getUserSession();
 	}
 
 	/**
 	 * @return \OC\User\Manager
 	 */
 	public static function getManager() {
-		return self::getUserSession()->getManager();
+		return OC::$server->getUserManager();
 	}
 
 	private static $_backends = array();