diff --git a/admin/index.php b/admin/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..2331c22f062a9c6d354261ba875f29424b3cf578
--- /dev/null
+++ b/admin/index.php
@@ -0,0 +1,41 @@
+<?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/>.
+* 
+*/
+
+$CONFIG_ERROR='';
+
+require_once('../inc/lib_base.php');
+
+
+OC_UTIL::showheader();
+
+$FIRSTRUN=false;
+
+echo('<div class="center">');
+OC_CONFIG::showadminform();
+echo('</div>');
+
+
+OC_UTIL::showfooter();
+
+?>
+ 
diff --git a/admin/index.php~ b/admin/index.php~
new file mode 100644
index 0000000000000000000000000000000000000000..8d1c8b69c3fce7bea45c73efd06983e3c419a92f
--- /dev/null
+++ b/admin/index.php~
@@ -0,0 +1 @@
+ 
diff --git a/inc/lib_base.php b/inc/lib_base.php
index 4f58f946c92a7de82ba781804fe45c59090a803a..5a70db535dbe3f5679e571b6fa5acf17c11071f9 100755
--- a/inc/lib_base.php
+++ b/inc/lib_base.php
@@ -173,8 +173,9 @@ class OC_UTIL {
     }
 
 	if($_SERVER['SCRIPT_NAME']==$WEBROOT.'/log/index.php') echo('<td class="navigationitemselected"><a href="'.$WEBROOT.'/log">Log</a></td>'); else echo('<td class="navigationitem"><a href="'.$WEBROOT.'/log">Log</a></td>');
+	if($_SERVER['SCRIPT_NAME']==$WEBROOT.'/settings/index.php') echo('<td class="navigationitemselected"><a href="'.$WEBROOT.'/settings">Settings</a></td>'); else echo('<td class="navigationitem"><a href="'.$WEBROOT.'/settings">Settings</a></td>');
 	if(OC_USER::ingroup($_SESSION['username'],'admin')){
-		if($_SERVER['SCRIPT_NAME']==$WEBROOT.'/settings/index.php') echo('<td class="navigationitemselected"><a href="'.$WEBROOT.'/settings">Settings</a></td>'); else echo('<td class="navigationitem"><a href="'.$WEBROOT.'/settings">Settings</a></td>');
+		if($_SERVER['SCRIPT_NAME']==$WEBROOT.'/admin/index.php') echo('<td class="navigationitemselected"><a href="'.$WEBROOT.'/admin">Admin Panel</a></td>'); else echo('<td class="navigationitem"><a href="'.$WEBROOT.'/admin">Admin Panel</a></td>');
 	}
     echo('<td class="navigationitem"><a href="?logoutbutton=1">Logout</a></td>');
     echo('</tr></table>');
diff --git a/inc/lib_config.php b/inc/lib_config.php
index 5fa6b5f7c6481877a4f5d11ed099820943d58f5a..98099cad72a44f5064e0d7e241fb5d9648a7bd59 100755
--- a/inc/lib_config.php
+++ b/inc/lib_config.php
@@ -13,154 +13,230 @@ class OC_CONFIG{
     global $CONFIG_DBNAME;
     require('templates/configform.php');
   }
-
-	public static function createuserlisener(){
-		if(isset($_POST['new_username']) and isset($_POST['new_password'])){
-			if(OC_USER::createuser($_POST['new_username'],$_POST['new_password'])){
-				return 'user successfully created';
-			}else{
-				return 'error while trying to create user';
-			}
-		}else{
-			return false;
-		}
-	}
-
+  
   /**
-   * lisen for configuration changes and write it to the file
+   * show the configform
    *
    */
-  public static function writeconfiglisener(){
-    global $DOCUMENTROOT;
-    global $SERVERROOT;
-    global $WEBROOT;
-    global $CONFIG_DBHOST;
-    global $CONFIG_DBNAME;
-    global $CONFIG_DBUSER;
-    global $CONFIG_DBPASSWORD;
-    global $CONFIG_DBTYPE;
+  public static function showadminform(){
     global $CONFIG_ADMINLOGIN;
     global $CONFIG_ADMINPASSWORD;
-    if(isset($_POST['set_config'])){
+    global $CONFIG_DATADIRECTORY;
+    global $CONFIG_HTTPFORCESSL;
+    global $CONFIG_DATEFORMAT;
+    global $CONFIG_DBNAME;
+    global $CONFIG_INSTALLED;
+    if(OC_USER::ingroup($_SESSION['username'],'admin') or $CONFIG_INSTALLED==false){
+		require('templates/adminform.php');
+	}
+  }
 
-      //checkdata
-		$error='';
-		$FIRSTRUN=empty($CONFIG_ADMINLOGIN);
-		if(!$FIRSTRUN){
-			if($_POST['currentpassword']!=$CONFIG_ADMINPASSWORD){
-			$error.='wrong password<br />';
+	public static function createuserlisener(){
+		if(OC_USER::ingroup($_SESSION['username'],'admin')){
+			if(isset($_POST['new_username']) and isset($_POST['new_password'])){
+				if(OC_USER::createuser($_POST['new_username'],$_POST['new_password'])){
+					return 'user successfully created';
+				}else{
+					return 'error while trying to create user';
+				}
+			}else{
+				return false;
 			}
+		}else{
+			return false;
 		}
-		
-		if(!isset($_POST['adminlogin'])        or empty($_POST['adminlogin']))        $error.='admin login not set<br />';
-		if((!isset($_POST['adminpassword'])     or empty($_POST['adminpassword'])) and $FIRSTRUN)     $error.='admin password not set<br />';
-		if((!isset($_POST['adminpassword2'])    or empty($_POST['adminpassword2'])) and $FIRSTRUN)    $error.='retype admin password not set<br />';
-		if(!isset($_POST['datadirectory'])     or empty($_POST['datadirectory']))     $error.='data directory not set<br />';
-		if(!isset($_POST['dateformat'])        or empty($_POST['dateformat']))        $error.='dateformat not set<br />';
-		if(!isset($_POST['dbname'])            or empty($_POST['dbname']))            $error.='databasename not set<br />';
-		if($_POST['adminpassword']<>$_POST['adminpassword2'] )                        $error.='admin passwords are not the same<br />';
-		$dbtype=$_POST['dbtype'];
-		if($dbtype=='mysql'){
-			if(!isset($_POST['dbhost'])            or empty($_POST['dbhost']))            $error.='database host not set<br />';
-			if(!isset($_POST['dbuser'])            or empty($_POST['dbuser']))            $error.='database user not set<br />';
-			if($_POST['dbpassword']<>$_POST['dbpassword2'] )                        $error.='database passwords are not the same<br />';
-			
-		}
-		if(!$FIRSTRUN){
-			if(!isset($_POST['adminpassword']) or empty($_POST['adminpassword'])){
-				$_POST['adminpassword']=$CONFIG_ADMINPASSWORD;
-			}
-			if(!isset($_POST['dbpassword']) or empty($_POST['dbpassword'])){
-				$_POST['dbpassword']=$CONFIG_DBPASSWORD;
+	}
+	
+	public static function creategrouplisener(){
+		if(OC_USER::isLoggedIn()){
+			if(isset($_POST['creategroup']) and $_POST['creategroup']==1){
+				if(OC_USER::creategroup($_POST['groupname'])){
+					if(OC_USER::addtogroup($_SESSION['username'],$_POST['groupname'])){
+						return 'group successfully created';
+					}else{
+						return 'error while trying to add user to the new created group';
+					}
+				}else{
+					return 'error while trying to create group';
+				}
+			}else{
+				return false;
 			}
+		}else{
+			return false;
 		}
-		if(!is_dir($_POST['datadirectory'])){
-			try{
-				mkdir($_POST['datadirectory']);
-			}catch(Exception $e){
-				$error.='error while trying to create data directory<br/>';
+	}
+	
+	
+	/**
+   * lisen for configuration changes
+   *
+   */
+	public static function configlisener(){
+		if(OC_USER::isLoggedIn()){
+			if(isset($_POST['config']) and $_POST['config']==1){
+				$error='';
+				if(!OC_USER::checkpassword($_SESSION['username'],$_POST['currentpassword'])){
+					$error.='wrong password<br />';
+				}else{
+					if(isset($_POST['changepass']) and $_POST['changepass']==1){
+						if(!isset($_POST['password'])     or empty($_POST['password']))     $error.='password not set<br />';
+						if(!isset($_POST['password2'])    or empty($_POST['password2']))    $error.='retype password not set<br />';
+						if($_POST['password']<>$_POST['password2'] )                        $error.='passwords are not the same<br />';
+						if(empty($error)){
+							if(!OC_USER::setpassword($_SESSION['username'],$_POST['password'])){
+								$error.='error while trying to set password<br />';
+							}
+						}
+					}
+				}
+				return $error;
+			}else{
+				return false;
 			}
+		}else{
+			return false;
 		}
-		if(empty($error)) {
-			//create/fill database
-			$CONFIG_DBTYPE=$dbtype;
-			$CONFIG_DBNAME=$_POST['dbname'];
-			if($dbtype=='mysql'){
-				$CONFIG_DBHOST=$_POST['dbhost'];
-				$CONFIG_DBUSER=$_POST['dbuser'];
-				$CONFIG_DBPASSWORD=$_POST['dbpassword'];
-			}
-			try{
-				if(isset($_POST['createdatabase']) and $CONFIG_DBTYPE=='mysql'){
-					self::createdatabase($_POST['dbadminuser'],$_POST['dbadminpwd']);
+	}
+	
+	
+	/**
+	* lisen for admin configuration changes and write it to the file
+	*4bd0be1185e76
+	*/
+	public static function writeadminlisener(){
+		global $CONFIG_INSTALLED;
+		if(OC_USER::ingroup($_SESSION['username'],'admin') or $CONFIG_INSTALLED==false){
+			global $DOCUMENTROOT;
+			global $SERVERROOT;
+			global $WEBROOT;
+			global $CONFIG_DBHOST;
+			global $CONFIG_DBNAME;
+			global $CONFIG_DBUSER;
+			global $CONFIG_DBPASSWORD;
+			global $CONFIG_DBTYPE;
+			global $CONFIG_ADMINLOGIN;
+			global $CONFIG_ADMINPASSWORD;
+			if(isset($_POST['set_config'])){
+				
+				//checkdata
+				$error='';
+				$FIRSTRUN=empty($CONFIG_ADMINLOGIN);
+				if(!$FIRSTRUN){
+					if($_POST['currentpassword']!=$CONFIG_ADMINPASSWORD){
+					$error.='wrong password<br />';
+					}
 				}
-			}catch(Exception $e){
-				$error.='error while trying to create the database<br/>';
-			}
-			if($CONFIG_DBTYPE=='sqlite'){
-				$f=@fopen($SERVERROOT.'/'.$CONFIG_DBNAME,'a+');
-				if(!$f){
-					$error.='path of sqlite database not writable by server<br/>';
+				
+				if(!isset($_POST['adminlogin'])        or empty($_POST['adminlogin']))        $error.='admin login not set<br />';
+				if((!isset($_POST['adminpassword'])     or empty($_POST['adminpassword'])) and $FIRSTRUN)     $error.='admin password not set<br />';
+				if((!isset($_POST['adminpassword2'])    or empty($_POST['adminpassword2'])) and $FIRSTRUN)    $error.='retype admin password not set<br />';
+				if(!isset($_POST['datadirectory'])     or empty($_POST['datadirectory']))     $error.='data directory not set<br />';
+				if(!isset($_POST['dateformat'])        or empty($_POST['dateformat']))        $error.='dateformat not set<br />';
+				if(!isset($_POST['dbname'])            or empty($_POST['dbname']))            $error.='databasename not set<br />';
+				if($_POST['adminpassword']<>$_POST['adminpassword2'] )                        $error.='admin passwords are not the same<br />';
+				$dbtype=$_POST['dbtype'];
+				if($dbtype=='mysql'){
+					if(!isset($_POST['dbhost'])            or empty($_POST['dbhost']))            $error.='database host not set<br />';
+					if(!isset($_POST['dbuser'])            or empty($_POST['dbuser']))            $error.='database user not set<br />';
+					if($_POST['dbpassword']<>$_POST['dbpassword2'] )                        $error.='database passwords are not the same<br />';
+					
 				}
-			}
-			try{
-				if(isset($_POST['filldb'])){
-					self::filldatabase();
+				if(!$FIRSTRUN){
+					if(!isset($_POST['adminpassword']) or empty($_POST['adminpassword'])){
+						$_POST['adminpassword']=$CONFIG_ADMINPASSWORD;
+					}
+					if(!isset($_POST['dbpassword']) or empty($_POST['dbpassword'])){
+						$_POST['dbpassword']=$CONFIG_DBPASSWORD;
+					}
 				}
-			}catch(Exception $e){
-				$error.='error while trying to fill the database<br/>';
-			}
-			
-			if(!OC_USER::createuser($_POST['adminlogin'],$_POST['adminpassword']) && !OC_USER::login($_POST['adminlogin'],$_POST['adminpassword'])){
-				$error.='error while trying to create the admin user<br/>';
-			}
-			
-			if(OC_USER::getgroupid('admin')==0){
-				if(!OC_USER::creategroup('admin')){
-					$error.='error while trying to create the admin group<br/>';
+				if(!is_dir($_POST['datadirectory'])){
+					try{
+						mkdir($_POST['datadirectory']);
+					}catch(Exception $e){
+						$error.='error while trying to create data directory<br/>';
+					}
 				}
-			}
-			
-			if(!OC_USER::addtogroup($_POST['adminlogin'],'admin')){
-				$error.='error while trying to add the admin user to the admin group<br/>';
-			}
-			
-			//storedata
-			$config='<?php '."\n";
-// 			$config.='$CONFIG_ADMINLOGIN=\''.$_POST['adminlogin']."';\n";
-// 			$config.='$CONFIG_ADMINPASSWORD=\''.$_POST['adminpassword']."';\n";
-			$config.='$CONFIG_INSTALLED=true;'."\n";
-			$config.='$CONFIG_DATADIRECTORY=\''.$_POST['datadirectory']."';\n";
-			if(isset($_POST['forcessl'])) $config.='$CONFIG_HTTPFORCESSL=true'.";\n"; else $config.='$CONFIG_HTTPFORCESSL=false'.";\n";
-			$config.='$CONFIG_DATEFORMAT=\''.$_POST['dateformat']."';\n";
-			$config.='$CONFIG_DBTYPE=\''.$dbtype."';\n";
-			$config.='$CONFIG_DBNAME=\''.$_POST['dbname']."';\n";
-			if($dbtype=='mysql'){
-				$config.='$CONFIG_DBHOST=\''.$_POST['dbhost']."';\n";
-				$config.='$CONFIG_DBUSER=\''.$_POST['dbuser']."';\n";
-				$config.='$CONFIG_DBPASSWORD=\''.$_POST['dbpassword']."';\n";
-			}
-			$config.='?> ';
+				if(empty($error)) {
+					//create/fill database
+					$CONFIG_DBTYPE=$dbtype;
+					$CONFIG_DBNAME=$_POST['dbname'];
+					if($dbtype=='mysql'){
+						$CONFIG_DBHOST=$_POST['dbhost'];
+						$CONFIG_DBUSER=$_POST['dbuser'];
+						$CONFIG_DBPASSWORD=$_POST['dbpassword'];
+					}
+					try{
+						if(isset($_POST['createdatabase']) and $CONFIG_DBTYPE=='mysql'){
+							self::createdatabase($_POST['dbadminuser'],$_POST['dbadminpwd']);
+						}
+					}catch(Exception $e){
+						$error.='error while trying to create the database<br/>';
+					}
+					if($CONFIG_DBTYPE=='sqlite'){
+						$f=@fopen($SERVERROOT.'/'.$CONFIG_DBNAME,'a+');
+						if(!$f){
+							$error.='path of sqlite database not writable by server<br/>';
+						}
+					}
+					try{
+						if(isset($_POST['filldb'])){
+							self::filldatabase();
+						}
+					}catch(Exception $e){
+						$error.='error while trying to fill the database<br/>';
+					}
+					
+					if(!OC_USER::createuser($_POST['adminlogin'],$_POST['adminpassword']) && !OC_USER::login($_POST['adminlogin'],$_POST['adminpassword'])){
+						$error.='error while trying to create the admin user<br/>';
+					}
+					
+					if(OC_USER::getgroupid('admin')==0){
+						if(!OC_USER::creategroup('admin')){
+							$error.='error while trying to create the admin group<br/>';
+						}
+					}
+					
+					if(!OC_USER::addtogroup($_POST['adminlogin'],'admin')){
+						$error.='error while trying to add the admin user to the admin group<br/>';
+					}
+					
+					//storedata
+					$config='<?php '."\n";
+		// 			$config.='$CONFIG_ADMINLOGIN=\''.$_POST['adminlogin']."';\n";
+		// 			$config.='$CONFIG_ADMINPASSWORD=\''.$_POST['adminpassword']."';\n";
+					$config.='$CONFIG_INSTALLED=true;'."\n";
+					$config.='$CONFIG_DATADIRECTORY=\''.$_POST['datadirectory']."';\n";
+					if(isset($_POST['forcessl'])) $config.='$CONFIG_HTTPFORCESSL=true'.";\n"; else $config.='$CONFIG_HTTPFORCESSL=false'.";\n";
+					$config.='$CONFIG_DATEFORMAT=\''.$_POST['dateformat']."';\n";
+					$config.='$CONFIG_DBTYPE=\''.$dbtype."';\n";
+					$config.='$CONFIG_DBNAME=\''.$_POST['dbname']."';\n";
+					if($dbtype=='mysql'){
+						$config.='$CONFIG_DBHOST=\''.$_POST['dbhost']."';\n";
+						$config.='$CONFIG_DBUSER=\''.$_POST['dbuser']."';\n";
+						$config.='$CONFIG_DBPASSWORD=\''.$_POST['dbpassword']."';\n";
+					}
+					$config.='?> ';
+
+					$filename=$SERVERROOT.'/config/config.php';
+					if(empty($error)){
+						header("Location: ".$WEBROOT."/");
+						try{
+							file_put_contents($filename,$config);
+						}catch(Exception $e){
+							$error.='error while trying to save the configuration file<br/>';
+							return $error;
+						}
+					}else{
+						return $error;
+					}
 
-			$filename=$SERVERROOT.'/config/config.php';
-			if(empty($error)){
-				header("Location: ".$WEBROOT."/");
-				try{
-					file_put_contents($filename,$config);
-				}catch(Exception $e){
-					$error.='error while trying to save the configuration file<br/>';
-					return $error;
 				}
-			}else{
-				return $error;
-			}
+				return($error);
 
+			}
 		}
-		return($error);
-
-    }
-
-  }
+	}
   
    /**
    * Fills the database with the initial tables
diff --git a/inc/lib_user.php b/inc/lib_user.php
index e7855b5b7b37cdcb8f625d4d9310b6948fd34569..30dbdcd2fec231c8066fcbe8a010908881ee7c83 100644
--- a/inc/lib_user.php
+++ b/inc/lib_user.php
@@ -152,6 +152,21 @@ class OC_USER {
 		}
 	}
 	
+	/**
+	* get the name of a group
+	*
+	*/
+	public static function getgroupname($groupid){
+		$groupid=(integer)$groupid;
+		$query="SELECT group_name FROM  `groups` WHERE  `group_id` =  '$groupid' LIMIT 1";
+		$result=OC_DB::select($query);
+		if(isset($result[0]) && isset($result[0]['group_name'])){
+			return $result[0]['group_name'];
+		}else{
+			return 0;
+		}
+	}
+	
 	/**
 	* check if a user belongs to a group
 	*
@@ -195,6 +210,58 @@ class OC_USER {
 	public static function generatepassword(){
 		return uniqid();
 	}
+	
+	/**
+	* get all groups the user belongs to
+	*
+	*/
+	public static function getusergroups($username){
+		$userid=OC_USER::getuserid($username);
+		$query="SELECT group_id FROM  `user_group` WHERE  `user_id` =  '$userid'";
+		$result=OC_DB::select($query);
+		$groups=array();
+		if(is_array($result)){
+			foreach($result as $group){
+				$groupid=$group['group_id'];
+				$groups[]=OC_USER::getgroupname($groupid);
+			}
+		}
+		return $groups;
+	}
+	
+	/**
+	* set the password of a user
+	*
+	*/
+	public static function setpassword($username,$password){
+		$password=sha1($password);
+		$userid=OC_USER::getuserid($username);
+		$query="UPDATE  `users` SET  `user_password` = '$password' WHERE  `user_id` =$userid LIMIT 1 ;";
+		$result=OC_DB::query($query);
+		if($result){
+			return true;
+		}else{
+			return false;
+		}
+	}
+	
+	/**
+	* check the password of a user
+	*
+	*/
+	public static function checkpassword($username,$password){
+		$password=sha1($password);
+		$usernameclean=strtolower($username);
+		$username=mysql_escape_string($username);
+		$usernameclean=mysql_escape_string($usernameclean);
+		$query="SELECT user_id FROM  `users` WHERE  `user_name_clean` =  '$usernameclean' AND  `user_password` =  '$password' LIMIT 1";
+		$result=OC_DB::select($query);
+		if(isset($result[0]) && isset($result[0]['user_id']) && $result[0]['user_id']>0){
+			return true;
+		}else{
+			return false;
+		}
+	}
 }
 
 ?>
\ No newline at end of file
diff --git a/inc/templates/adminform.php b/inc/templates/adminform.php
new file mode 100644
index 0000000000000000000000000000000000000000..38d2b14a57e6ef82826382c9fe06c00c0cb6baff
--- /dev/null
+++ b/inc/templates/adminform.php
@@ -0,0 +1,106 @@
+<?php
+global $FIRSTRUN;
+global $CONFIG_ERROR;
+if(!isset($fillDB)) $fillDB=true;
+if(!isset($CONFIG_DBHOST)) $CONFIG_DBHOST='localhost';
+if(!isset($CONFIG_DBUSER)) $CONFIG_DBUSER='owncloud';
+$newuserpassword=OC_USER::generatepassword();
+?>
+<script type="text/javascript">
+function showDBAdmin(){
+    var show=document.getElementById('dbcreate').checked;
+    document.getElementById('dbAdminUser').style.display=(show)?'table-row':'none';
+    document.getElementById('dbAdminPwd').style.display=(show)?'table-row':'none';
+}
+
+function dbtypechange(){
+    var dropdown=action=document.getElementById('dbtype');
+    var type=dropdown.options[dropdown.selectedIndex].value;
+    var inputs=Array('dbhost','dbuser','dbpass','dbpass_retype','dbcreaterow','dbAdminPwd','dbAdminUser');
+    var id,element;
+    if(type=='sqlite'){
+        for(i in inputs){
+            id=inputs[i];
+            element=document.getElementById(id);
+            if(element){
+                element.style.display='none';
+            }
+        }
+    }else if(type=='mysql'){
+        for(i in inputs){
+            id=inputs[i];
+            element=document.getElementById(id);
+            if(element){
+                element.style.display='table-row';
+            }
+        }
+        showDBAdmin()
+    }
+}
+</script>
+<form method="post" enctype="multipart/form-data">
+<table cellpadding="5" cellspacing="5" border="0" class="loginform">
+<?php
+	if(!empty($CONFIG_ERROR) and !$FIRSTRUN){
+		echo "<tr><td colspan='3' class='error'>$CONFIG_ERROR</td></tr>";
+	}
+	if(!$FIRSTRUN){?>
+		<tr><td>current password</td><td><input type="password" name="currentpassword" size="30" class="formstyle"></input></td></tr>
+		<?php
+	}
+if($FIRSTRUN){?>
+<tr><td>admin login:</td><td><input type="text" name="adminlogin" size="30" class="formstyle" value="<?php echo($CONFIG_ADMINLOGIN);?>"></input></td></tr>
+<tr><td>admin password:</td><td><input type="password" name="adminpassword" size="30" class="formstyle"></input></td><td>(leave empty to keep current password)</td></tr>
+<tr><td>retype admin password:</td><td><input type="password" name="adminpassword2" size="30" class="formstyle"></input></td></tr>
+<?php
+}
+?>
+<tr><td>data directory:</td><td><input type="text" name="datadirectory" size="30" class="formstyle" value="<?php echo($CONFIG_DATADIRECTORY);?>"></input></td></tr>
+<tr><td>force ssl:</td><td><input type="checkbox" name="forcessl" size="30" class="formstyle" value='<?php echo($CONFIG_HTTPFORCESSL);?>'></input></td></tr>
+<tr><td>date format:</td><td><input type="text" name="dateformat" size="30" class="formstyle" value='<?php echo($CONFIG_DATEFORMAT);?>'></input></td></tr>
+<tr><td>database type:</td><td>
+<select id='dbtype' name="dbtype" onchange='dbtypechange()'>
+<?php
+global $CONFIG_DBTYPE;
+if($CONFIG_DBTYPE=='sqlite'){
+?>
+<option value="sqlite">SQLite</option>
+<option value="mysql">MySQL</option>
+<?php
+}else{
+?>
+<option value="mysql">MySQL</option>
+<option value="sqlite">SQLite</option>
+<?php
+}
+?>
+</select>
+</td></tr>
+<tr id='dbhost'><td>database host:</td><td><input type="text" name="dbhost" size="30" class="formstyle" value='<?php echo($CONFIG_DBHOST);?>'></input></td></tr>
+<tr><td>database name:</td><td><input type="text" name="dbname" size="30" class="formstyle" value='<?php echo($CONFIG_DBNAME);?>'></input></td></tr>
+<tr id='dbuser'><td>database user:</td><td><input type="text" name="dbuser" size="30" class="formstyle" value='<?php echo($CONFIG_DBUSER);?>'></input></td></tr>
+<tr id='dbpass'><td>database password:</td><td><input type="password" name="dbpassword" size="30" class="formstyle" value=''></input></td><td>(leave empty to keep current password)</td></tr>
+<tr id='dbpass_retype'><td>retype database password:</td><td><input type="password" name="dbpassword2" size="30" class="formstyle" value=''></input></td></tr>
+<tr id='dbcreaterow'><td>create database and user:</td><td><input id='dbcreate' type="checkbox" name="createdatabase" size="30" class="formstyle" value='1' <?php if($FIRSTRUN) echo 'checked'; ?> onchange='showDBAdmin()'></input></td></tr>
+<tr id='dbAdminUser'><td>database administrative user:</td><td><input type="text" name="dbadminuser" size="30" class="formstyle" value='root'></input></td></tr>
+<tr id='dbAdminPwd'><td>database administrative password:</td><td><input type="password" name="dbadminpwd" size="30" class="formstyle" value=''></input></td></tr>
+<tr><td>automaticly fill initial database:</td><td><input type="checkbox" name="filldb" size="30" class="formstyle" value='1' <?php if($FIRSTRUN) echo 'checked'; ?>></input></td></tr>
+<tr><td></td><td><input type="submit" name="set_config" alt="save" value="save" class="formstyle" /></td></tr>
+</table></form><br/>
+<?php
+if(!$FIRSTRUN){?>
+<br/>
+<form method="post" enctype="multipart/form-data">
+<table cellpadding="5" cellspacing="5" border="0" class="loginform">
+<tr><td colspan='2'>Create new user:</td></tr>
+<tr><td>user name</td><td><input type='text' name='new_username' class="formstyle"></input></td></tr>
+<tr><td>password</td><td><input type='text' name='new_password' class="formstyle" autocomplete="off" value='<?php echo($newuserpassword);?>'></input></td></tr>
+<tr><td></td><td><input type='submit' value='create' class="formstyle"></input></td></tr>
+</table>
+</form>
+<?php
+}
+?>
+<script type="text/javascript">
+    dbtypechange()
+</script>
\ No newline at end of file
diff --git a/inc/templates/configform.php b/inc/templates/configform.php
index ba946fc67b0d71429dc0d406723ddac0f8d82609..037249a84a26487b29457ec47e5cb6d84dd22b81 100755
--- a/inc/templates/configform.php
+++ b/inc/templates/configform.php
@@ -7,92 +7,45 @@ if(!isset($CONFIG_DBUSER)) $CONFIG_DBUSER='owncloud';
 $newuserpassword=OC_USER::generatepassword();
 ?>
 <script type="text/javascript">
-function showDBAdmin(){
-    var show=document.getElementById('dbcreate').checked;
-    document.getElementById('dbAdminUser').style.display=(show)?'table-row':'none';
-    document.getElementById('dbAdminPwd').style.display=(show)?'table-row':'none';
-}
-
-function dbtypechange(){
-    var dropdown=action=document.getElementById('dbtype');
-    var type=dropdown.options[dropdown.selectedIndex].value;
-    var inputs=Array('dbhost','dbuser','dbpass','dbpass_retype','dbcreaterow','dbAdminPwd','dbAdminUser');
-    var id,element;
-    if(type=='sqlite'){
-        for(i in inputs){
-            id=inputs[i];
-            element=document.getElementById(id);
-            if(element){
-                element.style.display='none';
-            }
-        }
-    }else if(type=='mysql'){
-        for(i in inputs){
-            id=inputs[i];
-            element=document.getElementById(id);
-            if(element){
-                element.style.display='table-row';
-            }
-        }
-        showDBAdmin()
-    }
+changepassset=function(){
+	var change=document.getElementById('changepass').checked;
+	if(!change){
+		document.getElementById('new_password').style.display='none';
+		document.getElementById('new_password_retype').style.display='none';
+	}else{
+		document.getElementById('new_password').style.display='table-row';
+		document.getElementById('new_password_retype').style.display='table-row';
+	}
 }
 </script>
 <form method="post" enctype="multipart/form-data">
+<input type='hidden' name='config' value='1'>
 <table cellpadding="5" cellspacing="5" border="0" class="loginform">
 <?php
 	if(!empty($CONFIG_ERROR) and !$FIRSTRUN){
 		echo "<tr><td colspan='3' class='error'>$CONFIG_ERROR</td></tr>";
 	}
-	if(!$FIRSTRUN){?>
-		<tr><td>current password</td><td><input type="password" name="currentpassword" size="30" class="formstyle"></input></td></tr>
-		<?php
-	}
-?>
-<tr><td>admin login:</td><td><input type="text" name="adminlogin" size="30" class="formstyle" value="<?php echo($CONFIG_ADMINLOGIN);?>"></input></td></tr>
-<tr><td>admin password:</td><td><input type="password" name="adminpassword" size="30" class="formstyle"></input></td><td>(leave empty to keep current password)</td></tr>
-<tr><td>retype admin password:</td><td><input type="password" name="adminpassword2" size="30" class="formstyle"></input></td></tr>
-<tr><td>data directory:</td><td><input type="text" name="datadirectory" size="30" class="formstyle" value="<?php echo($CONFIG_DATADIRECTORY);?>"></input></td></tr>
-<tr><td>force ssl:</td><td><input type="checkbox" name="forcessl" size="30" class="formstyle" value='<?php echo($CONFIG_HTTPFORCESSL);?>'></input></td></tr>
-<tr><td>date format:</td><td><input type="text" name="dateformat" size="30" class="formstyle" value='<?php echo($CONFIG_DATEFORMAT);?>'></input></td></tr>
-<tr><td>database type:</td><td>
-<select id='dbtype' name="dbtype" onchange='dbtypechange()'>
-<?php
-global $CONFIG_DBTYPE;
-if($CONFIG_DBTYPE=='sqlite'){
-?>
-<option value="sqlite">SQLite</option>
-<option value="mysql">MySQL</option>
-<?php
-}else{
 ?>
-<option value="mysql">MySQL</option>
-<option value="sqlite">SQLite</option>
+<tr><td>enter password</td><td><input type="password" name="currentpassword" size="30" class="formstyle"></input></td></tr>
+<tr><td>change password:</td><td><input onchange='changepassset()' id='changepass' type="checkbox" name="changepass" size="30" class="formstyle" value='1'></input></td></tr>
+<tr style='display:none' id='new_password'><td>new password:</td><td><input type="password" name="password" size="30" class="formstyle"></input></td></tr>
+<tr style='display:none' id='new_password_retype'><td>retype admin password:</td><td><input type="password" name="password2" size="30" class="formstyle"></input></td></tr>
+</table>
+</form>
+Groups:
+<form method="post" enctype="multipart/form-data">
+<input type='hidden' name='creategroup' value='1'>
+<table cellpadding="5" cellspacing="5" border="0" class="loginform">
+<tr><td colspan='2' class='center'>Current groups</td></tr>
 <?php
+$groups=OC_USER::getusergroups($_SESSION['username']);
+foreach($groups as $group){
+	?>
+	<tr><td><?php echo $group;?></td></tr>
+	<?php
 }
 ?>
-</select>
-</td></tr>
-<tr id='dbhost'><td>database host:</td><td><input type="text" name="dbhost" size="30" class="formstyle" value='<?php echo($CONFIG_DBHOST);?>'></input></td></tr>
-<tr><td>database name:</td><td><input type="text" name="dbname" size="30" class="formstyle" value='<?php echo($CONFIG_DBNAME);?>'></input></td></tr>
-<tr id='dbuser'><td>database user:</td><td><input type="text" name="dbuser" size="30" class="formstyle" value='<?php echo($CONFIG_DBUSER);?>'></input></td></tr>
-<tr id='dbpass'><td>database password:</td><td><input type="password" name="dbpassword" size="30" class="formstyle" value=''></input></td><td>(leave empty to keep current password)</td></tr>
-<tr id='dbpass_retype'><td>retype database password:</td><td><input type="password" name="dbpassword2" size="30" class="formstyle" value=''></input></td></tr>
-<tr id='dbcreaterow'><td>create database and user:</td><td><input id='dbcreate' type="checkbox" name="createdatabase" size="30" class="formstyle" value='1' <?php if($FIRSTRUN) echo 'checked'; ?> onchange='showDBAdmin()'></input></td></tr>
-<tr id='dbAdminUser'><td>database administrative user:</td><td><input type="text" name="dbadminuser" size="30" class="formstyle" value='root'></input></td></tr>
-<tr id='dbAdminPwd'><td>database administrative password:</td><td><input type="password" name="dbadminpwd" size="30" class="formstyle" value=''></input></td></tr>
-<tr><td>automaticly fill initial database:</td><td><input type="checkbox" name="filldb" size="30" class="formstyle" value='1' <?php if($FIRSTRUN) echo 'checked'; ?>></input></td></tr>
-<tr><td></td><td><input type="submit" name="set_config" alt="save" value="save" class="formstyle" /></td></tr>
-</table></form><br/>
-<br/>
-<form method="post" enctype="multipart/form-data">
-<table cellpadding="5" cellspacing="5" border="0" class="loginform">
-<tr><td colspan='2'>Create new user:</td></tr>
-<tr><td>user name</td><td><input type='text' name='new_username' class="formstyle"></input></td></tr>
-<tr><td>password</td><td><input type='text' name='new_password' class="formstyle" autocomplete="off" value='<?php echo($newuserpassword);?>'></input></td></tr>
-<tr><td></td><td><input type='submit' value='create' class="formstyle"></input></td></tr>
+<tr><td colspan='2' class='center'>Create new group</td></tr>
+<tr><td><input type='text' name='groupname' class="formstyle"></input></td><td><input type='submit' value='create' class="formstyle"></input></td></tr>
 </table>
 </form>
-<script type="text/javascript">
-    dbtypechange()
-</script>
\ No newline at end of file
diff --git a/inc/templates/header.php b/inc/templates/header.php
index 46c64bfd6456a12dc92a1c371dc9338d05d67954..51e729cb8e18169820f8b68b0d09250de183b526 100755
--- a/inc/templates/header.php
+++ b/inc/templates/header.php
@@ -32,9 +32,15 @@ echo('<h1><a id="owncloud-logo" href="'.$WEBROOT.'"><span>ownCloud</span></a></h
 
 
   // check if already configured. otherwise start configuration wizard
-  $error=OC_CONFIG::writeconfiglisener();
+  $error=OC_CONFIG::writeadminlisener();
+  if($e=OC_CONFIG::configlisener()){
+	$error.=$e;
+  }
   if($e=OC_CONFIG::createuserlisener()){
-	$error=$e;
+	$error.=$e;
+  }
+  if($e=OC_CONFIG::creategrouplisener()){
+	$error.=$e;
   }
   $CONFIG_ERROR=$error;
   global $CONFIG_INSTALLED;
@@ -44,7 +50,7 @@ echo('<h1><a id="owncloud-logo" href="'.$WEBROOT.'"><span>ownCloud</span></a></h
     echo('<div class="center">');
     echo('<p class="errortext">'.$error.'</p>');
     echo('<p class="highlighttext">First Run Wizard</p>');
-    OC_CONFIG::showconfigform();
+    OC_CONFIG::showadminform();
     echo('</div>');
     OC_UTIL::showfooter();
     exit();