Index: libs/libmythtv/programinfo.h
===================================================================
--- libs/libmythtv/programinfo.h	(revision 7413)
+++ libs/libmythtv/programinfo.h	(working copy)
@@ -145,6 +145,8 @@
     void FinishedRecording(bool prematurestop);
     void UpdateRecordingEnd(void);
     void ApplyRecordRecGroupChange(const QString &newrecgroup);
+    void ApplyRecordRecTitleChange(const QString &newTitle,
+                                   const QString &newSubtitle);
 
     // Quick gets
     QString CreateRecordBasename(const QString &ext) const;
Index: libs/libmythtv/programinfo.cpp
===================================================================
--- libs/libmythtv/programinfo.cpp	(revision 7413)
+++ libs/libmythtv/programinfo.cpp	(working copy)
@@ -987,6 +987,33 @@
     recgroup = newrecgroup;
 }
 
+/** \fn ProgramInfo::ApplyRecordRecTitleChange(const QString &newTitle, const QString &newSubtitle)
+ *  \brief Sets the recording title and subtitle, both in this ProgramInfo
+ *         and in the database.
+ *  \param newTitle New recording title.
+ *  \param newSubtitle New recording subtitle
+ */
+void ProgramInfo::ApplyRecordRecTitleChange(const QString &newTitle, const QString &newSubtitle)
+{
+    MSqlQuery query(MSqlQuery::InitCon());
+
+    query.prepare("UPDATE recorded"
+                  " SET title = :TITLE, subtitle = :SUBTITLE"
+                  " WHERE chanid = :CHANID"
+                  " AND starttime = :START ;");
+    query.bindValue(":TITLE", newTitle.utf8());
+    query.bindValue(":SUBTITLE", newSubtitle.utf8());
+    query.bindValue(":CHANID", chanid);
+    query.bindValue(":START", recstartts.toString("yyyyMMddhhmm00"));
+
+    if (!query.exec())
+        MythContext::DBError("RecTitle update", query);
+
+    title = newTitle;
+    subtitle = newSubtitle;
+}
+
+
 /** \fn ProgramInfo::ToggleRecord()
  *  \brief Cycles through recording types.
  *
Index: programs/mythfrontend/playbackbox.cpp
===================================================================
--- programs/mythfrontend/playbackbox.cpp	(revision 7413)
+++ programs/mythfrontend/playbackbox.cpp	(working copy)
@@ -2381,6 +2381,9 @@
     QButton *changeButton = popup->addButton(tr("Change Recording Group"), this,
                      SLOT(showRecGroupChanger()));
 
+    popup->addButton(tr("Change Recording Title"), this,
+                     SLOT(showRecTitleChanger()));
+
     popup->addButton(tr("Edit Recording Schedule"), this,
                      SLOT(doEditScheduled()));
     
@@ -3995,6 +3998,43 @@
     closeRecGroupPopup(result == MythDialog::Accepted);
 }
 
+void PlaybackBox::showRecTitleChanger()
+{
+    if (!expectingPopup)
+        return;
+
+    cancelPopup();
+
+    initRecGroupPopup(tr("Change Recording Title"), "showRecTitleChanger");
+
+    recGroupPopup->addLabel(tr("Title"));
+    recGroupLineEdit = new MythLineEdit(recGroupPopup);
+    recGroupLineEdit->setText(delitem->title);
+    recGroupLineEdit->selectAll();
+    recGroupPopup->addWidget(recGroupLineEdit);
+
+    recGroupPopup->addLabel(tr("Subtitle"));
+    recGroupLineEdit1 = new MythLineEdit(recGroupPopup);
+    recGroupLineEdit1->setText(delitem->subtitle);
+    recGroupLineEdit1->selectAll();
+    recGroupPopup->addWidget(recGroupLineEdit1);
+
+    recGroupLineEdit->setFocus();
+
+    connect(recGroupLineEdit, SIGNAL(returnPressed()), recGroupPopup, SLOT(accept()));
+    connect(recGroupLineEdit1, SIGNAL(returnPressed()), recGroupPopup, SLOT(accept()));
+
+    int result = recGroupPopup->ExecPopup();
+
+    if (result == MythDialog::Accepted)
+        setRecTitle();
+
+    closeRecGroupPopup(result == MythDialog::Accepted);
+
+    delete delitem;
+    delitem = NULL;
+}
+
 void PlaybackBox::setRecGroup(void)
 {
     QString newRecGroup = recGroupLineEdit->text();
@@ -4022,6 +4062,25 @@
     }
 }
 
+void PlaybackBox::setRecTitle()
+{
+    QString newRecTitle = recGroupLineEdit->text();
+    QString newRecSubtitle = recGroupLineEdit1->text();
+
+    if (newRecTitle == "")
+        return;
+
+    delitem->ApplyRecordRecTitleChange(newRecTitle, newRecSubtitle);
+
+    inTitle = gContext->GetNumSetting("PlaybackBoxStartInTitle", 0);
+    titleIndex = 0;
+    progIndex = 0;
+
+    connected = FillList();
+    skipUpdate = false;
+    update(fullRect);
+}
+
 void PlaybackBox::recGroupChangerListBoxChanged(void)
 {
     if (!recGroupPopup || !recGroupListBox || !recGroupLineEdit)
Index: programs/mythfrontend/playbackbox.h
===================================================================
--- programs/mythfrontend/playbackbox.h	(revision 7413)
+++ programs/mythfrontend/playbackbox.h	(working copy)
@@ -56,6 +56,7 @@
     void showMenu();
     void showActionsSelected();
     void showRecGroupChanger();
+    void showRecTitleChanger();
     void showRecGroupChooser();
     void showRecGroupPasswordChanger();
     void showPlayFromPopup();
@@ -99,6 +100,7 @@
     void recGroupChangerListBoxChanged(void);
     void recGroupChooserListBoxChanged(void);
     void setRecGroup(void);
+    void setRecTitle(void);
     void setRecGroupPassword();
     void recGroupOldPasswordChanged(const QString &newText);
 
@@ -293,6 +295,7 @@
     MythPopupBox *recGroupPopup;
     MythListBox *recGroupListBox;
     MythLineEdit *recGroupLineEdit;
+    MythLineEdit *recGroupLineEdit1;
     MythLineEdit *recGroupOldPassword;
     MythLineEdit *recGroupNewPassword;
     MythPushButton *recGroupOkButton;
