diff --git a/lib/private/User/Database.php b/lib/private/User/Database.php
index 060953c3009f6acde8b167fab3d8a70d7c335126..ec463ba91dd37b0be8bcd25386a32c06541bab8d 100644
--- a/lib/private/User/Database.php
+++ b/lib/private/User/Database.php
@@ -234,7 +234,7 @@ class Database extends Backend implements IUserBackend {
 	/**
 	 * Load an user in the cache
 	 * @param string $uid the username
-	 * @return boolean
+	 * @return boolean true if user was found, false otherwise
 	 */
 	private function loadUser($uid) {
 		if (!isset($this->cache[$uid])) {
@@ -254,9 +254,14 @@ class Database extends Backend implements IUserBackend {
 
 			$this->cache[$uid] = false;
 
-			while ($row = $result->fetchRow()) {
+			// "uid" is primary key, so there can only be a single result
+			if ($row = $result->fetchRow()) {
 				$this->cache[$uid]['uid'] = $row['uid'];
 				$this->cache[$uid]['displayname'] = $row['displayname'];
+				$result->closeCursor();
+			} else {
+				$result->closeCursor();
+				return false;
 			}
 		}
 
diff --git a/tests/lib/User/DatabaseTest.php b/tests/lib/User/DatabaseTest.php
index d7e4b9256cb1413a38eb8d74a46866f967e84eac..0e6900651cdd3684637047093f0c120c22287db3 100644
--- a/tests/lib/User/DatabaseTest.php
+++ b/tests/lib/User/DatabaseTest.php
@@ -87,7 +87,7 @@ class DatabaseTest extends Backend {
 		$this->eventDispatcher->expects($this->once())->method('dispatch')
 			->willReturnCallback(
 				function ($eventName, GenericEvent $event) {
-					$this->assertSame('OCP\PasswordPolicy::validate',  $eventName);
+					$this->assertSame('OCP\PasswordPolicy::validate', $eventName);
 					$this->assertSame('newpass', $event->getSubject());
 					throw new HintException('password change failed', 'password change failed');
 				}
@@ -96,4 +96,21 @@ class DatabaseTest extends Backend {
 		$this->backend->setPassword($user, 'newpass');
 		$this->assertSame($user, $this->backend->checkPassword($user, 'newpass'));
 	}
+
+	public function testCreateUserInvalidatesCache() {
+		$user1 = $this->getUniqueID('test_');
+		$this->assertFalse($this->backend->userExists($user1));
+		$this->backend->createUser($user1, 'pw');
+		$this->assertTrue($this->backend->userExists($user1));
+	}
+
+	public function testDeleteUserInvalidatesCache() {
+		$user1 = $this->getUniqueID('test_');
+		$this->backend->createUser($user1, 'pw');
+		$this->assertTrue($this->backend->userExists($user1));
+		$this->backend->deleteUser($user1);
+		$this->assertFalse($this->backend->userExists($user1));
+		$this->backend->createUser($user1, 'pw2');
+		$this->assertTrue($this->backend->userExists($user1));
+	}
 }