diff --git a/css/default.php b/css/default.php
index 5f69eeaa1ba6309ee4377623376198c7a242542c..1c7e6e7beeb064a9fe0272570cb2679123fa90ce 100644
--- a/css/default.php
+++ b/css/default.php
@@ -456,15 +456,16 @@ div.moreActionsList tr:hover{
 	height:100%;
 }
 
-table.userlist{
+table.userlist, table.pluginlist{
 	margin:0px;
 	padding:0px;
 	width:100%;
 	border-spacing:0px;
 }
 
-table.userlist>thead{
+table.userlist>thead, table.pluginlist>thead{
 	background-color:#DDD;
+	font-weight:bold;
 }
 
 table.userlist td.sellect{
@@ -490,7 +491,7 @@ p.description{
 	padding-bottom:3px;
 }
 
-#settingsContent_user_managment{
+div.settingsContent{
 	background-color:#F2F2F2;
 	min-height:100%;
 }
@@ -504,4 +505,17 @@ p.description{
 	text-align:left;
 	background-color:#DDD;
 	width:100%;
+}
+
+table.pluginlist td.name{
+	width:150px;
+}
+
+table.pluginlist td.disable{
+	width:50px;
+}
+
+table.pluginlist td.version{
+	width:60px;
+	text-align:center
 }
\ No newline at end of file
diff --git a/inc/lib_files.php b/inc/lib_files.php
index 94eff9ce59ce816fa64e4d23682e1c0280612aed..c8c26df9726885717fbae292a73a27c0fdf6d1ab 100755
--- a/inc/lib_files.php
+++ b/inc/lib_files.php
@@ -306,6 +306,24 @@ function zipAddDir($dir,$zip,$internalDir=''){
     }
 }
 
+//remove a dir and it's content
+function delTree($dir) {
+	if (!file_exists($dir)) return true; 
+	if (!is_dir($dir) || is_link($dir)) return unlink($dir); 
+	foreach (scandir($dir) as $item) { 
+		if ($item == '.' || $item == '..') continue; 
+		if(is_file($dir.'/'.$item)){
+			unlink($dir.'/'.$item);
+		}elseif(is_dir($dir.'/'.$item)){
+			if (!delTree($dir. "/" . $item)){ 
+				return false; 
+			};
+		}
+	}
+	$return=rmdir($dir);
+	return $return;
+}
+
 if(!function_exists('sys_get_temp_dir')) {
     function sys_get_temp_dir() {
         if( $temp=getenv('TMP') )        return $temp;
@@ -320,6 +338,22 @@ if(!function_exists('sys_get_temp_dir')) {
     }
 }
 
+function recursive_copy($src,$dst) { 
+	$dir = opendir($src);
+	@mkdir($dst);
+	while(false !== ( $file = readdir($dir)) ) {
+		if (( $file != '.' ) && ( $file != '..' )) {
+			if ( is_dir($src . '/' . $file) ) {
+				recursive_copy($src . '/' . $file,$dst . '/' . $file);
+			}
+			else {
+				copy($src . '/' . $file,$dst . '/' . $file);
+			}
+		}
+	}
+	closedir($dir); 
+}
+
 global $FAKEDIRS;
 $FAKEDIRS=array();
 
diff --git a/inc/lib_filestorage.php b/inc/lib_filestorage.php
index 3e53e266279b1c7087d3fc6793aacc04cf82b0dd..7dbdfe2457e6f307609e8dfd77be1f6ef92dc3fd 100644
--- a/inc/lib_filestorage.php
+++ b/inc/lib_filestorage.php
@@ -175,13 +175,8 @@ class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{
 			}
 			$source=substr($path1,strrpos($path1,'/')+1);
 			$path2.=$source;
-// 			sleep(30);
-		}else{
-			error_log('isfile');
 		}
-		error_log("copy $path1 to {$this->datadir}$path2");
 		if($return=copy($this->datadir.$path1,$this->datadir.$path2)){
-			error_log('success');
 			$this->notifyObservers($path2,OC_FILEACTION_CREATE);
 		}
 		return $return;
diff --git a/inc/lib_plugin.php b/inc/lib_plugin.php
index 3fe92bd771927b31a922e41aa87829a3d454aa24..76f94a1156d280308e4333c5aa8b38701e146196 100644
--- a/inc/lib_plugin.php
+++ b/inc/lib_plugin.php
@@ -175,11 +175,12 @@ class OC_PLUGIN{
 		global $SERVERROOT;
 		if(is_file($id)){
 			$file=$id;
-		}
-		if(!is_dir($SERVERROOT.'/plugins/'.$id) or !is_file($SERVERROOT.'/plugins/'.$id.'/plugin.xml')){
-			return false;
 		}else{
-			$file=$SERVERROOT.'/plugins/'.$id.'/plugin.xml';
+			if(!is_dir($SERVERROOT.'/plugins/'.$id) or !is_file($SERVERROOT.'/plugins/'.$id.'/plugin.xml')){
+				return false;
+			}else{
+				$file=$SERVERROOT.'/plugins/'.$id.'/plugin.xml';
+			}
 		}
 		$data=array();
 		$plugin=new DOMDocument();
@@ -345,6 +346,34 @@ class OC_PLUGIN{
 		self::savePluginData($id,$data);
 		return true;
 	}
+	
+	public static function installPlugin($path){
+		global $SERVERROOT;
+		if(is_file($path)){
+			$zip = new ZipArchive;
+			if($zip->open($path)===TRUE){
+				$folder=sys_get_temp_dir().'/OC_PLUGIN_INSTALL/';
+				mkdir($folder);
+				$zip->extractTo($folder);
+				if(is_file($folder.'/plugin.xml')){
+					$pluginData=self::getPluginData($folder.'/plugin.xml');
+					if(array_search($pluginData['info']['id'],self::listPlugins())===false){
+						if(isset($pluginData['install'])){
+							foreach($pluginData['install']['database'] as $db){
+								OC_DB::createDbFromStructure($folder.'/'.$db);
+								$pluginData['install']['database_installed'][$db]=true;
+							}
+							foreach($pluginData['install']['include'] as $include){
+								include($folder.'/'.$include);
+							}
+						}
+						recursive_copy($folder,$SERVERROOT.'/plugins/'.$pluginData['info']['id']);
+						self::savePluginData($SERVERROOT.'/plugins/'.$pluginData['info']['id'].'/plugin.xml',$pluginData);
+					}
+				}
+				delTree($folder);
+			}
+		}
+	}
 }
-
 ?>
diff --git a/settings/index.php b/settings/index.php
index 5983eebc0a776ba81f53991ed18dae657835d795..ba11da08c0bac8403d675a29ea2d1a6eb96e85c7 100644
--- a/settings/index.php
+++ b/settings/index.php
@@ -34,6 +34,7 @@ OC_CONFIG::addForm('User Settings','/inc/templates/configform.php');
 if(OC_USER::ingroup($_SESSION['username'],'admin')){
 	OC_CONFIG::addForm('System Settings','/inc/templates/adminform.php');
 	OC_CONFIG::addForm('User Managment','/inc/templates/userform.php');
+	OC_CONFIG::addForm('Plugin Managment','/inc/templates/pluginform.php');
 }
 
 echo('<div class="center">');