Index: myth.24178M.0418a/mythtv/programs/mythfrontend/schedulecommon.cpp
===================================================================
--- myth.24178M.0418a.orig/mythtv/programs/mythfrontend/schedulecommon.cpp
+++ myth.24178M.0418a/mythtv/programs/mythfrontend/schedulecommon.cpp
@@ -186,7 +186,11 @@ void ScheduleCommon::ShowRecordingDialog
         menuPopup->SetReturnEvent(this, "schedulerecording");
 
         QDateTime now = QDateTime::currentDateTime();
+        QDateTime nowp2 = now.addSecs(2 * 60 * 60); // two hours from now
         
+        if (recinfo.recstartts > now && recinfo.recstartts < nowp2 && recinfo.recstatus == rsWillRecord)
+            menuPopup->AddButton(tr("Start Now"), qVariantFromValue(recinfo));
+
         if (recinfo.recstatus == rsRecording)
         {
             menuPopup->AddButton(tr("Stop recording"),
@@ -510,6 +514,38 @@ void ScheduleCommon::customEvent(QEvent 
             {
                 MakeOverride(&recInfo);
             }
+            else if (resulttext == tr("Start Now"))
+            {
+                RecordingRule *recrule = new RecordingRule();
+                if (!recrule->LoadByProgram(static_cast<ProgramInfo*>(&recInfo)))
+                {
+                    VERBOSE(VB_IMPORTANT, QString("Failed to load by program info"));
+                    delete recrule;
+                    return;
+                }
+
+                if (recInfo.rectype != kSingleRecord &&
+                    recInfo.rectype != kOverrideRecord &&
+                    recInfo.rectype != kFindOneRecord)
+                {
+                    if (!recrule->MakeOverride())
+                    {
+                        VERBOSE(VB_IMPORTANT, QString("Failed to make Override"));
+                        delete recrule;
+                        return;
+                    }
+                    recrule->m_type = kOverrideRecord;
+                }
+
+                QDateTime now = QDateTime::currentDateTime();
+                int newoffset = recrule->m_startOffset;
+                newoffset +=  (now.secsTo(recInfo.recstartts) / 60) + 1;
+                recrule->m_startOffset = newoffset;
+
+                recrule->Save();
+                delete recrule;
+
+            }
         }
     }
 }
