diff --git a/examples/ndn-grid.py b/examples/ndn-grid.py
new file mode 100644
index 0000000..5569b11
--- /dev/null
+++ b/examples/ndn-grid.py
@@ -0,0 +1,125 @@
+## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+#
+# Copyright (c) 2011-2015  Regents of the University of California.
+#
+# This file is part of ndnSIM. See AUTHORS for complete list of ndnSIM authors and
+# contributors.
+#
+# ndnSIM is free software: you can redistribute it and/or modify it under the terms
+# of the GNU General Public License as published by the Free Software Foundation,
+# either version 3 of the License, or (at your option) any later version.
+#
+# ndnSIM 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
+# ndnSIM, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+# ndn-grid.py
+
+from ns.core import *
+from ns.network import *
+from ns.point_to_point import *
+from ns.point_to_point_layout import *
+from ns.ndnSIM import *
+
+#
+# This scenario simulates a grid topology (using PointToPointGrid module)
+#
+# (consumer) -- ( ) ----- ( )
+#     |          |         |
+#    ( ) ------ ( ) ----- ( )
+#     |          |         |
+#    ( ) ------ ( ) -- (producer)
+#
+# All links are 1Mbps with propagation 10ms delay.
+#
+# FIB is populated using NdnGlobalRoutingHelper.
+#
+# Consumer requests data from producer with frequency 100 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:
+#
+#     NS_LOG=ndn.Consumer:ndn.Producer ./waf --pyrun=src/ndnSIM/examples/ndn-grid.py
+#
+
+Config.SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"))
+Config.SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"))
+Config.SetDefault("ns3::DropTailQueue::MaxPackets", StringValue("20"))
+
+import sys; cmd = CommandLine(); cmd.Parse(sys.argv);
+
+p2p = PointToPointHelper ()
+grid = PointToPointGridHelper (3,3,p2p)
+grid.BoundingBox(100,100,200,200)
+
+#######################################################
+
+ndnHelper = ndn.StackHelper()
+ndnHelper.InstallAll();
+
+
+# Getting containers for the consumer/producer
+producer = grid.GetNode(2, 2)
+consumerNodes = NodeContainer()
+consumerNodes.Add(grid.GetNode(0,0))
+
+
+cHelper = ndn.AppHelper("ns3::ndn::ConsumerCbr")
+cHelper.SetPrefix("/prefix")
+cHelper.SetAttribute("Frequency", StringValue("10"))
+out = cHelper.Install(consumerNodes)
+
+pHelper = ndn.AppHelper("ns3::ndn::Producer")
+pHelper.SetPrefix("/prefix")
+pHelper.SetAttribute("PayloadSize", StringValue("1024"));
+pHelper.Install(producer)
+
+ndnGlobalRoutingHelper = ndn.GlobalRoutingHelper()
+ndnGlobalRoutingHelper.InstallAll()
+
+# Add /prefix origins to ndn::GlobalRouter
+ndnGlobalRoutingHelper.AddOrigin("/prefix", producer)
+
+# Calculate and install FIBs
+ndnGlobalRoutingHelper.CalculateRoutes()
+
+
+# #######################################################
+
+Simulator.Stop(Seconds(20.0))
+Simulator.Run()
+
+# # To access FIB, PIT, CS, uncomment the following lines
+
+# l3Protocol = ndn.L3Protocol.getL3Protocol(grid.GetNode(0,0))
+# forwarder = l3Protocol.getForwarder()
+
+# fib = forwarder.getFib()
+# print "Contents of FIB (%d):" % fib.size()
+# for i in fib:
+#     print " - %s:" % i.getPrefix()
+#     for nh in i.getNextHops():
+#         print "    - %s%d (cost: %d)" % (nh.getFace(), nh.getFace().getId(), nh.getCost())
+
+# pit = forwarder.getPit()
+# print "Contents of PIT (%d):" % pit.size()
+# for i in pit:
+#     print " - %s" % i.getName()
+
+# cs = forwarder.getCs()
+# print "Contents of CS (%d):" % cs.size()
+# for i in cs:
+#     print " - %s" % i.getName()
+
+Simulator.Destroy()
+
+# # or run using the visualizer
+# import visualizer
+# visualizer.start()
