diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php
index 2cedfe061a17c223838647878157dc38cb2cff20..14d7e7da1651c1aef64d07c1b5da6affc6d4bbeb 100644
--- a/apps/files_versions/lib/versions.php
+++ b/apps/files_versions/lib/versions.php
@@ -92,7 +92,7 @@ class Storage {
 			}
 
 			// store a new version of a file
-			$users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.time());
+			$users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename));
 
 			// expire old revisions if necessary
 			Storage::expire($filename);
@@ -109,13 +109,20 @@ class Storage {
 			list($uid, $filename) = self::getUidAndFilename($filename);
 			$users_view = new \OC_FilesystemView('/'.$uid);
 
+			//first create a new version
+			if ( !$users_view->file_exists('files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename))) {
+				$version = 'files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename);
+				$users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.$users_view->filemtime('files'.$filename));
+			}
+			
 			// rollback
 			if( @$users_view->copy('files_versions'.$filename.'.v'.$revision, 'files'.$filename) ) {
-
+				Storage::expire($filename);
 				return true;
 
 			}else{
-
+				if (isset($version) ) {
+					$users_view->unlink($version);
 				return false;
 
 			}
@@ -274,7 +281,7 @@ class Storage {
 				} else { // time to move on to the next interval
 					$interval++;
 					$step = Storage::$max_versions_per_interval[$interval]['step'];
-					$nextVersion = $version[$i]['version'] - $step;
+					$nextVersion = $versions[$i]['version'] - $step;
 					if ( Storage::$max_versions_per_interval[$interval]['intervalEndsAfter'] == -1 ) {
 						$nextInterval = -1;
 					} else {