Index: programs/mythfrontend/globalsettings.cpp
===================================================================
--- programs/mythfrontend/globalsettings.cpp	(revision 26482)
+++ programs/mythfrontend/globalsettings.cpp	(working copy)
@@ -832,18 +832,6 @@
     return bc;
 }
 
-static GlobalCheckBox *CommSkipAllBlanks()
-{
-    GlobalCheckBox *bc = new GlobalCheckBox("CommSkipAllBlanks");
-    bc->setLabel(QObject::tr("Skip blank frames after commercials"));
-    bc->setValue(true);
-    bc->setHelpText(QObject::tr("When using blank frame detection and "
-                    "automatic flagging, enable this option to include blank "
-                    "frames following commercial breaks as part of the "
-                    "commercial break."));
-    return bc;
-}
-
 static HostSpinBox *CommRewindAmount()
 {
     HostSpinBox *gs = new HostSpinBox("CommRewindAmount", 0, 10, 1);
@@ -4143,7 +4131,6 @@
     comms->addChild(CommNotifyAmount());
     comms->addChild(MaximumCommercialSkip());
     comms->addChild(MergeShortCommBreaks());
-    comms->addChild(CommSkipAllBlanks());
     addChild(comms);
 
 #if CONFIG_DARWIN
Index: programs/mythcommflag/BlankFrameDetector.h
===================================================================
--- programs/mythcommflag/BlankFrameDetector.h	(revision 26482)
+++ programs/mythcommflag/BlankFrameDetector.h	(working copy)
@@ -31,7 +31,6 @@
         { return (index) ? blankMap : breakMap; }
 
     /* BlankFrameDetector interface. */
-    bool getSkipCommBlanks(void) const { return skipcommblanks; }
     const FrameAnalyzer::FrameMap *getBlanks(void) const { return &blankMap; }
     int computeForLogoSurplus(const TemplateMatcher *tm);
     int computeForLogoDeficit(const TemplateMatcher *tm);
@@ -40,7 +39,6 @@
 private:
     HistogramAnalyzer       *histogramAnalyzer;
     float                   fps;
-    bool                    skipcommblanks;         /* skip commercial blanks */
 
     FrameAnalyzer::FrameMap blankMap;
     FrameAnalyzer::FrameMap breakMap;
Index: programs/mythcommflag/BlankFrameDetector.cpp
===================================================================
--- programs/mythcommflag/BlankFrameDetector.cpp	(revision 26482)
+++ programs/mythcommflag/BlankFrameDetector.cpp	(working copy)
@@ -204,7 +204,7 @@
 
 void
 computeBreakMap(FrameAnalyzer::FrameMap *breakMap,
-        const FrameAnalyzer::FrameMap *blankMap, float fps, bool skipcommblanks,
+        const FrameAnalyzer::FrameMap *blankMap, float fps,
         int debugLevel)
 {
     /*
@@ -339,35 +339,31 @@
             break;
     }
 
-    /* Adjust for skipcommblanks configuration. */
+    /* Adjust for blank intervals. */
     FrameAnalyzer::FrameMap::iterator iibreak = breakMap->begin();
     while (iibreak != breakMap->end())
     {
         long long iib = iibreak.key();
         long long iie = iib + *iibreak;
+        FrameAnalyzer::FrameMap::iterator jjbreak = iibreak;
+        ++jjbreak;
+        breakMap->erase(iibreak);
 
-        if (!skipcommblanks)
-        {
-            /* Trim leading blanks from commercial break. */
-            FrameAnalyzer::FrameMap::const_iterator iiblank =
-                blankMap->find(iib);
-            FrameAnalyzer::FrameMap::iterator jjbreak = iibreak;
-            ++jjbreak;
-            iib += *iiblank;
-            breakMap->erase(iibreak);
-            breakMap->insert(iib, iie - iib);
-            iibreak = jjbreak;
-        }
-        else
-        {
-            /* Add trailing blanks to commercial break. */
-            ++iibreak;
-            FrameAnalyzer::FrameMap::const_iterator jjblank =
-                blankMap->find(iie);
-            iie += *jjblank;
-            breakMap->remove(iib);
-            breakMap->insert(iib, iie - iib);
-        }
+        /* Trim leading blanks from commercial break. */
+        long long addb = *blankMap->find(iib);
+        addb = addb / 2;
+        if (addb > MAX_BLANK_FRAMES)
+            addb = MAX_BLANK_FRAMES;
+        iib += addb;
+        /* Add trailing blanks to commercial break. */
+        long long adde = *blankMap->find(iie);
+        iie += adde;
+        long long sube = adde / 2;
+        if (sube > MAX_BLANK_FRAMES)
+            sube = MAX_BLANK_FRAMES;
+        iie -= sube;
+        breakMap->insert(iib, iie - iib);
+        iibreak = jjbreak;
     }
 }
 
@@ -379,11 +375,6 @@
     , fps(0.0f)
     , debugLevel(0)
 {
-    skipcommblanks = gCoreContext->GetNumSetting("CommSkipAllBlanks", 1) != 0;
-
-    VERBOSE(VB_COMMFLAG, QString("BlankFrameDetector: skipcommblanks=%1")
-            .arg(skipcommblanks ? "true" : "false"));
-
     /*
      * debugLevel:
      *      0: no debugging
@@ -573,7 +564,7 @@
     /*
      * Compute breaks (breakMap).
      */
-    computeBreakMap(&breakMap, &blankMap, fps, skipcommblanks, debugLevel);
+    computeBreakMap(&breakMap, &blankMap, fps, debugLevel);
 
     /*
      * Expand blank-frame breaks to fully include overlapping logo breaks.
@@ -650,7 +641,7 @@
     if (breakMap.empty())
     {
         /* Compute breaks (breakMap). */
-        computeBreakMap(&breakMap, &blankMap, fps, skipcommblanks, debugLevel);
+        computeBreakMap(&breakMap, &blankMap, fps, debugLevel);
         frameAnalyzerReportMap(&breakMap, fps, "BF Break");
     }
 
Index: programs/mythcommflag/ClassicCommDetector.h
===================================================================
--- programs/mythcommflag/ClassicCommDetector.h	(revision 26482)
+++ programs/mythcommflag/ClassicCommDetector.h	(working copy)
@@ -153,8 +153,6 @@
         bool logoInfoAvailable;
         LogoDetectorBase* logoDetector;
 
-        bool skipAllBlanks;
-
         unsigned char *framePtr;
 
         frm_dir_map_t blankFrameMap;
Index: programs/mythcommflag/TemplateMatcher.cpp
===================================================================
--- programs/mythcommflag/TemplateMatcher.cpp	(revision 26482)
+++ programs/mythcommflag/TemplateMatcher.cpp	(working copy)
@@ -673,7 +673,6 @@
 TemplateMatcher::adjustForBlanks(const BlankFrameDetector *blankFrameDetector,
     long long nframes)
 {
-    const bool skipCommBlanks = blankFrameDetector->getSkipCommBlanks();
     const FrameAnalyzer::FrameMap *blankMap = blankFrameDetector->getBlanks();
 
     /*
@@ -778,8 +777,10 @@
         if (jj != blankMap->constEnd())
         {
             newbrkb = jj.key();
-            if (!skipCommBlanks)
-                newbrkb += *jj;
+            long long adj = *jj / 2;
+            if (adj > MAX_BLANK_FRAMES)
+                adj = MAX_BLANK_FRAMES;
+            newbrkb += adj;
         }
 
         /*
@@ -796,8 +797,12 @@
         if (kk != blankMap->constEnd())
         {
             newbrke = kk.key();
-            if (skipCommBlanks)
-                newbrke += *kk;
+            long long adj = *kk;
+            newbrke += adj;
+            adj /= 2;
+            if (adj > MAX_BLANK_FRAMES)
+                adj = MAX_BLANK_FRAMES;
+            newbrke -= adj;
         }
 
         /*
Index: programs/mythcommflag/CommDetectorBase.h
===================================================================
--- programs/mythcommflag/CommDetectorBase.h	(revision 26482)
+++ programs/mythcommflag/CommDetectorBase.h	(working copy)
@@ -9,6 +9,8 @@
 
 #include "programtypes.h"
 
+#define MAX_BLANK_FRAMES 60
+
 typedef enum commMapValues {
     MARK_START   = 0,
     MARK_END     = 1,
Index: programs/mythcommflag/ClassicCommDetector.cpp
===================================================================
--- programs/mythcommflag/ClassicCommDetector.cpp	(revision 26482)
+++ programs/mythcommflag/ClassicCommDetector.cpp	(working copy)
@@ -170,7 +170,6 @@
     commDetectMaxCommLength =
         gCoreContext->GetNumSetting("CommDetectMaxCommLength", 125);
 
-    skipAllBlanks = !!gCoreContext->GetNumSetting("CommSkipAllBlanks", 1);
     commDetectBlankCanHaveLogo =
         !!gCoreContext->GetNumSetting("CommDetectBlankCanHaveLogo", 1);
 }
@@ -1786,19 +1785,18 @@
     {
         if (*it == MARK_COMM_START)
         {
-            lastStart = it.key();
-            if (skipAllBlanks)
-            {
-                while ((lastStart > 0) &&
-                        (frameInfo[lastStart - 1].flagMask & COMM_FRAME_BLANK))
-                    lastStart--;
-            }
-            else
-            {
-                while ((lastStart < (framesProcessed - (2 * fps))) &&
-                        (frameInfo[lastStart + 1].flagMask & COMM_FRAME_BLANK))
-                    lastStart++;
-            }
+            uint64_t lastStartLower = it.key();
+            uint64_t lastStartUpper = it.key();
+            while ((lastStartLower > 0) &&
+                   (frameInfo[lastStartLower - 1].flagMask & COMM_FRAME_BLANK))
+                lastStartLower--;
+            while ((lastStartUpper < (framesProcessed - (2 * fps))) &&
+                   (frameInfo[lastStartUpper + 1].flagMask & COMM_FRAME_BLANK))
+                lastStartUpper++;
+            uint64_t adj = (lastStartUpper - lastStartLower) / 2;
+            if (adj > MAX_BLANK_FRAMES)
+                adj = MAX_BLANK_FRAMES;
+            lastStart = lastStartLower + adj;
 
             if (verboseDebugging)
                 VERBOSE(VB_COMMFLAG, QString("Start Mark: %1 -> %2")
@@ -1809,19 +1807,18 @@
         }
         else
         {
-            lastEnd = it.key();
-            if (skipAllBlanks)
-            {
-                while ((lastEnd < (framesProcessed - (2 * fps))) &&
-                        (frameInfo[lastEnd + 1].flagMask & COMM_FRAME_BLANK))
-                    lastEnd++;
-            }
-            else
-            {
-                while ((lastEnd > 0) &&
-                        (frameInfo[lastEnd - 1].flagMask & COMM_FRAME_BLANK))
-                    lastEnd--;
-            }
+            uint64_t lastEndLower = it.key();
+            uint64_t lastEndUpper = it.key();
+            while ((lastEndUpper < (framesProcessed - (2 * fps))) &&
+                   (frameInfo[lastEndUpper + 1].flagMask & COMM_FRAME_BLANK))
+                lastEndUpper++;
+            while ((lastEndLower > 0) &&
+                   (frameInfo[lastEndLower - 1].flagMask & COMM_FRAME_BLANK))
+                lastEndLower--;
+            uint64_t adj = (lastEndUpper - lastEndLower) / 2;
+            if (adj > MAX_BLANK_FRAMES)
+                adj = MAX_BLANK_FRAMES;
+            lastEnd = lastEndUpper - adj;
 
             if (verboseDebugging)
                 VERBOSE(VB_COMMFLAG, QString("End Mark  : %1 -> %2")
@@ -1934,6 +1931,7 @@
     for(; i < (commercials-1); i++)
     {
         long long r = c_start[i];
+        long long adjustment = 0;
 
         if ((r < (30 * fps)) &&
             (first_comm))
@@ -1955,18 +1953,26 @@
                 x++;
             }
 
-            if (skipAllBlanks)
-                while((blankFrameMap.contains(r+1)) &&
-                        (c_start[i+1] != (r+1)))
+            while((blankFrameMap.contains(r+1)) &&
+                  (c_start[i+1] != (r+1)))
+                {
                     r++;
+                    adjustment++;
+                }
         }
         else
         {
-            if (skipAllBlanks)
-                while(blankFrameMap.contains(r+1))
-                    r++;
+            while(blankFrameMap.contains(r+1))
+            {
+                r++;
+                adjustment++;
+            }
         }
 
+        adjustment /= 2;
+        if (adjustment > MAX_BLANK_FRAMES)
+            adjustment = MAX_BLANK_FRAMES;
+        r -= adjustment;
         blankCommMap[r] = MARK_COMM_END;
         first_comm = false;
     }
