diff --git a/lib/db.php b/lib/db.php
index 58479bacfb9562abb3bbbd89187d05f9cda93574..421b08c2320cb9376a0b8842c62ba4c8036e072a 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -263,7 +263,7 @@ class OC_DB {
 	 *
 	 * TODO: write more documentation
 	 */
-	public static function getDbStructure( $file ){
+	public static function getDbStructure( $file ,$mode=MDB2_SCHEMA_DUMP_STRUCTURE){
 		self::connectScheme();
 
 		// write the scheme
@@ -299,7 +299,7 @@ class OC_DB {
 		$file2 = tempnam( get_temp_dir(), 'oc_db_scheme_' );
 		$content = str_replace( '*dbname*', $CONFIG_DBNAME, $content );
 		$content = str_replace( '*dbprefix*', $CONFIG_DBTABLEPREFIX, $content );
-		if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite don't
+		if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
 			$content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content );
 		}
 		file_put_contents( $file2, $content );
@@ -326,6 +326,39 @@ class OC_DB {
 
 		return true;
 	}
+	
+	/**
+	 * @brief update the database scheme
+	 * @param $file file to read structure from
+	 */
+	public static function updateDbFromStructure($file){
+		$CONFIG_DBNAME  = OC_Config::getValue( "dbname", "owncloud" );
+		$CONFIG_DBTABLEPREFIX = OC_Config::getValue( "dbtableprefix", "oc_" );
+		$CONFIG_DBTYPE = OC_Config::getValue( "dbtype", "sqlite" );
+
+		self::connectScheme();
+
+		// read file
+		$content = file_get_contents( $file );
+		
+		// Make changes and save them to a temporary file
+		$file2 = tempnam( get_temp_dir(), 'oc_db_scheme_' );
+		$content = str_replace( '*dbname*', $CONFIG_DBNAME, $content );
+		$content = str_replace( '*dbprefix*', $CONFIG_DBTABLEPREFIX, $content );
+		if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
+			$content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content );
+		}
+		file_put_contents( $file2, $content );
+		$previousSchema = self::$schema->getDefinitionFromDatabase();
+		$op = $schema->updateDatabase($file2, $previousSchema, array(), false);
+
+		if (PEAR::isError($op)) {
+		    $error = $op->getMessage();
+		    OC_Log::write('core','Failed to update database structure ('.$error.')',OC_Log::FATAL);
+		    return false;
+		}
+		return true;
+	}
 
 	/**
 	 * @brief connects to a MDB2 database scheme