Index: libs/libmythtv/tv_play.h
===================================================================
--- libs/libmythtv/tv_play.h	(revision 22597)
+++ libs/libmythtv/tv_play.h	(working copy)
@@ -58,7 +58,7 @@
 typedef void (*EMBEDRETURNVOID) (void *, bool);
 typedef void (*EMBEDRETURNVOIDEPG) (uint, const QString &, TV *, bool, bool, int);
 typedef void (*EMBEDRETURNVOIDFINDER) (TV *, bool, bool);
-typedef void (*EMBEDRETURNVOIDSCHEDIT) (const ProgramInfo *);
+typedef void (*EMBEDRETURNVOIDSCHEDIT) (const ProgramInfo *, void *);
 
 // Locking order
 //
Index: libs/libmythtv/tv_play.cpp
===================================================================
--- libs/libmythtv/tv_play.cpp	(revision 22597)
+++ libs/libmythtv/tv_play.cpp	(working copy)
@@ -7938,6 +7938,7 @@
     }
 
     pause_active |= kScheduledRecording == editType;
+    pause_active |= kViewSchedule == editType;
     pause_active |=
         !isLiveTV && (!db_continue_embedded || isNearEnd);
     pause_active |= actx->paused;
@@ -7982,7 +7983,7 @@
         }
         case kScheduledRecording:
         {
-            RunScheduleEditorPtr(&pginfo);
+            RunScheduleEditorPtr(&pginfo, (void *)this);
             ignoreKeyPresses = true;
             break;
         }
@@ -8702,7 +8703,10 @@
         DoEditSchedule(editType);
     }
 
-    if (message.left(11) == "EPG_EXITING" || message.left(18) == "PROGFINDER_EXITING")
+    if (message.left(11) == "EPG_EXITING" || 
+        message.left(18) == "PROGFINDER_EXITING" || 
+        message.left(21) == "VIEWSCHEDULED_EXITING" || 
+        message.left(22) == "SCHEDULEEDITOR_EXITING")
     {
         GetMythMainWindow()->SetDrawEnabled(false);
         // Resize the window back to the MythTV Player size
Index: libs/libmythtv/recordingrule.cpp
===================================================================
--- libs/libmythtv/recordingrule.cpp	(revision 22597)
+++ libs/libmythtv/recordingrule.cpp	(working copy)
@@ -158,8 +158,7 @@
     if (proginfo->recordid)
     {
         m_recordID = proginfo->recordid;
-        if (!Load())
-            return false;
+        Load();
     }
 
     if (m_searchType == kNoSearch || m_searchType == kManualSearch)
Index: programs/mythfrontend/viewscheduled.h
===================================================================
--- programs/mythfrontend/viewscheduled.h	(revision 22597)
+++ programs/mythfrontend/viewscheduled.h	(working copy)
@@ -50,6 +50,7 @@
     void selected(MythUIButtonListItem *);
     void updateInfo(MythUIButtonListItem *);
     void SwitchList(void);
+    void Close(void);
 
   private:
     void FillList(void);
Index: programs/mythfrontend/scheduleeditor.cpp
===================================================================
--- programs/mythfrontend/scheduleeditor.cpp	(revision 22597)
+++ programs/mythfrontend/scheduleeditor.cpp	(working copy)
@@ -4,6 +4,7 @@
 // QT
 #include <QString>
 #include <QHash>
+#include <QApplication>
 
 // Libmyth
 #include "mythcontext.h"
@@ -12,6 +13,7 @@
 // Libmythtv
 #include "playgroup.h"
 #include "viewschdiff.h"
+#include "tv_play.h"
 
 // Libmythui
 #include "mythmainwindow.h"
@@ -31,16 +33,17 @@
 #define ENUM_TO_QVARIANT(a) qVariantFromValue(static_cast<int>(a))
 
 
-void *ScheduleEditor::RunScheduleEditor(ProgramInfo *proginfo)
+void *ScheduleEditor::RunScheduleEditor(ProgramInfo *proginfo, void *player)
 {
     RecordingRule *rule = new RecordingRule();
     rule->LoadByProgram(proginfo);
     
     MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
-    ScheduleEditor *se = new ScheduleEditor(mainStack, rule);
+    ScheduleEditor *se = new ScheduleEditor(mainStack, rule, 
+                                            static_cast<TV*>(player));
 
     if (se->Create())
-        mainStack->AddScreen(se);
+        mainStack->AddScreen(se, (player == NULL));
     else
         delete se;
 
@@ -53,34 +56,41 @@
  */
 
 ScheduleEditor::ScheduleEditor(MythScreenStack *parent,
-                               RecordingInfo *recInfo)
+                               RecordingInfo *recInfo, TV *player)
           : ScheduleCommon(parent, "ScheduleEditor"),
             m_recInfo(new RecordingInfo(*recInfo)), m_recordingRule(NULL),
             m_sendSig(false),
             m_saveButton(NULL), m_cancelButton(NULL), m_rulesList(NULL),
             m_schedOptButton(NULL), m_storeOptButton(NULL),
             m_postProcButton(NULL), m_schedInfoButton(NULL),
-            m_previewButton(NULL)
+            m_previewButton(NULL), m_player(player)
 {
     m_recordingRule = new RecordingRule();
     m_recordingRule->m_recordID = m_recInfo->recordid;
 }
 
 ScheduleEditor::ScheduleEditor(MythScreenStack *parent,
-                               RecordingRule *recRule)
+                               RecordingRule *recRule, TV *player)
           : ScheduleCommon(parent, "ScheduleEditor"),
             m_recInfo(NULL), m_recordingRule(recRule),
             m_sendSig(false),
             m_saveButton(NULL), m_cancelButton(NULL), m_rulesList(NULL),
             m_schedOptButton(NULL), m_storeOptButton(NULL),
             m_postProcButton(NULL), m_schedInfoButton(NULL),
-            m_previewButton(NULL)
+            m_previewButton(NULL), m_player(player)
 {
 }
 
 ScheduleEditor::~ScheduleEditor(void)
 {
     delete m_recordingRule;
+
+    // if we have a player, we need to tell we are done
+    if (m_player)
+    {
+        QString message = QString("VIEWSCHEDULED_EXITING");
+        qApp->postEvent(m_player, new MythEvent(message));
+    }
 }
 
 bool ScheduleEditor::Create()
@@ -142,6 +152,15 @@
     return true;
 }
 
+void ScheduleEditor::Close()
+{
+    // don't fade the screen if we are returning to the player
+    if (m_player)
+        GetScreenStack()->PopScreen(this, false);
+    else
+        GetScreenStack()->PopScreen(this, true);
+}
+
 void ScheduleEditor::Load()
 {
     // Copy this now, it will change briefly after the first item is inserted
Index: programs/mythfrontend/main.cpp
===================================================================
--- programs/mythfrontend/main.cpp	(revision 22597)
+++ programs/mythfrontend/main.cpp	(working copy)
@@ -23,6 +23,7 @@
 #include "tv.h"
 #include "proglist.h"
 #include "progfind.h"
+#include "scheduleeditor.h"
 #include "manualschedule.h"
 #include "playbackbox.h"
 #include "customedit.h"
@@ -915,7 +916,7 @@
     TV::SetFuncPtr("viewscheduled", (void *)ViewScheduled::RunViewScheduled);
     TV::SetFuncPtr("programguide", (void *)GuideGrid::RunProgramGuide);
     TV::SetFuncPtr("programfinder", (void *)RunProgramFinder);
-    TV::SetFuncPtr("scheduleeditor", (void *)RunProgramFinder);
+    TV::SetFuncPtr("scheduleeditor", (void *)ScheduleEditor::RunScheduleEditor);
 }
 
 
Index: programs/mythfrontend/viewscheduled.cpp
===================================================================
--- programs/mythfrontend/viewscheduled.cpp	(revision 22597)
+++ programs/mythfrontend/viewscheduled.cpp	(working copy)
@@ -28,7 +28,7 @@
                                            showTV);
 
     if (vsb->Create())
-        mainStack->AddScreen(vsb);
+        mainStack->AddScreen(vsb, (player == NULL));
     else
         delete vsb;
 
@@ -65,6 +65,13 @@
 {
     gContext->removeListener(this);
     gContext->SaveSetting("ViewSchedShowLevel", !m_showAll);
+
+    // if we have a player, we need to tell we are done
+    if (m_player)
+    {
+        QString message = QString("VIEWSCHEDULED_EXITING");
+        qApp->postEvent(m_player, new MythEvent(message));
+    }
 }
 
 bool ViewScheduled::Create()
@@ -109,6 +116,15 @@
     return true;
 }
 
+void ViewScheduled::Close()
+{
+    // don't fade the screen if we are returning to the player
+    if (m_player)
+        GetScreenStack()->PopScreen(this, false);
+    else
+        GetScreenStack()->PopScreen(this, true);
+}
+
 void ViewScheduled::SwitchList()
 {
     if (GetFocusWidget() == m_groupList)
Index: programs/mythfrontend/scheduleeditor.h
===================================================================
--- programs/mythfrontend/scheduleeditor.h	(revision 22597)
+++ programs/mythfrontend/scheduleeditor.h	(working copy)
@@ -22,20 +22,23 @@
 class MythUIButtonListItem;
 class MythUIStateType;
 class MythUISpinBox;
+class TV;
 
 class ScheduleEditor : public ScheduleCommon
 {
   Q_OBJECT
   public:
-    ScheduleEditor(MythScreenStack *parent, RecordingInfo* recinfo);
-    ScheduleEditor(MythScreenStack *parent, RecordingRule* recrule);
+    ScheduleEditor(MythScreenStack *parent, RecordingInfo* recinfo,
+                   TV *player = NULL);
+    ScheduleEditor(MythScreenStack *parent, RecordingRule* recrule, 
+                   TV *player = NULL);
    ~ScheduleEditor();
 
     bool Create(void);
     void customEvent(QEvent *event);
 
     /// Callback
-    void *RunScheduleEditor(ProgramInfo *proginfo);
+    static void *RunScheduleEditor(ProgramInfo *proginfo, void *player = NULL);
     
   signals:
     void ruleSaved(int ruleId);
@@ -48,6 +51,7 @@
     void ShowSchedInfo(void);
     void ShowPreview(void);
     void Save(void);
+    void Close(void);
     
   private:
     void Load(void);
@@ -73,6 +77,7 @@
     MythUIButton    *m_schedInfoButton;
     MythUIButton    *m_previewButton;
     
+    TV *m_player;
 };
 
 class SchedOptEditor : public MythScreenType
