diff --git a/model/cs/content-store-impl.hpp b/model/cs/content-store-impl.hpp
index 4692486..ddcb8ed 100644
--- a/model/cs/content-store-impl.hpp
+++ b/model/cs/content-store-impl.hpp
@@ -203,22 +203,21 @@
 shared_ptr<Data>
 ContentStoreImpl<Policy>::Lookup(shared_ptr<const Interest> interest)
 {
-  NS_LOG_FUNCTION(this << interest->GetName());
+  NS_LOG_FUNCTION(this << interest->getName());
 
   typename super::const_iterator node;
-  if (interest->GetExclude() == 0) {
-    node = this->deepest_prefix_match(interest->GetName());
+  if (interest->getExclude().empty()) {
+    node = this->deepest_prefix_match(interest->getName());
   }
   else {
-    node = this->deepest_prefix_match_if_next_level(interest->GetName(),
-                                                    isNotExcluded(*interest->GetExclude()));
+    node = this->deepest_prefix_match_if_next_level(interest->getName(),
+                                                    isNotExcluded(interest->getExclude()));
   }
 
   if (node != this->end()) {
     this->m_cacheHitsTrace(interest, node->payload()->GetData());
 
     shared_ptr<Data> copy = make_shared<Data>(*node->payload()->GetData());
-    ConstCast<Packet>(copy->GetPayload())->RemoveAllPacketTags();
     return copy;
   }
   else {
@@ -231,10 +230,10 @@
 bool
 ContentStoreImpl<Policy>::Add(shared_ptr<const Data> data)
 {
-  NS_LOG_FUNCTION(this << data->GetName());
+  NS_LOG_FUNCTION(this << data->getName());
 
   Ptr<entry> newEntry = Create<entry>(this, data);
-  std::pair<typename super::iterator, bool> result = super::insert(data->GetName(), newEntry);
+  std::pair<typename super::iterator, bool> result = super::insert(data->getName(), newEntry);
 
   if (result.first != super::end()) {
     if (result.second) {
@@ -259,7 +258,7 @@
 {
   for (typename super::policy_container::const_iterator item = this->getPolicy().begin();
        item != this->getPolicy().end(); item++) {
-    os << item->payload()->GetName() << std::endl;
+    os << item->payload ()->GetName () << std::endl;
   }
 }
 
diff --git a/model/cs/content-store-with-freshness.hpp b/model/cs/content-store-with-freshness.hpp
index 836a94f..c69be28 100644
--- a/model/cs/content-store-with-freshness.hpp
+++ b/model/cs/content-store-with-freshness.hpp
@@ -104,7 +104,7 @@
   if (!ok)
     return false;
 
-  NS_LOG_DEBUG(data->GetName() << " added to cache");
+  NS_LOG_DEBUG(data->getName() << " added to cache");
   RescheduleCleaning();
   return true;
 }
diff --git a/model/cs/custom-policies/freshness-policy.hpp b/model/cs/custom-policies/freshness-policy.hpp
index 9d66c66..ae10862 100644
--- a/model/cs/custom-policies/freshness-policy.hpp
+++ b/model/cs/custom-policies/freshness-policy.hpp
@@ -105,7 +105,7 @@
       insert(typename parent_trie::iterator item)
       {
         // get_time (item) = Simulator::Now ();
-        Time freshness = item->payload()->GetData()->GetFreshness();
+        Time freshness = MilliSeconds(item->payload()->GetData()->getFreshnessPeriod().count());
         if (!freshness.IsZero()) {
           get_freshness(item) = Simulator::Now() + freshness;
 
@@ -128,7 +128,7 @@
       inline void
       erase(typename parent_trie::iterator item)
       {
-        if (!item->payload()->GetData()->GetFreshness().IsZero()) {
+        if (item->payload()->GetData()->getFreshnessPeriod() != time::milliseconds::zero()) {
           // erase only if freshness is non zero (otherwise an item is not in the policy
           policy_container::erase(policy_container::s_iterator_to(*item));
         }
diff --git a/model/cs/ndn-content-store.cpp b/model/cs/ndn-content-store.cpp
index 8df04c6..9f7af30 100644
--- a/model/cs/ndn-content-store.cpp
+++ b/model/cs/ndn-content-store.cpp
@@ -66,7 +66,7 @@
 const Name&
 Entry::GetName() const
 {
-  return m_data->GetName();
+  return m_data->getName();
 }
 
 shared_ptr<const Data>
diff --git a/model/cs/ndn-content-store.hpp b/model/cs/ndn-content-store.hpp
index e28eea0..e007b32 100644
--- a/model/cs/ndn-content-store.hpp
+++ b/model/cs/ndn-content-store.hpp
@@ -36,9 +36,6 @@
 
 namespace ndn {
 
-class Data;
-class Interest;
-class Name;
 class ContentStore;
 
 /**
@@ -90,7 +87,7 @@
   GetContentStore();
 
 private:
-  Ptr<ContentStore> m_cs; ///< \brief content store to which entry is added
+  Ptr<ContentStore> m_cs;        ///< \brief content store to which entry is added
   shared_ptr<const Data> m_data; ///< \brief non-modifiable Data
 };
 
@@ -211,4 +208,14 @@
 } // namespace ndn
 } // namespace ns3
 
+#include <boost/functional/hash.hpp>
+namespace boost {
+inline std::size_t
+hash_value(const ::ndn::name::Component component)
+{
+  return boost::hash_range(component.wireEncode().wire(),
+                           component.wireEncode().wire() + component.wireEncode().size());
+}
+}
+
 #endif // NDN_CONTENT_STORE_H
diff --git a/model/ndn-common.hpp b/model/ndn-common.hpp
index 6489981..97e722a 100644
--- a/model/ndn-common.hpp
+++ b/model/ndn-common.hpp
@@ -31,12 +31,18 @@
 #include <ndn-cxx/data.hpp>
 #include <ndn-cxx/security/key-chain.hpp>
 
+#include <ndn-cxx/util/time.hpp>
+
 namespace ns3 {
 namespace ndn {
 
 using ::ndn::Name;
 namespace name = ::ndn::name;
 
+namespace time = ::ndn::time;
+
+using ::ndn::Exclude;
+
 using std::shared_ptr;
 using std::make_shared;
 
diff --git a/utils/trie/trie.hpp b/utils/trie/trie.hpp
index bc7ab31..04ed980 100644
--- a/utils/trie/trie.hpp
+++ b/utils/trie/trie.hpp
@@ -128,7 +128,7 @@
 template<typename FullKey, typename PayloadTraits, typename PolicyHook>
 class trie {
 public:
-  typedef typename FullKey::partial_type Key;
+  typedef typename FullKey::value_type Key;
 
   typedef trie* iterator;
   typedef const trie* const_iterator;
diff --git a/wscript b/wscript
index bafa76a..7bd46d3 100644
--- a/wscript
+++ b/wscript
@@ -85,7 +85,6 @@
     
     module.source = bld.path.ant_glob(['%s/**/*.cpp' % dir for dir in module_dirs],
                                       excl=['model/ip-faces/*',
-                                            'model/cs/*',
                                             'apps/*',
                                             'helper/*',
                                             'utils/**/*'])
