diff --git a/files/api.php b/files/api.php
index b27228d9676a814ef7bebda65144d5f68e24d706..12bc49dd7f01136f9b6586e7603de0442164c504 100755
--- a/files/api.php
+++ b/files/api.php
@@ -30,23 +30,43 @@ if(!isset($_POST['action']) and isset($_GET['action'])){
 foreach($arguments as &$argument){
 	$argument=stripslashes($argument);
 }
+global $CONFIG_DATADIRECTORY;
 ob_clean();
-switch($arguments['action']){
-	case 'delete':
-		OC_FILES::delete($arguments['dir'],$arguments['file']);
-		break;
-	case 'rename':
-		OC_FILES::move($arguments['dir'],$arguments['file'],$arguments['dir'],$arguments['newname']);
-		break;
-	case 'new':
-		OC_FILES::newfile($arguments['dir'],$arguments['name'],$arguments['type']);
-		break;
-	case 'move':
-		OC_FILES::move($arguments['sourcedir'],$arguments['source'],$arguments['targetdir'],$arguments['target']);
-		break;
-	case 'get':
-		OC_FILES::get($arguments['dir'],$arguments['file']);
-		break;
+if($arguments['action']){
+	switch($arguments['action']){
+		case 'delete':
+			OC_FILES::delete($arguments['dir'],$arguments['file']);
+			break;
+		case 'rename':
+			OC_FILES::move($arguments['dir'],$arguments['file'],$arguments['dir'],$arguments['newname']);
+			break;
+		case 'new':
+			OC_FILES::newfile($arguments['dir'],$arguments['name'],$arguments['type']);
+			break;
+		case 'move':
+			OC_FILES::move($arguments['sourcedir'],$arguments['source'],$arguments['targetdir'],$arguments['target']);
+			break;
+		case 'get':
+			OC_FILES::get($arguments['dir'],$arguments['file']);
+			break;
+		case 'getfiles':
+			echo json_encode(OC_FILES::getdirectorycontent($CONFIG_DATADIRECTORY.'/'.$arguments['dir']));
+			break;
+		case 'login':
+			if(OC_USER::login($arguments['username'],$arguments['password'])){
+				echo 'true';
+			}else{
+				echo 'false';
+			}
+			break;
+		case 'checklogin':
+			if(OC_USER::isLoggedIn()){
+				echo 'true';
+			}else{
+				echo 'false';
+			}
+			break;
+	}
 }
 
 ?>
\ No newline at end of file
diff --git a/inc/lib_base.php b/inc/lib_base.php
index 0685a640c083ace06d9c0e7616c34a28a474d713..b5829c6d999e842bb34c10b84f12b5a5ae251a66 100755
--- a/inc/lib_base.php
+++ b/inc/lib_base.php
@@ -78,7 +78,7 @@ oc_require_once('lib_config.php');
 oc_require_once('lib_user.php');
 oc_require_once('lib_ocs.php');
 @oc_require_once('MDB2.php');
-// @oc_require_once('MDB2/Driver/Manager/common.php');
+oc_require_once('lib_connect.php');
 
 
 if(!is_dir($CONFIG_DATADIRECTORY_ROOT)){
diff --git a/inc/lib_connect.php b/inc/lib_connect.php
new file mode 100644
index 0000000000000000000000000000000000000000..ddf03eb6e7494e58ea0a363ece4744d353c84526
--- /dev/null
+++ b/inc/lib_connect.php
@@ -0,0 +1,163 @@
+<?php
+
+/**
+* ownCloud
+*
+* @author Frank Karlitschek 
+* @copyright 2010 Frank Karlitschek karlitschek@kde.org 
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
+/**
+ * Class for connecting multiply ownCloud installations
+ *
+ */
+class OC_CONNECT{
+	static private $clouds=array();
+	
+	static function connect($path,$user,$password){
+		$cloud=new OC_REMOTE_CLOUD($path,$user,$password);
+		if($cloud->connected){
+			self::$clouds[$path]=$cloud;
+			return $cloud;
+		}else{
+			return false;
+		}
+	}
+}
+
+
+/**
+ * Class for connection to a remote owncloud installation
+ *
+ */
+class OC_REMOTE_CLOUD{
+	private $path;
+	private $connected=false;
+	private $cookiefile=false;
+	
+	/**
+	* make an api call to the remote cloud
+	* @param string $action
+	* @param array parameters
+	* @param bool assoc   when set to true, the result will be parsed as associative array
+	*
+	*/
+	private function apiCall($action,$parameters=false,$assoc=false){
+		if(!$this->cookiefile){
+			$this->cookiefile=sys_get_temp_dir().'/remoteCloudCookie'.uniqid();
+		}
+		$url=$this->path.='/files/api.php';
+		$fields_string="action=$action&";
+		if(is_array($parameters)){
+			foreach($parameters as $key=>$value){
+				$fields_string.=$key.'='.$value.'&';
+			}
+			rtrim($fields_string,'&');
+		}
+		$ch=curl_init();
+		curl_setopt($ch,CURLOPT_URL,$url);
+		curl_setopt($ch,CURLOPT_POST,count($parameters));
+		curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
+		curl_setopt($ch, CURLOPT_COOKIEFILE,$this->cookiefile); 
+		curl_setopt($ch, CURLOPT_COOKIEJAR,$this->cookiefile); 
+		curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
+		$result=trim(curl_exec($ch));
+		$info=curl_getinfo($ch);
+		$httpCode=$info['http_code'];
+		if($httpCode==200 or $httpCode==0){
+			return json_decode($result,$assoc);
+		}else{
+			return false;
+		}
+	}
+	
+	public function __construct($path,$user,$password){
+		$this->path=$path;
+		$this->connected=$this->apiCall('login',array('username'=>$user,'password'=>$password));
+	}
+	
+	/**
+	* check if we are stull logged in on the remote cloud
+	*
+	*/
+	public function isLoggedIn(){
+		if(!$this->connected){
+			return false;
+		}
+		return $this->apiCall('checklogin');
+	}
+	
+	public function __get($name){
+		switch($name){
+			case 'connected':
+				return $this->connected;
+		}
+	}
+	
+	/**
+	* disconnect from the remote cloud
+	*
+	*/
+	public function disconnect(){
+		$this->connected=false;
+		if(is_file($this->cookiefile)){
+			unlink($this->cookiefile);
+		}
+		$this->cookiefile=false;
+	}
+	
+	/**
+	* get the files inside a directory of the remote cloud
+	* @param string $dir
+	*/
+	public function getFiles($dir){
+		if(!$this->connected){
+			return false;
+		}
+		return $this->apiCall('getfiles',array('dir'=>$dir),true);
+	}
+}
+
+function OC_CONNECT_TEST($path,$user,$password){
+	echo 'connecting...';
+	$remote=OC_CONNECT::connect($path,$user,$password);
+	if($remote->connected){
+		echo 'done<br/>';
+		if($remote->isLoggedIn()){
+			echo 'logged in, session working<br/>';
+			echo 'trying to get remote files...';
+			$files=$remote->getFiles('');
+			if($files){
+				echo count($files).' files found:<br/>';
+				foreach($files as $file){
+					echo "{$file['type']} {$file['name']}: {$file['size']} bytes<br/>";
+				}
+			}else{
+				echo 'fail<br/>';
+			}
+		}else{
+			echo 'no longer logged in, session fail<br/>';
+		}
+	}else{
+		echo 'fail<br/>';
+	}
+	$remote->disconnect();
+	die();
+}
+
+
+?>
diff --git a/inc/lib_files.php b/inc/lib_files.php
index f00f235d7495583046623c881099af5a13504114..e8aa71f74b76159f3042a4929d41a909f7ba9af9 100755
--- a/inc/lib_files.php
+++ b/inc/lib_files.php
@@ -204,10 +204,9 @@ class OC_FILES {
 	* @param  string  path
 	* @return string  guessed mime type
 	*/
-	function getMimeType($path){
+	static function getMimeType($path){
 		return OC_FILESYSTEM::getMimeType($path);
 	}
-
 }
 
 function zipAddDir($dir,$zip,$internalDir=''){