diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistFormatBase.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistFormatBase.cs
index 2889100..1d7a58a 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistFormatBase.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistFormatBase.cs
@@ -49,6 +49,7 @@ namespace Banshee.Playlists.Formats
         {
             attributes = new Dictionary<string, object>();
             elements = new List<Dictionary<string, object>>();
+            RootPath = "/";
 
             if (Environment.CurrentDirectory.Equals ("/")) {
                 // System.Uri doesn't like / as a value
@@ -95,11 +96,21 @@ namespace Banshee.Playlists.Formats
                 return uri.AbsoluteUri;
             }
 
+            if (DefaultBaseUri != null) {
+                string localAbsolutePath = SafeUri.UriToFilename (uri);
+
+                return localAbsolutePath.Replace (DefaultBaseUri, RootPath);
+            }
+
             var result = Paths.MakePathRelative (uri.LocalPath, new DirectoryInfo (BaseUri.LocalPath).FullName);
 
             return result ?? uri.AbsoluteUri;
         }
 
+        public virtual string DefaultBaseUri { get; set; }
+
+        public virtual string RootPath { get; set; }
+
         protected virtual TimeSpan SecondsStringToTimeSpan(string seconds)
         {
             try {
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MaemoDevice.cs b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MaemoDevice.cs
index a3f1405..c23b64b 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MaemoDevice.cs
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MaemoDevice.cs
@@ -27,11 +27,13 @@
 //
 
 using System;
+using Hyena;
 using Mono.Unix;
 
 using Banshee.Base;
 using Banshee.Hardware;
 using Banshee.Library;
+using Banshee.IO;
 using Banshee.Collection;
 using Banshee.Collection.Database;
 
@@ -146,6 +148,14 @@ namespace Banshee.Dap.MassStorage
             get { return playlists_path; }
         }
 
+        protected override string DefaultFolderSeparator {
+            get { return Directory.DosSeparator.ToString (); }
+        }
+
+        internal override string RootPath {
+            get { return "E:"; }
+        }
+
         public override string [] GetIconNames ()
         {
             return icon_names;
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageDevice.cs b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageDevice.cs
index 17fdca2..51817a9 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageDevice.cs
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageDevice.cs
@@ -210,6 +210,10 @@ namespace Banshee.Dap.MassStorage
             get { return FolderDepth; }
         }
 
+        internal virtual string RootPath {
+            get { return null; }
+        }
+
         protected virtual string DefaultFolderSeparator {
             get { return null; }
         }
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs
index 79c1e3e..0938088 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/MassStorageSource.cs
@@ -368,6 +368,11 @@ namespace Banshee.Dap.MassStorage
                         stream = Banshee.IO.File.OpenWrite (playlist_path, true);
                         playlist_format.BaseUri = new Uri (PlaylistsWritePath);
 
+                        if (!String.IsNullOrEmpty (ms_device.RootPath)) {
+                            playlist_format.DefaultBaseUri = BaseDirectory;
+                            playlist_format.RootPath = ms_device.RootPath;
+                        }
+
                         playlist_format.Save (stream, from);
                     } catch (Exception e) {
                         Log.Exception (e);
