Index: TvLibrary.Interfaces/Interfaces/ITVCard.cs
===================================================================
--- TvLibrary.Interfaces/Interfaces/ITVCard.cs	(revision 26036)
+++ TvLibrary.Interfaces/Interfaces/ITVCard.cs	(working copy)
@@ -86,6 +86,12 @@
     void StopGraph();
 
     /// <summary>
+    /// Pauses the current graph
+    /// </summary>
+    /// <returns></returns>
+    void PauseGraph();
+
+    /// <summary>
     /// returns the min. channel number for analog cards
     /// </summary>
     int MinChannel { get; }
Index: TVLibrary/Implementations/Analog/Graphs/Analog/TvCardAnalog.cs
===================================================================
--- TVLibrary/Implementations/Analog/Graphs/Analog/TvCardAnalog.cs	(revision 26036)
+++ TVLibrary/Implementations/Analog/Graphs/Analog/TvCardAnalog.cs	(working copy)
@@ -116,7 +116,53 @@
       return true;
     }
 
+
     /// <summary>
+    /// Pause the current graph
+    /// </summary>
+    /// <returns></returns>
+    public override void PauseGraph()
+    {
+      if (!CheckThreadId())
+        return;
+      FreeAllSubChannels();
+      FilterState state;
+      if (_graphBuilder == null)
+        return;
+      IMediaControl mediaCtl = (_graphBuilder as IMediaControl);
+      if (mediaCtl == null)
+      {
+        throw new TvException("Can not convert graphBuilder to IMediaControl");
+      }
+      mediaCtl.GetState(10, out state);
+
+      Log.Log.WriteFile("analog: PauseGraph state:{0}", state);
+      _isScanning = false;
+      if (_tsFileSink != null)
+      {
+        IMPRecord record = _tsFileSink as IMPRecord;
+        if (record != null)
+        {
+          record.StopTimeShifting(_subChannelId);
+          record.StopRecord(_subChannelId);
+        }
+      }
+      if (state != FilterState.Running)
+      {
+        _graphState = GraphState.Created;
+        return;
+      }
+      int hr = mediaCtl.Pause();
+      if (hr < 0 || hr > 1)
+      {
+        Log.Log.WriteFile("analog: PauseGraph returns:0x{0:X}", hr);
+        throw new TvException("Unable to pause graph");
+      }
+      Log.Log.WriteFile("analog: Graph paused");
+    }
+
+
+    /// <summary>
     /// Stops the current graph
     /// </summary>
     /// <returns></returns>
@@ -633,7 +679,7 @@
     /// <summary>
     /// Methods which starts the graph
     /// </summary>
-    private void RunGraph(int subChannel)
+    public override void RunGraph(int subChannel)
     {
       bool graphRunning = GraphRunning();
 
Index: TVLibrary/Implementations/Analog/Graphs/HDPVR/TVCardHDPVR.cs
===================================================================
--- TVLibrary/Implementations/Analog/Graphs/HDPVR/TVCardHDPVR.cs	(revision 26036)
+++ TVLibrary/Implementations/Analog/Graphs/HDPVR/TVCardHDPVR.cs	(working copy)
@@ -127,6 +127,38 @@
     /// Stops the current graph
     /// </summary>
     /// <returns></returns>
+    public override void PauseGraph()
+    {
+      FreeAllSubChannels();
+      FilterState state;
+      if (_graphBuilder == null)
+        return;
+      IMediaControl mediaCtl = (_graphBuilder as IMediaControl);
+      if (mediaCtl == null)
+      {
+        throw new TvException("Can not convert graphBuilder to IMediaControl");
+      }
+      mediaCtl.GetState(10, out state);
+      Log.Log.WriteFile("HDPVR: PauseGraph state:{0}", state);
+      _isScanning = false;
+      if (state != FilterState.Running)
+      {
+        _graphState = GraphState.Created;
+        return;
+      }
+      int hr = mediaCtl.Pause();
+      if (hr < 0 || hr > 1)
+      {
+        Log.Log.WriteFile("HDPVR: PauseGraph returns:0x{0:X}", hr);
+        throw new TvException("Unable to pause graph");
+      }
+      Log.Log.WriteFile("HDPVR: Graph paused");
+    }
+
+    /// <summary>
+    /// Stops the current graph
+    /// </summary>
+    /// <returns></returns>
     public override void StopGraph()
     {
       FreeAllSubChannels();
@@ -767,7 +799,7 @@
     /// <summary>
     /// Method which starts the graph
     /// </summary>
-    private void RunGraph(int subChannel)
+    public override void RunGraph(int subChannel)
     {
       bool graphRunning = GraphRunning();
 
Index: TVLibrary/Implementations/DVB/ConditionalAccess/ConditionalAccess.cs
===================================================================
--- TVLibrary/Implementations/DVB/ConditionalAccess/ConditionalAccess.cs	(revision 26036)
+++ TVLibrary/Implementations/DVB/ConditionalAccess/ConditionalAccess.cs	(working copy)
@@ -373,6 +373,7 @@
           if (_twinhan.IsCamPresent())
             return false;
         }
+
         return true;
       }
     }
Index: TVLibrary/Implementations/DVB/Graphs/TvCardDvbBase.cs
===================================================================
--- TVLibrary/Implementations/DVB/Graphs/TvCardDvbBase.cs	(revision 26036)
+++ TVLibrary/Implementations/DVB/Graphs/TvCardDvbBase.cs	(working copy)
@@ -628,7 +628,7 @@
     /// <summary>
     /// Methods which starts the graph
     /// </summary>
-    protected void RunGraph(int subChannel)
+    public override void RunGraph(int subChannel)
     {
       bool graphRunning = GraphRunning();
 
@@ -675,6 +675,41 @@
     }
 
     /// <summary>
+    /// Methods which pauses the graph
+    /// </summary>
+    public override void PauseGraph()
+    {
+      Log.Log.WriteFile("dvb:PauseGraph called");
+      if (!CheckThreadId())
+        return;
+      _epgGrabbing = false;
+      _isScanning = false;
+      FreeAllSubChannels();
+      if (_mdplugs != null)
+      {
+        _mdplugs.FreeAllChannels();
+      }
+      if (_graphBuilder == null)
+        return;
+      
+      FilterState state;
+      ((IMediaControl)_graphBuilder).GetState(10, out state);
+      if (state != FilterState.Running)
+      {
+        Log.Log.WriteFile("dvb:StopGraph filterstate already paused, returning.");
+        return;
+      }
+      Log.Log.WriteFile("dvb:PauseGraph");
+      int hr = ((IMediaControl)_graphBuilder).Pause();
+      if (hr < 0 || hr > 1)
+      {
+        Log.Log.Error("dvb:PauseGraph returns:0x{0:X}", hr);
+        throw new TvException("Unable to pause graph");
+      }
+      _graphState = GraphState.Created;        
+    }
+
+    /// <summary>
     /// Methods which stops the graph
     /// </summary>
     public override void StopGraph()
@@ -717,7 +752,13 @@
       }
       else
       {
+        int hr = ((IMediaControl)_graphBuilder).Stop();        
         Log.Log.WriteFile("dvb:StopGraph - conditionalAccess.AllowedToStopGraph = false");
+        if (hr < 0 || hr > 1)
+        {
+          Log.Log.Error("dvb:StopGraph returns:0x{0:X}", hr);
+          throw new TvException("Unable to stop graph");
+        }
         _graphState = GraphState.Created;
       }
     }
Index: TVLibrary/Implementations/Hybrid/HybridCard.cs
===================================================================
--- TVLibrary/Implementations/Hybrid/HybridCard.cs	(revision 26036)
+++ TVLibrary/Implementations/Hybrid/HybridCard.cs	(working copy)
@@ -176,7 +176,15 @@
       _group.StopGraph();
     }
 
+    /// <summary>
+    /// Pauses the current graph
+    /// </summary>
+    public void PauseGraph()
+    {
+      _group.PauseGraph();
+    }
 
+
     /// <summary>
     /// returns true if card is currently grabbing the epg
     /// </summary>
Index: TVLibrary/Implementations/Hybrid/HybridCardGroup.cs
===================================================================
--- TVLibrary/Implementations/Hybrid/HybridCardGroup.cs	(revision 26036)
+++ TVLibrary/Implementations/Hybrid/HybridCardGroup.cs	(working copy)
@@ -97,6 +97,14 @@
     }
 
     /// <summary>
+    /// Pauses the current graph
+    /// </summary>
+    public void PauseGraph()
+    {
+      _cards[_currentCardIndex].PauseGraph();
+    }
+
+    /// <summary>
     /// returns true if card is currently grabbing the epg
     /// </summary>
     /// <value></value>
Index: TVLibrary/Implementations/RadioWebStream/RadioWebStreamCard.cs
===================================================================
--- TVLibrary/Implementations/RadioWebStream/RadioWebStreamCard.cs	(revision 26036)
+++ TVLibrary/Implementations/RadioWebStream/RadioWebStreamCard.cs	(working copy)
@@ -322,6 +322,15 @@
     }
 
     /// <summary>
+    /// Pauese the current graph
+    /// </summary>
+    /// <returns></returns>
+    public void PauseGraph()
+    {
+      if (!CheckThreadId()) return;
+    }
+
+    /// <summary>
     /// Returns if the tuner belongs to a hybrid card
     /// </summary>
     public bool IsHybrid
Index: TVLibrary/Implementations/TvCardBase.cs
===================================================================
--- TVLibrary/Implementations/TvCardBase.cs	(revision 26036)
+++ TVLibrary/Implementations/TvCardBase.cs	(working copy)
@@ -590,6 +590,17 @@
     public abstract void StopGraph();
 
     /// <summary>
+    /// Pauses the current graph
+    /// </summary>
+    ///     
+    public abstract void PauseGraph();
+
+    /// <summary>
+    /// Starts the graph
+    /// </summary>
+    public abstract void RunGraph(int subChannel);
+
+    /// <summary>
     /// A derrived class should activate / deactivate the epg grabber
     /// </summary>
     /// <param name="value">Mode</param>
@@ -681,8 +692,9 @@
         _subChannelId = 0;
         if (!continueGraph)
         {
-          Log.Log.Info("tvcard:FreeSubChannel : no subchannels present, stopping graph");
-          StopGraph();
+          Log.Log.Info("tvcard:FreeSubChannel : no subchannels present, pausing graph");
+          //StopGraph();
+          PauseGraph();
         }
         else
         {
Index: TvService/CardManagement/CardHandler/UserManagement.cs
===================================================================
--- TvService/CardManagement/CardHandler/UserManagement.cs	(revision 26036)
+++ TvService/CardManagement/CardHandler/UserManagement.cs	(working copy)
@@ -152,7 +152,8 @@
       }
       if (_cardHandler.IsIdle)
       {
-        _cardHandler.Card.StopGraph();
+        //_cardHandler.Card.StopGraph();
+        _cardHandler.Card.PauseGraph();
       }
     }
 
Index: TvService/TVController.cs
===================================================================
--- TvService/TVController.cs	(revision 26036)
+++ TvService/TVController.cs	(working copy)
@@ -29,6 +29,7 @@
 using System.Reflection;
 using TvLibrary;
 using TvLibrary.Implementations;
+using TvLibrary.Implementations.DVB;
 using TvLibrary.Interfaces;
 using TvLibrary.Implementations.Analog;
 using TvLibrary.Implementations.Hybrid;
@@ -604,11 +605,12 @@
                     if (card.PreloadCard)
                     {
                       Log.Info("Controller: preloading card :{0}", card.Name);
-                      card.BuildGraph();
+                      card.BuildGraph();                      
                       if (unknownCard is TvCardAnalog)
                       {
                         ((TvCardAnalog)unknownCard).ReloadCardConfiguration();
                       }
+                      card.RunGraph(0);                                            
                     }
                     else
                     {
