diff --git a/src/contact-manager.cpp b/src/contact-manager.cpp
index 4b50ef4..7c8c62c 100644
--- a/src/contact-manager.cpp
+++ b/src/contact-manager.cpp
@@ -141,7 +141,7 @@
   interest.setMustBeFresh(true);
 
   OnDataValidated onValidated = bind(&ContactManager::onDnsCollectEndorseValidated, this, _1, identity);
-  OnDataValidationFailed onValidationFailed = bind(&ContactManager::onDnsCollectEndorseValidationFailed, this, _1, identity);
+  OnDataValidationFailed onValidationFailed = bind(&ContactManager::onDnsCollectEndorseValidationFailed, this, _1, _2, identity);
   TimeoutNotify timeoutNotify = bind(&ContactManager::onDnsCollectEndorseTimeoutNotify, this, _1, identity);
 
   sendInterest(interest, onValidated, onValidationFailed, timeoutNotify, 0);
@@ -264,6 +264,7 @@
 
 void
 ContactManager::onDnsSelfEndorseCertValidationFailed(const shared_ptr<const Data>& data, 
+                                                     const string& failInfo,
                                                      const Name& identity)
 {
   // If we cannot validate the Self-Endorse-Certificate, we may retry or fetch id-cert,
@@ -296,6 +297,7 @@
 
 void
 ContactManager::onDnsCollectEndorseValidationFailed(const shared_ptr<const Data>& data, 
+                                                    const string& failInfo,
                                                     const Name& identity)
 {
   prepareEndorseInfo(identity);
@@ -361,7 +363,7 @@
         interest.setInterestLifetime(1000);
         
         OnDataValidated onValidated = bind(&ContactManager::onDnsEndorseeValidated, this, _1);
-        OnDataValidationFailed onValidationFailed = bind(&ContactManager::onDnsEndorseeValidationFailed, this, _1);
+        OnDataValidationFailed onValidationFailed = bind(&ContactManager::onDnsEndorseeValidationFailed, this, _1, _2);
         TimeoutNotify timeoutNotify = bind(&ContactManager::onDnsEndorseeTimeoutNotify, this, _1);
         
         sendInterest(interest, onValidated, onValidationFailed, timeoutNotify, 0);
@@ -382,7 +384,7 @@
 }
 
 void
-ContactManager::onDnsEndorseeValidationFailed(const shared_ptr<const Data>& data)
+ContactManager::onDnsEndorseeValidationFailed(const shared_ptr<const Data>& data, const string& failInfo)
 {
   decreaseCollectStatus();
 }
@@ -438,7 +440,7 @@
 }
 
 void
-ContactManager::onIdentityCertValidationFailed(const shared_ptr<const Data>& data)
+ContactManager::onIdentityCertValidationFailed(const shared_ptr<const Data>& data, const string& failInfo)
 {
   _LOG_DEBUG("ContactManager::onIdentityCertValidationFailed " << data->getName());
   decreaseIdCertCount();
@@ -674,7 +676,7 @@
   interest.setMustBeFresh(true);
 
   OnDataValidated onValidated = bind(&ContactManager::onDnsSelfEndorseCertValidated, this, _1, identityName);
-  OnDataValidationFailed onValidationFailed = bind(&ContactManager::onDnsSelfEndorseCertValidationFailed, this, _1, identityName);
+  OnDataValidationFailed onValidationFailed = bind(&ContactManager::onDnsSelfEndorseCertValidationFailed, this, _1, _2, identityName);
   TimeoutNotify timeoutNotify = bind(&ContactManager::onDnsSelfEndorseCertTimeoutNotify, this, _1, identityName);
 
   sendInterest(interest, onValidated, onValidationFailed, timeoutNotify, 0);
@@ -813,7 +815,7 @@
       interest.setMustBeFresh(true);
       
       OnDataValidated onValidated = bind(&ContactManager::onIdentityCertValidated, this, _1);
-      OnDataValidationFailed onValidationFailed = bind(&ContactManager::onIdentityCertValidationFailed, this, _1);
+      OnDataValidationFailed onValidationFailed = bind(&ContactManager::onIdentityCertValidationFailed, this, _1, _2);
       TimeoutNotify timeoutNotify = bind(&ContactManager::onIdentityCertTimeoutNotify, this, _1);
 
       sendInterest(interest, onValidated, onValidationFailed, timeoutNotify, 0);
diff --git a/src/contact-manager.h b/src/contact-manager.h
index fa28a9e..c370bd7 100644
--- a/src/contact-manager.h
+++ b/src/contact-manager.h
@@ -76,6 +76,7 @@
 
   void
   onDnsSelfEndorseCertValidationFailed(const ndn::shared_ptr<const ndn::Data>& selfEndorseCertificate, 
+                                       const std::string& failInfo,
                                        const ndn::Name& identity);
 
   void
@@ -88,7 +89,8 @@
                                const ndn::Name& identity);
 
   void
-  onDnsCollectEndorseValidationFailed(const ndn::shared_ptr<const ndn::Data>& data, 
+  onDnsCollectEndorseValidationFailed(const ndn::shared_ptr<const ndn::Data>& data,
+                                      const std::string& failInfo,
                                       const ndn::Name& identity);
 
   void
@@ -116,7 +118,8 @@
   onDnsEndorseeValidated(const ndn::shared_ptr<const ndn::Data>& data);
 
   void
-  onDnsEndorseeValidationFailed(const ndn::shared_ptr<const ndn::Data>& data);
+  onDnsEndorseeValidationFailed(const ndn::shared_ptr<const ndn::Data>& data,
+                                const std::string& failInfo);
 
   void
   onDnsEndorseeTimeoutNotify(const ndn::Interest& interest);
@@ -132,7 +135,8 @@
   onIdentityCertValidated(const ndn::shared_ptr<const ndn::Data>& data);
   
   void
-  onIdentityCertValidationFailed(const ndn::shared_ptr<const ndn::Data>& data);
+  onIdentityCertValidationFailed(const ndn::shared_ptr<const ndn::Data>& data,
+                                 const std::string& failInfo);
 
   void
   onIdentityCertTimeoutNotify(const ndn::Interest& interest);
diff --git a/src/digest-tree-scene.cpp b/src/digest-tree-scene.cpp
index 14f95bd..b885714 100644
--- a/src/digest-tree-scene.cpp
+++ b/src/digest-tree-scene.cpp
@@ -38,14 +38,18 @@
   bool rePlot = false; 
   for (int i = 0; i < n; i++) 
   {
-    Roster_iterator it = m_roster.find(v[i].prefix.c_str());
+    QString routablePrefix(v[i].prefix.c_str());
+    QString prefix = trimRoutablePrefix(routablePrefix);
+
+    Roster_iterator it = m_roster.find(prefix);
     if (it == m_roster.end()) 
     {
+      // std::cout << "processUpdate v[" << i << "]: " << prefix.toStdString() << std::endl;
       rePlot = true; 
       DisplayUserPtr p(new DisplayUser());
       time_t tempTime = time(NULL) - FRESHNESS + 1;
       p->setReceived(tempTime);
-      p->setPrefix(v[i].prefix.c_str());
+      p->setPrefix(prefix);
       p->setSeq(v[i].high);
       m_roster.insert(p->getPrefix(), p);
     }
@@ -64,7 +68,10 @@
   {
     for (int i = 0; i < n; i++) 
     {
-      Roster_iterator it = m_roster.find(v[i].prefix.c_str());
+      QString routablePrefix(v[i].prefix.c_str());
+      QString prefix = trimRoutablePrefix(routablePrefix);
+    
+      Roster_iterator it = m_roster.find(prefix);
       if (it != m_roster.end()) {
         DisplayUserPtr p = it.value();
         QGraphicsTextItem *item = p->getSeqTextItem();
@@ -104,17 +111,19 @@
 }
 
 void
-DigestTreeScene::msgReceived(QString prefix, QString nick)
+DigestTreeScene::msgReceived(QString routablePrefix, QString nick)
 {
+  QString prefix = trimRoutablePrefix(routablePrefix);
   Roster_iterator it = m_roster.find(prefix);
+  // std::cout << "msgReceived prefix: " << prefix.toStdString() << std::endl;
   if (it != m_roster.end()) 
     {
-      std::cout << "Updating for prefix = " << prefix.toStdString() << " nick = " << nick.toStdString() << std::endl;
+      // std::cout << "Updating for prefix = " << prefix.toStdString() << " nick = " << nick.toStdString() << std::endl;
       DisplayUserPtr p = it.value();
       p->setReceived(time(NULL));
       if (nick != p->getNick()) 
         {
-          std::cout << "old nick = " << p->getNick().toStdString() << std::endl;
+          // std::cout << "old nick = " << p->getNick().toStdString() << std::endl;
           p->setNick(nick);
           QGraphicsTextItem *nickItem = p->getNickTextItem();
           QGraphicsRectItem *nickRectItem = p->getNickRectItem();
@@ -325,6 +334,33 @@
     seqTextItem->setPos(innerBR.x() + (innerBR.width() - textBR.width())/2, innerBR.y() + (innerBR.height() - textBR.height())/2);
 }
 
+QString 
+DigestTreeScene::trimRoutablePrefix(QString prefix)
+{
+  bool encaped = false;
+  ndn::Name prefixName(prefix.toStdString());
+
+  ndn::Name::const_iterator it  = prefixName.begin();
+  ndn::Name::const_iterator end = prefixName.end();
+  size_t offset = 0;
+
+  for(; it != end; it++, offset++)
+    {
+      if(it->toEscapedString() == "%F0.")
+        {
+          encaped = true;
+          break;
+        }
+    }
+
+  if(!encaped)
+    return prefix;
+  else
+    {
+      return QString(prefixName.getSubName(offset+1).toUri().c_str());
+    }
+}
+
 #if WAF
 #include "digest-tree-scene.moc"
 #include "digest-tree-scene.cpp.moc"
diff --git a/src/digest-tree-scene.h b/src/digest-tree-scene.h
index 6ac6b1c..bab1139 100644
--- a/src/digest-tree-scene.h
+++ b/src/digest-tree-scene.h
@@ -65,6 +65,8 @@
   void plotNode(const std::vector<TreeLayout::Coordinate> &v, QString digest, int nodeSize);
   void reDrawNode(DisplayUserPtr p, QColor rimColor);
 
+  QString trimRoutablePrefix(QString prefix);
+
 private:
   Roster m_roster;
   QGraphicsTextItem *m_rootDigest; 
