--- a/libupnpp/control/mediarenderer.cxx
+++ b/libupnpp/control/mediarenderer.cxx
@@ -31,6 +31,7 @@
 
 using namespace std;
 using namespace std::placeholders;
+using namespace UPnPP;
 
 namespace UPnPClient {
 
@@ -89,15 +90,17 @@
     return ohpr() ? true : false;
 }
 
-
 RDCH MediaRenderer::rdc() 
 {
+    if (desc() == 0)
+        return RDCH();
+
     auto rdcl = m_rdc.lock();
     if (rdcl)
         return rdcl;
-    for (auto it = m_desc.services.begin(); it != m_desc.services.end(); it++) {
+    for (auto it = desc()->services.begin();it != desc()->services.end();it++) {
         if (RenderingControl::isRDCService(it->serviceType)) {
-            rdcl = RDCH(new RenderingControl(m_desc, *it));
+            rdcl = RDCH(new RenderingControl(*desc(), *it));
             break;
         }
     }
@@ -112,9 +115,9 @@
     auto avtl = m_avt.lock();
     if (avtl)
         return avtl;
-    for (auto it = m_desc.services.begin(); it != m_desc.services.end(); it++) {
+    for (auto it = desc()->services.begin();it != desc()->services.end();it++) {
         if (AVTransport::isAVTService(it->serviceType)) {
-            avtl = AVTH(new AVTransport(m_desc, *it));
+            avtl = AVTH(new AVTransport(*desc(), *it));
             break;
         }
     }
@@ -129,9 +132,9 @@
     auto ohprl = m_ohpr.lock();
     if (ohprl)
         return ohprl;
-    for (auto it = m_desc.services.begin(); it != m_desc.services.end(); it++) {
+    for (auto it = desc()->services.begin();it != desc()->services.end();it++) {
         if (OHProduct::isOHPrService(it->serviceType)) {
-            ohprl = OHPRH(new OHProduct(m_desc, *it));
+            ohprl = OHPRH(new OHProduct(*desc(), *it));
             break;
         }
     }
@@ -146,9 +149,9 @@
     auto ohpll = m_ohpl.lock();
     if (ohpll)
         return ohpll;
-    for (auto it = m_desc.services.begin(); it != m_desc.services.end(); it++) {
+    for (auto it = desc()->services.begin();it != desc()->services.end();it++) {
         if (OHPlaylist::isOHPlService(it->serviceType)) {
-            ohpll = OHPLH(new OHPlaylist(m_desc, *it));
+            ohpll = OHPLH(new OHPlaylist(*desc(), *it));
             break;
         }
     }
@@ -163,9 +166,9 @@
     auto ohtml = m_ohtm.lock();
     if (ohtml)
         return ohtml;
-    for (auto it = m_desc.services.begin(); it != m_desc.services.end(); it++) {
+    for (auto it = desc()->services.begin();it != desc()->services.end();it++) {
         if (OHTime::isOHTMService(it->serviceType)) {
-            ohtml = OHTMH(new OHTime(m_desc, *it));
+            ohtml = OHTMH(new OHTime(*desc(), *it));
             break;
         }
     }
@@ -180,9 +183,9 @@
     auto ohvll = m_ohvl.lock();
     if (ohvll)
         return ohvll;
-    for (auto it = m_desc.services.begin(); it != m_desc.services.end(); it++) {
+    for (auto it = desc()->services.begin();it != desc()->services.end();it++) {
         if (OHVolume::isOHVLService(it->serviceType)) {
-            ohvll = OHVLH(new OHVolume(m_desc, *it));
+            ohvll = OHVLH(new OHVolume(*desc(), *it));
             break;
         }
     }