Index: libs/libmythtv/programinfo.h
===================================================================
--- libs/libmythtv/programinfo.h	(revision 18466)
+++ libs/libmythtv/programinfo.h	(working copy)
@@ -228,6 +228,7 @@
     void ApplyRecordRecTitleChange(const QString &newTitle,
                                    const QString &newSubtitle);
     void ApplyTranscoderProfileChange(QString);
+    void ApplyTranscoderProfileChangeById(int);
 
     // Quick gets
     bool SetRecordBasename(QString basename);
Index: libs/libmythtv/programinfo.cpp
===================================================================
--- libs/libmythtv/programinfo.cpp	(revision 18466)
+++ libs/libmythtv/programinfo.cpp	(working copy)
@@ -1263,6 +1263,27 @@
     subtitle = newSubtitle;
 }
 
+/* \fn ProgramInfo::ApplyTranscoderProfileChangeById(int id)
+ * \brief Sets the transcoder profile for a recording
+ * \param profileid is the 'id' field from recordingprofiles table.
+ */
+void ProgramInfo::ApplyTranscoderProfileChangeById(int id)
+{
+    MSqlQuery query(MSqlQuery::InitCon());
+
+    query.prepare("UPDATE recorded "
+            "SET transcoder = :PROFILEID "
+            "WHERE chanid = :CHANID "
+            "AND starttime = :START");
+    query.bindValue(":PROFILEID",  id);
+    query.bindValue(":CHANID",  chanid);
+    query.bindValue(":START",  recstartts);
+
+    if (!query.exec())
+        MythDB::DBError(LOC + "unable to update transcoder "
+                "in recorded table", query);
+}
+
 /* \fn ProgramInfo::ApplyTranscoderProfileChange(QString profile)
  * \brief Sets the transcoder profile for a recording
  * \param profile Descriptive name of the profile. ie: Autodetect
Index: programs/mythfrontend/playbackbox.cpp
===================================================================
--- programs/mythfrontend/playbackbox.cpp	(revision 18466)
+++ programs/mythfrontend/playbackbox.cpp	(working copy)
@@ -52,6 +52,7 @@
 #include "util.h"
 #include "x11colors.h"
 #include "mythuihelper.h"
+#include "libmythdb/mythdb.h"
 
 #define LOC QString("PlaybackBox: ")
 #define LOC_ERR QString("PlaybackBox Error: ")
@@ -3362,6 +3363,9 @@
     if (!curitem)
         return;
 
+    int buttonCount = kDialogCodeListStart;
+    m_transcodeProfileMap.clear();
+
     popup = new MythPopupBox(gContext->GetMainWindow(), drawPopupSolid,
                              drawPopupFgColor, drawPopupBgColor,
                              drawPopupSelColor, "transcode popup");
@@ -3370,27 +3374,65 @@
 
     QAbstractButton *defaultButton;
 
-    defaultButton = popup->addButton(tr("Default"), this,
-                                 SLOT(doBeginTranscoding()));
-    popup->addButton(tr("Autodetect"), this,
-                     SLOT(changeProfileAndTranscodeAuto()));
-    popup->addButton(tr("High Quality"), this,
-                     SLOT(changeProfileAndTranscodeHigh()));
-    popup->addButton(tr("Medium Quality"), this,
-                     SLOT(changeProfileAndTranscodeMedium()));
-    popup->addButton(tr("Low Quality"), this,
-                     SLOT(changeProfileAndTranscodeLow()));
+    m_transcodeProfileMap.insert(buttonCount++, -1);
+    defaultButton = popup->addButton( tr("Default") );
 
-    popup->ShowPopup(this, SLOT(PopupDone(int)));
+    m_transcodeProfileMap.insert(buttonCount++, 0);
+    popup->addButton( tr("Autodetect") );
+
+    MSqlQuery query(MSqlQuery::InitCon());
+    query.prepare("SELECT r.name, r.id "
+            "FROM recordingprofiles r, profilegroups p "
+            "WHERE p.name = 'Transcoders' "
+            "AND r.profilegroup = p.id "
+            "AND r.name != 'RTjpeg/MPEG4' "
+            "AND r.name != 'MPEG2' ");
+
+    if (!query.exec())
+    {
+        MythDB::DBError(LOC + "unable to query transcoders", query);
+        return;
+    }
+
+    while (query.next())
+    {
+        QString transcoder_name = query.value(0).toString();
+        int transcoder_id = query.value(1).toInt();
+
+        // Translatable strings for known profiles
+        m_transcodeProfileMap.insert(buttonCount++, transcoder_id);
+        if (transcoder_name == "High Quality")
+            popup->addButton( tr("High Quality") );
+        else if (transcoder_name == "Medium Quality")
+            popup->addButton( tr("Medium Quality") );
+        else if (transcoder_name == "Low Quality")
+            popup->addButton( tr("Low Quality") );
+        else
+            popup->addButton( transcoder_name );
+    }
+
+    popup->ShowPopup(this, SLOT(transcodePopupDone(int)));
     defaultButton->setFocus();
 
     expectingPopup = true;
 }
 
-void PlaybackBox::changeProfileAndTranscode(QString profile)
+void PlaybackBox::transcodePopupDone(int id)
 {
-    curitem->ApplyTranscoderProfileChange(profile);
-    doBeginTranscoding();
+    if ((MythDialog::Rejected == id) && expectingPopup)
+    {
+        cancelPopup();
+        return;
+    }
+
+    if (m_transcodeProfileMap.contains(id))
+    {
+        if (m_transcodeProfileMap.value(id) >= 0)
+        {
+            curitem->ApplyTranscoderProfileChangeById(m_transcodeProfileMap.value(id));
+        }
+        doBeginTranscoding();
+    }
 }
 
 void PlaybackBox::showActionPopup(ProgramInfo *program)
Index: programs/mythfrontend/playbackbox.h
===================================================================
--- programs/mythfrontend/playbackbox.h	(revision 18466)
+++ programs/mythfrontend/playbackbox.h	(working copy)
@@ -167,15 +167,6 @@
     void showRecordingPopup();
     void showJobPopup();
     void showTranscodingProfiles();
-    void changeProfileAndTranscode(QString profile);
-    void changeProfileAndTranscodeAuto()
-             { changeProfileAndTranscode("Autodetect"); }
-    void changeProfileAndTranscodeHigh()
-             { changeProfileAndTranscode("High Quality"); }
-    void changeProfileAndTranscodeMedium()
-             { changeProfileAndTranscode("Medium Quality"); }
-    void changeProfileAndTranscodeLow()
-             { changeProfileAndTranscode("Low Quality"); }
     void showStoragePopup();
     void showPlaylistPopup();
     void showPlaylistJobPopup();
@@ -207,6 +198,7 @@
     void togglePreserveEpisode(bool turnOn);
 
     void PopupDone(int r);
+    void transcodePopupDone(int id);
     void toggleView(ViewMask itemMask, bool setOn);
     void toggleTitleView(bool setOn)     { toggleView(VIEW_TITLES, setOn); }
     void toggleCategoryView(bool setOn)  { toggleView(VIEW_CATEGORIES, setOn); }
@@ -510,6 +502,9 @@
     Q3ValueList<QString> networkControlCommands;
     bool                underNetworkControl;
     
+    // Transcoding Profiles Variables//////////////////////////////////////////
+    QMap<int,int>       m_transcodeProfileMap;
+
     TV                  *m_player;
 };
 
