diff --git a/data/xml/AVTransport2.xml.in b/data/xml/AVTransport2.xml.in
index f165f06..6e9728e 100644
--- a/data/xml/AVTransport2.xml.in
+++ b/data/xml/AVTransport2.xml.in
@@ -237,6 +237,41 @@
          </argumentList>
       </action>
 
+
+<action>
+   <name>X_DLNA_GetBytePositionInfo</name>
+      <argumentList>
+         <argument>
+            <name>InstanceID</name>
+            <direction>in</direction>
+            <relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
+         </argument>
+         <argument>
+            <name>TrackSize</name>
+            <direction>out</direction>
+            <relatedStateVariable>X_DLNA_CurrentTrackSize</relatedStateVariable>
+         </argument>
+         <argument>
+            <name>RelByte</name>
+            <direction>out</direction>
+            <relatedStateVariable>
+               X_DLNA_RelativeBytePosition
+            </relatedStateVariable>
+         </argument>
+         <argument>
+            <name>AbsByte</name>
+            <direction>out</direction>
+            <relatedStateVariable>
+               X_DLNA_AbsoluteBytePosition
+            </relatedStateVariable>
+         </argument>
+      </argumentList>
+</action>
+
+
+
+
+
       <action>
          <name>GetDeviceCapabilities</name>
          <argumentList>
diff --git a/examples/renderer-plugins/vala/example-player-vala.vala b/examples/renderer-plugins/vala/example-player-vala.vala
index 6771e43..5dd400e 100644
--- a/examples/renderer-plugins/vala/example-player-vala.vala
+++ b/examples/renderer-plugins/vala/example-player-vala.vala
@@ -17,6 +17,14 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
+ 
+/*
+ * Modifications made by Cable Television Laboratories, Inc.
+ * Copyright (C) 2013  Cable Television Laboratories, Inc.
+ * Contact: http://www.cablelabs.com/
+ *
+ * Author: Sivakumar Mani <siva@orexel.com>
+ */
 
 using GUPnP;
 
@@ -178,10 +186,20 @@ public class Rygel.Example.PlayerVala : GLib.Object, Rygel.MediaPlayer {
         }
     }
 
+    public int64 position_byte {
+        get {
+            return this._position;
+        }
+    }
+
     public bool seek (int64 time) {
         return false;
     }
 
+    public bool seek_dlna (int64 target, string unit, double rate) {
+        return false;
+    }
+
     public string[] get_protocols () {
         return PROTOCOLS;
     }
diff --git a/src/librygel-renderer-gst/rygel-playbin-player.vala b/src/librygel-renderer-gst/rygel-playbin-player.vala
index cd35041..dff468f 100644
--- a/src/librygel-renderer-gst/rygel-playbin-player.vala
+++ b/src/librygel-renderer-gst/rygel-playbin-player.vala
@@ -22,6 +22,9 @@
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author: Neha Shanbhag <N.Shanbhag@cablelabs.com>
+ * Author: Sivakumar Mani <siva@orexel.com>
  */
 
 using Gst;
@@ -81,7 +84,9 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer {
                                         "application/x-shockwave-flash",
                                         "video/x-ms-asf",
                                         "video/x-xvid",
-                                        "video/x-ms-wmv" };
+                                        "video/x-ms-wmv",
+					"video/vnd.dlna.mpeg-tts",
+					 };
     private static Player player;
 
     private bool is_live;
@@ -142,7 +147,7 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer {
         }
     }
 
-    private string[] _allowed_playback_speeds = {"1"};
+    private string[] _allowed_playback_speeds = {"-64", "-32", "-16", "-8", "-4", "-2", "-1", "1/2", "1", "2", "4", "8", "10", "16", "32", "64"};
     public string[] allowed_playback_speeds {
         owned get {
             return this._allowed_playback_speeds;
@@ -296,6 +301,19 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer {
         }
     }
 
+    public int64 position_byte {
+       get {
+            int64 pos;
+
+            if (this.playbin.query_position (Format.BYTES, out pos)) {
+                return pos;
+            } else {
+                return 0;
+            }
+        }
+    }
+
+
     private Player () {
         this.playbin = ElementFactory.make ("playbin", null);
         this.foreign = false;
@@ -336,6 +354,34 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer {
                                   -1);
     }
 
+    public bool seek_dlna (int64 target, string unit, double rate) {
+   
+	if(unit == "ABS_TIME" || unit == "REL_TIME"){
+	debug("seek2() ABS_TIME or REL_TIME %lld", target);
+		return this.playbin.seek (rate,
+                                  Format.TIME,
+                                  SeekFlags.FLUSH,
+                                  Gst.SeekType.SET,
+                                  target * Gst.USECOND, 
+                                  Gst.SeekType.NONE,
+                                  -1);
+
+	}else if( unit == "ABS_COUNT" || unit == "REL_COUNT"){
+	debug("seek2() ABS_COUNT or REL_COUNT %lld", target);
+    		return this.playbin.seek (rate,
+                                  Format.BYTES,
+                                  SeekFlags.FLUSH,
+                                  Gst.SeekType.SET,
+                                  target,
+                                  Gst.SeekType.NONE,
+                                  -1);
+	}else{
+		warning("seek_dlna() wrong unit!!");
+		return false;
+	}
+
+    }
+
     public string[] get_protocols () {
         return protocols;
     }
diff --git a/src/librygel-renderer/rygel-av-transport.vala b/src/librygel-renderer/rygel-av-transport.vala
index 0f3532c..81995c5 100644
--- a/src/librygel-renderer/rygel-av-transport.vala
+++ b/src/librygel-renderer/rygel-av-transport.vala
@@ -23,6 +23,15 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
+/*
+ * Modifications made by Cable Television Laboratories, Inc.
+ * Copyright (C) 2013  Cable Television Laboratories, Inc.
+ * Contact: http://www.cablelabs.com/
+ *
+ * Author: Neha Shanbhag <N.Shanbhag@cablelabs.com>
+ * Author: Sivakumar Mani <siva@orexel.com>
+ */
+
 using GUPnP;
 using Soup;
 
@@ -123,6 +132,7 @@ internal class Rygel.AVTransport : Service {
         action_invoked["GetMediaInfo_Ext"].connect (this.get_media_info_ex_cb);
         action_invoked["GetTransportInfo"].connect (this.get_transport_info_cb);
         action_invoked["GetPositionInfo"].connect (this.get_position_info_cb);
+action_invoked["X_DLNA_GetBytePositionInfo"].connect (this.x_dlna_get_byte_position_info_cb); //siva_fix
         action_invoked["GetDeviceCapabilities"].connect
                                         (this.get_device_capabilities_cb);
         action_invoked["GetTransportSettings"].connect
@@ -500,6 +510,25 @@ internal class Rygel.AVTransport : Service {
         action.return ();
     }
 
+    private void x_dlna_get_byte_position_info_cb (Service       service,
+                              		           ServiceAction action) {
+        if (!this.check_instance_id (action)) {
+            return;
+        }
+
+        action.set ("TrackSize",
+                        typeof (uint),
+                        uint.MAX, 
+                    "RelByte",
+			typeof(int64),
+                        this.player.position_byte,
+                    "AbsByte",
+                        typeof (int64),
+                        this.player.position_byte);
+
+        action.return ();
+    }
+
     private void get_device_capabilities_cb (Service       service,
                                              ServiceAction action) {
         if (!this.check_instance_id (action)) {
@@ -559,8 +588,20 @@ internal class Rygel.AVTransport : Service {
             return;
         }
 
-        this.player.playback_state = "PLAYING";
         this.player.playback_speed = speed;
+	this.changelog.log ("speed specified in play()", speed);
+        
+        // Playback at 1x.
+        if (speed == "1")
+        {
+            this.player.playback_state = "PLAYING";
+        }
+        // Playback at more than 1x. Playspeed trick mode.
+        else
+        {
+            this.changelog.log ("Seeking to %s\n", this.player.position_as_str);
+            this.player.seek_dlna (this.player.position, "ABS_TIME", double.parse(this.player.playback_speed));
+        }
 
         action.return ();
     }
@@ -587,6 +628,7 @@ internal class Rygel.AVTransport : Service {
         }
 
         string unit, target;
+	int64 count=0;
 
         action.get ("Unit",
                         typeof (string),
@@ -622,6 +664,21 @@ internal class Rygel.AVTransport : Service {
             action.return ();
 
             return;
+	case "ABS_COUNT":
+        case "REL_COUNT":
+	case "X_DLNA_REL_BYTE":
+            debug ("Seeking bytes to %s.", target);
+	    target.scanf("%lld", &count);
+
+            if (!this.player.seek_dlna (count, "REL_COUNT", double.parse(this.player.playback_speed))) {
+                action.return_error (710, _("Seek mode not supported"));
+
+                return;
+            }
+
+            action.return ();
+
+            return;
         case "TRACK_NR":
             debug ("Setting track to %s.", target);
             var track = int.parse (target);
diff --git a/src/librygel-renderer/rygel-media-player.vala b/src/librygel-renderer/rygel-media-player.vala
index 877780a..e7743e6 100644
--- a/src/librygel-renderer/rygel-media-player.vala
+++ b/src/librygel-renderer/rygel-media-player.vala
@@ -22,6 +22,14 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
+/*
+ * Modifications made by Cable Television Laboratories, Inc.
+ * Copyright (C) 2013  Cable Television Laboratories, Inc.
+ * Contact: http://www.cablelabs.com/
+ *
+ * Author: Sivakumar Mani <siva@orexel.com>
+ */
+
 /**
  * This interface maps UPnP AVTransport:2 methods to the plugin's specific implementation.
  *
@@ -82,6 +90,9 @@ public interface Rygel.MediaPlayer : GLib.Object {
     /// Position in the current media in microseconds
     public abstract int64 position { get; }
 
+    ///Position in the current media in bytes
+    public abstract int64 position_byte { get; }
+
     /// The position as a human-readable string, in HH:MM:SS format
     public string position_as_str {
         owned get {
@@ -95,6 +106,13 @@ public interface Rygel.MediaPlayer : GLib.Object {
      */
     public abstract bool seek (int64 time);
 
+
+    /**
+     * Seek to a point in the current media that is
+     * this many microseconds or bytes after the start.
+     */
+    public abstract bool seek_dlna (int64 target, string unit, double rate);
+
     /**
      * Return the protocols supported by this renderer,
      * such as "http-get" and "rtsp".
diff --git a/src/plugins/mpris/rygel-mpris-interfaces.vala b/src/plugins/mpris/rygel-mpris-interfaces.vala
index f56ebda..33cb8a7 100644
--- a/src/plugins/mpris/rygel-mpris-interfaces.vala
+++ b/src/plugins/mpris/rygel-mpris-interfaces.vala
@@ -21,6 +21,14 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
+/*
+ * Modifications made by Cable Television Laboratories, Inc.
+ * Copyright (C) 2013  Cable Television Laboratories, Inc.
+ * Contact: http://www.cablelabs.com/
+ *
+ * Author: Sivakumar Mani <siva@orexel.com>
+ */
+
 [DBus (name = "org.mpris.MediaPlayer2")]
 public interface Rygel.MPRIS.MediaPlayerProxy : DBusProxy {
     public const string IFACE = "org.mpris.MediaPlayer2";
@@ -42,6 +50,7 @@ public interface Rygel.MPRIS.MediaPlayer.PlayerProxy : DBusProxy,
 
     public abstract double volume { get; set; }
     public abstract int64 position { get; }
+    public abstract int64 position_byte { get; }
     public abstract bool can_seek { get; }
     public abstract bool can_control { get; }
     public abstract HashTable<string,Variant> metadata { owned get; }
@@ -51,5 +60,6 @@ public interface Rygel.MPRIS.MediaPlayer.PlayerProxy : DBusProxy,
     public abstract void stop () throws DBusError;
     public abstract void play () throws DBusError;
     public abstract void seek (int64 offset) throws DBusError;
+    public abstract void seek_dlna (int64 offset, string unit, double rate) throws DBusError;
     public abstract void open_uri (string uri) throws DBusError;
 }
diff --git a/src/plugins/mpris/rygel-mpris-player.vala b/src/plugins/mpris/rygel-mpris-player.vala
index ef1914e..d518cfb 100644
--- a/src/plugins/mpris/rygel-mpris-player.vala
+++ b/src/plugins/mpris/rygel-mpris-player.vala
@@ -21,6 +21,14 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
+/*
+ * Modifications made by Cable Television Laboratories, Inc.
+ * Copyright (C) 2013  Cable Television Laboratories, Inc.
+ * Contact: http://www.cablelabs.com/
+ *
+ * Author: Sivakumar Mani <siva@orexel.com>
+ */
+
 using Rygel.MPRIS;
 using Rygel.MPRIS.MediaPlayer;
 using FreeDesktop;
@@ -155,6 +163,13 @@ public class Rygel.MPRIS.Player : GLib.Object, Rygel.MediaPlayer {
         }
     }
 
+    public int64 position_byte {
+        get {
+            return this.actual_player.position_byte;
+        }
+    }
+
+
     public Player (Plugin plugin) {
         this.actual_player = plugin.actual_player;
         this.mime_types = plugin.mime_types;
@@ -174,6 +189,17 @@ public class Rygel.MPRIS.Player : GLib.Object, Rygel.MediaPlayer {
         return ret;
     }
 
+    public bool seek_dlna (int64 target, string unit, double rate) {
+        var ret = false;
+
+        try {
+            this.actual_player.seek_dlna (target, unit, rate);
+            ret = true;
+        } catch (Error error) {}
+
+        return ret;
+    }
+
     public string[] get_protocols () {
         return this.protocols;
     }
