diff --git a/debug-tools/dump-local-prefix.cc b/debug-tools/dump-local-prefix.cc
deleted file mode 100644
index d5d4664..0000000
--- a/debug-tools/dump-local-prefix.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/**
- * Copyright (C) 2013 Regents of the University of California.
- * @author: Yingdi Yu <yingdi@cs.ucla.edu>
- * See COPYING for copyright and distribution information.
- */
-
-#include "common.hpp"
-#include <ndn-cxx/security/key-chain.hpp>
-#include <ndn-cxx/face.hpp>
-
-using namespace ndn;
-
-int
-main()
-{
-  Name root("/ndn");
-
-  KeyChain keyChain("sqlite3", "file");
-
-  if(!keyChain.doesIdentityExist(root))
-    return 1;
-
-  Face face;
-
-  Name name("/local/ndn/prefix");
-  name.appendVersion().appendSegment(0);
-
-  shared_ptr<Data> data = make_shared<Data>(name);
-  std::string prefix("/ndn/test");
-  data->setContent(reinterpret_cast<const uint8_t*>(prefix.c_str()), prefix.size());
-  keyChain.signByIdentity(*data, root);
-
-  face.put(*data);
-
-  face.getIoService().run();
-}
diff --git a/src/controller.cpp b/src/controller.cpp
index 483bc61..313c673 100644
--- a/src/controller.cpp
+++ b/src/controller.cpp
@@ -419,12 +419,37 @@
 void
 Controller::onLocalPrefix(const Interest& interest, Data& data)
 {
-  QString localPrefixStr = QString::fromUtf8
-    (reinterpret_cast<const char*>(data.getContent().value()), data.getContent().value_size())
-    .trimmed();
+  QString localPrefixStr("/private/local");
+  Name prefix;
 
-  Name localPrefix(localPrefixStr.toStdString());
-  if (m_localPrefix.empty() || m_localPrefix != localPrefix) {
+  Block contentBlock = data.getContent();
+  try {
+    contentBlock.parse();
+
+    for (Block::element_const_iterator it = contentBlock.elements_begin();
+         it != contentBlock.elements_end(); it++) {
+      Name candidate;
+      candidate.wireDecode(*it);
+      if (candidate.isPrefixOf(m_identity)) {
+        prefix = candidate;
+        break;
+      }
+    }
+
+    if (prefix.empty()) {
+      if (contentBlock.elements_begin() != contentBlock.elements_end())
+        prefix.wireDecode(*contentBlock.elements_begin());
+      else
+        prefix = Name("/private/local");
+    }
+
+    localPrefixStr = QString::fromStdString(prefix.toUri());
+  }
+  catch (Block::Error& e) {
+    prefix = Name("/private/local");
+  }
+
+  if (m_localPrefix.empty() || m_localPrefix != prefix) {
     emit localPrefixUpdated(localPrefixStr);
   }
 }
@@ -657,7 +682,7 @@
 Controller::onUpdateLocalPrefixAction()
 {
   // Name interestName();
-  Interest interest("/local/ndn/prefix");
+  Interest interest("/localhop/ndn-autoconf/routable-prefixes");
   interest.setInterestLifetime(time::milliseconds(1000));
   interest.setMustBeFresh(true);
 
