diff --git a/mythtv/libs/libmythtv/recordinginfo.cpp b/mythtv/libs/libmythtv/recordinginfo.cpp
index 143b37f431..b07379c916 100644
--- a/mythtv/libs/libmythtv/recordinginfo.cpp
+++ b/mythtv/libs/libmythtv/recordinginfo.cpp
@@ -1638,6 +1638,16 @@ uint RecordingInfo::GetRecgroupID(const QString& recGroup)
     return query.value(0).toUInt();
 }
 
+/**
+ *  \brief Helper for converting SpecialRecordingGroups to actual IDs
+ */
+uint RecordingInfo::GetSpecialRecgroupID(SpecialRecordingGroups group)
+{
+    static QString names[3] = { QString("Default"), QString("LiveTV"), QString("Deleted") };
+
+    return GetRecgroupID(names[group]);
+}
+
 /**
  *  \brief Temporary helper during transition from string to ID
  */
diff --git a/mythtv/libs/libmythtv/recordinginfo.h b/mythtv/libs/libmythtv/recordinginfo.h
index 74a5ad2a59..cedd5222e2 100644
--- a/mythtv/libs/libmythtv/recordinginfo.h
+++ b/mythtv/libs/libmythtv/recordinginfo.h
@@ -231,9 +231,9 @@ class MTV_PUBLIC RecordingInfo : public ProgramInfo
                   LoadStatus *status = nullptr);
 
     typedef enum {
-        kDefaultRecGroup     = 1, // Auto-increment columns start at one
-        kLiveTVRecGroup      = 2,
-        kDeletedRecGroup     = 3,
+        kDefaultRecGroup     = 0, // Auto-increment columns start at one
+        kLiveTVRecGroup      = 1,
+        kDeletedRecGroup     = 2,
     } SpecialRecordingGroups;
 
   public:
@@ -309,6 +309,7 @@ class MTV_PUBLIC RecordingInfo : public ProgramInfo
     // Temporary while we transition from string to integer
     static QString GetRecgroupString(uint recGroupID);
     static uint GetRecgroupID(const QString &recGroup);
+    static uint GetSpecialRecgroupID(SpecialRecordingGroups group);
 
     // File specific metdata
     void LoadRecordingFile();
diff --git a/mythtv/libs/libmythtv/recordingrule.cpp b/mythtv/libs/libmythtv/recordingrule.cpp
index 6092b0b2fd..cf55e89569 100644
--- a/mythtv/libs/libmythtv/recordingrule.cpp
+++ b/mythtv/libs/libmythtv/recordingrule.cpp
@@ -49,7 +49,7 @@ RecordingRule::RecordingRule()
     m_dupIn(kDupsInAll),
     m_filter(0),
     m_recProfile(tr("Default")),
-    m_recGroupID(RecordingInfo::kDefaultRecGroup),
+    m_recGroupID(RecordingInfo::GetSpecialRecgroupID(RecordingInfo::kDefaultRecGroup)),
     m_storageGroup("Default"),
     m_playGroup("Default"),
     m_autoExpire(false),
diff --git a/mythtv/libs/libmythtv/tv_rec.cpp b/mythtv/libs/libmythtv/tv_rec.cpp
index 00c7968a35..db27638dc3 100644
--- a/mythtv/libs/libmythtv/tv_rec.cpp
+++ b/mythtv/libs/libmythtv/tv_rec.cpp
@@ -4685,7 +4685,7 @@ bool TVRec::CreateLiveTVRingBuffer(const QString & channum)
 
     pginfo->SaveAutoExpire(kLiveTVAutoExpire);
     if (!pseudoLiveTVRecording)
-        pginfo->ApplyRecordRecGroupChange(RecordingInfo::kLiveTVRecGroup);
+        pginfo->ApplyRecordRecGroupChange(RecordingInfo::GetSpecialRecgroupID(RecordingInfo::kLiveTVRecGroup));
 
     bool discont = (tvchain->TotalSize() > 0);
     tvchain->AppendNewProgram(pginfo, channel->GetChannelName(),
@@ -4739,7 +4739,7 @@ bool TVRec::SwitchLiveTVRingBuffer(const QString & channum,
     pginfo->MarkAsInUse(true, kRecorderInUseID);
     pginfo->SaveAutoExpire(kLiveTVAutoExpire);
     if (!pseudoLiveTVRecording)
-        pginfo->ApplyRecordRecGroupChange(RecordingInfo::kLiveTVRecGroup);
+        pginfo->ApplyRecordRecGroupChange(RecordingInfo::GetSpecialRecgroupID(RecordingInfo::kLiveTVRecGroup));
     tvchain->AppendNewProgram(pginfo, channel->GetChannelName(),
                               channel->GetInputName(), discont);
 
diff --git a/mythtv/programs/mythbackend/services/dvr.cpp b/mythtv/programs/mythbackend/services/dvr.cpp
index 6866f9aead..206d1e0bd0 100644
--- a/mythtv/programs/mythbackend/services/dvr.cpp
+++ b/mythtv/programs/mythbackend/services/dvr.cpp
@@ -1172,7 +1172,7 @@ uint Dvr::AddRecordSchedule   (
     rule.m_recProfile = sRecProfile;
     rule.m_recGroupID = RecordingInfo::GetRecgroupID(sRecGroup);
     if (rule.m_recGroupID == 0)
-        rule.m_recGroupID = RecordingInfo::kDefaultRecGroup;
+        rule.m_recGroupID = RecordingInfo::GetSpecialRecgroupID(RecordingInfo::kDefaultRecGroup);
     rule.m_storageGroup = sStorageGroup;
     rule.m_playGroup = sPlayGroup;
 
@@ -1334,7 +1334,7 @@ bool Dvr::UpdateRecordSchedule ( uint      nRecordId,
     pRule.m_recProfile = sRecProfile;
     pRule.m_recGroupID = RecordingInfo::GetRecgroupID(sRecGroup);
     if (pRule.m_recGroupID == 0)
-        pRule.m_recGroupID = RecordingInfo::kDefaultRecGroup;
+        pRule.m_recGroupID = RecordingInfo::GetSpecialRecgroupID(RecordingInfo::kDefaultRecGroup);
     pRule.m_storageGroup = sStorageGroup;
     pRule.m_playGroup = sPlayGroup;
 
diff --git a/mythtv/programs/mythbackend/upnpcdstv.cpp b/mythtv/programs/mythbackend/upnpcdstv.cpp
index 19b3bcc4c9..4ef497b6f0 100644
--- a/mythtv/programs/mythbackend/upnpcdstv.cpp
+++ b/mythtv/programs/mythbackend/upnpcdstv.cpp
@@ -1461,9 +1461,9 @@ QString UPnpCDSTv::BuildWhereClause( QStringList clauses,
     // Ignore recordings in the LiveTV and Deleted recgroups
     // We cannot currently prevent LiveTV recordings from being expired while
     // being streamed to a upnp device, so there's no point in listing them.
-    QString liveTVGroup = RecordingInfo::GetRecgroupString(RecordingInfo::kLiveTVRecGroup);
+    QString liveTVGroup = RecordingInfo::GetRecgroupString(RecordingInfo::GetSpecialRecgroupID(RecordingInfo::kLiveTVRecGroup));
     clauses.append(QString("g.recgroup != '%1'").arg(liveTVGroup));
-    QString deletedGroup = RecordingInfo::GetRecgroupString(RecordingInfo::kDeletedRecGroup);
+    QString deletedGroup = RecordingInfo::GetRecgroupString(RecordingInfo::GetSpecialRecgroupID(RecordingInfo::kDeletedRecGroup));
     clauses.append(QString("g.recgroup != '%1'").arg(deletedGroup));
 
     if (tokens["recording"].toInt() > 0)
diff --git a/mythtv/programs/mythfrontend/statusbox.cpp b/mythtv/programs/mythfrontend/statusbox.cpp
index e45016af50..b92fa0577b 100644
--- a/mythtv/programs/mythfrontend/statusbox.cpp
+++ b/mythtv/programs/mythfrontend/statusbox.cpp
@@ -485,7 +485,7 @@ void StatusBox::customEvent(QEvent *event)
                     if ((rec)->GetRecordingGroup() == "LiveTV")
                     {
                         RecordingInfo ri(*rec);
-                        ri.ApplyRecordRecGroupChange(RecordingInfo::kDefaultRecGroup);
+                        ri.ApplyRecordRecGroupChange(RecordingInfo::GetSpecialRecgroupID(RecordingInfo::kDefaultRecGroup));
                         *rec = ri;
                     }
                 }
