Index: mediaportal/Core/guilib/GUIWindow.cs
===================================================================
--- mediaportal/Core/guilib/GUIWindow.cs	(revision 27000)
+++ mediaportal/Core/guilib/GUIWindow.cs	(working copy)
@@ -100,6 +100,9 @@
       WINDOW_DIALOG_YES_NO = 100,
       WINDOW_DIALOG_PROGRESS = 101,
       WINDOW_DIALOG_PLAY_STOP = 102,
+
+      WINDOW_DIALOG_TV_NOTIFY = 103,
+      
       WINDOW_MUSIC_PLAYLIST = 500,
       WINDOW_MUSIC_FILES = 501,
       WINDOW_MUSIC_ALBUM = 502,
Index: TvEngine3/TVLibrary/TvPlugin/TvPlugin/TvNotifyManager.cs
===================================================================
--- TvEngine3/TVLibrary/TvPlugin/TvPlugin/TvNotifyManager.cs	(revision 27000)
+++ TvEngine3/TVLibrary/TvPlugin/TvPlugin/TvNotifyManager.cs	(working copy)
@@ -250,12 +250,50 @@
               tvProg.EndTime = program.EndTime;
 
               _notifiesList.Remove(program);
+
+#if DEBUG
+              // new notification code - DEBUG only
+
+              int _notifyTVTimeout = 15;
+              bool _playNotifyBeep = true;
+              using (Settings xmlreader = new MPSettings())
+              {
+                  _notifyTVTimeout = xmlreader.GetValueAsInt("mytv", "notifyTVTimeout", 15);
+                  _playNotifyBeep = xmlreader.GetValueAsBool("mytv", "notifybeep", true);
+              }
+
+              /*
+              TvProgramNotifyDlg dialogNotify2 = new TvProgramNotifyDlg();
+              dialogNotify2.Init();
+              GUIWindow refWin = (GUIWindow)dialogNotify2;
+              GUIWindowManager.Add(ref refWin);
+               */
+              TvProgramNotifyDlg dialogNotify2 = (TvProgramNotifyDlg)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_TV_NOTIFY);
+              dialogNotify2.SetHeading("TV Notification");
+              dialogNotify2.SetLine(1, tvProg.Title + " is about to start in " + (tvProg.StartTime - DateTime.Now).Minutes.ToString() + " minutes");
+              dialogNotify2.SetLine(2, "Switch to " + tvProg.Channel + " now?");
+              dialogNotify2.TimeOut = 300; // _notifyTVTimeout;
+              if (_playNotifyBeep)
+              {
+                  MediaPortal.Util.Utils.PlaySound("notify.wav", false, true);
+              }
+              dialogNotify2.DoModal(GUIWindowManager.ActiveWindow);
+
+              if (dialogNotify2.IsConfirmed)
+              {
+                GUIDialogOK d3 = (GUIDialogOK)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_OK);
+                d3.DoModal(GUIWindowManager.ActiveWindow);
+              }
+
+#else
               Log.Info("send notify");
               GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_NOTIFY_TV_PROGRAM, 0, 0, 0, 0, 0, null);
               msg.Object = tvProg;
               GUIGraphicsContext.SendMessage(msg);
               msg = null;
               Log.Info("send notify done");
+
+#endif
               return;
             }
           }
@@ -435,4 +473,45 @@
       }
     }
   }
-}
\ No newline at end of file
+}
+
+  public class TvProgramNotifyDlg : MediaPortal.Dialogs.GUIDialogYesNo
+  {
+    private int timeOutInSeconds = 0;
+    private DateTime timeStart = DateTime.Now;
+
+    public TvProgramNotifyDlg()
+    {
+      GetID = (int)GUIWindow.Window.WINDOW_DIALOG_TV_NOTIFY;
+    }
+
+    public int TimeOut
+    {
+      get { return timeOutInSeconds; }
+      set { timeOutInSeconds = value; }
+    }
+
+    public override bool ProcessDoModal()
+    {
+     
+      TimeSpan timeElapsed = DateTime.Now - timeStart;
+      if (TimeOut > 0)
+      {
+        if (timeElapsed.TotalSeconds >= TimeOut)
+        {
+          GUIMessage msgConfirmYes = new GUIMessage();
+          msgConfirmYes.Message = GUIMessage.MessageType.GUI_MSG_CLICKED;
+          msgConfirmYes.SenderControlId = base.btnYes.GetID;
+          base.OnMessage(msgConfirmYes);
+          return false;
+        }
+      }
+      return base.ProcessDoModal(); 
+    }
+
+    public override void DoModal(int dwParentId)
+    {
+      timeStart = DateTime.Now;
+      base.DoModal(dwParentId);
+    }
+  }
