diff -uNr vlc-trunk/include/vlc_demux.h vlc-trunk.lincor/include/vlc_demux.h
--- vlc-trunk/include/vlc_demux.h	2005-11-10 16:09:24.000000000 +0000
+++ vlc-trunk.lincor/include/vlc_demux.h	2005-11-10 13:39:24.000000000 +0000
@@ -68,7 +68,7 @@
 {
     /* I. Common queries to access_demux and demux */
     /* POSITION double between 0.0 and 1.0 */
-    
+    DEMUX_GET_POSITION,         /* arg1= double *       res=    */
     DEMUX_SET_POSITION,         /* arg1= double         res=can fail    */
 
     /* LENGTH/TIME in microsecond, 0 if unknown */
@@ -106,7 +106,8 @@
     DEMUX_CAN_CONTROL_PACE,     /* arg1= vlc_bool_t*    cannot fail */
     DEMUX_GET_PTS_DELAY,        /* arg1= int64_t*       cannot fail */
     DEMUX_SET_PAUSE_STATE,      /* arg1= vlc_bool_t     can fail */
-    DEMUX_SET_RATE           /* arg1=int, arg2=vlc_bool_t *pb_recompute_pts */
+    DEMUX_SET_RATE,           /* arg1=int, arg2=vlc_bool_t *pb_recompute_pts */
+    DEMUX_GET_SERVER_POSITION   /* arg1= int64_t *      res=can fail */
 };
 
 /* stream_t *s could be null and then it mean a access+demux in one */
diff -uNr vlc-trunk/modules/control/rc.c vlc-trunk.lincor/modules/control/rc.c
--- vlc-trunk/modules/control/rc.c	2005-11-10 16:09:24.000000000 +0000
+++ vlc-trunk.lincor/modules/control/rc.c	2005-11-10 16:04:38.000000000 +0000
@@ -488,6 +488,13 @@
     var_Create( p_intf, "normal", VLC_VAR_VOID | VLC_VAR_ISCOMMAND );
     var_AddCallback( p_intf, "normal", Input, NULL );
 
+    /* Kasenna position query */
+    var_Create( p_intf, "get_server_position", 
+                      VLC_VAR_FLOAT | VLC_VAR_ISCOMMAND );
+    var_Create( p_intf, "server_position", 
+                      VLC_VAR_FLOAT | VLC_VAR_ISCOMMAND );
+    var_AddCallback( p_intf, "server_position", Input, NULL );
+
     /* audio commands */
     var_Create( p_intf, "volume", VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
     var_AddCallback( p_intf, "volume", Volume, NULL );
@@ -887,6 +894,7 @@
     msg_rc(  "| ");
     msg_rc(_("| seek X . seek in seconds, for instance `seek 12'"));
     msg_rc(_("| pause  . . . . . . . . . . . . . .  toggle pause"));
+    msg_rc(_("| server_position . . . . . .  get server position"));
     msg_rc(_("| fastforward  . . . . . .  .  set to maximum rate"));
     msg_rc(_("| rewind  . . . . . . . . . .  set to minimum rate"));
     msg_rc(_("| faster . . . . . . . .  faster playing of stream"));
@@ -1084,6 +1092,46 @@
         vlc_object_release( p_input );
         return VLC_SUCCESS;
     }
+    else if ( !strcmp( psz_cmd, "server_position" ) )
+    {
+        vlc_value_t newval;
+        int count;
+        vlc_bool_t bFound;
+
+        val.f_float = 1.0;
+        newval.f_float = 0.0;
+        count = 0 ;
+        bFound = VLC_FALSE;
+
+        var_Set( p_input, "get_server_position", val );
+
+        /* Don't want the rc command to return until the server_position 
+           variable has changed. Loop for a max of 1 second
+        */
+        while(newval.f_float == 0.0 && count < 20)
+        {
+            var_Get( p_input, "server_position", &newval );
+            if( newval.f_float > 0.0 )
+            {
+                bFound = VLC_TRUE;
+            }
+            usleep (100000); // sleep for 100ms
+            count++;
+        }
+        if( bFound == VLC_TRUE ) 
+        {
+            msg_rc("server position: %0.2f", newval.f_float);
+        }
+        else
+        {
+            msg_rc("Not Supported");
+        }
+        newval.f_float = 0.0;
+        var_Change( p_input, "server_position", VLC_VAR_SETVALUE, &newval,NULL);
+        var_Change( p_input, "get_server_position", VLC_VAR_SETVALUE, &newval, NULL);
+        vlc_object_release( p_input );
+        return VLC_SUCCESS;
+    }
     else if ( !strcmp( psz_cmd, "fastforward" ) )
     {
         if( strlen( newval.psz_string ))
diff -uNr vlc-trunk/modules/demux/livedotcom.cpp vlc-trunk.lincor/modules/demux/livedotcom.cpp
--- vlc-trunk/modules/demux/livedotcom.cpp	2005-11-10 16:09:24.000000000 +0000
+++ vlc-trunk.lincor/modules/demux/livedotcom.cpp	2005-11-10 13:39:24.000000000 +0000
@@ -182,6 +182,10 @@
                                           unsigned int& configSize );
 #endif
 
+/* Utilize the GET_PARAMETER RTSP call */
+static char *getServerParameter (const char *, demux_t *);
+static float getServerPosition(demux_t *);
+
 /*****************************************************************************
  * DemuxOpen:
  *****************************************************************************/
@@ -852,6 +856,7 @@
     double d_npt;
     vlc_bool_t *pb, b_bool;
     int i_rate;
+    float *position;
 
     f = d_npt = 0;
     i_rate = 1;
@@ -970,7 +975,11 @@
                 return VLC_EGENERIC;
             }
 
-            d_npt = -1;
+            d_npt = (double)getServerPosition(p_demux);
+            if( d_npt <= 0)
+            {
+              d_npt = -1;
+            }
 
             //Passing -1 for the start and end time will mean liveMedia won't
             //create a Range: section for the RTSP message. Server should pick
@@ -999,6 +1008,10 @@
             pi64 = (int64_t*)va_arg( args, int64_t * );
             *pi64 = (int64_t)var_GetInteger( p_demux, "rtsp-caching" ) * 1000;
             return VLC_SUCCESS;
+        case DEMUX_GET_SERVER_POSITION:
+            position = (float*)va_arg( args, float * );
+            *position = getServerPosition( p_demux );
+            return VLC_SUCCESS;
         default:
             return VLC_EGENERIC;
     }
@@ -1456,3 +1469,39 @@
 
     return dest - dest_start;
 }
+
+static char *getServerParameter (const char *param, demux_t *p_demux)
+{
+    char *value = NULL;
+    demux_sys_t *p_sys = p_demux->p_sys;
+
+    if( !p_sys->rtsp->getMediaSessionParameter( *p_sys->ms, 
+                                            param, value ) )
+    {
+        msg_Err( p_demux, "GET_PARAMETER failed %s", 
+                              p_sys->env->getResultMsg() );
+        return NULL;
+    }
+
+    if( value != NULL )
+    {
+        msg_Warn (p_demux, "getParameter \"%s\" returned %s", param, value);
+    }
+    return value;
+}
+
+static float getServerPosition(demux_t *p_demux)
+{
+    char *position = NULL;
+    float f_pos = 0.0;
+
+    if( ( position = getServerParameter( "position", p_demux ) ) != NULL )
+    {
+        f_pos = strtof (position, NULL);
+
+msg_Warn (p_demux, "getServerPosition got %f", f_pos);
+        free (position);
+        position = NULL;
+    }
+    return f_pos;
+}
diff -uNr vlc-trunk/src/input/input.c vlc-trunk.lincor/src/input/input.c
--- vlc-trunk/src/input/input.c	2005-11-10 16:09:24.000000000 +0000
+++ vlc-trunk.lincor/src/input/input.c	2005-11-10 13:54:42.000000000 +0000
@@ -1660,6 +1660,25 @@
                 free( val.psz_string );
             }
             break;
+        case INPUT_CONTROL_GET_SERVER_POSITION:
+        {
+            int i_ret;
+            float position;
+
+            i_ret = demux2_Control( p_input->input.p_demux,
+                                    DEMUX_GET_SERVER_POSITION, &position );
+            if( i_ret )
+            {
+                msg_Warn( p_input, "INPUT_CONTROL_GET_SERVER_POSITION %f"
+                         " failed or not possible", position );
+            }
+            else
+            {
+                val.f_float = position;
+                var_Set( p_input, "server_position", val );
+            }
+            break;
+        }
         case INPUT_CONTROL_SET_BOOKMARK:
         default:
             msg_Err( p_input, "not yet implemented" );
diff -uNr vlc-trunk/src/input/input_internal.h vlc-trunk.lincor/src/input/input_internal.h
--- vlc-trunk/src/input/input_internal.h	2005-10-10 10:25:20.000000000 +0100
+++ vlc-trunk.lincor/src/input/input_internal.h	2005-11-10 13:39:24.000000000 +0000
@@ -57,6 +57,8 @@
     INPUT_CONTROL_SET_AUDIO_DELAY,
     INPUT_CONTROL_SET_SPU_DELAY,
 
+    INPUT_CONTROL_GET_SERVER_POSITION,
+
     INPUT_CONTROL_ADD_SLAVE,
 };
 
diff -uNr vlc-trunk/src/input/var.c vlc-trunk.lincor/src/input/var.c
--- vlc-trunk/src/input/var.c	2005-10-19 14:31:09.000000000 +0100
+++ vlc-trunk.lincor/src/input/var.c	2005-11-10 13:50:21.000000000 +0000
@@ -51,6 +51,8 @@
                              vlc_value_t oldval, vlc_value_t newval, void * );
 static int TimeCallback    ( vlc_object_t *p_this, char const *psz_cmd,
                              vlc_value_t oldval, vlc_value_t newval, void * );
+static int ServerPositionCallback ( vlc_object_t *p_this, char const *psz_cmd,
+                             vlc_value_t oldval, vlc_value_t newval, void * );
 static int ProgramCallback ( vlc_object_t *p_this, char const *psz_cmd,
                              vlc_value_t oldval, vlc_value_t newval, void * );
 static int TitleCallback   ( vlc_object_t *p_this, char const *psz_cmd,
@@ -109,6 +111,11 @@
     var_AddCallback( p_input, "time", TimeCallback, NULL );
     var_AddCallback( p_input, "time-offset", TimeCallback, NULL );
 
+    /* Server Position */
+    var_Create( p_input, "server_position", VLC_VAR_FLOAT );
+    var_Create( p_input, "get_server_position", VLC_VAR_FLOAT );
+    var_AddCallback( p_input, "get_server_position", ServerPositionCallback, NULL );
+
     /* Bookmark */
     var_Create( p_input, "bookmark", VLC_VAR_INTEGER | VLC_VAR_HASCHOICE |
                 VLC_VAR_ISCOMMAND );
@@ -206,6 +213,8 @@
     var_Destroy( p_input, "position-offset" );
     var_Destroy( p_input, "time" );
     var_Destroy( p_input, "time-offset" );
+    var_Destroy( p_input, "server_position" );
+    var_Destroy( p_input, "get_server_position" );
 
     var_Destroy( p_input, "audio-delay" );
     var_Destroy( p_input, "spu-delay" );
@@ -552,6 +561,15 @@
     return VLC_SUCCESS;
 }
 
+static int ServerPositionCallback( vlc_object_t *p_this, char const *psz_cmd,
+                         vlc_value_t oldval, vlc_value_t newval, void *p_data )
+{
+    input_thread_t *p_input = (input_thread_t*)p_this;
+    input_ControlPush( p_input, INPUT_CONTROL_GET_SERVER_POSITION, &newval );
+
+    return VLC_SUCCESS;
+}
+
 static int ProgramCallback( vlc_object_t *p_this, char const *psz_cmd,
                             vlc_value_t oldval, vlc_value_t newval,
                             void *p_data )
