Index: mythbuild/mythtv/programs/mythfrontend/schedulecommon.cpp
===================================================================
--- mythbuild.orig/mythtv/programs/mythfrontend/schedulecommon.cpp
+++ mythbuild/mythtv/programs/mythfrontend/schedulecommon.cpp
@@ -186,16 +186,22 @@ 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.recendts > now)
+        if (recinfo.recstartts > now && recinfo.recstartts < nowp2 && recinfo.recstatus == rsWillRecord)
+            menuPopup->AddButton(tr("Start Now"), qVariantFromValue(recinfo));
+
+        if (recinfo.recstatus == rsRecording)
         {
-            if (recinfo.recstatus != rsRecording)
+            menuPopup->AddButton(tr("Stop recording"),
+                                 qVariantFromValue(recinfo));
+            menuPopup->AddButton(tr("Change Ending Time"),
+                                 qVariantFromValue(recinfo));
+        }
+
+        if (recinfo.recstartts <= now && recinfo.recendts > now && recinfo.recstatus != rsRecording)
                 menuPopup->AddButton(tr("Reactivate"),
                                      qVariantFromValue(recinfo));
-            else
-                menuPopup->AddButton(tr("Stop recording"),
-                                     qVariantFromValue(recinfo));
-        }
 
         if (recinfo.recendts > now)
         {
@@ -229,42 +235,28 @@ void ScheduleCommon::ShowRecordingDialog
             }
             
             if (recinfo.rectype != kOverrideRecord &&
-                recinfo.rectype != kDontRecord)
+                recinfo.rectype != kDontRecord &&
+                recinfo.recstatus != rsRecording)
             {
-                if (recinfo.recstatus == rsRecording)
-                {
-                    menuPopup->AddButton(tr("Change Ending Time"),
-                                         qVariantFromValue(recinfo));
-                }
-                else
+                menuPopup->AddButton(tr("Edit Options"),
+                                     qVariantFromValue(recinfo));
+
+                if (recinfo.rectype != kSingleRecord &&
+                    recinfo.rectype != kFindOneRecord)
                 {
-                    menuPopup->AddButton(tr("Edit Options"),
+                    menuPopup->AddButton(tr("Add Override"),
                                          qVariantFromValue(recinfo));
-                    
-                    if (recinfo.rectype != kSingleRecord &&
-                        recinfo.rectype != kFindOneRecord)
-                    {
-                        menuPopup->AddButton(tr("Add Override"),
-                                             qVariantFromValue(recinfo));
-                    }
                 }
             }
             
-            if (recinfo.rectype == kOverrideRecord ||
-                recinfo.rectype == kDontRecord)
+            if ((recinfo.rectype == kOverrideRecord ||
+                 recinfo.rectype == kDontRecord) &&
+                (recinfo.recstatus != rsRecording))
             {
-                if (recinfo.recstatus == rsRecording)
-                {
-                    menuPopup->AddButton(tr("Change Ending Time"),
-                                         qVariantFromValue(recinfo));
-                }
-                else
-                {
-                    menuPopup->AddButton(tr("Edit Override"),
-                                         qVariantFromValue(recinfo));
-                    menuPopup->AddButton(tr("Clear Override"),
-                                         qVariantFromValue(recinfo));
-                }
+                menuPopup->AddButton(tr("Edit Override"),
+                                     qVariantFromValue(recinfo));
+                menuPopup->AddButton(tr("Clear Override"),
+                                     qVariantFromValue(recinfo));
             }
         }        
         
@@ -522,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;
+
+            }
         }
     }
 }
