diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 65fa54baa57ec775d1025b3c990e5a439a69f805..adf7535b765554659af4ffdce141e2b1ebfe0ef5 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -917,13 +917,11 @@ class system{
 	 * This function checks the free space for a given directory
 	 * @param path check path
 	 * @param limit min. free space in bytes
-	 * @return bool - true when the the free space is above limit ohterwise false
+	 * @return bool - true when the the free space is above limit ohterwise false, opt. available disk-space
 	*/
 
-	function check_free_space($path, $limit = 0) {
+	function check_free_space($path, $limit = 0, &$free_space = 0) {
 		$path = rtrim($path, '/');
-		$parts = explode('/', $path);
-        $out = '';
 
 		/**
 		* Make sure that we have only existing directories in the path.
@@ -931,19 +929,16 @@ class system{
 		* Given a file name instead of a directory, the behaviour of the disk_free_space
 		function is unspecified and may differ between operating systems and PHP versions.
         */
-		for ($i = 1; $i < count($parts); $i++) {
-			if ( !is_file($out.'/'.$parts[$i]) && is_dir($out.'/'.$parts[$i]) ) {
-				$out .= '/'.$parts[$i];
-			}
-		}
-
-		unset($parts);
+		while(!is_dir($path) && $path != '/') $path = realpath(dirname($path));
 
-		$res = disk_free_space($out);
+		$free_space = disk_free_space($out);
 
-		if (!$res) return false;
+		if (!$free_space) {
+			$free_space = 0;
+			return false;
+		}
 
-		if ($res >= $limit) {
+		if ($free_space >= $limit) {
 			return true;
 		} else {
 			return false;