Index: TvFullScreen.cs
===================================================================
--- TvFullScreen.cs	(revision 28100)
+++ TvFullScreen.cs	(working copy)
@@ -482,12 +482,7 @@
               }
               else
               {
-                TvMiniGuide miniGuide = (TvMiniGuide)GUIWindowManager.GetWindow((int)Window.WINDOW_MINI_GUIDE);
-                _isDialogVisible = true;
-                miniGuide.AutoZap = true;
-                miniGuide.DoModal(GetID);
-                _isDialogVisible = false;
-
+                ShowMiniEpg();
                 // LastChannel has been moved to "0"
                 //if (!GUIWindowManager.IsRouted)
                 //{
@@ -929,6 +924,16 @@
       base.OnAction(action);
     }
 
+    private void ShowMiniEpg() 
+    {      
+      TVHome.Navigator.CheckChannelChange();
+      TvMiniGuide miniGuide = (TvMiniGuide)GUIWindowManager.GetWindow((int)Window.WINDOW_MINI_GUIDE);
+      _isDialogVisible = true;
+      miniGuide.AutoZap = true;
+      miniGuide.DoModal(GetID);
+      _isDialogVisible = false;
+    }
+
     public override void SetObject(object obj)
     {
       base.SetObject(obj);
@@ -1607,13 +1612,7 @@
 
         case 10104: // MiniEPG
           {
-            Log.Debug("get miniguide");
-            TvMiniGuide miniGuide = (TvMiniGuide)GUIWindowManager.GetWindow((int)Window.WINDOW_MINI_GUIDE);
-            _isDialogVisible = true;
-            Log.Debug("show miniguide");
-            miniGuide.DoModal(GetID);
-            Log.Debug("done miniguide");
-            _isDialogVisible = false;
+            ShowMiniEpg();
             break;
           }
 
@@ -1933,6 +1932,7 @@
       {
         return;
       }
+      TVHome.Navigator.CheckChannelChange();
       Program currentProgram = TVHome.Navigator.GetChannel(TVHome.Navigator.Channel.IdChannel).CurrentProgram;
 
       if (currentProgram == null)
@@ -2622,7 +2622,10 @@
 
 
       // Let the navigator zap channel if needed
-      TVHome.Navigator.CheckChannelChange();
+      if (TVHome.UserChannelChanged)
+      {
+        TVHome.Navigator.CheckChannelChange();
+      }
       //Log.Debug("osd visible:{0} timeoutvalue:{1}", _zapOsdVisible ,_zapTimeOutValue);
       if (_zapOsdVisible && _zapTimeOutValue > 0)
       {
@@ -2828,6 +2831,7 @@
         _osdTimeoutTimer = DateTime.Now;
         if (!_zapOsdVisible)
         {
+          TVHome.Navigator.CheckChannelChange();
           GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_WINDOW_INIT, _osdWindow.GetID, 0, 0, GetID, 0,
                                           null);
           _osdWindow.OnMessage(msg); // Send an init msg to the OSD
Index: TVHome.cs
===================================================================
--- TVHome.cs	(revision 28100)
+++ TVHome.cs	(working copy)
@@ -713,34 +713,39 @@
         return;
       }
 
-      UpdateRecordingIndicator();
-      UpdateStateOfRecButton();
-
-      if (!Card.IsTimeShifting)
+      try
       {
-        UpdateProgressPercentageBar();
-        // mantis #2218 : TV guide information in TV home screen does not update when program changes if TV is not playing 
-        return;
-      }
+        UpdateRecordingIndicator();
+        UpdateStateOfRecButton();
 
-      // BAV, 02.03.08: a channel change should not be delayed by rendering.
-      //                by moving thisthe 1 min delays in zapping should be fixed
-      // Let the navigator zap channel if needed
-      if (Navigator.CheckChannelChange())
-      {
-        UpdateGUIonPlaybackStateChange();
-      }
+        if (!Card.IsTimeShifting)
+        {
+          UpdateProgressPercentageBar();
+          // mantis #2218 : TV guide information in TV home screen does not update when program changes if TV is not playing           
+          return;
+        }
 
-      if (GUIGraphicsContext.InVmr9Render)
-      {
-        return;
-      }
+        // BAV, 02.03.08: a channel change should not be delayed by rendering.
+        //                by moving thisthe 1 min delays in zapping should be fixed
+        // Let the navigator zap channel if needed
+        if (Navigator.CheckChannelChange())
+        {
+          UpdateGUIonPlaybackStateChange();
+        }
 
-      ShowCiMenu();
+        if (GUIGraphicsContext.InVmr9Render)
+        {         
+          return;
+        }
 
-      doProcess();
+        ShowCiMenu();
 
-      _updateTimer = DateTime.Now;
+        doProcess();
+      }
+      finally
+      {
+        _updateTimer = DateTime.Now;
+      }            
     }
 
     public override bool IsTv
@@ -1051,6 +1056,7 @@
     public static bool UserChannelChanged
     {
       set { _userChannelChanged = value; }
+      get { return _userChannelChanged; }
     }
 
     public static TVUtil Util
@@ -3491,6 +3497,7 @@
       finally
       {
         StopRenderBlackImage();
+        _userChannelChanged = false;
       }
     }
 
