--- a/inc/upnp/contentdirectory.h
+++ b/inc/upnp/contentdirectory.h
@@ -39,6 +39,7 @@ public:
     virtual void setError(Upnp_Action_Request* Request, int Error);
 private:
     cMediaDatabase*             mMediaDatabase;
+    cCharSetConv*               mconv;
     void Action();
     int getSearchCapabilities(Upnp_Action_Request* Request);
     int getSortCapabilities(Upnp_Action_Request* Request);
--- a/upnp/contentdirectory.cpp
+++ b/upnp/contentdirectory.cpp
@@ -14,9 +14,13 @@
 cContentDirectory::cContentDirectory(UpnpDevice_Handle DeviceHandle, cMediaDatabase* MediaDatabase)
 : cUpnpService(DeviceHandle) {
     this->mMediaDatabase = MediaDatabase;
+    this->mconv = new cCharSetConv((cCharSetConv::SystemCharacterTable() ?
+                                          cCharSetConv::SystemCharacterTable() : "UTF-8"), "UTF-8");
 }
 
-cContentDirectory::~cContentDirectory() {}
+cContentDirectory::~cContentDirectory() {
+    delete this->mconv;
+}
 
 int cContentDirectory::subscribe(Upnp_Subscription_Request* Request){
     IXML_Document* PropertySet = NULL;
@@ -149,8 +153,15 @@ int cContentDirectory::browse(Upnp_Actio
         return Request->ErrCode;
     }
 
+    const char *utf8Result = this->mconv->Convert(ResultSet->mResult);
+    if(!utf8Result){
+        ERROR("Converting XML data failed");
+        this->setError(Request, UPNP_SOAP_E_ACTION_FAILED);
+        return Request->ErrCode;
+    }
+
     char* escapedResult = NULL;
-    escapeXMLCharacters(ResultSet->mResult, &escapedResult);
+    escapeXMLCharacters(utf8Result, &escapedResult);
 
     if(!escapedResult){
         ERROR("Escaping XML data failed");
