Index: programs/mythfrontend/playbackbox.cpp
===================================================================
--- programs/mythfrontend/playbackbox.cpp	(revision 20128)
+++ programs/mythfrontend/playbackbox.cpp	(working copy)
@@ -345,6 +345,7 @@
     }
 
     // recording group stuff
+    m_recGroupIdx = -1;
     m_recGroupType.clear();
     m_recGroupType[m_recGroup] = (displayCat) ? "category" : "recgroup";
     if (m_groupnameAsAllProg)
@@ -1422,6 +1423,38 @@
         m_titleList << tr("LiveTV");
     m_titleList << sortedList.values();
 
+    // Populate list of recording groups
+    if (m_progCache)
+    {
+        QString name;
+
+        m_recGroups.clear();
+        m_recGroupIdx = -1;
+
+        m_recGroups.append("All Programs");
+
+        MSqlQuery query(MSqlQuery::InitCon());
+
+        query.prepare("SELECT distinct recgroup from recorded WHERE "
+                      "deletepending = 0 ORDER BY recgroup");
+        if (query.exec())
+        {
+            while (query.next())
+            {
+                name = query.value(0).toString();
+                if (name != "Deleted" && name != "LiveTV")
+                {
+                    m_recGroups.append(name);
+                    m_recGroupType[name] = "recgroup";
+                }
+            }
+
+            m_recGroupIdx = m_recGroups.indexOf(m_recGroup);
+            if (m_recGroupIdx < 0)
+                m_recGroupIdx = 0;
+        }
+    }
+
     updateGroupList();
     updateUsage();
 
@@ -3147,6 +3180,24 @@
             m_viewMask = m_viewMaskToggle(m_viewMask, VIEW_TITLES);
             m_connected = FillList(true);
         }
+        else if (action == "PAGERIGHT")
+        {
+            if (m_recGroupIdx >= 0 && !m_recGroups.empty())
+            {
+                if (++m_recGroupIdx >= m_recGroups.size())
+                    m_recGroupIdx = 0;
+                displayRecGroup(m_recGroups[m_recGroupIdx]);
+            }
+        }
+        else if (action == "PAGELEFT")
+        {
+            if (m_recGroupIdx >= 0 && !m_recGroups.empty())
+            {
+                if (--m_recGroupIdx < 0)
+                    m_recGroupIdx = m_recGroups.size() - 1;
+                displayRecGroup(m_recGroups[m_recGroupIdx]);
+            }
+        }
         else if (action == "CHANGERECGROUP")
             showGroupFilter();
         else if (action == "CHANGEGROUPVIEW")
Index: programs/mythfrontend/playbackbox.h
===================================================================
--- programs/mythfrontend/playbackbox.h	(revision 20128)
+++ programs/mythfrontend/playbackbox.h	(working copy)
@@ -373,6 +373,9 @@
     int                 m_progsInDB;  ///< total number of recordings in DB
     bool                m_isFilling;
 
+    QStringList         m_recGroups;
+    int                 m_recGroupIdx;
+
     // Other state
     /// Program currently selected for deletion
     ProgramInfo *m_delItem;
