diff --git a/files/ajax/rename.php b/files/ajax/rename.php
index 86cb7944a88f7822c469b058704fed3686395659..65763fceb94db16ecd167d1d28fc22225c93ee16 100644
--- a/files/ajax/rename.php
+++ b/files/ajax/rename.php
@@ -8,7 +8,7 @@ header( "Content-Type: application/jsonrequest" );
 
 // Check if we are a user
 if( !OC_USER::isLoggedIn()){
-	echo json_encode( array( "status" => "error", "data" => "Authentication error" ));
+	echo json_encode( array( "status" => "error", "data" => array( "message" => "Authentication error" )));
 	exit();
 }
 
diff --git a/files/ajax/upload.php b/files/ajax/upload.php
index 959794913b90327d0a7855e169779a0bff5da59e..194d84f4be2749c555881d7a6442ec56b0f205aa 100644
--- a/files/ajax/upload.php
+++ b/files/ajax/upload.php
@@ -10,7 +10,7 @@ header( "Content-Type: text/plain" );
 
 // Check if we are a user
 if( !OC_USER::isLoggedIn()){
-	echo json_encode( array( "status" => "error", "data" => "Authentication error" ));
+	echo json_encode( array( "status" => "error", "data" => array( "message" => "Authentication error" )));
 	exit();
 }
 
diff --git a/lib/User/database.php b/lib/User/database.php
index 3abaf9e1f41442577bf10f41af8b5350bcb7a0a8..eeabb592c227814d01206309867402c96cc1a366 100644
--- a/lib/User/database.php
+++ b/lib/User/database.php
@@ -156,15 +156,15 @@ class OC_USER_DATABASE extends OC_USER_BACKEND {
 		$query = OC_DB::prepare( "SELECT * FROM `*PREFIX*users` WHERE uid = ?" );
 		$result = $query->execute( array( $uid ));
 
-		if ( $result->numRows() > 0 ){
-			return false;
-		}
-		else{
+		if( $result->numRows() > 0 ){
 			$query = OC_DB::prepare( "UPDATE *PREFIX*users SET password = ? WHERE uid = ?" );
 			$result = $query->execute( array( sha1( $password ), $uid ));
 
 			return true;
 		}
+		else{
+			return false;
+		}
 	}
 
 	/**
diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php
new file mode 100644
index 0000000000000000000000000000000000000000..1a9ad73610eea2aceb7ff66a8da6248b83f7b308
--- /dev/null
+++ b/settings/ajax/changepassword.php
@@ -0,0 +1,35 @@
+<?php
+
+// Init owncloud
+require_once('../../lib/base.php');
+
+// We send json data
+header( "Content-Type: application/jsonrequest" );
+
+// Check if we are a user
+if( !OC_USER::isLoggedIn()){
+	echo json_encode( array( "status" => "error", "data" => array( "message" => "Authentication error" )));
+	exit();
+}
+
+// Get data
+if( !isset( $_POST["password"] ) && !isset( $_POST["oldpassword"] )){
+	echo json_encode( array( "status" => "error", "data" => array( "message" => "You have to enter the old and the new password!" )));
+	exit();
+}
+
+// Check if the old password is correct
+if( !OC_USER::checkPassword( $_SESSION["user_id"], $_POST["oldpassword"] )){
+	echo json_encode( array( "status" => "error", "data" => array( "message" => "Your old password is wrong!" )));
+	exit();
+}
+
+// Change password
+if( OC_USER::setPassword( $_SESSION["user_id"], $_POST["password"] )){
+	echo json_encode( array( "status" => "success", "data" => array( "message" => "Password changed" )));
+}
+else{
+	echo json_encode( array( "status" => "error", "data" => array( "message" => "Unable to change password" )));
+}
+
+?>
diff --git a/settings/css/settings.css b/settings/css/settings.css
new file mode 100644
index 0000000000000000000000000000000000000000..23561ec367d08ec9b2950bcaedeae36c971d856c
--- /dev/null
+++ b/settings/css/settings.css
@@ -0,0 +1,2 @@
+#passworderror{display:none;}
+#passwordchanged{display:none;}
\ No newline at end of file
diff --git a/settings/index.php b/settings/index.php
index 9bf89145cc3250b82e8a70904478504484b348df..1a442eca8110028fa5668fd315f7ae56155fc34d 100644
--- a/settings/index.php
+++ b/settings/index.php
@@ -7,12 +7,19 @@ if( !OC_USER::isLoggedIn()){
     exit();
 }
 
+// Highlight navigation entry
 OC_APP::setActiveNavigationEntry( "settings" );
-$tmpl = new OC_TEMPLATE( "settings", "index", "admin");
+OC_UTIL::addScript( "settings", "main" );
+OC_UTIL::addStyle( "settings", "settings" );
+
+// calculate the disc space
 $used=OC_FILESYSTEM::filesize('/');
 $free=OC_FILESYSTEM::free_space();
 $total=$free+$used;
 $relative=round(($used/$total)*100);
+
+// Return template
+$tmpl = new OC_TEMPLATE( "settings", "index", "admin");
 $tmpl->assign('usage',OC_HELPER::humanFileSize($used));
 $tmpl->assign('total_space',OC_HELPER::humanFileSize($total));
 $tmpl->assign('usage_relative',$relative);
diff --git a/settings/js/main.js b/settings/js/main.js
new file mode 100644
index 0000000000000000000000000000000000000000..e05fc68743cd8256669df501fbaa1ffb51246bbe
--- /dev/null
+++ b/settings/js/main.js
@@ -0,0 +1,21 @@
+$(document).ready(function(){
+	$("#passwordbutton").click( function(){
+		// Serialize the data
+		var post = $( "#passwordform" ).serialize();
+		$('#passwordchanged').hide();
+		$('#passworderror').hide();
+		// Ajax foo
+		$.post( 'ajax/changepassword.php', post, function(data){
+			if( data.status == "success" ){
+				$('#pass1').val('');
+				$('#pass2').val('');
+				$('#passwordchanged').show();
+			}
+			else{
+				$('#passworderror').html( data.data.message );
+				$('#passworderror').show();
+			}
+		});
+		return false;
+	});
+} );
diff --git a/settings/templates/index.php b/settings/templates/index.php
index 33d27922d8f0c0d0a832af3b8a2aa03f92873a55..2d5e9d9140fcc8de707e7abbafb700857f6b2cf2 100644
--- a/settings/templates/index.php
+++ b/settings/templates/index.php
@@ -6,23 +6,25 @@
 	</fieldset>
 </form>
 
-<form id="user_settings">
+<form id="passwordform">
 	<fieldset>
-	<legend>User settings</legend>
+	<legend>Change Password</legend>
+	<div id="passwordchanged">You're password got changed</div>
+	<div id="passworderror"></div>
 	<p>
-		<label for="email">Email :</label>
-		<input type="text" id="email" name="email" value="user@example.net" />
+		<label for="pass1">Old password:</label>
+		<input type="password" id="pass1" name="oldpassword" />
 	</p>
 	<p>
-		<label for="pass1">New password :</label>
-		<input type="password" id="pass1" name="pass1" /> 
+		<label for="pass2">New password :</label>
+		<input type="password" id="pass2" name="password" />
 	</p>
 	<p>
-		<label for="pass2">Confirm new password :</label>
-		<input type="password" id="pass2" name="pass2" /> 
+		<input type="checkbox" id="show" name="show" />
+		<label for="show">Show new password</label>
 	</p>
 	<p class="form_footer">
-		<input class="prettybutton" type="submit" value="Save" />
+		<input id="passwordbutton" class="prettybutton" type="submit" value="Save" />
 	</p>
 	</fieldset>
 </form>