diff --git a/lib/private/Repair/Owncloud/SaveAccountsTableData.php b/lib/private/Repair/Owncloud/SaveAccountsTableData.php
index c9e67356fb9c50d1d30677e58db4683ff991e32c..f62f8b56b2638df304d827de0e9fc85e8353bc09 100644
--- a/lib/private/Repair/Owncloud/SaveAccountsTableData.php
+++ b/lib/private/Repair/Owncloud/SaveAccountsTableData.php
@@ -44,6 +44,8 @@ class SaveAccountsTableData implements IRepairStep {
 	/** @var IConfig */
 	protected $config;
 
+	protected $hasForeignKeyOnPersistentLocks = false;
+
 	/**
 	 * @param IDBConnection $db
 	 * @param IConfig $config
@@ -77,6 +79,9 @@ class SaveAccountsTableData implements IRepairStep {
 		}
 
 		// Remove the table
+		if ($this->hasForeignKeyOnPersistentLocks) {
+			$this->db->dropTable('persistent_locks');
+		}
 		$this->db->dropTable('accounts');
 	}
 
@@ -85,14 +90,29 @@ class SaveAccountsTableData implements IRepairStep {
 	 */
 	protected function shouldRun() {
 		$schema = $this->db->createSchema();
+		$prefix = $this->config->getSystemValue('dbtableprefix', 'oc_');
 
-		$tableName = $this->config->getSystemValue('dbtableprefix', 'oc_') . 'accounts';
+		$tableName = $prefix . 'accounts';
 		if (!$schema->hasTable($tableName)) {
 			return false;
 		}
 
 		$table = $schema->getTable($tableName);
-		return $table->hasColumn('user_id');
+		if (!$table->hasColumn('user_id')) {
+			return false;
+		}
+
+		if ($schema->hasTable($prefix . 'persistent_locks')) {
+			$locksTable = $schema->getTable($prefix . 'persistent_locks');
+			$foreignKeys = $locksTable->getForeignKeys();
+			foreach ($foreignKeys as $foreignKey) {
+				if ($tableName === $foreignKey->getForeignTableName()) {
+					$this->hasForeignKeyOnPersistentLocks = true;
+				}
+			}
+		}
+
+		return true;
 	}
 
 	/**