diff --git a/model/cs/custom-policies/probability-policy.hpp b/model/cs/custom-policies/probability-policy.hpp
index 0c3088c..57d6835 100644
--- a/model/cs/custom-policies/probability-policy.hpp
+++ b/model/cs/custom-policies/probability-policy.hpp
@@ -33,109 +33,106 @@
 /**
  * @brief Traits for freshness policy
  */
-struct probability_policy_traits
-{
-  static std::string GetName () { return "ProbabilityImpl"; }
-
-  struct policy_hook_type : public boost::intrusive::list_member_hook<> {};
-
-  template<class Container>
-  struct container_hook
+struct probability_policy_traits {
+  static std::string
+  GetName()
   {
-    typedef boost::intrusive::member_hook< Container,
-                                           policy_hook_type,
-                                           &Container::policy_hook_ > type;
+    return "ProbabilityImpl";
+  }
+
+  struct policy_hook_type : public boost::intrusive::list_member_hook<> {
   };
 
-  template<class Base,
-           class Container,
-           class Hook>
-  struct policy
-  {
-    typedef typename boost::intrusive::list< Container, Hook > policy_container;
-    
-    class type : public policy_container
-    {
+  template<class Container>
+  struct container_hook {
+    typedef boost::intrusive::member_hook<Container, policy_hook_type, &Container::policy_hook_>
+      type;
+  };
+
+  template<class Base, class Container, class Hook>
+  struct policy {
+    typedef typename boost::intrusive::list<Container, Hook> policy_container;
+
+    class type : public policy_container {
     public:
       typedef policy policy_base; // to get access to get_freshness methods from outside
       typedef Container parent_trie;
 
-      type (Base &base)
-        : base_ (base)
-        , max_size_ (100)
-        , probability_ (1.0)
+      type(Base& base)
+        : base_(base)
+        , max_size_(100)
+        , probability_(1.0)
       {
       }
 
       inline void
-      update (typename parent_trie::iterator item)
+      update(typename parent_trie::iterator item)
       {
       }
 
       inline bool
-      insert (typename parent_trie::iterator item)
+      insert(typename parent_trie::iterator item)
       {
-        if (ns3_rand_.GetValue () < probability_)
-          {
-            policy_container::push_back (*item);
+        if (ns3_rand_.GetValue() < probability_) {
+          policy_container::push_back(*item);
 
-            // allow caching
-            return true;
-          }
-        else
-          {
-            // don't allow caching
-            return false;
-          }
+          // allow caching
+          return true;
+        }
+        else {
+          // don't allow caching
+          return false;
+        }
       }
 
       inline void
-      lookup (typename parent_trie::iterator item)
+      lookup(typename parent_trie::iterator item)
       {
         // do nothing. it's random policy
       }
 
       inline void
-      erase (typename parent_trie::iterator item)
+      erase(typename parent_trie::iterator item)
       {
-        policy_container::erase (policy_container::s_iterator_to (*item));
+        policy_container::erase(policy_container::s_iterator_to(*item));
       }
 
       inline void
-      clear ()
+      clear()
       {
-        policy_container::clear ();
+        policy_container::clear();
       }
 
       inline void
-      set_max_size (size_t max_size)
+      set_max_size(size_t max_size)
       {
         max_size_ = max_size;
       }
 
       inline size_t
-      get_max_size () const
+      get_max_size() const
       {
         return max_size_;
       }
 
       inline void
-      set_probability (double probability)
+      set_probability(double probability)
       {
         probability_ = probability;
       }
 
       inline double
-      get_probability () const
+      get_probability() const
       {
         return probability_;
-      }      
+      }
 
     private:
-      type () : base_(*((Base*)0)) { };
+      type()
+        : base_(*((Base*)0)){};
 
     private:
-      Base &base_;
+      Base& base_;
       size_t max_size_;
       double probability_;
       UniformVariable ns3_rand_;
