diff --git a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs
index be602a5..79ca8b2 100644
--- a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs
+++ b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs
@@ -401,6 +401,19 @@ namespace Banshee.Dap.Ipod
 
 #region Syncing
 
+        public override void UpdateMetadata (DatabaseTrackInfo track)
+        {
+            lock (sync_mutex) {
+                IpodTrackInfo ipod_track;
+                if (!tracks_map.TryGetValue (track.TrackId, out ipod_track)) {
+                    return;
+                }
+
+                ipod_track.UpdateInfo (track);
+                ipod_track.CommitToIpod (IpodDevice);
+            }
+        }
+
         protected override void OnTracksAdded ()
         {
             if (!IsAdding && tracks_to_add.Count > 0 && !Sync.Syncing) {
@@ -689,6 +702,14 @@ namespace Banshee.Dap.Ipod
             }
         }
 
+        public override bool HasEditableTrackProperties {
+            get {
+                // we want child sources to be able to edit metadata and the
+                // savetrackmetadataservice to take in account this source
+                return true;
+            }
+        }
+
 #endregion
 
     }
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 f7a3d33..8ac3066 100644
--- a/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs
+++ b/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs
@@ -61,10 +61,19 @@ namespace Banshee.Dap.Ipod
 
         public IpodTrackInfo (TrackInfo track)
         {
+            CanSaveToDatabase = true;
+
             if (track is IpodTrackInfo) {
                 this.track = ((IpodTrackInfo)track).IpodTrack;
                 LoadFromIpodTrack ();
             } else {
+                UpdateInfo (track);
+            }
+        }
+
+        public void UpdateInfo (TrackInfo track)
+        {
+            if (!(track is IpodTrackInfo)) {
                 AlbumArtist = track.AlbumArtist;
                 AlbumTitle = track.AlbumTitle;
                 ArtistName = track.ArtistName;
@@ -100,9 +109,9 @@ namespace Banshee.Dap.Ipod
                     description = podcast_info.Description;
                     ReleaseDate = podcast_info.ReleaseDate;
                 }
+            } else {
+                throw new ArgumentException ("Shouldn't update an IpodTrackInfo from an IpodTrackInfo");
             }
-
-            CanSaveToDatabase = true;
         }
 
         private void LoadFromIpodTrack ()
