Index: libs/libmythtv/NuppelVideoPlayer.cpp
===================================================================
--- libs/libmythtv/NuppelVideoPlayer.cpp	(revision 10210)
+++ libs/libmythtv/NuppelVideoPlayer.cpp	(working copy)
@@ -2439,8 +2439,30 @@
 
     // handle Interactive TV
     if (GetInteractiveTV() && GetDecoder())
-        itvVisible = GetDecoder()->ITVUpdate(itvVisible);
+    {
+        QMutexLocker locker(&itvLock);
 
+        OSD *osd = GetOSD();
+        if (osd)
+        {
+            OSDSet *itvosd = osd->GetSet("interactive");
+
+            if (itvosd)
+            {
+                bool visible = false;
+                if (interactiveTV->ImageHasChanged() || !itvVisible)
+                {
+                    interactiveTV->UpdateOSD(itvosd);
+                    visible = true;
+                    itvVisible = true;
+                }
+
+                if (visible)
+                    osd->SetVisible(itvosd, 0);
+            }
+        }
+    }
+
     // handle EIA-608 and Teletext
     if (textDisplayMode & kDisplayNUVCaptions)
         ShowText();
@@ -5711,7 +5733,11 @@
     QMutexLocker locker(&decoder_change_lock);
 
     if (GetDecoder())
-        return GetDecoder()->ITVHandleAction(action);
+    {
+        QMutexLocker locker(&itvLock);
+        if (GetInteractiveTV())
+            return interactiveTV->OfferKey(action);
+    }
 
     return false;
 }
@@ -5734,8 +5760,12 @@
         return;
     }
 
-    GetDecoder()->ITVRestart(chanid, cardid, isLiveTV);
-        
+    {
+        QMutexLocker locker(&itvLock);
+        if (GetInteractiveTV())
+            interactiveTV->Restart(chanid, cardid, isLiveTV);
+    }
+       
     osd->ClearAll("interactive");
     itvosd->Display();
     osd->SetVisible(itvosd, 0);
Index: libs/libmythtv/avformatdecoder.cpp
===================================================================
--- libs/libmythtv/avformatdecoder.cpp	(revision 10210)
+++ libs/libmythtv/avformatdecoder.cpp	(working copy)
@@ -2204,54 +2204,6 @@
     return ccd608->GetXDS(key);
 }
 
-bool AvFormatDecoder::ITVUpdate(bool itvVisible)
-{
-    QMutexLocker locker(&itvLock);
-
-    OSD *osd = GetNVP()->GetOSD();
-    if (!osd)
-        return itvVisible;
-
-    OSDSet *itvosd = osd->GetSet("interactive");
-    if (!itvosd)
-        return itvVisible;
-
-    if (!itv)
-        return itvVisible;
-
-    bool visible = false;
-    if (itv->ImageHasChanged() || !itvVisible)
-    {
-        itv->UpdateOSD(itvosd);
-        visible = true;
-        itvVisible = true;
-    }
-
-    if (visible)
-        osd->SetVisible(itvosd, 0);
-
-    return itvVisible;
-}
-
-bool AvFormatDecoder::ITVHandleAction(const QString &action)
-{
-    QMutexLocker locker(&itvLock);
-    if (itv)
-        return itv->OfferKey(action);
-    return false;
-}
-
-/** \fn AvFormatDecoder::ITVRestart(uint,uint,bool)
- *  \brief Restart the MHEG/MHP engine.
- */
-void AvFormatDecoder::ITVRestart(uint chanid, uint cardid, bool isLiveTV)
-{
-    QMutexLocker locker(&itvLock);
-    itv = GetNVP()->GetInteractiveTV();
-    if (itv)
-        itv->Restart(chanid, cardid, isLiveTV);
-}
-
 bool AvFormatDecoder::SetAudioByComponentTag(int tag)
 {
     for (uint i = 0; i < tracks[kTrackTypeAudio].size(); i++)
Index: libs/libmythtv/decoderbase.h
===================================================================
--- libs/libmythtv/decoderbase.h	(revision 10210)
+++ libs/libmythtv/decoderbase.h	(working copy)
@@ -129,11 +129,6 @@
     virtual QString GetXDS(const QString&) const { return QString::null; }
 
     // MHEG/MHI stuff
-    virtual bool ITVUpdate(bool /*visible*/) { return false; }
-    virtual bool ITVHandleAction(const QString& /*action*/) { return false; }
-    virtual void ITVRestart(uint /*chanid*/, uint /*cardid*/,
-                            bool /*livetv*/) { }
-
     virtual bool SetAudioByComponentTag(int) { return false; }
     virtual bool SetVideoByComponentTag(int) { return false; }
 
Index: libs/libmythtv/NuppelVideoPlayer.h
===================================================================
--- libs/libmythtv/NuppelVideoPlayer.h	(revision 10210)
+++ libs/libmythtv/NuppelVideoPlayer.h	(working copy)
@@ -643,6 +643,7 @@
     bool       itvVisible;
     InteractiveTV *interactiveTV;
     bool       itvEnabled;
+    QMutex     itvLock;
 
     // OSD stuff
     OSD      *osd;
Index: libs/libmythtv/avformatdecoder.h
===================================================================
--- libs/libmythtv/avformatdecoder.h	(revision 10210)
+++ libs/libmythtv/avformatdecoder.h	(working copy)
@@ -136,10 +136,6 @@
     virtual QString GetXDS(const QString&) const;
 
     // MHEG stuff
-    virtual bool ITVUpdate(bool itvVisible);
-    virtual bool ITVHandleAction(const QString&);
-    virtual void ITVRestart(uint chanid, uint cardid, bool livetv);
-
     virtual bool SetAudioByComponentTag(int tag);
     virtual bool SetVideoByComponentTag(int tag);
 
@@ -239,7 +235,6 @@
     // MHEG
     InteractiveTV    *itv;                ///< MHEG/MHP decoder
     int               selectedVideoIndex; ///< MHEG/MHP video stream to use.
-    QMutex            itvLock;
 
     // Audio
     short int        *audioSamples;
