diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php
index 9112655194a4aef59ee76b57383e4456e66249a9..e05d69f784416c4d6ab7e7b6e50f670a04922bb0 100644
--- a/apps/files_external/lib/smb.php
+++ b/apps/files_external/lib/smb.php
@@ -47,6 +47,48 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{
 			$path=substr($path,0,-1);
 		}
 		return 'smb://'.$this->user.':'.$this->password.'@'.$this->host.$this->share.$this->root.$path;
-		
+	}
+
+	public function stat($path){
+		if(!$path and $this->root=='/'){//mtime doesn't work for shares
+			$mtime=$this->shareMTime();
+			$stat=stat($this->constructUrl($path));
+			$stat['mtime']=$mtime;
+			return $stat;
+		}else{
+			return stat($this->constructUrl($path));
+		}
+	}
+
+	/**
+	 * check if a file or folder has been updated since $time
+	 * @param int $time
+	 * @return bool
+	 */
+	public function hasUpdated($path,$time){
+		if(!$path and $this->root=='/'){
+			//mtime doesn't work for shares, but giving the nature of the backend, doing a full update is still just fast enough
+			return true;
+		}else{
+			$actualTime=$this->filemtime($path);
+			return $actualTime>$time;
+		}
+	}
+
+	/**
+	 * get the best guess for the modification time of the share
+	 */
+	private function shareMTime(){
+		$dh=$this->opendir('');
+		$lastCtime=0;
+		while($file=readdir($dh)){
+			if($file!='.' and $file!='..'){
+				$ctime=$this->filemtime($file);
+				if($ctime>$lastCtime){
+					$lastCtime=$ctime;
+				}
+			}
+		}
+		return $lastCtime;
 	}
 }