diff --git a/lib/setup.php b/lib/setup.php
index 59c3aefbf13aec36f6dfea364f67569e6c1e4355..5387a0ef493e8ea0003c53e7623a1b2cb9e7261c 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -285,13 +285,23 @@ class OC_Setup {
 		//we cant use OC_BD functions here because we need to connect as the administrative user.
 		$e_name = pg_escape_string($name);
 		$e_user = pg_escape_string($user);
-		$query = "CREATE DATABASE \"$e_name\" OWNER \"$e_user\"";
+		$query = "select datname from pg_database where datname = '$e_name'";
 		$result = pg_query($connection, $query);
 		if(!$result) {
 			$entry='DB Error: "'.pg_last_error($connection).'"<br />';
 			$entry.='Offending command was: '.$query.'<br />';
 			echo($entry);
 		}
+		if(! pg_fetch_row($result)) {
+			//The database does not exists... let's create it
+			$query = "CREATE DATABASE \"$e_name\" OWNER \"$e_user\"";
+			$result = pg_query($connection, $query);
+			if(!$result) {
+				$entry='DB Error: "'.pg_last_error($connection).'"<br />';
+				$entry.='Offending command was: '.$query.'<br />';
+				echo($entry);
+			}
+		}
 		$query = "REVOKE ALL PRIVILEGES ON DATABASE \"$e_name\" FROM PUBLIC";
 		$result = pg_query($connection, $query);		
 	}
@@ -299,13 +309,33 @@ class OC_Setup {
 	private static function pg_createDBUser($name,$password,$connection) {
 		$e_name = pg_escape_string($name);
 		$e_password = pg_escape_string($password);
-		$query = "CREATE USER \"$e_name\" CREATEDB PASSWORD '$e_password';";
+		$query = "select * from pg_roles where rolname='$e_name';";
 		$result = pg_query($connection, $query);
 		if(!$result) {
 			$entry='DB Error: "'.pg_last_error($connection).'"<br />';
 			$entry.='Offending command was: '.$query.'<br />';
 			echo($entry);
 		}
+
+		if(! pg_fetch_row($result)) {
+			//user does not exists let's create it :)
+			$query = "CREATE USER \"$e_name\" CREATEDB PASSWORD '$e_password';";
+			$result = pg_query($connection, $query);
+			if(!$result) {
+				$entry='DB Error: "'.pg_last_error($connection).'"<br />';
+				$entry.='Offending command was: '.$query.'<br />';
+				echo($entry);
+			}
+		}
+		else { // change password of the existing role
+			$query = "ALTER ROLE \"$e_name\" WITH PASSWORD '$e_password';";
+			$result = pg_query($connection, $query);
+			if(!$result) {
+				$entry='DB Error: "'.pg_last_error($connection).'"<br />';
+				$entry.='Offending command was: '.$query.'<br />';
+				echo($entry);
+			}
+		}
 	}
 
 	/**