diff --git a/helper/ndn-scenario-helper.cpp b/helper/ndn-scenario-helper.cpp
index 2539af1..af74386 100644
--- a/helper/ndn-scenario-helper.cpp
+++ b/helper/ndn-scenario-helper.cpp
@@ -36,7 +36,8 @@
 }
 
 void
-ScenarioHelper::createTopology(std::initializer_list<std::initializer_list<std::string>/*node clique*/> topology)
+ScenarioHelper::createTopology(std::initializer_list<std::initializer_list<std::string>/*node clique*/> topology,
+                               bool shouldInstallNdnStack)
 {
   if (m_isTopologyInitialized) {
     throw std::logic_error("Topology cannot be created twice");
@@ -57,7 +58,9 @@
     }
   }
 
-  ndnHelper.InstallAll();
+  if (shouldInstallNdnStack) {
+    ndnHelper.InstallAll();
+  }
   m_isTopologyInitialized = true;
 }
 
@@ -133,11 +136,18 @@
 shared_ptr<Face>
 ScenarioHelper::getFace(const std::string& node1, const std::string& node2)
 {
+  Ptr<NetDevice> netDevice = getNetDevice(node1, node2);
+  return netDevice->GetNode()->GetObject<L3Protocol>()->getFaceByNetDevice(netDevice);
+}
+
+Ptr<NetDevice>
+ScenarioHelper::getNetDevice(const std::string& node1, const std::string& node2)
+{
   auto i = links.find(node1);
   if (i != links.end()) {
     auto j = i->second.find(node2);
     if (j != i->second.end()) {
-      return j->second->GetNode()->GetObject<L3Protocol>()->getFaceByNetDevice(j->second);
+      return j->second;
     }
   }
 
diff --git a/helper/ndn-scenario-helper.hpp b/helper/ndn-scenario-helper.hpp
index b939095..292bc85 100644
--- a/helper/ndn-scenario-helper.hpp
+++ b/helper/ndn-scenario-helper.hpp
@@ -108,7 +108,8 @@
    *       });
    */
   void
-  createTopology(std::initializer_list<std::initializer_list<std::string>/*node clique*/> topology);
+  createTopology(std::initializer_list<std::initializer_list<std::string>/*node clique*/> topology,
+                 bool shouldInstallNdnStack = true);
 
   /**
    * @brief Create routes between topology nodes
@@ -158,6 +159,13 @@
   getFace(const std::string& node1, const std::string& node2);
 
   /**
+   * @brief Get NetDevice on the @p node1 pointing towards @p node2
+   * @throw std::invalid_argument if the link does not exist
+   */
+  Ptr<NetDevice>
+  getNetDevice(const std::string& node1, const std::string& node2);
+
+  /**
    * \brief Disable RIB Manager
    */
   void
diff --git a/helper/ndn-stack-helper.cpp b/helper/ndn-stack-helper.cpp
index 4037cf8..3b5571a 100644
--- a/helper/ndn-stack-helper.cpp
+++ b/helper/ndn-stack-helper.cpp
@@ -23,6 +23,7 @@
 #include "ns3/names.h"
 #include "ns3/string.h"
 #include "ns3/point-to-point-net-device.h"
+#include "ns3/point-to-point-channel.h"
 
 #include "model/ndn-l3-protocol.hpp"
 #include "model/ndn-net-device-link-service.hpp"
@@ -222,6 +223,19 @@
     });
 }
 
+std::string
+constructFaceUri(Ptr<NetDevice> netDevice)
+{
+  std::string uri = "netdev://";
+  Address address = netDevice->GetAddress();
+  if (Mac48Address::IsMatchingType(address)) {
+    uri += "[" + boost::lexical_cast<std::string>(Mac48Address::ConvertFrom(address)) + "]";
+  }
+
+  return uri;
+}
+
+
 shared_ptr<Face>
 StackHelper::DefaultNetDeviceCallback(Ptr<Node> node, Ptr<L3Protocol> ndn,
                                       Ptr<NetDevice> netDevice) const
@@ -229,12 +243,10 @@
   NS_LOG_DEBUG("Creating default Face on node " << node->GetId());
 
   auto netDeviceLink = make_unique<NetDeviceLinkService>(node, netDevice);
-  auto transport = make_unique<NullTransport>("netDevice://", "netDevice://");
+  auto transport = make_unique<NullTransport>(constructFaceUri(netDevice), "netdev://[ff:ff:ff:ff:ff:ff]");
   auto face = std::make_shared<Face>(std::move(netDeviceLink), std::move(transport));
   face->setMetric(1);
 
-  // @TODO add netDevice ID
-
   ndn->addFace(face);
   NS_LOG_LOGIC("Node " << node->GetId() << ": added Face as face #"
                        << face->getLocalUri());
@@ -248,13 +260,23 @@
 {
   NS_LOG_DEBUG("Creating point-to-point Face on node " << node->GetId());
 
-  auto netDeviceLink = make_unique<NetDeviceLinkService>(node, device);
-  auto transport = make_unique<NullTransport>("netDevice://", "netDevice://");
+  Ptr<PointToPointNetDevice> netDevice = DynamicCast<PointToPointNetDevice>(device);
+  NS_ASSERT(netDevice != nullptr);
+
+  // access the other end of the link
+  Ptr<PointToPointChannel> channel = DynamicCast<PointToPointChannel>(netDevice->GetChannel());
+  NS_ASSERT(channel != nullptr);
+
+  Ptr<NetDevice> remoteNetDevice = channel->GetDevice(0);
+  if (remoteNetDevice->GetNode() == node)
+    remoteNetDevice = channel->GetDevice(1);
+
+  auto netDeviceLink = make_unique<NetDeviceLinkService>(node, netDevice);
+
+  auto transport = make_unique<NullTransport>(constructFaceUri(netDevice), constructFaceUri(remoteNetDevice));
   auto face = std::make_shared<Face>(std::move(netDeviceLink), std::move(transport));
   face->setMetric(1);
 
-  // @TODO add netDevice ID
-
   ndn->addFace(face);
   NS_LOG_LOGIC("Node " << node->GetId() << ": added Face as face #"
                        << face->getLocalUri());
diff --git a/tests/unit-tests/model/ndn-net-device-face.t.cpp b/tests/unit-tests/model/ndn-net-device-face.t.cpp
index aad8c01..5269ed9 100644
--- a/tests/unit-tests/model/ndn-net-device-face.t.cpp
+++ b/tests/unit-tests/model/ndn-net-device-face.t.cpp
@@ -35,7 +35,12 @@
 
   createTopology({
       {"1", "2"},
-    });
+    }, false);
+
+  getNetDevice("1", "2")->SetAttribute("Address", StringValue("00:00:00:ff:ff:01"));
+  getNetDevice("2", "1")->SetAttribute("Address", StringValue("00:00:00:ff:ff:02"));
+
+  getStackHelper().InstallAll();
 
   addRoutes({
       {"1", "2", "/prefix", 1},
@@ -58,6 +63,14 @@
 
   BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nInInterests, 100);
   BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nOutData, 100);
+
+  BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(*getFace("1", "2")), "netdev://[00:00:00:ff:ff:01]");
+  BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(*getFace("2", "1")), "netdev://[00:00:00:ff:ff:02]");
+
+  BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(getFace("1", "2")->getLocalUri()),  "netdev://[00:00:00:ff:ff:01]");
+  BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(getFace("1", "2")->getRemoteUri()), "netdev://[00:00:00:ff:ff:02]");
+  BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(getFace("2", "1")->getLocalUri()),  "netdev://[00:00:00:ff:ff:02]");
+  BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(getFace("2", "1")->getRemoteUri()), "netdev://[00:00:00:ff:ff:01]");
 }
 
 BOOST_AUTO_TEST_SUITE_END()
