diff --git a/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs b/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs
index 2930cfc..80ec7f9 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap/DapLibrarySync.cs
@@ -239,7 +239,7 @@ namespace Banshee.Dap
                             // If it's empty, don't leave it on the device
                             to.Unmap ();
                         } else {
-                            sync.Dap.AddChildSource (to);
+                            sync.Dap.AddPlaylistSource (to, library);
                         }
                     }
                 }
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs b/src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs
index fa93b70..d7f5cca 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap/DapSource.cs
@@ -43,6 +43,7 @@ using Banshee.Collection;
 using Banshee.Playlist;
 using Banshee.Collection.Database;
 using Banshee.Hardware;
+using Banshee.Library;
 using Banshee.MediaEngine;
 using Banshee.MediaProfiles;
 using Banshee.Preferences;
@@ -288,13 +289,34 @@ namespace Banshee.Dap
             }
         }
 
+        internal void AddPlaylistSource (PlaylistSource playlistsource, LibrarySource lib)
+        {
+            if (lib.Equals (ServiceManager.SourceManager.MusicLibrary)) {
+                music_group_source.AddChildSource (playlistsource);
+            } else if (lib.Equals (ServiceManager.SourceManager.VideoLibrary)) {
+                video_group_source.AddChildSource (playlistsource);
+            } else {
+                //we don't know who's the parent, so we add the child directly
+                //to the source, as it was done before as default
+                AddChildSource (playlistsource);
+            }
+        }
+
         public void RemovePlaylists ()
         {
-            // First remove any playlists on the device
-            List<Source> children = new List<Source> (sync.Dap.Children);
-            foreach (Source child in children) {
-                if (child is AbstractPlaylistSource && !(child is MediaGroupSource)) {
-                    (child as IUnmapableSource).Unmap ();
+            List<Source> descendants;
+            lock (Children) {
+                descendants = new List<Source> ();
+                foreach (Source child in Children) {
+                    foreach (Source grand_child in child.Children) {
+                        descendants.Add (grand_child);
+                    }
+                    descendants.Add (child);
+                }
+            }
+            foreach (Source descendant in descendants) {
+                if (descendant is AbstractPlaylistSource && !(descendant is MediaGroupSource)) {
+                    ((IUnmapableSource)descendant).Unmap ();
                 }
             }
         }
