Index: libs/libmythtv/tv_play.cpp
===================================================================
--- libs/libmythtv/tv_play.cpp	(Revision 14480)
+++ libs/libmythtv/tv_play.cpp	(Arbeitskopie)
@@ -6628,6 +6628,10 @@
          else if (RunPlaybackBoxPtr)
             EditSchedule(kPlaybackBox);
     }
+    else if (action.left(8) == "JUMPLINK")
+    {
+        ChangeChannel(action.section(" ",1,1).toInt(),"");
+    }
     else if (StateIsLiveTV(GetState()))
     {
         if (action == "TOGGLEPIPMODE")
@@ -6733,6 +6737,8 @@
         if (!freeRecorders)
             freeRecorders = RemoteGetFreeRecorderCount();
 
+        FillMenuSubchannels(treeMenu);
+
         item = new OSDGenericTree(treeMenu, tr("Program Guide"), "GUIDE");
         if (!gContext->GetNumSetting("JumpToProgramOSD", 1))
         {
@@ -7840,4 +7846,41 @@
     }  
 }
 
+bool TV::FillMenuSubchannels(OSDGenericTree *treeMenu)
+{
+    uint chanid = 0;
+    QString selStr = "JUMPLINK_";
+
+    chanid = playbackinfo->chanid.toUInt();
+    MSqlQuery query(MSqlQuery::InitCon());
+    query.prepare("SELECT linkage2.chanid,linkage2.subevent,program.title "
+                      "FROM linkage AS linkage1,linkage AS linkage2,program "
+                      "WHERE linkage1.chanid=:CHANID "
+                      "AND   linkage1.portal_chanid=linkage2.portal_chanid "
+                      "AND   linkage2.chanid = program.chanid "
+                      "AND   program.starttime<now() "
+                      "AND   program.endtime>now() "
+                      "ORDER BY program.starttime,linkage2.serviceid");
+
+    query.bindValue(":CHANID", chanid);
+
+    if (!query.exec() || !query.isActive())
+    {
+        MythContext::DBError("GetLinkage", query);
+        return false;
+    }
+
+    if (query.size() == 0)
+        return false;
+
+    OSDGenericTree *item = new OSDGenericTree(treeMenu, tr("Subchannels"));
+
+    while (query.next()) {
+        new OSDGenericTree(
+            item, QString::fromUtf8(query.value(1).toString()+":"+query.value(2).toString()), QString("JUMPLINK %1").arg(query.value(0).toString()));
+    }
+
+    return true;
+}
+
 /* vim: set expandtab tabstop=4 shiftwidth=4: */
Index: libs/libmythtv/tv_play.h
===================================================================
--- libs/libmythtv/tv_play.h	(Revision 14480)
+++ libs/libmythtv/tv_play.h	(Arbeitskopie)
@@ -389,6 +389,8 @@
     static TVState RemovePlaying(TVState state);
     static TVState RemoveRecording(TVState state);
 
+    bool FillMenuSubchannels(OSDGenericTree *treeMenu);
+
   private:
     // Configuration variables from database
     QString baseFilters;

