Index: src/Track.cs
===================================================================
--- src/Track.cs	(revision 112131)
+++ src/Track.cs	(working copy)
@@ -138,6 +138,26 @@
             get { return record.Year; }
             set { record.Year = value; }
         }
+
+        public DateTime DateReleased {
+            get { return record.DateReleased; }
+            set { record.DateReleased = value; }
+        }
+
+        public bool NotPlayedMark {
+            get { return record.NotPlayedMark; }
+            set { record.NotPlayedMark = value; }
+        }
+
+        public bool RememberPosition {
+            get { return record.RememberPosition; }
+            set { record.RememberPosition = value; }
+        }
+
+        public int BookmarkTime {
+            get { return record.BookmarkTime; }
+            set { record.BookmarkTime = value; }
+        }
         
         public int BitRate {
             get { return record.BitRate; }
@@ -210,6 +230,16 @@
             }
         }
 
+        public string Description {
+            get {
+                DetailRecord detail = record.GetDetail (DetailType.Description);
+                return detail.Value;
+            } set {
+                DetailRecord detail = record.GetDetail (DetailType.Description);
+                detail.Value = value;
+            }
+        }
+
         public string Composer {
             get {
                 DetailRecord detail = record.GetDetail(DetailType.Composer);
Index: src/TrackDatabase.cs
===================================================================
--- src/TrackDatabase.cs	(revision 112218)
+++ src/TrackDatabase.cs	(working copy)
@@ -167,9 +167,9 @@
 
     internal class PlaylistItemRecord : TrackDbRecord
     {
-
-        private int unknownOne = 0;
-        private int unknownTwo = 0;
+        public Int16 IsPodcastGroup;
+        private Int16 unknownOne = 0;
+        public int GroupID = 0;
         private List<DetailRecord> details = new List<DetailRecord>();
         private DetailRecord posrec;
 
@@ -181,6 +181,7 @@
         }
 
         public int Timestamp;
+        public int PodcastGroupRef;
 
         public PlaylistItemRecord(bool isbe)
             : base(isbe)
@@ -198,10 +199,12 @@
             byte[] body = reader.ReadBytes(this.HeaderOne - 12);
 
             int numDataObjects = ToInt32(body, 0);
-            unknownOne = ToInt32(body, 4);
-            unknownTwo = ToInt32(body, 8);
+            IsPodcastGroup = ToInt16(body, 4);
+            unknownOne = ToInt16(body, 6);
+            GroupID = ToInt32(body, 8);
             TrackId = ToInt32(body, 12);
             Timestamp = ToInt32(body, 16);
+            PodcastGroupRef = ToInt32(body, 20);
 
             details.Clear();
 
@@ -220,6 +223,11 @@
             }
         }
 
+        public void AddDetail (DetailRecord detail)
+        {
+            details.Add(detail);
+        }
+
         public override void Save(DatabaseRecord db, BinaryWriter writer)
         {
 
@@ -254,10 +262,12 @@
             }
 
             writer.Write(details.Count);
+            writer.Write(IsPodcastGroup);
             writer.Write(unknownOne);
-            writer.Write(unknownTwo);
+            writer.Write(GroupID);
             writer.Write(TrackId);
             writer.Write(Timestamp);
+            writer.Write(PodcastGroupRef);
             writer.Write(new byte[PadLength]);
             writer.Write(childrenData, 0, childrenLength);
         }
@@ -295,6 +305,48 @@
         Description
     }
 
+    internal class PodcastPlaylistRecord : PlaylistRecord
+    {
+        private Dictionary<string, PlaylistItemRecord> podcast_group_ids = new Dictionary<string, PlaylistItemRecord> ();
+        private DetailRecord podcastMiscRecord;
+        private PlaylistItemRecord podcastRecord;
+
+        private DetailRecord MiscRecord {
+            get {
+                if (misc_record == null) {
+                    misc_record = new DetailRecord (IsBE);
+                    misc_record.Type = DetailType.Misc;
+                }
+                return misc_record;
+            }
+        }
+
+        private PlaylistItemRecord CreateGroupRecord (string name)
+        {
+            if (podcast_group_ids.ContainsKey (name)) {
+                return podcast_groups[name];
+            }
+            
+            PlaylistItemRecord podcastRecord = new PlaylistItemRecord (IsBE);
+            podcastRecord.IsPodcastGroup = 0x100;
+            podcastRecord.GroupID = podcast_groups++;
+
+            DetailRecord group_name = new DetailRecord (IsBE);
+            group_name.Type = DetailType.Title;
+            group_name.Value = name;
+            podcastRecord.AddDetail (group_name);
+            podcast_groups[name] = podcastRecord;
+            return podcastRecord;
+        }
+
+        public PodcastPlaylistRecord (bool isbe) : base (false, isbe)
+        {
+            IsPodcast = true;
+            Order = SortOrder.ReleaseDate;
+            IsHidden = false;
+        }
+    }
+
     internal class PlaylistRecord : TrackDbRecord
     {
 
@@ -312,9 +364,10 @@
         public bool IsHidden;
         public int Timestamp;
         public int Id;
-        public bool IsPodcast;
         public SortOrder Order = SortOrder.Manual;
 
+        public bool IsPodcast;
+
         public string PlaylistName
         {
             get { return nameRecord.Value; }
@@ -743,6 +796,7 @@
         Category = 9,
         Composer = 12,
         Grouping = 13,
+        Description = 14,
         PodcastUrl = 15,
         PodcastUrl2 = 16,
         ChapterData = 17,
Index: src/Playlist.cs
===================================================================
--- src/Playlist.cs	(revision 112131)
+++ src/Playlist.cs	(working copy)
@@ -63,6 +63,11 @@
             }
         }
 
+        public bool IsPodcast {
+            get { return record.IsPodcast; }
+            set { record.IsPodcast = value; }
+        }
+
         public string Name {
             get {
                 if (otgtitle != null)
@@ -98,6 +103,10 @@
             record.Clear ();
         }
         
+        public void AddTrack (int track_id) {
+            AddTrack (db.GetTrackById (track_id));
+        }
+
         public void AddTrack (Track track) {
             InsertTrack (-1, track);
         }
