diff --git a/.gitignore b/.gitignore
index 25cb1b227f9b12b73404bd328ca4cd240a740232..e61ec6f035930b0cf4da454aab61374f46b82c1c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
 /data
 /owncloud
 /config/config.php
+/config/*.config.php
 /config/mount.php
 /apps/inc.php
 
diff --git a/apps/user_ldap/tests/access.php b/apps/user_ldap/tests/access.php
new file mode 100644
index 0000000000000000000000000000000000000000..9beb2b973365a051b0436dbeb4d05358049d7cc4
--- /dev/null
+++ b/apps/user_ldap/tests/access.php
@@ -0,0 +1,71 @@
+<?php
+/**
+* ownCloud
+*
+* @author Arthur Schiwon
+* @copyright 2013 Arthur Schiwon blizzz@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 OCA\user_ldap\tests;
+
+use \OCA\user_ldap\lib\Access;
+use \OCA\user_ldap\lib\Connection;
+use \OCA\user_ldap\lib\ILDAPWrapper;
+
+class Test_Access extends \PHPUnit_Framework_TestCase {
+	private function getConnecterAndLdapMock() {
+		static $conMethods;
+		static $accMethods;
+
+		if(is_null($conMethods) || is_null($accMethods)) {
+			$conMethods = get_class_methods('\OCA\user_ldap\lib\Connection');
+			$accMethods = get_class_methods('\OCA\user_ldap\lib\Access');
+		}
+		$lw  = $this->getMock('\OCA\user_ldap\lib\ILDAPWrapper');
+		$connector = $this->getMock('\OCA\user_ldap\lib\Connection',
+									$conMethods,
+									array($lw, null, null));
+
+		return array($lw, $connector);
+	}
+
+	public function testEscapeFilterPartValidChars() {
+		list($lw, $con) = $this->getConnecterAndLdapMock();
+		$access = new Access($con, $lw);
+
+		$input = 'okay';
+		$this->assertTrue($input === $access->escapeFilterPart($input));
+	}
+
+	public function testEscapeFilterPartEscapeWildcard() {
+		list($lw, $con) = $this->getConnecterAndLdapMock();
+		$access = new Access($con, $lw);
+
+		$input = '*';
+		$expected = '\\\\*';
+		$this->assertTrue($expected === $access->escapeFilterPart($input));
+	}
+
+	public function testEscapeFilterPartEscapeWildcard2() {
+		list($lw, $con) = $this->getConnecterAndLdapMock();
+		$access = new Access($con, $lw);
+
+		$input = 'foo*bar';
+		$expected = 'foo\\\\*bar';
+		$this->assertTrue($expected === $access->escapeFilterPart($input));
+	}
+}
\ No newline at end of file
diff --git a/apps/user_ldap/tests/user_ldap.php b/apps/user_ldap/tests/user_ldap.php
index 9193a005ae5da9aa9d0861e1d085282756d02858..8c8d85b3c334fc156e31873f15d0dd88eb0e6a33 100644
--- a/apps/user_ldap/tests/user_ldap.php
+++ b/apps/user_ldap/tests/user_ldap.php
@@ -83,6 +83,12 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
 	 * @return void
 	 */
 	private function prepareAccessForCheckPassword(&$access) {
+		$access->expects($this->once())
+			   ->method('escapeFilterPart')
+			   ->will($this->returnCallback(function($uid) {
+				   return $uid;
+			   }));
+
 		$access->connection->expects($this->any())
 			   ->method('__get')
 			   ->will($this->returnCallback(function($name) {
@@ -116,17 +122,34 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
 			   }));
 	}
 
-	public function testCheckPassword() {
+	public function testCheckPasswordUidReturn() {
 		$access = $this->getAccessMock();
+
 		$this->prepareAccessForCheckPassword($access);
 		$backend = new UserLDAP($access);
 		\OC_User::useBackend($backend);
 
 		$result = $backend->checkPassword('roland', 'dt19');
 		$this->assertEquals('gunslinger', $result);
+	}
+
+	public function testCheckPasswordWrongPassword() {
+		$access = $this->getAccessMock();
+
+		$this->prepareAccessForCheckPassword($access);
+		$backend = new UserLDAP($access);
+		\OC_User::useBackend($backend);
 
 		$result = $backend->checkPassword('roland', 'wrong');
 		$this->assertFalse($result);
+	}
+
+	public function testCheckPasswordWrongUser() {
+		$access = $this->getAccessMock();
+
+		$this->prepareAccessForCheckPassword($access);
+		$backend = new UserLDAP($access);
+		\OC_User::useBackend($backend);
 
 		$result = $backend->checkPassword('mallory', 'evil');
 		$this->assertFalse($result);
@@ -140,9 +163,23 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
 
 		$result = \OCP\User::checkPassword('roland', 'dt19');
 		$this->assertEquals('gunslinger', $result);
+	}
+
+	public function testCheckPasswordPublicAPIWrongPassword() {
+		$access = $this->getAccessMock();
+		$this->prepareAccessForCheckPassword($access);
+		$backend = new UserLDAP($access);
+		\OC_User::useBackend($backend);
 
 		$result = \OCP\User::checkPassword('roland', 'wrong');
 		$this->assertFalse($result);
+	}
+
+	public function testCheckPasswordPublicAPIWrongUser() {
+		$access = $this->getAccessMock();
+		$this->prepareAccessForCheckPassword($access);
+		$backend = new UserLDAP($access);
+		\OC_User::useBackend($backend);
 
 		$result = \OCP\User::checkPassword('mallory', 'evil');
 		$this->assertFalse($result);
@@ -154,6 +191,12 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
 	 * @return void
 	 */
 	private function prepareAccessForGetUsers(&$access) {
+		$access->expects($this->once())
+			   ->method('escapeFilterPart')
+			   ->will($this->returnCallback(function($search) {
+				   return $search;
+			   }));
+
 		$access->expects($this->any())
 			   ->method('getFilterPartForUserSearch')
 			   ->will($this->returnCallback(function($search) {
@@ -191,28 +234,52 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
 			   ->will($this->returnArgument(0));
 	}
 
-	public function testGetUsers() {
+	public function testGetUsersNoParam() {
 		$access = $this->getAccessMock();
 		$this->prepareAccessForGetUsers($access);
 		$backend = new UserLDAP($access);
 
 		$result = $backend->getUsers();
 		$this->assertEquals(3, count($result));
+	}
+
+	public function testGetUsersLimitOffset() {
+		$access = $this->getAccessMock();
+		$this->prepareAccessForGetUsers($access);
+		$backend = new UserLDAP($access);
 
 		$result = $backend->getUsers('', 1, 2);
 		$this->assertEquals(1, count($result));
+	}
+
+	public function testGetUsersLimitOffset2() {
+		$access = $this->getAccessMock();
+		$this->prepareAccessForGetUsers($access);
+		$backend = new UserLDAP($access);
 
 		$result = $backend->getUsers('', 2, 1);
 		$this->assertEquals(2, count($result));
+	}
+
+	public function testGetUsersSearchWithResult() {
+		$access = $this->getAccessMock();
+		$this->prepareAccessForGetUsers($access);
+		$backend = new UserLDAP($access);
 
 		$result = $backend->getUsers('yo');
 		$this->assertEquals(2, count($result));
+	}
+
+	public function testGetUsersSearchEmptyResult() {
+		$access = $this->getAccessMock();
+		$this->prepareAccessForGetUsers($access);
+		$backend = new UserLDAP($access);
 
 		$result = $backend->getUsers('nix');
 		$this->assertEquals(0, count($result));
 	}
 
-	public function testGetUsersViaAPI() {
+	public function testGetUsersViaAPINoParam() {
 		$access = $this->getAccessMock();
 		$this->prepareAccessForGetUsers($access);
 		$backend = new UserLDAP($access);
@@ -220,15 +287,43 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
 
 		$result = \OCP\User::getUsers();
 		$this->assertEquals(3, count($result));
+	}
+
+	public function testGetUsersViaAPILimitOffset() {
+		$access = $this->getAccessMock();
+		$this->prepareAccessForGetUsers($access);
+		$backend = new UserLDAP($access);
+		\OC_User::useBackend($backend);
 
 		$result = \OCP\User::getUsers('', 1, 2);
 		$this->assertEquals(1, count($result));
+	}
+
+	public function testGetUsersViaAPILimitOffset2() {
+		$access = $this->getAccessMock();
+		$this->prepareAccessForGetUsers($access);
+		$backend = new UserLDAP($access);
+		\OC_User::useBackend($backend);
 
 		$result = \OCP\User::getUsers('', 2, 1);
 		$this->assertEquals(2, count($result));
+	}
+
+	public function testGetUsersViaAPISearchWithResult() {
+		$access = $this->getAccessMock();
+		$this->prepareAccessForGetUsers($access);
+		$backend = new UserLDAP($access);
+		\OC_User::useBackend($backend);
 
 		$result = \OCP\User::getUsers('yo');
 		$this->assertEquals(2, count($result));
+	}
+
+	public function testGetUsersViaAPISearchEmptyResult() {
+		$access = $this->getAccessMock();
+		$this->prepareAccessForGetUsers($access);
+		$backend = new UserLDAP($access);
+		\OC_User::useBackend($backend);
 
 		$result = \OCP\User::getUsers('nix');
 		$this->assertEquals(0, count($result));
diff --git a/core/css/mobile.css b/core/css/mobile.css
new file mode 100644
index 0000000000000000000000000000000000000000..a63aa902d347ce73850feac1a86ac1ac4e6b9522
--- /dev/null
+++ b/core/css/mobile.css
@@ -0,0 +1,22 @@
+@media only screen and (max-width: 600px) {
+
+/* compress search box on mobile, expand when focused */
+.searchbox input[type="search"] {
+	width: 15%;
+	-webkit-transition: width 100ms;
+	-moz-transition: width 100ms;
+	-o-transition: width 100ms;
+	transition: width 100ms;
+}
+.searchbox input[type="search"]:focus,
+.searchbox input[type="search"]:active {
+	width: 155px;
+}
+
+/* do not show display name on mobile when profile picture is present */
+#header .avatardiv.avatardiv-shown + #expandDisplayName {
+	display: none;
+}
+
+
+}
diff --git a/core/css/styles.css b/core/css/styles.css
index 22ba60dd2b7ef99a02a9579d0d94ab72a66bdd3c..341a507ce37956f5868822f1e57e85ff75dda642 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -37,11 +37,12 @@ body { background:#fefefe; font:normal .8em/1.6em "Helvetica Neue",Helvetica,Ari
 .header-right { float:right; vertical-align:middle; padding:0.5em; }
 .header-right > * { vertical-align:middle; }
 
+/* Profile picture in header */
 #header .avatardiv {
 	float: left;
 	display: inline-block;
+	margin-right: 5px;
 }
-
 #header .avatardiv img {
 	opacity: 1;
 }
@@ -218,17 +219,19 @@ textarea:disabled {
 		color: #bbb;
 	}
 
-
+/* Searchbox */
 .searchbox input[type="search"] {
+	position: relative;
 	font-size: 1.2em;
-	padding: .2em .5em .2em 1.5em;
+	padding-left: 1.5em;
 	background: #fff url('../img/actions/search.svg') no-repeat .5em center;
 	border: 0;
-	border-radius: 1em;
+	border-radius: 2em;
 	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70); opacity: .7;
-	margin-top: 10px;
+	margin-top: 6px;
 	float: right;
 }
+
 input[type="submit"].enabled {
 	background: #66f866;
 	border: 1px solid #5e5;
@@ -719,12 +722,11 @@ label.infield { cursor:text !important; top:1.05em; left:.85em; }
 /* USER MENU */
 #settings {
 	float: right;
-	margin-top: 7px;
-	margin-left: 10px;
 	color: #bbb;
 }
 #expand {
-	padding: 15px 15px 15px 5px;
+	display: block;
+	padding: 7px 12px 6px 7px;
 	cursor: pointer;
 	font-weight: bold;
 }
diff --git a/core/js/avatar.js b/core/js/avatar.js
index c54c40687689259fb0ee4e04d4e48094ebac2856..67d6b9b7b954469158c11b6b7f83fe99a994ea86 100644
--- a/core/js/avatar.js
+++ b/core/js/avatar.js
@@ -1,6 +1,13 @@
 $(document).ready(function(){
 	if (OC.currentUser) {
-		$('#header .avatardiv').avatar(OC.currentUser, 32, undefined, true);
+		var callback = function() {
+			// do not show display name on mobile when profile picture is present
+			if($('#header .avatardiv').children().length > 0) {
+				$('#header .avatardiv').addClass('avatardiv-shown');
+			}
+		};
+
+		$('#header .avatardiv').avatar(OC.currentUser, 32, undefined, true, callback);
 		// Personal settings
 		$('#avatar .avatardiv').avatar(OC.currentUser, 128);
 	}
diff --git a/core/js/jquery.avatar.js b/core/js/jquery.avatar.js
index 6012eccfad6ddcc65bdc85bcea871cfcc8c29fac..02a40c088b4f46866f0a448cdecb2b2aac69bb6e 100644
--- a/core/js/jquery.avatar.js
+++ b/core/js/jquery.avatar.js
@@ -39,10 +39,15 @@
  * This will behave like the first example, but it will hide the avatardiv, if
  * it will display the default placeholder. undefined is the ie8fix from
  * example 4 and can be either true, or false/undefined, to be ignored.
+ *
+ * 6. $('.avatardiv').avatar('jdoe', 128, undefined, true, callback);
+ * This will behave like the above example, but it will call the function
+ * defined in callback after the avatar is placed into the DOM.
+ *
  */
 
 (function ($) {
-	$.fn.avatar = function(user, size, ie8fix, hidedefault) {
+	$.fn.avatar = function(user, size, ie8fix, hidedefault, callback) {
 		if (typeof(size) === 'undefined') {
 			if (this.height() > 0) {
 				size = this.height();
@@ -91,6 +96,9 @@
 						$div.html('<img src="'+url+'">');
 					}
 				}
+				if(typeof callback === 'function') {
+					callback();
+				}
 			});
 		});
 	};
diff --git a/core/js/js.js b/core/js/js.js
index d4d2583f1e537c28272f528594d8bef2284ee893..ec890be4541d736b366beccc8d1e9e361d71c055 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -860,6 +860,7 @@ function initCore() {
 	// checkShowCredentials();
 	// $('input#user, input#password').keyup(checkShowCredentials);
 
+	// user menu
 	$('#settings #expand').keydown(function(event) {
 		if (event.which === 13 || event.which === 32) {
 			$('#expand').click()
@@ -872,7 +873,8 @@ function initCore() {
 	$('#settings #expanddiv').click(function(event){
 		event.stopPropagation();
 	});
-	$(document).click(function(){//hide the settings menu when clicking outside it
+	//hide the user menu when clicking outside it
+	$(document).click(function(){
 		$('#settings #expanddiv').slideUp(200);
 	});
 
@@ -987,6 +989,17 @@ OC.set=function(name, value) {
 	context[tail]=value;
 };
 
+// fix device width on windows phone
+(function() {
+	if ("-ms-user-select" in document.documentElement.style && navigator.userAgent.match(/IEMobile\/10\.0/)) {
+		var msViewportStyle = document.createElement("style");
+		msViewportStyle.appendChild(
+			document.createTextNode("@-ms-viewport{width:auto!important}")
+		);
+		document.getElementsByTagName("head")[0].appendChild(msViewportStyle);
+	}
+})();
+
 /**
  * select a range in an input field
  * @link http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area
diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php
index 44413f5a2a87d3288139d8f5556669fac91a0ce0..3d89750348073ee79458d2017436f53c258eb89c 100644
--- a/core/templates/layout.user.php
+++ b/core/templates/layout.user.php
@@ -15,7 +15,7 @@
 		</title>
 		<meta charset="utf-8">
 		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-		<meta name="viewport" content="width=device-width, initial-scale=1.0">
+		<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=1.0">
 		<meta name="apple-itunes-app" content="app-id=543672169">
 		<link rel="shortcut icon" href="<?php print_unescaped(image_path('', 'favicon.png')); ?>" />
 		<link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>" />
@@ -51,12 +51,12 @@
 			<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
 			<div id="settings" class="svg">
 				<span id="expand" tabindex="0" role="link">
+					<?php if ($_['enableAvatars']): ?>
+					<div class="avatardiv"></div>
+					<?php endif; ?>
 					<span id="expandDisplayName"><?php  p(trim($_['user_displayname']) != '' ? $_['user_displayname'] : $_['user_uid']) ?></span>
 					<img class="svg" alt="" src="<?php print_unescaped(image_path('', 'actions/caret.svg')); ?>" />
 				</span>
-				<?php if ($_['enableAvatars']): ?>
-				<div class="avatardiv"></div>
-				<?php endif; ?>
 				<div id="expanddiv">
 				<ul>
 				<?php foreach($_['settingsnavigation'] as $entry):?>
diff --git a/lib/base.php b/lib/base.php
index a5f064bdb4be7d8ef6d6a5d66123e49959e67be1..84177c7ba6c2635afd2d3a6b03c6d19afc006a77 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -332,6 +332,7 @@ class OC {
 		}
 
 		OC_Util::addStyle("styles");
+		OC_Util::addStyle("mobile");
 		OC_Util::addStyle("icons");
 		OC_Util::addStyle("apps");
 		OC_Util::addStyle("fixes");
diff --git a/lib/private/user.php b/lib/private/user.php
index 08ead712028e894dc6211797b5eeb68480da47d1..a89b7286c1009e48525cf039ccd4ac41228a9fe4 100644
--- a/lib/private/user.php
+++ b/lib/private/user.php
@@ -227,6 +227,7 @@ class OC_User {
 	 * Log in a user and regenerate a new session - if the password is ok
 	 */
 	public static function login($uid, $password) {
+		session_regenerate_id(true);
 		return self::getUserSession()->login($uid, $password);
 	}
 
diff --git a/lib/private/user/session.php b/lib/private/user/session.php
index cd03b30205fb3eb7c0bab2829e383aeba0fbade7..1740bad5abec22b1fdfa0aaf078e1c7dbb4b7fb8 100644
--- a/lib/private/user/session.php
+++ b/lib/private/user/session.php
@@ -157,7 +157,6 @@ class Session implements Emitter, \OCP\IUserSession {
 		if($user !== false) {
 			if (!is_null($user)) {
 				if ($user->isEnabled()) {
-					session_regenerate_id(true);
 					$this->setUser($user);
 					$this->setLoginName($uid);
 					$this->manager->emit('\OC\User', 'postLogin', array($user, $password));
diff --git a/settings/js/personal.js b/settings/js/personal.js
index ef261b50bbca1336f00d87da6839b6cb73465987..5944272067bab5a1575325ea9cbabffa9d994032 100644
--- a/settings/js/personal.js
+++ b/settings/js/personal.js
@@ -52,9 +52,11 @@ function updateAvatar (hidedefault) {
 
 	if(hidedefault) {
 		$headerdiv.hide();
+		$('#header .avatardiv').removeClass('avatardiv-shown');
 	} else {
 		$headerdiv.css({'background-color': ''});
 		$headerdiv.avatar(OC.currentUser, 32, true);
+		$('#header .avatardiv').addClass('avatardiv-shown');
 	}
 	$displaydiv.css({'background-color': ''});
 	$displaydiv.avatar(OC.currentUser, 128, true);
diff --git a/tests/lib/connector/sabre/file.php b/tests/lib/connector/sabre/file.php
index 50b8711a90dc940dbc7402b8ba40fefbe9e7f355..c2f0ffa12d4212490b0928246ecac9492032ce5f 100644
--- a/tests/lib/connector/sabre/file.php
+++ b/tests/lib/connector/sabre/file.php
@@ -48,21 +48,6 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase {
 		$etag = $file->put('test data');
 	}
 
-	/**
-	 * Test setting name with setName()
-	 */
-	public function testSetName() {
-		// setup
-		$file = new OC_Connector_Sabre_File('/test.txt');
-		$file->fileView = $this->getMock('\OC\Files\View', array('isUpdatable'), array(), '', FALSE);
-		$file->fileView->expects($this->any())->method('isUpdatable')->withAnyParameters()->will($this->returnValue(true));
-		$etag = $file->put('test data');
-		$file->setName('/renamed.txt');
-		$this->assertTrue($file->fileView->file_exists('/renamed.txt'));
-		// clean up
-		$file->delete();
-	}
-
 	/**
 	 * Test setting name with setName() with invalid chars
 	 * @expectedException Sabre_DAV_Exception_BadRequest
diff --git a/tests/lib/share/backend.php b/tests/lib/share/backend.php
index 2f6c84678ffc3e3b661a0f0e2dec3ee3a9daf839..420bd9d88b370bcb1345c23736899e166d7d38fb 100644
--- a/tests/lib/share/backend.php
+++ b/tests/lib/share/backend.php
@@ -26,7 +26,7 @@ class Test_Share_Backend implements OCP\Share_Backend {
 	const FORMAT_SOURCE = 0;
 	const FORMAT_TARGET = 1;
 	const FORMAT_PERMISSIONS = 2;
-	
+
 	private $testItem1 = 'test.txt';
 	private $testItem2 = 'share.txt';
 
@@ -57,11 +57,11 @@ class Test_Share_Backend implements OCP\Share_Backend {
 	public function formatItems($items, $format, $parameters = null) {
 		$testItems = array();
 		foreach ($items as $item) {
-			if ($format == self::FORMAT_SOURCE) {
+			if ($format === self::FORMAT_SOURCE) {
 				$testItems[] = $item['item_source'];
-			} else if ($format == self::FORMAT_TARGET) {
+			} else if ($format === self::FORMAT_TARGET) {
 				$testItems[] = $item['item_target'];
-			} else if ($format == self::FORMAT_PERMISSIONS) {
+			} else if ($format === self::FORMAT_PERMISSIONS) {
 				$testItems[] = $item['permissions'];
 			}
 		}
diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php
index a89f100d97a0a19dba7906eb817cc76eedf23695..b5cba9430aac998bb547f03de03525fcc4847a1a 100644
--- a/tests/lib/share/share.php
+++ b/tests/lib/share/share.php
@@ -622,21 +622,21 @@ class Test_Share extends PHPUnit_Framework_TestCase {
 		OC_User::setUserId($this->user1);
 		$this->assertEquals(
 			array('test.txt', 'test.txt'),
-			OCP\Share::getItemsShared('test', 'test.txt'),
+			OCP\Share::getItemsShared('test', Test_Share_Backend::FORMAT_SOURCE),
 			'Failed asserting that the test.txt file is shared exactly two times by user1.'
 		);
 
 		OC_User::setUserId($this->user2);
 		$this->assertEquals(
 			array('test.txt'),
-			OCP\Share::getItemsShared('test', 'test.txt'),
+			OCP\Share::getItemsShared('test', Test_Share_Backend::FORMAT_SOURCE),
 			'Failed asserting that the test.txt file is shared exactly once by user2.'
 		);
 
 		OC_User::setUserId($this->user3);
 		$this->assertEquals(
 			array('test.txt'),
-			OCP\Share::getItemsShared('test', 'test.txt'),
+			OCP\Share::getItemsShared('test', Test_Share_Backend::FORMAT_SOURCE),
 			'Failed asserting that the test.txt file is shared exactly once by user3.'
 		);
 
diff --git a/tests/lib/urlgenerator.php b/tests/lib/urlgenerator.php
new file mode 100644
index 0000000000000000000000000000000000000000..875a7f06580bb87ebe5292f3e781ed7b4a0f0f6f
--- /dev/null
+++ b/tests/lib/urlgenerator.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Copyright (c) 2014 Bjoern Schiessle <schiessle@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class Test_Urlgenerator extends PHPUnit_Framework_TestCase {
+
+
+	/**
+	 * @small
+	 * @brief test absolute URL construction
+	 * @dataProvider provideURLs
+	 */
+	function testGetAbsoluteURL($url, $expectedResult) {
+
+		$urlGenerator = new \OC\URLGenerator(null);
+		$result = $urlGenerator->getAbsoluteURL($url);
+
+		$this->assertEquals($expectedResult, $result);
+	}
+
+	public function provideURLs() {
+		return array(
+			array("index.php", "http://localhost/index.php"),
+			array("/index.php", "http://localhost/index.php"),
+			array("/apps/index.php", "http://localhost/apps/index.php"),
+			array("apps/index.php", "http://localhost/apps/index.php"),
+			);
+	}
+}
+