diff --git a/plugins/ipod/rb-ipod-db.c b/plugins/ipod/rb-ipod-db.c
index 1857486..3474c6f 100644
--- a/plugins/ipod/rb-ipod-db.c
+++ b/plugins/ipod/rb-ipod-db.c
@@ -133,6 +133,7 @@ rb_itdb_save (RbIpodDb *ipod_db, GError **error)
 	if (priv->needs_shuffle_db) {
 		itdb_shuffle_write (priv->itdb, error);
 	}
+	itdb_stop_sync (priv->itdb);
 }
 
 static void
@@ -859,13 +860,16 @@ rb_ipod_db_save_async (RbIpodDb *ipod_db)
 	RbIpodDbPrivate *priv = IPOD_DB_GET_PRIVATE (ipod_db);
 
 	if (priv->save_timeout_id == 0) {
-		rb_debug ("Scheduling iPod database save in 15 seconds");
-		priv->save_timeout_id = g_timeout_add_seconds (15, 
-							       (GSourceFunc)save_timeout_cb,
-							       ipod_db);
+		RbIpodDbPrivate *priv = IPOD_DB_GET_PRIVATE (ipod_db);
+		itdb_start_sync (priv->itdb);
+		rb_debug ("Scheduling iPod database save in 3 seconds");
 	} else {
-		rb_debug ("Database save already scheduled");
+		g_source_remove (priv->save_timeout_id);
+		rb_debug ("Database save already scheduled, pushing back save in 3 seconds from now");
 	}
+	priv->save_timeout_id = g_timeout_add_seconds (3, 
+			                               (GSourceFunc)save_timeout_cb,
+						       ipod_db);
 }
 
 GList *
