diff --git a/docs/source/examples.rst b/docs/source/examples.rst
index e8bb522..be27f0b 100644
--- a/docs/source/examples.rst
+++ b/docs/source/examples.rst
@@ -313,3 +313,8 @@
 -----------------------------------
 
 :ref:`Example of packet drop tracer (L2Tracer)`
+
+3-node topology with periodic tracing of PIT
+--------------------------------------------
+
+:ref:`periodic tracing of Pending Interest Table (PIT) size`
diff --git a/docs/source/metric.rst b/docs/source/metric.rst
index 758bd3a..2296f44 100644
--- a/docs/source/metric.rst
+++ b/docs/source/metric.rst
@@ -348,3 +348,23 @@
 The successful run will create ``app-delays-trace.txt``, which similarly to trace file from the :ref:`packet trace helper example <packet trace helper example>` can be analyzed manually or used as input to some graph/stats packages.
 
 
+Other types of stats
+--------------------
+
+.. _periodic tracing of Pending Interest Table (PIT) size:
+
+Periodic tracing of Pending Interest Table (PIT) size
++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+This example (``ndn-simple-with-pit-count-stats.cc``) shows how you can periodically print out current size of PIT on the selected nodes.
+
+.. literalinclude:: ../../examples/ndn-simple-with-pit-count-stats.cc
+    :language: c++
+    :linenos:
+    :lines: 20-26,47-
+    :emphasize-lines: 9-20,43-46,61-63
+
+To run this scenario, use the following command::
+
+        ./waf --run=ndn-simple-with-pit-count-stats
+
diff --git a/examples/ndn-simple-with-pit-count-stats.cc b/examples/ndn-simple-with-pit-count-stats.cc
new file mode 100644
index 0000000..1f731b9
--- /dev/null
+++ b/examples/ndn-simple-with-pit-count-stats.cc
@@ -0,0 +1,126 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012-2013 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+// ndn-simple-with-pit-count-stats.cc
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/ndnSIM-module.h"
+
+using namespace ns3;
+
+/**
+ * This scenario simulates a very simple network topology:
+ *
+ *
+ *      +----------+     1Mbps      +--------+     1Mbps      +----------+
+ *      | consumer | <------------> | router | <------------> | producer |
+ *      +----------+         10ms   +--------+          10ms  +----------+
+ *
+ *
+ * Consumer requests data from producer with frequency 10 interests per second
+ * (interests contain constantly increasing sequence number).
+ *
+ * For every received interest, producer replies with a data packet, containing
+ * 1024 bytes of virtual payload.
+ *
+ * To run scenario and see what is happening, use the following command:
+ *
+ *     ./waf --run=ndn-simple-with-pit-count-stats
+ */
+
+void
+PeriodicStatsPrinter (Ptr<Node> node, Time next)
+{
+  Ptr<ndn::Pit> pit = node->GetObject<ndn::Pit> ();
+
+  std::cout << Simulator::Now ().ToDouble (Time::S) << "\t"
+            << node->GetId () << "\t"
+            << Names::FindName (node) << "\t"
+            << pit->GetSize () << "\n";
+  
+  Simulator::Schedule (next, PeriodicStatsPrinter, node, next);
+}
+
+int
+main (int argc, char *argv[])
+{
+  // setting default parameters for PointToPoint links and channels
+  Config::SetDefault ("ns3::PointToPointNetDevice::DataRate", StringValue ("1Mbps"));
+  Config::SetDefault ("ns3::PointToPointChannel::Delay", StringValue ("10ms"));
+  Config::SetDefault ("ns3::DropTailQueue::MaxPackets", StringValue ("20"));
+
+  // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
+  CommandLine cmd;
+  cmd.Parse (argc, argv);
+
+  // Creating nodes
+  NodeContainer nodes;
+  nodes.Create (3);
+
+  // Connecting nodes using two links
+  PointToPointHelper p2p;
+  p2p.Install (nodes.Get (0), nodes.Get (1));
+  p2p.Install (nodes.Get (1), nodes.Get (2));
+
+  // see more http://www.nsnam.org/doxygen/classns3_1_1_names.html
+  Names::Add ("consumer", nodes.Get (0));
+  Names::Add ("router",   nodes.Get (1));
+  Names::Add ("producer", nodes.Get (2));
+
+  // Install CCNx stack on all nodes
+  ndn::StackHelper ndnHelper;
+  ndnHelper.SetDefaultRoutes (true);
+  ndnHelper.SetPit ("ns3::ndn::pit::Persistent::AggregateStats");
+  ndnHelper.InstallAll ();
+
+  // set up periodic PIT stats printer on node 1
+  std::cout << "Time" << "\t"
+            << "NodeId" << "\t"
+            << "NodeName" << "\t"
+            << "Inserts" << "\t"
+            << "Lookups" << "\t"
+            << "NumberOfPitEntries" << "\n";
+  Simulator::Schedule (Seconds (1), PeriodicStatsPrinter, nodes.Get (0), Seconds (1));
+  Simulator::Schedule (Seconds (1), PeriodicStatsPrinter, nodes.Get (1), Seconds (1));
+  Simulator::Schedule (Seconds (1), PeriodicStatsPrinter, nodes.Get (2), Seconds (1));
+  
+  // Installing applications
+
+  // Consumer
+  ndn::AppHelper consumerHelper ("ns3::ndn::ConsumerCbr");
+  // Consumer will request /prefix/0, /prefix/1, ...
+  consumerHelper.SetPrefix ("/prefix");
+  consumerHelper.SetAttribute ("Frequency", StringValue ("10")); // 10 interests a second
+  consumerHelper.Install (nodes.Get (0)); // first node
+
+  // Producer
+  ndn::AppHelper producerHelper ("ns3::ndn::Producer");
+  // Producer will reply to all requests starting with /prefix
+  producerHelper.SetPrefix ("/prefix");
+  producerHelper.SetAttribute ("PayloadSize", StringValue("1024"));
+  producerHelper.Install (nodes.Get (2)); // last node
+
+  Simulator::Stop (Seconds (20.0));
+
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  return 0;
+}
diff --git a/examples/wscript b/examples/wscript
index f2879db..c7868f5 100644
--- a/examples/wscript
+++ b/examples/wscript
@@ -59,3 +59,6 @@
 
     obj = bld.create_ns3_program('ndn-simple-with-pit-operation-stats', ['ndnSIM'])
     obj.source = 'ndn-simple-with-pit-operation-stats.cc'
+
+    obj = bld.create_ns3_program('ndn-simple-with-pit-count-stats', ['ndnSIM'])
+    obj.source = 'ndn-simple-with-pit-count-stats.cc'
