diff --git a/model/cs/content-store-impl.hpp b/model/cs/content-store-impl.hpp
index 9c55053..5765120 100644
--- a/model/cs/content-store-impl.hpp
+++ b/model/cs/content-store-impl.hpp
@@ -137,6 +137,9 @@
     return super::getPolicy();
   }
 
+public:
+  typedef void (*CsEntryCallback)(Ptr<const Entry>);
+
 private:
   void
   SetMaxSize(uint32_t maxSize);
@@ -157,8 +160,7 @@
 //////////////////////////////////////////
 
 template<class Policy>
-LogComponent
-  ContentStoreImpl<Policy>::g_log = LogComponent(("ndn.cs." + Policy::GetName()).c_str());
+LogComponent ContentStoreImpl<Policy>::g_log = LogComponent(("ndn.cs." + Policy::GetName()).c_str(), __FILE__);
 
 template<class Policy>
 TypeId
@@ -177,7 +179,8 @@
 
       .AddTraceSource("DidAddEntry",
                       "Trace fired every time entry is successfully added to the cache",
-                      MakeTraceSourceAccessor(&ContentStoreImpl<Policy>::m_didAddEntry));
+                      MakeTraceSourceAccessor(&ContentStoreImpl<Policy>::m_didAddEntry),
+                      "ns3::ndn::cs::ContentStoreImpl::CsEntryCallback");
 
   return tid;
 }
diff --git a/model/cs/content-store-with-freshness.hpp b/model/cs/content-store-with-freshness.hpp
index 3d4d980..4cfa700 100644
--- a/model/cs/content-store-with-freshness.hpp
+++ b/model/cs/content-store-with-freshness.hpp
@@ -78,7 +78,7 @@
 
 template<class Policy>
 LogComponent ContentStoreWithFreshness<Policy>::g_log = LogComponent(("ndn.cs.Freshness."
-                                                                      + Policy::GetName()).c_str());
+                                                                      + Policy::GetName()).c_str(), __FILE__);
 
 template<class Policy>
 TypeId
diff --git a/model/cs/content-store-with-stats.hpp b/model/cs/content-store-with-stats.hpp
index 979a5e5..3b84ac2 100644
--- a/model/cs/content-store-with-stats.hpp
+++ b/model/cs/content-store-with-stats.hpp
@@ -63,6 +63,9 @@
   virtual inline void
   Print(std::ostream& os) const;
 
+public:
+  typedef void (*RemoveCsEntryCallback)(Ptr<const Entry>, Time);
+
 private:
   static LogComponent g_log; ///< @brief Logging variable
 
@@ -77,7 +80,7 @@
 
 template<class Policy>
 LogComponent ContentStoreWithStats<Policy>::g_log = LogComponent(("ndn.cs.Stats."
-                                                                  + Policy::GetName()).c_str());
+                                                                  + Policy::GetName()).c_str(), __FILE__);
 
 template<class Policy>
 TypeId
@@ -91,7 +94,8 @@
 
       .AddTraceSource("WillRemoveEntry",
                       "Trace called just before content store entry will be removed",
-                      MakeTraceSourceAccessor(&ContentStoreWithStats<Policy>::m_willRemoveEntry))
+                      MakeTraceSourceAccessor(&ContentStoreWithStats<Policy>::m_willRemoveEntry),
+                      "ns3::ndn::cs::ContentStoreWithStats::RemoveCsEntryCallback")
 
     // trace stuff here
     ;
diff --git a/model/cs/custom-policies/probability-policy.hpp b/model/cs/custom-policies/probability-policy.hpp
index 7ad6fd0..8bfb1c6 100644
--- a/model/cs/custom-policies/probability-policy.hpp
+++ b/model/cs/custom-policies/probability-policy.hpp
@@ -27,7 +27,7 @@
 #include <boost/intrusive/options.hpp>
 #include <boost/intrusive/list.hpp>
 
-#include <ns3/random-variable.h>
+#include <ns3/random-variable-stream.h>
 
 namespace ns3 {
 namespace ndn {
@@ -65,6 +65,7 @@
         : base_(base)
         , max_size_(100)
         , probability_(1.0)
+        , ns3_rand_(CreateObject<UniformRandomVariable>())
       {
       }
 
@@ -76,7 +77,7 @@
       inline bool
       insert(typename parent_trie::iterator item)
       {
-        if (ns3_rand_.GetValue() < probability_) {
+        if (ns3_rand_->GetValue() < probability_) {
           policy_container::push_back(*item);
 
           // allow caching
@@ -138,7 +139,7 @@
       Base& base_;
       size_t max_size_;
       double probability_;
-      UniformVariable ns3_rand_;
+      Ptr<UniformRandomVariable> ns3_rand_;
     };
   };
 };
diff --git a/model/cs/ndn-content-store.cpp b/model/cs/ndn-content-store.cpp
index 02a13cb..416bde3 100644
--- a/model/cs/ndn-content-store.cpp
+++ b/model/cs/ndn-content-store.cpp
@@ -38,10 +38,12 @@
       .SetParent<Object>()
 
       .AddTraceSource("CacheHits", "Trace called every time there is a cache hit",
-                      MakeTraceSourceAccessor(&ContentStore::m_cacheHitsTrace))
+                      MakeTraceSourceAccessor(&ContentStore::m_cacheHitsTrace),
+                      "ns3::ndn::ContentStore::CacheHitsCallback")
 
       .AddTraceSource("CacheMisses", "Trace called every time there is a cache miss",
-                      MakeTraceSourceAccessor(&ContentStore::m_cacheMissesTrace));
+                      MakeTraceSourceAccessor(&ContentStore::m_cacheMissesTrace),
+                      "ns3::ndn::ContentStrore::CacheMissesCallback");
 
   return tid;
 }
diff --git a/model/cs/ndn-content-store.hpp b/model/cs/ndn-content-store.hpp
index cdbb1ea..36994f8 100644
--- a/model/cs/ndn-content-store.hpp
+++ b/model/cs/ndn-content-store.hpp
@@ -183,6 +183,10 @@
   static inline Ptr<ContentStore>
   GetContentStore(Ptr<Object> node);
 
+public:
+  typedef void (*CacheHitsCallback)(shared_ptr<const Interest>, shared_ptr<const Data>);
+  typedef void (*CacheMissesCallback)(shared_ptr<const Interest>);
+
 protected:
   TracedCallback<shared_ptr<const Interest>,
                  shared_ptr<const Data>> m_cacheHitsTrace; ///< @brief trace of cache hits
