diff --git a/mythtv/libs/libmythupnp/upnpcds.cpp b/mythtv/libs/libmythupnp/upnpcds.cpp
index cc86e75..213dd9b 100644
--- a/mythtv/libs/libmythupnp/upnpcds.cpp
+++ b/mythtv/libs/libmythupnp/upnpcds.cpp
@@ -1069,8 +1069,8 @@ QString UPnpCDSExtension::CreateIDString(const QString &requestId,
 
     // For metadata requests the request ID will be the ID of the result, so
     // we don't need to do anything
-    if (currentName == name.toLower() && !currentValue.isEmpty() &&
-        currentValue == value.toLower())
+    if (currentName.toLower() == name.toLower() && !currentValue.isEmpty() &&
+        currentValue.toLower() == value.toLower())
         return requestId;
     else if (currentName == name.toLower() && currentValue.isEmpty())
         return QString("%1=%2").arg(requestId).arg(value);
diff --git a/mythtv/libs/libmythupnp/upnpcdsobjects.cpp b/mythtv/libs/libmythupnp/upnpcdsobjects.cpp
index 11df343..4400f4d 100644
--- a/mythtv/libs/libmythupnp/upnpcdsobjects.cpp
+++ b/mythtv/libs/libmythupnp/upnpcdsobjects.cpp
@@ -305,6 +305,7 @@ void CDSObject::toXml( QTextStream &os, FilterMap &filter,
      *      See UPnP MediaServer, ContentDirectory Service Section 2.3.18, 2013
      */
     bool    bFilter = true;
+    QString sTitle = m_sTitle;
 
     if (filter.contains("*"))
         bFilter = false;
@@ -346,13 +347,16 @@ void CDSObject::toXml( QTextStream &os, FilterMap &filter,
                << "\" >" << endl;
 
             sEndTag = "</item>";
-
+            
+            // if this is a video item, we have filters, and no ProgramTitle filter is specified - ass the program title to sTitle
+            if( bFilter && m_sClass == "object.item.videoItem" && !filter.contains("programTitle"))
+               sTitle = m_sTitle + ":" + HTTPRequest::Encode(GetPropValue("programTitle"));
             break;
         }
         default: break;
     }
 
-    os << "<dc:title>"   << m_sTitle << "</dc:title>" << endl;
+    os << "<dc:title>"   <<  sTitle << "</dc:title>" << endl;
     os << "<upnp:class>" << m_sClass << "</upnp:class>" << endl;
 
     // ----------------------------------------------------------------------
diff --git a/mythtv/libs/libmythupnp/upnpdevice.cpp b/mythtv/libs/libmythupnp/upnpdevice.cpp
index bb23de4..c5ff2b0 100644
--- a/mythtv/libs/libmythupnp/upnpdevice.cpp
+++ b/mythtv/libs/libmythupnp/upnpdevice.cpp
@@ -543,7 +543,7 @@ QString UPnpDeviceDesc::FormatValue(const NameValue& node)
     NameValues::iterator it;
     for (it = node.pAttributes->begin(); it != node.pAttributes->end(); ++it)
     {
-        sAttributes += QString(" %1='%2'").arg((*it).sName).arg((*it).sValue);
+        sAttributes += QString(" %1=\"%2\"").arg((*it).sName).arg((*it).sValue);
     }
     sStr = QString("<%1%2>%3</%1>\n").arg(node.sName).arg(sAttributes).arg(node.sValue);
 
diff --git a/mythtv/libs/libmythupnp/upnphelpers.cpp b/mythtv/libs/libmythupnp/upnphelpers.cpp
index 2865e15..3f8a4b9 100644
--- a/mythtv/libs/libmythupnp/upnphelpers.cpp
+++ b/mythtv/libs/libmythupnp/upnphelpers.cpp
@@ -120,7 +120,7 @@ QString DLNAProfileName(const QString &mimeType, const QSize &resolution,
     // information in the database for each file and can determine this
     // stuff 'properly'
     QString sCountryCode = gCoreContext->GetLocale()->GetCountryCode();
-    bool isNorthAmerica = (sCountryCode == "us" || sCountryCode == "ca" ||
+    bool isNorthAmerica = (sCountryCode.toLower() == "us" || sCountryCode == "ca" ||
                             sCountryCode == "mx"); // North America (NTSC/ATSC)
 
     if (container == "MPEG2-PS")
@@ -199,7 +199,7 @@ QString DLNAProfileName(const QString &mimeType, const QSize &resolution,
     }
     else if (mimeType == "audio/mpeg")
     {
-        sProfileName = "MP3X";
+        sProfileName = "MP3";
     }
     else if (mimeType == "audio/x-ms-wma")
     {
@@ -261,9 +261,9 @@ QString DLNAFourthField(UPNPProtocol::TransferProtocol protocol,
     //
     QString sProfileName = DLNAProfileName(mimeType, resolution, videoFrameRate,
                                            container, videoCodec, audioCodec);
-    if (!sProfileName.isEmpty())
-        sAdditionalInfoList << QString("DLNA.ORG_PN=%1").arg(sProfileName);
-
+    //Do not output DLNA Profile name - possible to add a DB parameter to enable/disable?
+    //if (!sProfileName.isEmpty())
+    //    sAdditionalInfoList << QString("DLNA.ORG_PN=%1").arg(sProfileName);
     //
     // OP-Param (Operation Parameters)
     //
diff --git a/mythtv/programs/mythbackend/upnpcdstv.cpp b/mythtv/programs/mythbackend/upnpcdstv.cpp
index 3fbc3e2..3c808f8 100644
--- a/mythtv/programs/mythbackend/upnpcdstv.cpp
+++ b/mythtv/programs/mythbackend/upnpcdstv.cpp
@@ -563,7 +563,7 @@ bool UPnpCDSTv::LoadTitles(const UPnpCDSRequest* pRequest,
         int nRecordingID = query.value(2).toInt();
         int nTitleCount = query.value(3).toInt();
 
-         if (nTitleCount > 1)
+         if (nTitleCount >= 1)
          {
             // TODO Album or plain old container?
             CDSObject* pContainer = CDSObject::CreateAlbum( CreateIDString(sRequestId, "Title", sTitle),
@@ -624,7 +624,7 @@ bool UPnpCDSTv::LoadDates(const UPnpCDSRequest* pRequest,
     MSqlQuery query(MSqlQuery::InitCon(MSqlQuery::kDedicatedConnection));
 
     QString sql = "SELECT SQL_CALC_FOUND_ROWS "
-                  "r.starttime, COUNT(r.recordedid) "
+                  "CONVERT_TZ(r.starttime, 'UTC', 'SYSTEM'), COUNT(r.recordedid) "
                   "FROM recorded r "
                   "LEFT JOIN recgroups g ON g.recgroup=r.recgroup "
                   "%1 " // WHERE clauses
