diff --git a/src/control/media_instance.c b/src/control/media_instance.c
index ce64024f8e3ba00e5c7721add16787a4dd60f80f..366a4fed4fe5664f97bca595c3ac707f2141014e 100644
--- a/src/control/media_instance.c
+++ b/src/control/media_instance.c
@@ -546,10 +546,18 @@ void libvlc_media_instance_pause( libvlc_media_instance_t *p_mi,
     if( !p_input_thread )
         return;
 
-    if( var_GetInteger( p_input_thread, "state" ) == PAUSE_S )
-        input_Control( p_input_thread, INPUT_SET_STATE, PLAYING_S );
+    int state = var_GetInteger( p_input_thread, "state" );
+
+    if( state == PLAYING_S )
+    {
+        if( libvlc_media_instance_can_pause( p_mi, p_e ) )
+            input_Control( p_input_thread, INPUT_SET_STATE, PAUSE_S );
+        else
+            libvlc_media_instance_stop( p_mi, p_e );
+    }
     else
-        input_Control( p_input_thread, INPUT_SET_STATE, PAUSE_S );
+        input_Control( p_input_thread, INPUT_SET_STATE, PLAYING_S );
+
     vlc_object_release( p_input_thread );
 }