diff --git a/apps/bookmarks/ajax/addBookmark.php b/apps/bookmarks/ajax/addBookmark.php
index 3975fd15f81d17e45ddd82ad663ea8a0f99b9c1d..45b16ae5fa6e4a76c93b200f959187f844626349 100644
--- a/apps/bookmarks/ajax/addBookmark.php
+++ b/apps/bookmarks/ajax/addBookmark.php
@@ -54,13 +54,7 @@ $params=array(
 	);
 $query->execute($params);
 
-if($CONFIG_DBTYPE == 'pgsql')
-{
-	$query = OC_DB::prepare("SELECT currval('*PREFIX*bookmarks_id_seq')");
-	$b_id = $query->execute()->fetchOne();
-} else {
-	$b_id = OC_DB::insertid();
-}
+$b_id = OC_DB::insertid('*PREFIX*bookmarks');
 
 
 if($b_id !== false) {
diff --git a/apps/calendar/lib/calendar.php b/apps/calendar/lib/calendar.php
index c19c0e73c08567394dfcc938c6baababc5cb51d0..f6d40aa534e0bb7e8713aea8139a275aaf490af1 100644
--- a/apps/calendar/lib/calendar.php
+++ b/apps/calendar/lib/calendar.php
@@ -111,7 +111,7 @@ class OC_Calendar_Calendar{
 		$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*calendar_calendars (userid,displayname,uri,ctag,calendarorder,calendarcolor,timezone,components) VALUES(?,?,?,?,?,?,?,?)' );
 		$result = $stmt->execute(array($userid,$name,$uri,1,$order,$color,$timezone,$components));
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*calendar_calendar');
 	}
 
 	/**
@@ -131,7 +131,7 @@ class OC_Calendar_Calendar{
 		$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*calendar_calendars (userid,displayname,uri,ctag,calendarorder,calendarcolor,timezone,components) VALUES(?,?,?,?,?,?,?,?)' );
 		$result = $stmt->execute(array($userid,$name,$uri,1,$order,$color,$timezone,$components));
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*calendar_calendars');
 	}
 
 	/**
diff --git a/apps/calendar/lib/object.php b/apps/calendar/lib/object.php
index 0c3e497d4f2e71d3bbc110b5ddaac59365a6b3d8..33871cd31851177875b7f1db743f7f5a02d66b3c 100644
--- a/apps/calendar/lib/object.php
+++ b/apps/calendar/lib/object.php
@@ -78,7 +78,7 @@ class OC_Calendar_Object{
 
 		OC_Calendar_Calendar::touchCalendar($id);
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*calendar_objects');
 	}
 
 	/**
@@ -97,7 +97,7 @@ class OC_Calendar_Object{
 
 		OC_Calendar_Calendar::touchCalendar($id);
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*calendar_objects');
 	}
 
 	/**
diff --git a/apps/contacts/lib/addressbook.php b/apps/contacts/lib/addressbook.php
index 2e869d7de3bf803b4359f8a1b5b3ef2726491e10..87477ed7ed41913ad505b9c92641fd76935d8eae 100644
--- a/apps/contacts/lib/addressbook.php
+++ b/apps/contacts/lib/addressbook.php
@@ -96,7 +96,7 @@ class OC_Contacts_Addressbook{
 		$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*contacts_addressbooks (userid,displayname,uri,description,ctag) VALUES(?,?,?,?,?)' );
 		$result = $stmt->execute(array($userid,$name,$uri,$description,1));
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*contacts_addressbooks');
 	}
 
 	/**
@@ -113,7 +113,7 @@ class OC_Contacts_Addressbook{
 		$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*contacts_addressbooks (userid,displayname,uri,description,ctag) VALUES(?,?,?,?,?)' );
 		$result = $stmt->execute(array($userid,$name,$uri,$description,1));
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*contacts_addressbooks');
 	}
 
 	/**
diff --git a/apps/contacts/lib/vcard.php b/apps/contacts/lib/vcard.php
index 74bc0f92f1b0e680658107d94a2f7474e92708e7..adfa32b6f5fc9c662c72de2c08237e4deb182799 100644
--- a/apps/contacts/lib/vcard.php
+++ b/apps/contacts/lib/vcard.php
@@ -121,7 +121,7 @@ class OC_Contacts_VCard{
 
 		OC_Contacts_Addressbook::touch($id);
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*contacts_cards');
 	}
 
 	/**
@@ -147,7 +147,7 @@ class OC_Contacts_VCard{
 
 		OC_Contacts_Addressbook::touch($id);
 
-		return OC_DB::insertid();
+		return OC_DB::insertid('*PREFIX*contacts_cards');
 	}
 
 	/**
diff --git a/apps/media/lib_collection.php b/apps/media/lib_collection.php
index 571cb7e68509fd3887d445c7ff91bc49218a3951..caa3ac3f47985b2da5e6c78a741f9434506fdc70 100644
--- a/apps/media/lib_collection.php
+++ b/apps/media/lib_collection.php
@@ -267,7 +267,7 @@ class OC_MEDIA_COLLECTION{
 				$query=self::$queries['addsong'];
 			}
 			$query->execute(array($name,$artist,$album,$path,$uid,$length,$track,$size));
-			$songId=OC_DB::insertid();
+			$songId=OC_DB::insertid('*PREFIX*media_songs');
 // 			self::setLastUpdated();
 			return self::getSongId($name,$artist,$album);
 		}
diff --git a/lib/db.php b/lib/db.php
index 421b08c2320cb9376a0b8842c62ba4c8036e072a..c059f5ab3366e696b0b7103909984ba7f694a3c3 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -224,6 +224,7 @@ class OC_DB {
 
 	/**
 	 * @brief gets last value of autoincrement
+	 * @param $table string The optional table name (will replace *PREFIX*) and add sequence suffix
 	 * @returns id
 	 *
 	 * MDB2 lastInsertID()
@@ -231,9 +232,14 @@ class OC_DB {
 	 * Call this method right after the insert command or other functions may
 	 * cause trouble!
 	 */
-	public static function insertid(){
+	public static function insertid($table=null){
 		self::connect();
-		return self::$connection->lastInsertId();
+		if($table !== null){
+			$prefix = OC_Config::getValue( "dbtableprefix", "oc_" );
+			$suffix = OC_Config::getValue( "dbsequencesuffix", "_id_seq" );
+			$table = str_replace( '*PREFIX*', $prefix, $table );
+		}
+		return self::$connection->lastInsertId($table.$suffix);
 	}
 
 	/**