diff --git a/src/librygel-server/rygel-item-updater.vala b/src/librygel-server/rygel-item-updater.vala
index 9f1870e..5134f25 100644
--- a/src/librygel-server/rygel-item-updater.vala
+++ b/src/librygel-server/rygel-item-updater.vala
@@ -1,7 +1,9 @@
 /*
  * Copyright (C) 2012 Intel Corporation.
+ * Copyright (C) 2013 Cable Television Laboratories, Inc.
  *
  * Author: Krzesimir Nowak <krnowak@openismus.com>
+ *         Doug Galligan <doug@sentosatech.com>
  *
  * This file is part of Rygel.
  *
@@ -27,6 +29,8 @@ using Gee;
  * UpdateObject action implementation.
  */
 internal class Rygel.ItemUpdater: GLib.Object, Rygel.StateMachine {
+    public const string QN_UPNP_DATE = "dc:date";
+
     private static Regex escape_regex;
 
     private string object_id;
@@ -98,6 +102,73 @@ internal class Rygel.ItemUpdater: GLib.Object, Rygel.StateMachine {
         }
     }
 
+    // Remove any leading or trailing spaces for the corresponding text node.
+    private static string formatTagValues (string tag_values){
+        if(tag_values.length > 0 && tag_values.get_char (0) == '<'){
+            var init_split = tag_values.split ("</");
+            var tag_name = init_split[1].substring
+                                            (0, init_split[1].length - 1)
+                                            ._strip ();
+            var tag_value = init_split[0].split (">")[1]._strip ();
+            debug ("Tag Name formatted :%s",tag_name);
+            debug ("Tag Value formatted :%s",tag_value);
+            return "<%s>%s</%s>".printf (tag_name, tag_value, tag_name);
+        }
+        return tag_values;
+    }
+
+    // Check if the date is not in the recommended format
+    private static void check_date_tag (string [] current_tag,
+                                        string [] new_tag) throws Error {
+        int date_index = -1;
+
+        // Find the current tag index and
+        // check the validity of the new tag in the same index
+        foreach (unowned string cur_str in current_tag) {
+            date_index++;
+            if (cur_str.index_of (QN_UPNP_DATE) != -1) {
+                var date_val = new_tag[date_index].split ("</")[0]
+                                                  .split (">")[1]._strip ();
+                check_date (date_val);
+                break;
+            }
+        }
+
+        date_index = -1;
+        // If the current tag does not then search new Tag for dc:date
+        foreach (unowned string new_str in new_tag) {
+            date_index++;
+            if (new_str.index_of (QN_UPNP_DATE) != -1) {
+                var date_val = new_tag[date_index].split ("</")[0]
+                                                  .split (">")[1]._strip ();
+                check_date (date_val);
+                break;
+            }
+        }
+    }
+
+    // Same logic used in object-creator class
+    private static void check_date (string date_value) throws Error {
+        int year = 0, month = 0, day = 0;
+        if (date_value.scanf ("%4d-%02d-%02d",
+                                  out year,
+                                  out month,
+                                  out day) != 3) {
+            throw new ContentDirectoryError.INVALID_NEW_TAG_VALUE
+                                    (_("Invalid date format: %s"),
+                                     date_value);
+        }
+
+        var date = GLib.Date ();
+        date.set_dmy ((DateDay) day, (DateMonth) month, (DateYear) year);
+
+        if (!date.valid ()) {
+            throw new ContentDirectoryError.INVALID_NEW_TAG_VALUE
+                                    (_("Invalid date: %s"),
+                                     date_value);
+        }
+    }
+
     private static LinkedList<string> csv_split (string? tag_values) {
         var list = new LinkedList<string> ();
 
@@ -125,6 +196,14 @@ internal class Rygel.ItemUpdater: GLib.Object, Rygel.StateMachine {
                 case ',':
                     var value = tag_values.substring (token_start,
                                                       token_length);
+                    //  Check if the start character is "<"
+                    if (value.length > 0 && value[0] == '<') {
+                         // then the end character must be > before the split"
+                         if (!(value[value.length-1] == '>')) {
+                             // Continue the loop again.
+                             break;
+                         }
+                    }
 
                     list.add (ItemUpdater.unescape (value));
                     token_start += token_length + 1;
@@ -139,7 +218,9 @@ internal class Rygel.ItemUpdater: GLib.Object, Rygel.StateMachine {
             }
         }
 
-        list.add (ItemUpdater.unescape (tag_values.substring (token_start)));
+        list.add (formatTagValues
+                      (ItemUpdater.unescape
+                                       (tag_values.substring (token_start)._strip ())));
 
         return list;
     }
@@ -148,6 +229,12 @@ internal class Rygel.ItemUpdater: GLib.Object, Rygel.StateMachine {
         var media_object = yield this.fetch_object ();
         var current_list = csv_split (this.current_tag_value);
         var new_list = csv_split (this.new_tag_value);
+
+        // If the size is not equal it will be handled downstream and different error will be thrown
+        if (current_list.size == new_list.size){
+            check_date_tag (current_list.to_array (), new_list.to_array ());
+        }
+
         var result = yield media_object.apply_fragments
                                         (current_list,
                                          new_list,
diff --git a/src/plugins/media-export/rygel-media-export-harvesting-task.vala b/src/plugins/media-export/rygel-media-export-harvesting-task.vala
index 8cbec76..0f60f4a 100644
--- a/src/plugins/media-export/rygel-media-export-harvesting-task.vala
+++ b/src/plugins/media-export/rygel-media-export-harvesting-task.vala
@@ -288,7 +288,7 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine,
             this.completed ();
         }
 
-        MediaItem item;
+        MediaFileItem item;
         if (dlna == null) {
             item = ItemFactory.create_simple (this.containers.peek_head (),
                                               file,
diff --git a/src/plugins/media-export/rygel-media-export-item-factory.vala b/src/plugins/media-export/rygel-media-export-item-factory.vala
index 14296b9..018da3d 100644
--- a/src/plugins/media-export/rygel-media-export-item-factory.vala
+++ b/src/plugins/media-export/rygel-media-export-item-factory.vala
@@ -31,11 +31,11 @@ using Gst.PbUtils;
  * Represents MediaExport item.
  */
 namespace Rygel.MediaExport.ItemFactory {
-    public static MediaItem? create_simple (MediaContainer parent,
-                                            File           file,
-                                            FileInfo       info) {
+    public static MediaFileItem? create_simple (MediaContainer parent,
+                                                File           file,
+                                                FileInfo       info) {
         var title = info.get_display_name ();
-        MediaItem item;
+        MediaFileItem item;
         var mime = ContentType.get_mime_type (info.get_content_type ());
 
         if (mime.has_prefix ("video/")) {
@@ -62,9 +62,9 @@ namespace Rygel.MediaExport.ItemFactory {
         return item;
     }
 
-    private static MediaItem? create_playlist_item (File file,
-                                                    MediaContainer parent,
-                                                    string fallback_title) {
+    private static MediaFileItem? create_playlist_item (File file,
+                                                        MediaContainer parent,
+                                                        string fallback_title) {
         try {
             uint8[] contents;
 
@@ -112,12 +112,12 @@ namespace Rygel.MediaExport.ItemFactory {
         }
     }
 
-    public static MediaItem? create_from_info (MediaContainer     parent,
-                                               File               file,
-                                               DiscovererInfo     info,
-                                               GUPnPDLNA.Profile? profile,
-                                               FileInfo           file_info) {
-        MediaItem item;
+    public static MediaFileItem? create_from_info (MediaContainer     parent,
+                                                   File               file,
+                                                   DiscovererInfo     info,
+                                                   GUPnPDLNA.Profile? profile,
+                                                   FileInfo           file_info) {
+        MediaFileItem item;
         string id = MediaCache.get_id (file);
         GLib.List<DiscovererAudioInfo> audio_streams;
         GLib.List<DiscovererVideoInfo> video_streams;
@@ -195,13 +195,13 @@ namespace Rygel.MediaExport.ItemFactory {
     }
 
 
-    private static MediaItem fill_video_item (VideoItem            item,
-                                              File                 file,
-                                              DiscovererInfo       info,
-                                              GUPnPDLNA.Profile?   profile,
-                                              DiscovererVideoInfo  video_info,
-                                              DiscovererAudioInfo? audio_info,
-                                              FileInfo             file_info) {
+    private static MediaFileItem fill_video_item (VideoItem            item,
+                                                  File                 file,
+                                                  DiscovererInfo       info,
+                                                  GUPnPDLNA.Profile?   profile,
+                                                  DiscovererVideoInfo  video_info,
+                                                  DiscovererAudioInfo? audio_info,
+                                                  FileInfo             file_info) {
         fill_audio_item (item as AudioItem, info, audio_info);
         fill_media_item (item, file, info, profile, file_info);
 
@@ -214,12 +214,12 @@ namespace Rygel.MediaExport.ItemFactory {
         return item;
     }
 
-    private static MediaItem fill_photo_item (PhotoItem           item,
-                                              File                file,
-                                              DiscovererInfo      info,
-                                              GUPnPDLNA.Profile?  profile,
-                                              DiscovererVideoInfo video_info,
-                                              FileInfo            file_info) {
+    private static MediaFileItem fill_photo_item (PhotoItem           item,
+                                                  File                file,
+                                                  DiscovererInfo      info,
+                                                  GUPnPDLNA.Profile?  profile,
+                                                  DiscovererVideoInfo video_info,
+                                                  FileInfo            file_info) {
         fill_media_item (item, file, info, profile, file_info);
 
         item.width = (int) video_info.get_width ();
@@ -231,12 +231,12 @@ namespace Rygel.MediaExport.ItemFactory {
         return item;
     }
 
-    private static MediaItem fill_music_item (MusicItem            item,
-                                              File                 file,
-                                              DiscovererInfo       info,
-                                              GUPnPDLNA.Profile?   profile,
-                                              DiscovererAudioInfo? audio_info,
-                                              FileInfo             file_info) {
+    private static MediaFileItem fill_music_item (MusicItem            item,
+                                                  File                 file,
+                                                  DiscovererInfo       info,
+                                                  GUPnPDLNA.Profile?   profile,
+                                                  DiscovererAudioInfo? audio_info,
+                                                  FileInfo             file_info) {
         fill_audio_item (item as AudioItem, info, audio_info);
         fill_media_item (item, file, info, profile, file_info);
 
@@ -296,7 +296,7 @@ namespace Rygel.MediaExport.ItemFactory {
         return item;
     }
 
-    private static void fill_media_item (MediaItem          item,
+    private static void fill_media_item (MediaFileItem      item,
                                          File               file,
                                          DiscovererInfo     info,
                                          GUPnPDLNA.Profile? profile,
diff --git a/src/plugins/media-export/rygel-media-export-media-cache.vala b/src/plugins/media-export/rygel-media-export-media-cache.vala
index e4c4eb7..3975e6c 100644
--- a/src/plugins/media-export/rygel-media-export-media-cache.vala
+++ b/src/plugins/media-export/rygel-media-export-media-cache.vala
@@ -1,8 +1,11 @@
 /*
  * Copyright (C) 2009,2010 Jens Georg <mail@jensge.org>.
  * Copyright (C) 2013 Intel Corporation.
+ * Copyright (C) 2013 Cable Television Laboratories, Inc.
  *
  * Author: Jens Georg <mail@jensge.org>
+ *         Doug Galligan <doug@sentosatech.com>
+ *         Craig Pratt <craig@ecaspia.com>
  *
  * This file is part of Rygel.
  *
@@ -21,7 +24,6 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-
 using Gee;
 using GUPnP;
 using Sqlite;
@@ -119,7 +121,7 @@ public class Rygel.MediaExport.MediaCache : Object {
     /**
      * Add the item to the cache.
      */
-    public void save_item (Rygel.MediaItem item,
+    public void save_item (Rygel.MediaFileItem item,
                            bool override_guarded = false) throws Error {
         try {
             db.begin ();
@@ -575,7 +577,7 @@ public class Rygel.MediaExport.MediaCache : Object {
         }
         object.id = UUID.get ();
 
-        this.save_item (object as MediaItem);
+        this.save_item (object as MediaFileItem);
 
         return object.id;
     }
@@ -693,7 +695,7 @@ public class Rygel.MediaExport.MediaCache : Object {
     }
 
 
-    private void save_item_metadata (Rygel.MediaItem item) throws Error {
+    private void save_item_metadata (Rygel.MediaFileItem item) throws Error {
         // Fill common properties
         GLib.Value[] values = { item.size,
                                 item.mime_type,
@@ -757,7 +759,7 @@ public class Rygel.MediaExport.MediaCache : Object {
         int type = ObjectType.CONTAINER;
         GLib.Value parent;
 
-        if (object is MediaItem) {
+        if (object is MediaFileItem) {
             type = ObjectType.ITEM;
         }
 
@@ -790,7 +792,7 @@ public class Rygel.MediaExport.MediaCache : Object {
         int type = ObjectType.CONTAINER;
         GLib.Value parent;
 
-        if (object is MediaItem) {
+        if (object is MediaFileItem) {
             type = ObjectType.ITEM;
         }
 
@@ -903,11 +905,27 @@ public class Rygel.MediaExport.MediaCache : Object {
                                            object_id,
                                            title,
                                            upnp_class);
-                fill_item (statement, object as MediaItem);
+                var item = object as MediaFileItem;
+                fill_item (statement, item);
 
                 if (uri != null) {
-                    (object as MediaItem).add_uri (uri);
+                    item.add_uri (uri);
                 }
+
+                // Call the MediaEngine to determine which item representations it can support
+                var media_engine = MediaEngine.get_default ( );
+                media_engine.get_resources_for_item.begin ( item,
+                                                            (obj, res) => {
+                    var added_resources = media_engine
+                                          .get_resources_for_item.end (res);
+                    debug ("Adding %d resources to item source %s",
+                           added_resources.size, item.uris.get (0) );    
+                    foreach (var resrc in added_resources) {     
+                       debug ("Media-export item media resource %s",
+                              resrc.get_name ());
+                    }
+                    item.get_resource_list ().add_all (added_resources);
+                  });
                 break;
             default:
                 assert_not_reached ();
@@ -915,9 +933,9 @@ public class Rygel.MediaExport.MediaCache : Object {
 
         if (object != null) {
             object.modified = statement.column_int64 (DetailColumn.TIMESTAMP);
-            if (object.modified  == int64.MAX && object is MediaItem) {
+            if (object.modified  == int64.MAX && object is MediaFileItem) {
                 object.modified = 0;
-                (object as MediaItem).place_holder = true;
+                (object as MediaFileItem).place_holder = true;
             }
             object.object_update_id = (uint) statement.column_int64
                                         (DetailColumn.OBJECT_UPDATE_ID);
@@ -927,7 +945,7 @@ public class Rygel.MediaExport.MediaCache : Object {
         return object;
     }
 
-    private void fill_item (Statement statement, MediaItem item) {
+    private void fill_item (Statement statement, MediaFileItem item) {
         // Fill common properties
         item.date = statement.column_text (DetailColumn.DATE);
         item.mime_type = statement.column_text (DetailColumn.MIME_TYPE);
diff --git a/src/plugins/media-export/rygel-media-export-object-factory.vala b/src/plugins/media-export/rygel-media-export-object-factory.vala
index 0335d70..8ce86cd 100644
--- a/src/plugins/media-export/rygel-media-export-object-factory.vala
+++ b/src/plugins/media-export/rygel-media-export-object-factory.vala
@@ -78,17 +78,17 @@ internal class Rygel.MediaExport.ObjectFactory : Object {
     }
 
     /**
-     * Return a new instance of MediaItem
+     * Return a new instance of MediaFileItem
      *
      * @param media_db instance of MediaDB
      * @param id id of the item
      * @param title title of the item
      * @param upnp_class upnp_class of the item
      */
-    public virtual MediaItem get_item (MediaContainer parent,
-                                       string         id,
-                                       string         title,
-                                       string         upnp_class) {
+    public virtual MediaFileItem get_item (MediaContainer parent,
+                                           string         id,
+                                           string         title,
+                                           string         upnp_class) {
         switch (upnp_class) {
             case Rygel.MusicItem.UPNP_CLASS:
             case Rygel.AudioItem.UPNP_CLASS:
diff --git a/src/plugins/media-export/rygel-media-export-playlist-container.vala b/src/plugins/media-export/rygel-media-export-playlist-container.vala
index 09e9316..341dd76 100644
--- a/src/plugins/media-export/rygel-media-export-playlist-container.vala
+++ b/src/plugins/media-export/rygel-media-export-playlist-container.vala
@@ -63,7 +63,7 @@ internal class Rygel.MediaExport.PlaylistContainer : DBContainer,
         }
     }
 
-    public async void add_item (Rygel.MediaItem item,
+    public async void add_item (Rygel.MediaFileItem item,
                                 Cancellable?    cancellable)
                                 throws Error {
         throw new WritableContainerError.NOT_IMPLEMENTED
diff --git a/src/plugins/media-export/rygel-media-export-playlist-root-container.vala b/src/plugins/media-export/rygel-media-export-playlist-root-container.vala
index 03ee6f1..02bec17 100644
--- a/src/plugins/media-export/rygel-media-export-playlist-root-container.vala
+++ b/src/plugins/media-export/rygel-media-export-playlist-root-container.vala
@@ -68,7 +68,7 @@ internal class Rygel.MediaExport.PlaylistRootContainer : Rygel.WritableContainer
         }
     }
 
-    public async void add_item (Rygel.MediaItem item,
+    public async void add_item (Rygel.MediaFileItem item,
                                 Cancellable?    cancellable)
                                 throws Error {
         throw new WritableContainerError.NOT_IMPLEMENTED
diff --git a/src/plugins/media-export/rygel-media-export-trackable-db-container.vala b/src/plugins/media-export/rygel-media-export-trackable-db-container.vala
index e96232f..93e3286 100644
--- a/src/plugins/media-export/rygel-media-export-trackable-db-container.vala
+++ b/src/plugins/media-export/rygel-media-export-trackable-db-container.vala
@@ -45,7 +45,7 @@ public class Rygel.MediaExport.TrackableDbContainer : DBContainer,
             var cache = this.media_db;
 
             if (object is MediaItem) {
-                cache.save_item (object as MediaItem);
+                cache.save_item (object as MediaFileItem);
             } else if (object is MediaContainer) {
                  cache.save_container (object as MediaContainer);
             } else {
@@ -69,7 +69,7 @@ public class Rygel.MediaExport.TrackableDbContainer : DBContainer,
     protected async void add_child (MediaObject object) {
         try {
             if (object is MediaItem) {
-                this.media_db.save_item (object as MediaItem);
+                this.media_db.save_item (object as MediaFileItem);
             } else if (object is MediaContainer) {
                 this.media_db.save_container (object as MediaContainer);
             } else {
diff --git a/src/plugins/media-export/rygel-media-export-writable-db-container.vala b/src/plugins/media-export/rygel-media-export-writable-db-container.vala
index 13b5f83..a27edbf 100644
--- a/src/plugins/media-export/rygel-media-export-writable-db-container.vala
+++ b/src/plugins/media-export/rygel-media-export-writable-db-container.vala
@@ -56,7 +56,7 @@ internal class Rygel.MediaExport.WritableDbContainer : TrackableDbContainer,
         this.create_classes.add (Rygel.MediaContainer.UPNP_CLASS);
     }
 
-    public virtual async void add_item (Rygel.MediaItem item,
+    public virtual async void add_item (Rygel.MediaFileItem item,
                                         Cancellable? cancellable)
                                         throws Error {
         item.parent = this;
diff --git a/src/plugins/tracker/rygel-tracker-category-all-container.vala b/src/plugins/tracker/rygel-tracker-category-all-container.vala
index 3b1392e..35989e7 100644
--- a/src/plugins/tracker/rygel-tracker-category-all-container.vala
+++ b/src/plugins/tracker/rygel-tracker-category-all-container.vala
@@ -82,7 +82,7 @@ public class Rygel.Tracker.CategoryAllContainer : SearchContainer,
         cleanup_query.execute.begin (this.resources);
     }
 
-    public async void add_item (MediaItem item, Cancellable? cancellable)
+    public async void add_item (MediaFileItem item, Cancellable? cancellable)
                                 throws Error {
         var urn = yield this.create_entry_in_store (item);
 
@@ -133,7 +133,7 @@ public class Rygel.Tracker.CategoryAllContainer : SearchContainer,
         this.get_children_count.begin ();
     }
 
-    private async string create_entry_in_store (MediaItem item) throws Error {
+    private async string create_entry_in_store (MediaFileItem item) throws Error {
         var category = this.item_factory.category;
         var query = new InsertionQuery (item, category);
 
diff --git a/src/plugins/tracker/rygel-tracker-insertion-query.vala b/src/plugins/tracker/rygel-tracker-insertion-query.vala
index 9b7a10e..3ea8291 100644
--- a/src/plugins/tracker/rygel-tracker-insertion-query.vala
+++ b/src/plugins/tracker/rygel-tracker-insertion-query.vala
@@ -53,7 +53,7 @@ public class Rygel.Tracker.InsertionQuery : Query {
 
     private string uri;
 
-    public InsertionQuery (MediaItem item, string category) {
+    public InsertionQuery (MediaFileItem item, string category) {
         var type = "nie:DataObject";
         var file = File.new_for_uri (item.uris[0]);
 
diff --git a/src/plugins/tracker/rygel-tracker-item-factory.vala b/src/plugins/tracker/rygel-tracker-item-factory.vala
index 0edbafb..49e00d6 100644
--- a/src/plugins/tracker/rygel-tracker-item-factory.vala
+++ b/src/plugins/tracker/rygel-tracker-item-factory.vala
@@ -3,10 +3,12 @@
  * Copyright (C) 2008-2012 Nokia Corporation.
  * Copyright (C) 2010 MediaNet Inh.
  * Copyright (C) 2012 Intel Corporation.
+ * Copyright (C) 2013 Cable Television Laboratories, Inc.
  *
  * Authors: Zeeshan Ali <zeenix@gmail.com>
  *          Sunil Mohan Adapa <sunil@medhas.org>
  *          Jens Georg <jensg@openismus.com>
+ *          Doug Galligan <doug@sentosatech.com>
  *
  * This file is part of Rygel.
  *
@@ -80,13 +82,13 @@ public abstract class Rygel.Tracker.ItemFactory {
         this.properties.add ("date");
     }
 
-    public abstract MediaItem create (string          id,
-                                      string          uri,
-                                      SearchContainer parent,
-                                      Sparql.Cursor   metadata)
+    public abstract MediaFileItem create (string          id,
+                                          string          uri,
+                                          SearchContainer parent,
+                                          Sparql.Cursor   metadata)
                                       throws GLib.Error;
 
-    protected void set_ref_id (MediaItem item, string prefix) {
+    protected void set_ref_id (MediaFileItem item, string prefix) {
         if (item.id.has_prefix (prefix)) {
             return;
         }
@@ -99,7 +101,7 @@ public abstract class Rygel.Tracker.ItemFactory {
         item.ref_id = prefix + "," + split_id[1];
     }
 
-    protected virtual void set_metadata (MediaItem     item,
+    protected virtual void set_metadata (MediaFileItem item,
                                          string        uri,
                                          Sparql.Cursor metadata)
                                          throws GLib.Error {
@@ -128,10 +130,27 @@ public abstract class Rygel.Tracker.ItemFactory {
         if (metadata.is_bound (Metadata.DLNA_PROFILE)) {
             item.dlna_profile = metadata.get_string (Metadata.DLNA_PROFILE);
         }
-
-        item.mime_type = metadata.get_string (Metadata.MIME);
+ 
+        if (metadata.is_bound (Metadata.MIME)) {
+            item.mime_type = metadata.get_string (Metadata.MIME);  
+        }
 
         item.add_uri (uri);
     }
+
+    protected virtual void add_resources (MediaItem item) throws GLib.Error {
+        // Call the MediaEngine to determine which item representations it can support
+        var media_engine = MediaEngine.get_default ( );
+        media_engine.get_resources_for_item.begin (item,
+                                                   (obj, res) => {
+                var added_resources = media_engine.get_resources_for_item.end (res);
+                debug ("Adding %d resources to item source %s",
+                       added_resources.size, item.uris.get (0) );    
+                foreach (var resrc in added_resources) {     
+                    debug ("Tracker item media resource %s", resrc.get_name ());
+                }
+                item.get_resource_list ().add_all (added_resources);
+            });
+    }
 }
 
diff --git a/src/plugins/tracker/rygel-tracker-music-item-factory.vala b/src/plugins/tracker/rygel-tracker-music-item-factory.vala
index fbd491d..1a400b2 100644
--- a/src/plugins/tracker/rygel-tracker-music-item-factory.vala
+++ b/src/plugins/tracker/rygel-tracker-music-item-factory.vala
@@ -71,10 +71,10 @@ public class Rygel.Tracker.MusicItemFactory : ItemFactory {
         this.properties.add ("upnp:bitrate");
     }
 
-    public override MediaItem create (string          id,
-                                      string          uri,
-                                      SearchContainer parent,
-                                      Sparql.Cursor   metadata)
+    public override MediaFileItem create (string          id,
+                                          string          uri,
+                                          SearchContainer parent,
+                                          Sparql.Cursor   metadata)
                                       throws GLib.Error {
         var item = new MusicItem (id, parent, "");
 
@@ -83,7 +83,7 @@ public class Rygel.Tracker.MusicItemFactory : ItemFactory {
         return item;
     }
 
-    protected override void set_metadata (MediaItem item,
+    protected override void set_metadata (MediaFileItem item,
                                           string    uri,
                                           Sparql.Cursor metadata)
                                           throws GLib.Error {
@@ -137,6 +137,8 @@ public class Rygel.Tracker.MusicItemFactory : ItemFactory {
         }
 
         music.lookup_album_art ();
+
+        base.add_resources(music);
     }
 }
 
diff --git a/src/plugins/tracker/rygel-tracker-picture-item-factory.vala b/src/plugins/tracker/rygel-tracker-picture-item-factory.vala
index 4cf398e..168d8f1 100644
--- a/src/plugins/tracker/rygel-tracker-picture-item-factory.vala
+++ b/src/plugins/tracker/rygel-tracker-picture-item-factory.vala
@@ -56,10 +56,10 @@ public class Rygel.Tracker.PictureItemFactory : ItemFactory {
         this.properties.add ("width");
     }
 
-    public override MediaItem create (string          id,
-                                      string          uri,
-                                      SearchContainer parent,
-                                      Sparql.Cursor   metadata)
+    public override MediaFileItem create (string          id,
+                                          string          uri,
+                                          SearchContainer parent,
+                                          Sparql.Cursor   metadata)
                                       throws GLib.Error {
         var item = new PhotoItem (id, parent, "");
 
@@ -68,7 +68,7 @@ public class Rygel.Tracker.PictureItemFactory : ItemFactory {
         return item;
     }
 
-    protected override void set_metadata (MediaItem     item,
+    protected override void set_metadata (MediaFileItem item,
                                           string        uri,
                                           Sparql.Cursor metadata)
                                           throws GLib.Error {
@@ -85,6 +85,8 @@ public class Rygel.Tracker.PictureItemFactory : ItemFactory {
         if (metadata.is_bound (PictureMetadata.HEIGHT)) {
             photo.height = (int) metadata.get_integer (PictureMetadata.HEIGHT);
         }
+
+        base.add_resources(photo);
     }
 }
 
diff --git a/src/plugins/tracker/rygel-tracker-video-item-factory.vala b/src/plugins/tracker/rygel-tracker-video-item-factory.vala
index e2f79c3..15851a7 100644
--- a/src/plugins/tracker/rygel-tracker-video-item-factory.vala
+++ b/src/plugins/tracker/rygel-tracker-video-item-factory.vala
@@ -59,11 +59,11 @@ public class Rygel.Tracker.VideoItemFactory : ItemFactory {
         this.properties.add ("res@duration");
     }
 
-    public override MediaItem create (string          id,
-                                      string          uri,
-                                      SearchContainer parent,
-                                      Sparql.Cursor   metadata)
-                                      throws GLib.Error {
+    public override MediaFileItem create (string          id,
+                                          string          uri,
+                                          SearchContainer parent,
+                                          Sparql.Cursor   metadata)
+                                          throws GLib.Error {
         var item = new VideoItem (id, parent, "");
 
         this.set_metadata (item, uri, metadata);
@@ -71,7 +71,7 @@ public class Rygel.Tracker.VideoItemFactory : ItemFactory {
         return item;
     }
 
-    protected override void set_metadata (MediaItem item,
+    protected override void set_metadata (MediaFileItem item,
                                           string    uri,
                                           Sparql.Cursor  metadata)
                                           throws GLib.Error {
@@ -90,6 +90,8 @@ public class Rygel.Tracker.VideoItemFactory : ItemFactory {
         if (metadata.is_bound (VideoMetadata.DURATION))
             video.duration = (int) metadata.get_integer
                                         (VideoMetadata.DURATION);
+
+        base.add_resources(video);
     }
 }
 
