Index: libs/libmythtv/tv_play.cpp
===================================================================
--- libs/libmythtv/tv_play.cpp	(revision 7529)
+++ libs/libmythtv/tv_play.cpp	(working copy)
@@ -175,6 +175,7 @@
       baseFilters(""), fftime(0), rewtime(0),
       jumptime(0), usePicControls(false), smartChannelChange(false),
       MuteIndividualChannels(false), arrowAccel(false), osd_display_time(0),
+      osd_program_display_time(0),
       autoCommercialSkip(false), tryUnflaggedSkip(false),
       smartForward(false), stickykeys(0),
       ff_rew_repos(1.0f), ff_rew_reverse(false),
@@ -275,6 +276,7 @@
     arrowAccel           = gContext->GetNumSetting("UseArrowAccels", 1);
     persistentbrowsemode = gContext->GetNumSetting("PersistentBrowseMode", 0);
     osd_display_time     = gContext->GetNumSetting("OSDDisplayTime");
+    osd_program_display_time     = gContext->GetNumSetting("OSDProgramDisplayTime");
     autoCommercialSkip   = gContext->GetNumSetting("AutoCommercialSkip", 0);
     tryUnflaggedSkip     = gContext->GetNumSetting("TryUnflaggedSkip", 0);
     smartForward         = gContext->GetNumSetting("SmartForward", 0);
@@ -2500,14 +2502,14 @@
         playbackinfo->ToMap(infoMap);
         GetOSD()->HideSet("status");
         GetOSD()->ClearAllText("program_info");
-        GetOSD()->SetText("program_info", infoMap, osd_display_time);
+        GetOSD()->SetText("program_info", infoMap, osd_program_display_time);
     }
     else
     {
         QString desc = "";
         int pos = nvp->calcSliderPos(desc);
         GetOSD()->HideSet("program_info");
-        GetOSD()->StartPause(pos, false, tr("Position"), desc, osd_display_time);
+        GetOSD()->StartPause(pos, false, tr("Position"), desc, osd_program_display_time);
         update_osd_pos = true;
     }
 }
@@ -2516,6 +2518,8 @@
 {
     bool muted = false;
 
+    if (disptime == -999) disptime = osd_display_time;
+
     AudioOutput *aud = nvp->getAudioOutput(); 
     if (aud && !aud->GetMute())
     {
@@ -3224,9 +3233,9 @@
     {
         // Clear previous osd and add new info
         GetOSD()->ClearAllText("program_info");
-        GetOSD()->SetText("program_info", infoMap, osd_display_time);
+        GetOSD()->SetText("program_info", infoMap, osd_program_display_time);
         GetOSD()->ClearAllText("channel_number");
-        GetOSD()->SetText("channel_number", infoMap, osd_display_time);
+        GetOSD()->SetText("channel_number", infoMap, osd_program_display_time);
     }
 }
 
@@ -3351,11 +3360,11 @@
     //GetOSD()->SetText("signal_info", infoMap, -1);
 
     GetOSD()->ClearAllText("channel_number");
-    GetOSD()->SetText("channel_number", infoMap, osd_display_time);
+    GetOSD()->SetText("channel_number", infoMap, osd_program_display_time);
 
     infoMap["description"] = sigDesc;
     GetOSD()->ClearAllText("program_info");
-    GetOSD()->SetText("program_info", infoMap, osd_display_time);
+    GetOSD()->SetText("program_info", infoMap, osd_program_display_time);
 
     lastSignalMsg.clear();
     lastSignalMsgTime.start();
Index: libs/libmythtv/tv_play.h
===================================================================
--- libs/libmythtv/tv_play.h	(revision 7529)
+++ libs/libmythtv/tv_play.h	(working copy)
@@ -187,7 +187,7 @@
     void DoInfo(void);
     void DoPlay(void);
     void DoPause(void);
-    bool UpdatePosOSD(float time, const QString &mesg, int disptime = 2);
+    bool UpdatePosOSD(float time, const QString &mesg, int disptime = -999);
     void DoSeek(float time, const QString &mesg);
     enum ArbSeekWhence {
         ARBSEEK_SET = 0,
@@ -271,6 +271,7 @@
     bool    MuteIndividualChannels;
     bool    arrowAccel;
     int     osd_display_time;
+    int     osd_program_display_time;
 
     int     autoCommercialSkip;
     bool    tryUnflaggedSkip;
Index: programs/mythfrontend/globalsettings.cpp
===================================================================
--- programs/mythfrontend/globalsettings.cpp	(revision 7529)
+++ programs/mythfrontend/globalsettings.cpp	(working copy)
@@ -685,13 +685,23 @@
     return gc; 
 }
 
+static HostSpinBox *OSDProgramDisplayTime()
+{
+    HostSpinBox *gs = new HostSpinBox("OSDProgramDisplayTime", 0, 30, 1);
+    gs->setLabel(QObject::tr("Number of seconds for OSD program information"));
+    gs->setValue(3);
+    gs->setHelpText(QObject::tr("How long the program information remains on "
+                    "the On Screen Display after a channel change."));
+    return gs;
+}
+
 static HostSpinBox *OSDDisplayTime()
 {
     HostSpinBox *gs = new HostSpinBox("OSDDisplayTime", 0, 30, 1);
     gs->setLabel(QObject::tr("Number of seconds for OSD information"));
     gs->setValue(3);
-    gs->setHelpText(QObject::tr("How long the program information remains on "
-                    "the On Screen Display after a channel change."));
+    gs->setHelpText(QObject::tr("How long the On Screen Display remains "
+                    "on the screen in other situations."));
     return gs;
 }
 
@@ -3019,6 +3029,7 @@
     VerticalConfigurationGroup* osd = new VerticalConfigurationGroup(false);
     osd->setLabel(QObject::tr("On-screen display"));
     osd->addChild(OSDTheme());
+    osd->addChild(OSDProgramDisplayTime());
     osd->addChild(OSDDisplayTime());
     osd->addChild(OSDFont());
     osd->addChild(OSDCCFont());
