diff --git a/apps/ndn-consumer-zipf-mandelbrot.cc b/apps/ndn-consumer-zipf-mandelbrot.cc
index 9982738..000cc85 100644
--- a/apps/ndn-consumer-zipf-mandelbrot.cc
+++ b/apps/ndn-consumer-zipf-mandelbrot.cc
@@ -44,21 +44,20 @@
     .SetParent<ConsumerCbr> ()
     .AddConstructor<ConsumerZipfMandelbrot> ()
 
+    .AddAttribute ("q", "parameter of improve rank",
+                   StringValue ("0.7"),
+                   MakeDoubleAccessor (&ConsumerZipfMandelbrot::SetQ, &ConsumerZipfMandelbrot::GetQ),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("s", "parameter of power",
+                   StringValue ("0.7"),
+                   MakeDoubleAccessor (&ConsumerZipfMandelbrot::SetS, &ConsumerZipfMandelbrot::GetS),
+                   MakeDoubleChecker<double> ())
+
     .AddAttribute ("NumberOfContents", "Number of the Contents in total",
                    StringValue ("100"),
                    MakeUintegerAccessor (&ConsumerZipfMandelbrot::SetNumberOfContents, &ConsumerZipfMandelbrot::GetNumberOfContents),
                    MakeUintegerChecker<uint32_t> ())
 
-    // Alex: q and s are not yet really working
-    //
-    // .AddAttribute ("q", "parameter of improve rank",
-    //                StringValue ("0.7"),
-    //                MakeDoubleAccessor (&ConsumerZipfMandelbrot::m_q),
-    //                MakeDoubleChecker<double>())
-    // .AddAttribute ("s", "parameter of power",
-    //                StringValue ("0.7"),
-    //                MakeDoubleAccessor (&ConsumerZipfMandelbrot::m_s),
-    //                MakeDoubleChecker<double>())
     ;
 
   return tid;
@@ -82,18 +81,20 @@
 {
   m_N = numOfContents;
 
+  // NS_LOG_DEBUG (m_q << " and " << m_s << " and " << m_N);
+
   m_Pcum = std::vector<double> (m_N + 1);
 
   m_Pcum[0] = 0.0;
   for (uint32_t i=1; i<=m_N; i++)
     {
-      m_Pcum[i] = m_Pcum[i-1] + 1.0/pow(i+m_q, m_s);
+      m_Pcum[i] = m_Pcum[i-1] + 1.0 / std::pow(i+m_q, m_s);
     }
-  
+
   for (uint32_t i=1; i<=m_N; i++)
     {
       m_Pcum[i] = m_Pcum[i] / m_Pcum[m_N];
-      NS_LOG_LOGIC("cum Probability ["<<i<<"]="<<m_Pcum[i]);
+      NS_LOG_LOGIC ("Cumulative probability [" << i << "]=" << m_Pcum[i]);
   }
 }
 
@@ -103,6 +104,31 @@
   return m_N;
 }
 
+void
+ConsumerZipfMandelbrot::SetQ (double q)
+{
+  m_q = q;
+  SetNumberOfContents (m_N);
+}
+
+double
+ConsumerZipfMandelbrot::GetQ () const
+{
+  return m_q;
+}
+
+void
+ConsumerZipfMandelbrot::SetS (double s)
+{
+  m_s = s;
+  SetNumberOfContents (m_N);
+}
+
+double
+ConsumerZipfMandelbrot::GetS () const
+{
+  return m_s;
+}
 
 void
 ConsumerZipfMandelbrot::SendPacket() {
@@ -174,14 +200,14 @@
   m_seqLastDelay.insert (SeqTimeout (seq, Simulator::Now ()));
 
   m_seqRetxCounts[seq] ++;
-  
+
   m_transmittedInterests (&interestHeader, this, m_face);
 
   m_rtt->SentSeq (SequenceNumber32 (seq), 1);
 
   FwHopCountTag hopCountTag;
   packet->AddPacketTag (hopCountTag);
-  
+
   m_protocolHandler (packet);
 
   ConsumerZipfMandelbrot::ScheduleNextPacket ();
diff --git a/apps/ndn-consumer-zipf-mandelbrot.h b/apps/ndn-consumer-zipf-mandelbrot.h
index 71113b2..b9f4d17 100644
--- a/apps/ndn-consumer-zipf-mandelbrot.h
+++ b/apps/ndn-consumer-zipf-mandelbrot.h
@@ -70,7 +70,19 @@
 
   uint32_t
   GetNumberOfContents () const;
-  
+
+  void
+  SetQ (double q);
+
+  double
+  GetQ () const;
+
+  void
+  SetS (double s);
+
+  double
+  GetS () const;
+
 private:
   uint32_t m_N;  //number of the contents
   double m_q;  //q in (k+q)^s
