diff --git a/apps/files_encryption/tests/migration.php b/apps/files_encryption/tests/migration.php
index d6cd0357ae05597c1553cd9ea152d97ae942fb36..e58ceb0bc6f1e7eed6f065800ea050ffcfcffdfd 100644
--- a/apps/files_encryption/tests/migration.php
+++ b/apps/files_encryption/tests/migration.php
@@ -50,10 +50,44 @@ class Test_Migration extends PHPUnit_Framework_TestCase {
 
 	}
 
-	public function testDataMigration() {
+	public function checkLastIndexId() {
+		$query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` ('
+			.' `item_type`, `item_source`, `item_target`, `share_type`,'
+			.' `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`,'
+			.' `file_target`, `token`, `parent`, `expiration`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)');
+		$query->bindValue(1, 'file');
+		$query->bindValue(2, 949);
+		$query->bindValue(3, '/949');
+		$query->bindValue(4, 0);
+		$query->bindValue(5, 'migrate-test-user');
+		$query->bindValue(6, 'migrate-test-owner');
+		$query->bindValue(7, 23);
+		$query->bindValue(8, 1402493312);
+		$query->bindValue(9, 0);
+		$query->bindValue(10, '/migration.txt');
+		$query->bindValue(11, null);
+		$query->bindValue(12, null);
+		$query->bindValue(13, null);
+		$this->assertEquals(1, $query->execute());
+
+		$this->assertNotEquals('0', \OC_DB::insertid('*PREFIX*share'));
+
+		// cleanup
+		$query = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `file_target` = ?');
+		$query->bindValue(1, '/migration.txt');
+		$this->assertEquals(1, $query->execute());
+
+	}
+
+	public function testBrokenLastIndexId() {
+
+		// create test table
+		$this->checkLastIndexId();
+		OC_DB::createDbFromStructure(__DIR__ . '/encryption_table.xml');
+		$this->checkLastIndexId();
+	}
 
-		//FIXME fix this test so that we can enable it again
-		$this->markTestIncomplete('Disabled, because of this tests a lot of other tests fail at the moment');
+	public function testDataMigration() {
 
 		$this->assertTableNotExist('encryption_test');
 
@@ -80,9 +114,6 @@ class Test_Migration extends PHPUnit_Framework_TestCase {
 
 	public function testDuplicateDataMigration() {
 
-		//FIXME fix this test so that we can enable it again
-		$this->markTestIncomplete('Disabled, because of this tests a lot of other tests fail at the moment');
-
 		// create test table
 		OC_DB::createDbFromStructure(__DIR__ . '/encryption_table.xml');
 
diff --git a/lib/private/db.php b/lib/private/db.php
index 6aaf31a30cd081edcb8b265df7f713a3dd9c4935..221a369cad21e0fb488897916ad5f598e0a2e083 100644
--- a/lib/private/db.php
+++ b/lib/private/db.php
@@ -105,6 +105,16 @@ class OC_DB {
 		return true;
 	}
 
+	/**
+	 * The existing database connection is closed and connected again
+	 */
+	public static function reconnect() {
+		if(self::$connection) {
+			self::$connection->close();
+			self::$connection->connect();
+		}
+	}
+
 	/**
 	 * @return \OC\DB\Connection
 	 */
diff --git a/lib/private/db/mdb2schemamanager.php b/lib/private/db/mdb2schemamanager.php
index a6d9e30cf80dfa7157b1914357e0ff6eb70cb41a..d3e379c9417beb4144f353d634e6991fabd17f2d 100644
--- a/lib/private/db/mdb2schemamanager.php
+++ b/lib/private/db/mdb2schemamanager.php
@@ -24,8 +24,6 @@ class MDB2SchemaManager {
 	 */
 	public function __construct($conn) {
 		$this->conn = $conn;
-		$this->conn->close();
-		$this->conn->connect();
 	}
 
 	/**
@@ -150,6 +148,10 @@ class MDB2SchemaManager {
 			$this->conn->query($sql);
 		}
 		$this->conn->commit();
+
+		if ($this->conn->getDatabasePlatform() instanceof SqlitePlatform) {
+			\OC_DB::reconnect();
+		}
 		return true;
 	}
 }