diff --git a/src/Core/Banshee.Services/Banshee.Playlist/PlaylistFileUtil.cs b/src/Core/Banshee.Services/Banshee.Playlist/PlaylistFileUtil.cs
index 146201d..9b8d600 100644
--- a/src/Core/Banshee.Services/Banshee.Playlist/PlaylistFileUtil.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlist/PlaylistFileUtil.cs
@@ -40,12 +40,14 @@ namespace Banshee.Playlist
         );
 
         private static PlaylistFormatDescription [] export_formats = new PlaylistFormatDescription [] {
+            NokiaM3uPlaylistFormat.FormatDescription,
             M3uPlaylistFormat.FormatDescription,
             PlsPlaylistFormat.FormatDescription,
             XspfPlaylistFormat.FormatDescription
         };
 
         public static readonly string [] PlaylistExtensions = new string [] {
+            NokiaM3uPlaylistFormat.FormatDescription.FileExtension,
             M3uPlaylistFormat.FormatDescription.FileExtension,
             PlsPlaylistFormat.FormatDescription.FileExtension,
             XspfPlaylistFormat.FormatDescription.FileExtension
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/NokiaM3uPlaylistFormat.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/NokiaM3uPlaylistFormat.cs
new file mode 100755
index 0000000..65646ff
--- /dev/null
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/NokiaM3uPlaylistFormat.cs
@@ -0,0 +1,168 @@
+//
+// NokiaM3uPlaylistFormat.cs
+//
+// Author:
+//   Nicholas Little <arealityfarbetween@googlemail.com>
+//
+// Copyright (C) 2011
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+
+using Mono.Unix;
+
+using Banshee.Base;
+using Banshee.Collection;
+using Banshee.Sources;
+using Banshee.IO;
+
+using BansheeDir = Banshee.IO.Directory;
+
+namespace Banshee.Playlists.Formats
+{
+    public class NokiaM3uPlaylistFormat : PlaylistFormatBase
+    {
+        public static readonly PlaylistFormatDescription FormatDescription = new PlaylistFormatDescription(
+            typeof(NokiaM3uPlaylistFormat), MagicHandler, Catalog.GetString("MPEG Version 3.0 Extended - Nokia Variant (*.m3u)"),
+            "m3u", new string [] {"audio/x-nokia-mpegurl", "audio/nokia-m3u", "audio/nokia-mpeg-url"});
+
+        public static bool MagicHandler(StreamReader reader)
+        {
+            string line = reader.ReadLine();
+            if(line == null) {
+                return false;
+            }
+			
+            line = reader.ReadToEnd();
+            if (line.Contains(@"E:"))
+                return true;
+            return false;
+        }
+
+        public NokiaM3uPlaylistFormat()
+        {
+        }
+
+        public override void Load(StreamReader reader, bool validateHeader)
+        {
+            string line;
+            string toReplace = getPathReplacement();
+
+            Dictionary<string, object> element = null;
+
+            while((line = reader.ReadLine()) != null) {
+                line = line.Trim();
+
+                if(line.Length == 0) {
+                    continue;
+                }
+
+                bool extinf = line.StartsWith("#EXTINF:");
+
+                if(!extinf && line[0] == '#') {
+                    continue;
+                } else if(extinf) {
+                    element = AddElement();
+                    try {
+                        ParseExtended(element, line);
+                    } catch {
+                    }
+                    continue;
+                } else if(element == null) {
+                    element = AddElement();
+                }
+
+                try {
+                    line = line.Replace(@"E:", toReplace)
+                               .Replace(BansheeDir.DosSeparator, Path.DirectorySeparatorChar);
+                    element["uri"] = new Uri(line);
+                    Hyena.Log.InformationFormat("Nokia playlist import: {0}", element["uri"]);
+                } catch {
+                    Elements.Remove(element);
+                }
+
+                element = null;
+            }
+        }
+
+        private void ParseExtended(Dictionary<string, object> element, string line)
+        {
+            string split = line.Substring(8).TrimStart(',');
+            string [] parts = split.Split(new char [] { ',' }, 2);
+
+            if(parts.Length == 2) {
+                element["duration"] = SecondsStringToTimeSpan(parts[0]);
+                element["title"] = parts[1].Trim();
+            } else {
+                element["title"] = split.Trim();
+            }
+        }
+
+        public override void Save(Stream stream, ITrackModelSource source)
+        {
+            using(StreamWriter writer = new StreamWriter(stream)) {
+                writer.WriteLine("#EXTM3U");
+
+                string toReplace = getPathReplacement();
+
+                string newPath;
+                TrackInfo track;
+                for (int i = 0; i < source.TrackModel.Count; i++) {
+                    track = source.TrackModel[i];
+                    int duration = (int)Math.Round(track.Duration.TotalSeconds);
+                    if(duration <= 0) {
+                        duration = -1;
+                    }
+                    writer.WriteLine("#EXTINF:{0},{1} - {2}", duration, track.DisplayArtistName, track.DisplayTrackTitle);
+
+                    newPath = track.Uri
+                        .AbsolutePath.Replace(toReplace, @"E:")
+                                     .Replace(BansheeDir.UnixSeparator, BansheeDir.DosSeparator);
+
+                    Hyena.Log.InformationFormat("Nokia playlist export: {0}", newPath);
+                    writer.WriteLine(newPath);
+                }
+            }
+        }
+
+        /// <summary>
+        /// This function uses the path of the playlist to find the
+        /// mount point or drive.
+        /// </summary>
+        private string getPathReplacement() {
+            string toReplace = null;
+            string basePath = BaseUri.AbsolutePath;
+            DriveInfo[] di = DriveInfo.GetDrives();
+
+            foreach(DriveInfo i in di) {
+                if (basePath.Contains(i.RootDirectory.FullName) &&
+                    (string.IsNullOrEmpty(toReplace) ||
+                    i.RootDirectory.FullName.Length > toReplace.Length)) {
+                    toReplace = i.RootDirectory.FullName;
+                }
+            }
+            return toReplace;
+        }
+    }
+}
diff --git a/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistParser.cs b/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistParser.cs
index 6dcad3a..0a8ca4b 100644
--- a/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistParser.cs
+++ b/src/Core/Banshee.Services/Banshee.Playlists.Formats/PlaylistParser.cs
@@ -42,6 +42,7 @@ namespace Banshee.Playlists.Formats
     public class PlaylistParser
     {
         private static PlaylistFormatDescription [] playlist_formats = new PlaylistFormatDescription [] {
+            NokiaM3uPlaylistFormat.FormatDescription,
             M3uPlaylistFormat.FormatDescription,
             PlsPlaylistFormat.FormatDescription,
             AsxPlaylistFormat.FormatDescription,
diff --git a/src/Core/Banshee.Services/Banshee.Services.csproj b/src/Core/Banshee.Services/Banshee.Services.csproj
index b52262f..2b800f8 100644
--- a/src/Core/Banshee.Services/Banshee.Services.csproj
+++ b/src/Core/Banshee.Services/Banshee.Services.csproj
@@ -23,7 +23,6 @@
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
     <DebugType>full</DebugType>
-    <WarningLevel>4</WarningLevel>
     <Optimize>false</Optimize>
     <OutputPath>..\..\..\bin</OutputPath>
   </PropertyGroup>
@@ -31,7 +30,6 @@
     <DebugSymbols>true</DebugSymbols>
     <DebugType>full</DebugType>
     <PlatformTarget>x86</PlatformTarget>
-    <WarningLevel>4</WarningLevel>
     <Optimize>false</Optimize>
     <OutputPath>..\..\..\bin\bin</OutputPath>
     <DefineConstants>WIN32</DefineConstants>
@@ -40,31 +38,25 @@
     <Reference Include="System" />
     <Reference Include="System.Core" />
     <Reference Include="glib-sharp">
-      <SpecificVersion>False</SpecificVersion>
+      <Package>glib-sharp-2.0</Package>
     </Reference>
     <Reference Include="System.Xml" />
     <Reference Include="dbus-sharp">
-      <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\..\bin\bin\dbus-sharp.dll</HintPath>
     </Reference>
     <Reference Include="dbus-sharp-glib">
-      <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\..\bin\bin\dbus-sharp-glib.dll</HintPath>
     </Reference>
     <Reference Include="taglib-sharp">
-      <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\..\bin\bin\taglib-sharp.dll</HintPath>
     </Reference>
     <Reference Include="ICSharpCode.SharpZipLib">
-      <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\..\bin\bin\ICSharpCode.SharpZipLib.dll</HintPath>
     </Reference>
     <Reference Include="Mono.Posix">
-      <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\..\bin\bin\Mono.Posix.dll</HintPath>
     </Reference>
     <Reference Include="Mono.Addins">
-      <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\..\bin\bin\Mono.Addins.dll</HintPath>
     </Reference>
   </ItemGroup>
@@ -328,6 +320,7 @@
     <Compile Include="Banshee.Collection.Database\DatabaseYearListModel.cs" />
     <Compile Include="Banshee.Collection\InvalidFileException.cs" />
     <Compile Include="Banshee.Sources\IBatchScrobblerSource.cs" />
+    <Compile Include="Banshee.Playlists.Formats\NokiaM3uPlaylistFormat.cs" />
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="Banshee.Services.addin.xml">
diff --git a/src/Core/Banshee.Services/Makefile.am b/src/Core/Banshee.Services/Makefile.am
index 3bf10ae..8635b55 100644
--- a/src/Core/Banshee.Services/Makefile.am
+++ b/src/Core/Banshee.Services/Makefile.am
@@ -157,6 +157,7 @@ SOURCES =  \
 	Banshee.Playlists.Formats/InvalidPlaylistException.cs \
 	Banshee.Playlists.Formats/IPlaylistFormat.cs \
 	Banshee.Playlists.Formats/M3uPlaylistFormat.cs \
+	Banshee.Playlists.Formats/NokiaM3uPlaylistFormat.cs \
 	Banshee.Playlists.Formats/PlaylistFormatBase.cs \
 	Banshee.Playlists.Formats/PlaylistFormatDescription.cs \
 	Banshee.Playlists.Formats/PlaylistParser.cs \
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage.addin.xml b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage.addin.xml
index 251e665..08f2034 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage.addin.xml
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage.addin.xml
@@ -96,6 +96,11 @@
     <MassStorageDevice class="Banshee.Dap.MassStorage.NookDevice"
         vendor-name="Barnes and Noble" product-name="Nook Classic"
         vendor-id="0x2080" product-id="0x001"/>
+		
+	<MassStorageDevice class="Banshee.Dap.MassStorage.NokiaN95Device"
+		vendor-name="Nokia Mobile Phones" product-name="Nokia N95"
+		vendor-id="0x0421" product-id="0x04ed"/>
+		
   </Extension>
 
 </Addin>
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage.csproj b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage.csproj
index d3126e1..5ca2de0 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage.csproj
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage.csproj
@@ -19,7 +19,6 @@
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
     <DebugType>full</DebugType>
-    <WarningLevel>4</WarningLevel>
     <Optimize>false</Optimize>
     <OutputPath>..\..\..\bin</OutputPath>
   </PropertyGroup>
@@ -27,7 +26,6 @@
     <DebugSymbols>true</DebugSymbols>
     <DebugType>full</DebugType>
     <PlatformTarget>x86</PlatformTarget>
-    <WarningLevel>4</WarningLevel>
     <Optimize>false</Optimize>
     <OutputPath>..\..\..\bin\bin</OutputPath>
   </PropertyGroup>
@@ -74,6 +72,7 @@
     <Compile Include="Banshee.Dap.MassStorage\MaemoDevice.cs" />
     <Compile Include="Banshee.Dap.MassStorage\NookDevice.cs" />
     <Compile Include="Banshee.Dap.MassStorage\RockBoxDevice.cs" />
+    <Compile Include="Banshee.Dap.MassStorage\NokiaN95Device.cs" />
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="Banshee.Dap.MassStorage.addin.xml">
@@ -99,20 +98,17 @@
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="glib-sharp">
-      <SpecificVersion>False</SpecificVersion>
+      <Package>glib-sharp-2.0</Package>
     </Reference>
     <Reference Include="gdk-sharp">
-      <SpecificVersion>False</SpecificVersion>
+      <Package>gdk-sharp-2.0</Package>
     </Reference>
     <Reference Include="Mono.Posix">
-      <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\..\bin\bin\Mono.Posix.dll</HintPath>
     </Reference>
     <Reference Include="Mono.Addins">
-      <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\..\bin\bin\Mono.Addins.dll</HintPath>
     </Reference>
-    <Reference Include="System.Core">
-    </Reference>
+    <Reference Include="System.Core" />
   </ItemGroup>
 </Project>
diff --git a/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/NokiaN95Device.cs b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/NokiaN95Device.cs
new file mode 100755
index 0000000..d7cb4df
--- /dev/null
+++ b/src/Dap/Banshee.Dap.MassStorage/Banshee.Dap.MassStorage/NokiaN95Device.cs
@@ -0,0 +1,71 @@
+// 
+// NokiaN95Device.cs
+// 
+// Author:
+//   Nicholas Little <arealityfarbetween@googlemail.com>
+// 
+// Copyright 2012
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+
+using Banshee.IO;
+using Banshee.Hardware;
+
+namespace Banshee.Dap.MassStorage
+{
+    public class NokiaN95Device : CustomMassStorageDevice
+    {
+        #region Delegate/Supported device structure
+        /*
+         * The suggestion is that we use a similar strategy as found in playlist
+         * parsing and handling to select the device type, based upon this sort 
+         * of signature...
+         * 
+         * But then I spotted the xml file with vendor and product id's ;)
+         */
+        public delegate bool Identify(IDevice node);
+
+        public static readonly Identify IDENTIFY = SupportedDevice;
+
+        public static bool SupportedDevice(IDevice node) {
+            IUsbDevice dev = node as IUsbDevice;
+            return dev.Product.Contains ("Nokia N95");
+        }
+        #endregion
+
+        private static string[] icons = {
+                "phone-google-nexus-one", DapSource.FallbackIcon
+        };
+        public override string [] GetIconNames ()
+        {
+            return icons;
+        }
+
+        protected override string DefaultFolderSeparator {
+            get { return Directory.DosSeparator.ToString(); }
+        }
+
+        private static string[] playlist_formats = { "x-nokia-mpegurl" };
+        protected override string[] DefaultPlaylistFormats {
+            get { return playlist_formats; }
+        }
+    }
+}
+
diff --git a/src/Dap/Banshee.Dap.MassStorage/Makefile.am b/src/Dap/Banshee.Dap.MassStorage/Makefile.am
index 24e6490..26c39e5 100644
--- a/src/Dap/Banshee.Dap.MassStorage/Makefile.am
+++ b/src/Dap/Banshee.Dap.MassStorage/Makefile.am
@@ -12,6 +12,7 @@ SOURCES =  \
 	Banshee.Dap.MassStorage/MaemoDevice.cs \
 	Banshee.Dap.MassStorage/MassStorageDevice.cs \
 	Banshee.Dap.MassStorage/MassStorageSource.cs \
+	Banshee.Dap.MassStorage/NokiaN95Device.cs \
 	Banshee.Dap.MassStorage/NookDevice.cs \
 	Banshee.Dap.MassStorage/RockBoxDevice.cs \
 	Banshee.Dap.MassStorage/WebOSDevice.cs
