diff --git a/src/daemon/name-server.cpp b/src/daemon/name-server.cpp
index f796e13..7411697 100644
--- a/src/daemon/name-server.cpp
+++ b/src/daemon/name-server.cpp
@@ -95,7 +95,8 @@
 
   NDNS_LOG_TRACE("query record: " << interest.getName());
 
-  if (m_dbMgr.find(rrset)) {
+  if (m_dbMgr.find(rrset) &&
+      (re.version.empty() || re.version == rrset.getVersion())) {
     // find the record: NDNS-RESP, NDNS-AUTH, NDNS-RAW, or NDNS-NACK
     shared_ptr<Data> answer = make_shared<Data>(rrset.getData());
     NDNS_LOG_TRACE("answer query with existing Data: " << answer->getName());
diff --git a/src/ndns-label.cpp b/src/ndns-label.cpp
index 585509c..1b1cc80 100644
--- a/src/ndns-label.cpp
+++ b/src/ndns-label.cpp
@@ -18,6 +18,7 @@
  */
 
 #include "ndns-label.hpp"
+
 #include <ndn-cxx/data.hpp>
 #include <ndn-cxx/interest.hpp>
 
@@ -59,7 +60,7 @@
           const Name& hint, const Name& zone,
           MatchResult& result)
 {
-  // [hint / FHLabel] / zoneName / <Update>|rrLabel / UPDATE|rrType
+  // [hint / FHLabel] / zoneName / <Update>|rrLabel / UPDATE|rrType / [VERSION]
 
   const Name& name = interest.getName();
   size_t skip = calculateSkip(name, hint, zone);
@@ -67,9 +68,17 @@
   if (name.size() - skip < 1)
     return false;
 
-  result.rrType = name.get(-1);
-  result.rrLabel = name.getSubName(skip, std::max<size_t>(0, name.size() - skip - 1));
-  result.version = name::Component();
+  size_t offset = 1;
+  if (name.get(-offset).isVersion()) {
+    result.version = name.get(-offset);
+    ++offset;
+  }
+  else {
+    result.version = name::Component();
+  }
+
+  result.rrType = name.get(-offset);
+  result.rrLabel = name.getSubName(skip, std::max<size_t>(0, name.size() - skip - offset));
 
   return true;
 }
diff --git a/tests/main.cpp b/tests/main.cpp
index 7d4602b..f9bf6b6 100644
--- a/tests/main.cpp
+++ b/tests/main.cpp
@@ -20,27 +20,52 @@
 #define BOOST_TEST_MAIN 1
 #define BOOST_TEST_DYN_LINK 1
 
+#include "config.hpp"
+#include "logger.hpp"
+
 #include <boost/version.hpp>
 #include <boost/test/unit_test.hpp>
 #include <boost/noncopyable.hpp>
+#include <boost/filesystem.hpp>
 
-#include "logger.hpp"
-#include "config.hpp"
+#include <fstream>
+#include <iostream>
 
 namespace ndn {
 namespace ndns {
 namespace tests {
 
-class UnitTestsLogging : boost::noncopyable
+class GlobalConfigurationFixture : boost::noncopyable
 {
 public:
-  UnitTestsLogging()
+  GlobalConfigurationFixture()
   {
     log::init("unit-tests.log4cxx");
+
+    if (std::getenv("HOME"))
+      m_home = std::getenv("HOME");
+
+    boost::filesystem::path dir(TEST_CONFIG_PATH);
+    dir /= "test-home";
+    setenv("HOME", dir.generic_string().c_str(), 1);
+    boost::filesystem::create_directories(dir);
+    std::ofstream clientConf((dir / ".ndn" / "client.conf").generic_string().c_str());
+    clientConf << "pib=pib-sqlite3\n"
+               << "tpm=tpm-file" << std::endl;
   }
+
+  ~GlobalConfigurationFixture()
+  {
+    if (!m_home.empty()) {
+      setenv("HOME", m_home.c_str(), 1);
+    }
+  }
+
+private:
+  std::string m_home;
 };
 
-BOOST_GLOBAL_FIXTURE(UnitTestsLogging)
+BOOST_GLOBAL_FIXTURE(GlobalConfigurationFixture)
 #if (BOOST_VERSION >= 105900)
 ;
 #endif // BOOST_VERSION >= 105900
diff --git a/tests/unit/daemon/name-server.cpp b/tests/unit/daemon/name-server.cpp
index 32f911c..9e7a926 100644
--- a/tests/unit/daemon/name-server.cpp
+++ b/tests/unit/daemon/name-server.cpp
@@ -130,6 +130,34 @@
   run();
 
   BOOST_CHECK_EQUAL(nDataBack, 2);
+
+  // explicit interest with correct version
+  face->receive(Interest("/test19/KEY/dsk-1/ID-CERT/%FDd"));
+
+  face->onSendData.connectSingleShot([&] (const Data& data) {
+    ++nDataBack;
+
+    Response resp;
+    BOOST_CHECK_NO_THROW(resp.fromData(hint, zone, data));
+    BOOST_CHECK_EQUAL(resp.getNdnsType(), NDNS_RAW);
+  });
+
+  run();
+  BOOST_CHECK_EQUAL(nDataBack, 3);
+
+  // explicit interest with wrong version
+  face->receive(Interest("/test19/KEY/dsk-1/ID-CERT/%FD010101010"));
+
+  face->onSendData.connectSingleShot([&] (const Data& data) {
+    ++nDataBack;
+
+    Response resp;
+    BOOST_CHECK_NO_THROW(resp.fromData(hint, zone, data));
+    BOOST_CHECK_EQUAL(resp.getNdnsType(), NDNS_NACK);
+  });
+
+  run();
+  BOOST_CHECK_EQUAL(nDataBack, 4);
 }
 
 BOOST_AUTO_TEST_CASE(UpdateReplaceRr)
diff --git a/tests/unit/ndns-label.cpp b/tests/unit/ndns-label.cpp
index cb2e47e..09bb182 100644
--- a/tests/unit/ndns-label.cpp
+++ b/tests/unit/ndns-label.cpp
@@ -42,9 +42,9 @@
   BOOST_CHECK_EQUAL(re.version, name::Component());
 
   BOOST_CHECK_EQUAL(matchName(interest2, hint, zone, re), true);
-  BOOST_CHECK_EQUAL(re.rrLabel, Name("/www/dsk-111/NS"));
-  BOOST_CHECK_EQUAL(re.rrType, name::Component::fromEscapedString("%FD%00"));
-  BOOST_CHECK_EQUAL(re.version, name::Component());
+  BOOST_CHECK_EQUAL(re.rrLabel, Name("/www/dsk-111"));
+  BOOST_CHECK_EQUAL(re.rrType, name::Component("NS"));
+  BOOST_CHECK_EQUAL(re.version, name::Component::fromEscapedString("%FD%00"));
 }
 
 BOOST_AUTO_TEST_CASE(MatchData)
@@ -54,7 +54,6 @@
   Name zone("/net/ndnsim");
 
   Data data1("/att/%F0./net/ndnsim/NDNS/www/dsk-111/NS/%FD%00");
-  Data data2("/att/%F0./net/ndnsim/NDNS/www/dsk-111/NS");
 
   MatchResult re;
   BOOST_CHECK_EQUAL(matchName(data1, hint, zone, re), true);
@@ -62,11 +61,6 @@
   BOOST_CHECK_EQUAL(re.rrType, name::Component("NS"));
   BOOST_REQUIRE_NO_THROW(re.version.toVersion());
   BOOST_CHECK_EQUAL(re.version.toVersion(), 0);
-
-  BOOST_CHECK_EQUAL(matchName(data2, hint, zone, re), true);
-  BOOST_CHECK_EQUAL(re.rrLabel, Name("/www"));
-  BOOST_CHECK_EQUAL(re.rrType, name::Component("dsk-111"));
-  BOOST_REQUIRE_THROW(re.version.toVersion(), ndn::tlv::Error);
 }
 
 BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/wscript b/tests/wscript
index 25708c0..58de95d 100644
--- a/tests/wscript
+++ b/tests/wscript
@@ -31,8 +31,10 @@
         name='unit-tests-main',
         target='unit-tests-main',
         source='main.cpp',
-        defines=['BOOST_TEST_MODULE=NDNS Unit Tests'],
-        use='ndns-objects BOOST')
+        defines=['BOOST_TEST_MODULE=NDNS Unit Tests',
+                 'TEST_CONFIG_PATH=\"%s/conf-test\"' %(bld.bldnode)],
+        use='ndns-objects BOOST'
+    )
 
     unit_tests = bld.program(
         target='../unit-tests',
