Index: libs/libmythtv/tv.h
===================================================================
--- libs/libmythtv/tv.h	(revision 13713)
+++ libs/libmythtv/tv.h	(working copy)
@@ -34,6 +34,13 @@
      *         watching a pre-existing recording.
      */
     kState_WatchingPreRecorded,
+    /** \brief Watching Video is the state when a video, but not a dvd, 
+     * is playing
+     */
+    kState_WatchingVideo,
+    /** \brief Watching DVD is the state when a dvd is playing.
+     */
+    kState_WatchingDVD,
     /** \brief Watching Recording is the state for when we are watching
      *         an in progress recording, but the user does not have control
      *         over the channel and recorder to use.
@@ -52,7 +59,7 @@
 
 const int kLiveTVAutoExpire = 10000;
 
-QString StateToString(TVState state);
+QString StateToString(TVState state, bool brief = false);
 
 typedef enum PictureAdjustType
 {
Index: libs/libmythtv/tv.cpp
===================================================================
--- libs/libmythtv/tv.cpp	(revision 13713)
+++ libs/libmythtv/tv.cpp	(working copy)
@@ -8,20 +8,38 @@
 /** \fn StateToString(TVState state)
  *  \brief Returns a human readable QString representing a TVState.
  *  \param state State to print.
+ *  \param brief print brief string format
  */
-QString StateToString(TVState state)
+QString StateToString(TVState state, bool brief)
 {
+    bool appendWatching = false;
     QString statestr = QString("Unknown(%1)").arg((int)state);
     switch (state) {
         case kState_Error: statestr = "Error"; break;
         case kState_None: statestr = "None"; break;
-        case kState_WatchingLiveTV: statestr = "WatchingLiveTV"; break;
+        case kState_WatchingLiveTV:
+            statestr = "LiveTV";
+            appendWatching = true;
+            break;
         case kState_WatchingPreRecorded:
-            statestr = "WatchingPreRecorded"; break;
-        case kState_WatchingRecording: statestr = "WatchingRecording"; break;
+            statestr = "PreRecorded"; 
+            appendWatching = true;
+            break;
+        case kState_WatchingVideo:
+            statestr = "Video"; break;
+            appendWatching = true;
+        case kState_WatchingDVD:
+            statestr = "DVD"; break;
+            appendWatching = true;
+        case kState_WatchingRecording: 
+            statestr = "Recording"; 
+            appendWatching = true;
+            break;
         case kState_RecordingOnly: statestr = "RecordingOnly"; break;
         case kState_ChangingState: statestr = "ChangingState"; break;
     }
+    if (!brief && appendWatching)
+        statestr.prepend("Watching");
     return statestr;
 }
 
Index: libs/libmythtv/tv_play.cpp
===================================================================
--- libs/libmythtv/tv_play.cpp	(revision 13713)
+++ libs/libmythtv/tv_play.cpp	(working copy)
@@ -947,6 +978,13 @@
 
     if (curtime < recendts && !rcinfo->isVideo)
         ChangeState(kState_WatchingRecording);
+    else if (rcinfo->isVideo)
+    {
+        if (rcinfo->pathname.left(4) == "dvd:")
+            ChangeState(kState_WatchingDVD);
+        else
+            ChangeState(kState_WatchingVideo);
+    }
     else
         ChangeState(kState_WatchingPreRecorded);
 
@@ -1020,7 +1058,9 @@
 bool TV::StateIsPlaying(TVState state)
 {
     return (state == kState_WatchingPreRecorded || 
-            state == kState_WatchingRecording);
+            state == kState_WatchingRecording   ||
+            state == kState_WatchingVideo       ||
+            state == kState_WatchingDVD);
 }
 
 bool TV::StateIsLiveTV(TVState state)
@@ -1174,7 +1214,9 @@
         SET_NEXT();
     }
     else if (TRANSITION(kState_None, kState_WatchingPreRecorded) ||
-             TRANSITION(kState_None, kState_WatchingRecording))
+             TRANSITION(kState_None, kState_WatchingRecording)   ||
+             TRANSITION(kState_None, kState_WatchingVideo)       ||
+             TRANSITION(kState_None, kState_WatchingDVD))
     {
         QString playbackURL;
         if ((playbackinfo->pathname.left(4) == "dvd:") ||
@@ -1224,7 +1266,9 @@
         }
     }
     else if (TRANSITION(kState_WatchingPreRecorded, kState_None) ||
-             TRANSITION(kState_WatchingRecording, kState_None))
+             TRANSITION(kState_WatchingRecording, kState_None)   ||
+             TRANSITION(kState_WatchingVideo, kState_None)       ||
+             TRANSITION(kState_WatchingDVD, kState_None))
     {
         SET_NEXT();
 
@@ -4618,6 +4679,8 @@
         playbackinfo->ToMap(infoMap);
     pbinfoLock.unlock();
 
+    infoMap["tvstate"] = QString("(%1)")
+            .arg(StateToString(internalState, true));
     // Clear previous osd and add new info
     osd->ClearAllText(whichInfo);
     osd->HideAll();
@@ -4697,6 +4760,8 @@
             playbackinfo->ToMap(lastSignalUIInfo);
         pbinfoLock.unlock();
         infoMap = lastSignalUIInfo;
+        infoMap["tvstate"] = QString("(%1)")
+                .arg(StateToString(internalState, true));
         lastSignalUIInfoTime.start();
     }
 
@@ -4794,6 +4859,9 @@
     else if (!msg.isEmpty())
         sigDesc = msg;
 
+    infoMap["tvstate"] = QString("(%1)")
+        .arg(StateToString(internalState, true));
+
     //GetOSD()->ClearAllText("signal_info");
     //GetOSD()->SetText("signal_info", infoMap, -1);
 
