Index: libs/libmythtv/NuppelVideoPlayer.h
===================================================================
--- libs/libmythtv/NuppelVideoPlayer.h	(revision 8213)
+++ libs/libmythtv/NuppelVideoPlayer.h	(working copy)
@@ -517,6 +517,7 @@
     QMap<long long, int>::Iterator deleteIter;
     QMap<long long, int>::Iterator blankIter;
     QMap<long long, int>::Iterator commBreakIter;
+    QDateTime   lastIgnoredManualSkip;
 
     // Playback (output) speed control
     /// Lock for next_play_speed and next_normal_speed
Index: libs/libmythtv/NuppelVideoPlayer.cpp
===================================================================
--- libs/libmythtv/NuppelVideoPlayer.cpp	(revision 8213)
+++ libs/libmythtv/NuppelVideoPlayer.cpp	(working copy)
@@ -174,6 +174,8 @@
     commnotifyamount = gContext->GetNumSetting("CommNotifyAmount",0);
     m_DeintSetting   = gContext->GetNumSetting("Deinterlace", 0);
 
+    lastIgnoredManualSkip = QDateTime::currentDateTime().addSecs(-10);
+
     bzero(&txtbuffers, sizeof(txtbuffers));
     bzero(&tc_lastval, sizeof(tc_lastval));
     bzero(&tc_wrap,    sizeof(tc_wrap));
@@ -4530,11 +4532,21 @@
     {
         int skipped_seconds = (int)((commBreakIter.key() -
                 framesPlayed) / video_frame_rate);
+        int maxskip = gContext->GetNumSetting("MaximumCommercialSkip", 3600);
         QString skipTime;
         skipTime.sprintf("%d:%02d", skipped_seconds / 60,
                          abs(skipped_seconds) % 60);
         struct StatusPosInfo posInfo;
         calcSliderPos(posInfo);
+        if (lastIgnoredManualSkip.secsTo(QDateTime::currentDateTime()) > 3 &&
+                (skipped_seconds >= maxskip || -skipped_seconds >= maxskip))
+        {
+            osd->ShowStatus(posInfo, false,
+                            QObject::tr("Too Far %1").arg(skipTime), 2);
+            commBreakMapLock.unlock();
+            lastIgnoredManualSkip = QDateTime::currentDateTime();
+            return false;
+        }
         osd->ShowStatus(posInfo, false,
                         QObject::tr("Skip %1").arg(skipTime), 2);
     }
Index: programs/mythfrontend/globalsettings.cpp
===================================================================
--- programs/mythfrontend/globalsettings.cpp	(revision 8213)
+++ programs/mythfrontend/globalsettings.cpp	(working copy)
@@ -499,6 +499,19 @@
     return gs;
 }
 
+static GlobalSpinBox *MaximumCommercialSkip()
+{
+    GlobalSpinBox *bs = new GlobalSpinBox("MaximumCommercialSkip", 0, 3600, 10);
+    bs->setLabel(QObject::tr("Maximum commercial skip"));
+    bs->setHelpText(QObject::tr("MythTV will discourage manual commercial "
+                    "skips longer, in seconds, than this.  Skips longer than "
+                    "this require two skip requests.  Automatic commercial "
+                    "skipping is not affected by this limit."));
+    bs->setValue(3600);
+    return bs;
+}
+
+
 static GlobalSpinBox *AutoExpireExtraSpace()
 {
     GlobalSpinBox *bs = new GlobalSpinBox("AutoExpireExtraSpace", 0, 200, 1);
@@ -3043,6 +3056,7 @@
     comms->addChild(AutoCommercialSkip());
     comms->addChild(CommRewindAmount());
     comms->addChild(CommNotifyAmount());
+    comms->addChild(MaximumCommercialSkip());
     comms->addChild(CommSkipAllBlanks());
     addChild(comms);
 
