diff --git a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs
index e35521a..ec7914b 100644
--- a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs
+++ b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs
@@ -189,14 +189,21 @@ namespace Banshee.Dap.Ipod
 
         public void CommitToIpod (IPod.Device device)
         {
-            track = track ?? device.TrackDatabase.CreateTrack ();
-            ExternalId = track.Id;
+            bool update = (track != null);
+            if (!update) {
+                try {
+                    track = device.TrackDatabase.CreateTrack (Uri.AbsolutePath);
+                } catch (Exception e) {
+                    Log.Exception ("Failed to create iPod track with Uri " + Uri.AbsoluteUri, e);
+                    device.TrackDatabase.RemoveTrack (track);
+                    return;
+                }
+            }
 
-            try {
-                track.Uri = new Uri (Uri.AbsoluteUri);
-            } catch (Exception e) {
-                Log.Exception ("Failed to create System.Uri for iPod track", e);
-                device.TrackDatabase.RemoveTrack (track);
+            ExternalId = track.Id;
+            if (!update) {
+                Uri = new SafeUri (track.Uri);
+                Save ();
             }
 
             track.AlbumArtist = AlbumArtist;
