diff -uNr vlc-trunk-orig/modules/demux/live555.cpp vlc-trunk-modified/modules/demux/live555.cpp
--- vlc-trunk-orig/modules/demux/live555.cpp	2007-11-19 15:02:53.000000000 +0000
+++ vlc-trunk-modified/modules/demux/live555.cpp	2007-11-19 15:56:19.000000000 +0000
@@ -146,6 +146,7 @@
     VLC_COMMON_MEMBERS
 
     int64_t      i_remain;
+    vlc_bool_t   b_handle_keep_alive;
     demux_sys_t  *p_sys;
 };
 
@@ -1246,6 +1247,20 @@
                     msg_Err( p_demux, "PLAY or PAUSE failed %s", p_sys->env->getResultMsg() );
                     return VLC_EGENERIC;
             }
+
+            /* When we Pause, we'll need the TimeoutPrevention thread to
+             * handle sending the "Keep Alive" message to the server. 
+             * Unfortunately Live555 isn't thread safe and so can't 
+             * do this normally while the main Demux thread is handling
+             * a live stream. We end up with the Timeout thread blocking
+             * waiting for a response from the server. So when we PAUSE
+             * we set a flag that the TimeoutPrevention function will check
+             * and if it's set, it will trigger the GET_PARAMETER message */
+            if( b_bool && p_sys->p_timeout != NULL )
+                p_sys->p_timeout->b_handle_keep_alive = VLC_TRUE;
+            else if( !b_bool && p_sys->p_timeout != NULL ) 
+                p_sys->p_timeout->b_handle_keep_alive = VLC_FALSE;
+
             es_out_Control( p_demux->out, ES_OUT_RESET_PCR );
             p_sys->i_pcr = 0;
 #if (LIVEMEDIA_LIBRARY_VERSION_INT >= 1195257600)
@@ -1613,10 +1628,21 @@
     {
         if( p_timeout->i_remain <= 0 )
         {
+            char *psz_bye = NULL;
             p_timeout->i_remain = (int64_t)p_timeout->p_sys->i_timeout -2;
             p_timeout->i_remain *= 1000000;
-            p_timeout->p_sys->b_timeout_call = VLC_TRUE;
             msg_Dbg( p_timeout, "reset the timeout timer" );
+            if (p_timeout->b_handle_keep_alive == VLC_TRUE)
+            {
+#if LIVEMEDIA_LIBRARY_VERSION_INT >= 1138089600
+                p_timeout->p_sys->rtsp->getMediaSessionParameter( *p_timeout->p_sys->ms, NULL, psz_bye );
+#endif
+                p_timeout->p_sys->b_timeout_call = VLC_FALSE;
+            }
+            else
+            {
+                p_timeout->p_sys->b_timeout_call = VLC_TRUE;
+            }
         }
         p_timeout->i_remain -= 200000;
         msleep( 200000 ); /* 200 ms */
