Index: libs/libmythtv/NuppelVideoPlayer.cpp
===================================================================
--- libs/libmythtv/NuppelVideoPlayer.cpp	(revision 8988)
+++ libs/libmythtv/NuppelVideoPlayer.cpp	(working copy)
@@ -2958,8 +2958,6 @@
 
 void NuppelVideoPlayer::SetBookmark(void)
 {
-    if (livetv)
-        return;
     if (!m_playbackinfo || !osd)
         return;
 
@@ -2969,8 +2967,6 @@
 
 void NuppelVideoPlayer::ClearBookmark(void)
 {
-    if (livetv)
-        return;
     if (!m_playbackinfo || !osd)
         return;
 
Index: libs/libmythtv/tv_play.cpp
===================================================================
--- libs/libmythtv/tv_play.cpp	(revision 8988)
+++ libs/libmythtv/tv_play.cpp	(working copy)
@@ -2346,6 +2346,8 @@
             }
             else if (StateIsLiveTV(GetState()))
             {
+                if (nvp && gContext->GetNumSetting("PlaybackExitPrompt") == 2)
+                    nvp->SetBookmark();
                 exitPlayer = true;
                 wantsToQuit = true;
             }
@@ -2459,7 +2461,10 @@
             else if (action == "TOGGLEFAV")
                 ToggleChannelFavorite();
             else if (action == "SELECT")
-                CommitQueuedInput();
+            {
+                if (!CommitQueuedInput())
+                    handled = false;
+            }
             else if (action == "TOGGLERECCONTROLS")
                 DoToggleRecPictureAttribute();
             else if (action == "TOGGLEBROWSE" && pseudoLiveTVState[aindx])
@@ -2472,6 +2477,31 @@
             BrowseStart();
     }
 
+    if (StateIsLiveTV(GetState()) || StateIsPlaying(internalState))
+    {
+        for (unsigned int i = 0; i < actions.size() && !handled; i++)
+        {
+            QString action = actions[i];
+            handled = true;
+    
+            if (action == "SELECT")
+            {
+                if (!was_doing_ff_rew)
+                {
+                    if (gContext->GetNumSetting("AltClearSavedPosition", 1)
+                        && nvp->GetBookmark())
+                        nvp->ClearBookmark(); 
+                    else
+                        nvp->SetBookmark(); 
+                }
+                else
+                    handled = false;
+            }
+            else
+                handled = false;
+        }
+    }
+    
     if (StateIsLiveTV(GetState()) && !pseudoLiveTVState[aindx])
     {
         for (unsigned int i = 0; i < actions.size() && !handled; i++)
@@ -2542,19 +2572,6 @@
                         nvp->ActivateDVDButton();
                 }
             }
-            else if (action == "SELECT")
-            {
-                if (!was_doing_ff_rew)
-                {
-                    if (gContext->GetNumSetting("AltClearSavedPosition", 1)
-                        && nvp->GetBookmark())
-                        nvp->ClearBookmark(); 
-                    else
-                        nvp->SetBookmark(); 
-                }
-                else
-                    handled = false;
-            }
             else if (action == "DELETE")
             {
                 NormalSpeed();
@@ -2739,7 +2756,7 @@
     }
     else if (tokens.size() == 2 && tokens[1] == "STOP")
     {
-        if (internalState != kState_WatchingLiveTV && nvp)
+        if (nvp)
             nvp->SetBookmark();
         exitPlayer = true;
         wantsToQuit = true;
@@ -3799,8 +3816,10 @@
     GetOSD()->SetText("channel_number", infoMap, 2);
 }
 
-void TV::CommitQueuedInput(void)
+bool TV::CommitQueuedInput(void)
 {
+    bool commited = false;
+
     VERBOSE(VB_PLAYBACK, LOC + "CommitQueuedInput() " + 
             QString("livetv(%1) qchannum(%2) qchanid(%3)")
             .arg(StateIsLiveTV(GetState()))
@@ -3810,6 +3829,7 @@
     if (ccInputMode)
     {
         bool valid = false;
+        commited = true;
         int page = GetQueuedInputAsInt(&valid, 16);
         if (valid && page)
             nvp->ToggleCC(vbimode, page);
@@ -3817,6 +3837,7 @@
     }
     else if (asInputMode)
     {
+        commited = true;
         if (HasQueuedInput())
             DoArbSeek(ARBSEEK_FORWARD);
     }
@@ -3827,15 +3848,20 @@
         QString chaninput = GetQueuedInput();
         if (browsemode)
         {
+            commited = true;
             BrowseChannel(channum);
             if (activenvp == nvp && GetOSD())
                 GetOSD()->HideSet("channel_number");
         }
         else if (GetQueuedChanID() || !channum.isEmpty())
+        {
+            commited = true;
             ChangeChannel(GetQueuedChanID(), channum);
+        }
     }
 
     ClearInputQueues(true);
+    return commited;
 }
 
 void TV::ChangeChannel(uint chanid, const QString &chan)
Index: libs/libmythtv/tv_play.h
===================================================================
--- libs/libmythtv/tv_play.h	(revision 8988)
+++ libs/libmythtv/tv_play.h	(working copy)
@@ -224,7 +224,7 @@
     // key queue commands
     void AddKeyToInputQueue(char key);
     void ClearInputQueues(bool hideosd = false); 
-    void CommitQueuedInput(void);
+    bool CommitQueuedInput(void);
     bool ProcessSmartChannel(QString&);
 
     // query key queues
