diff --git a/apps/ndn-app.cpp b/apps/ndn-app.cpp
index a1c9e80..0472550 100644
--- a/apps/ndn-app.cpp
+++ b/apps/ndn-app.cpp
@@ -23,7 +23,8 @@
 #include "ns3/packet.h"
 
 #include "model/ndn-l3-protocol.hpp"
-#include "model/ndn-app-face.hpp"
+#include "model/ndn-app-link-service.hpp"
+#include "model/null-transport.hpp"
 
 NS_LOG_COMPONENT_DEFINE("ndn.App");
 
@@ -115,6 +116,15 @@
   m_receivedDatas(data, this, m_face);
 }
 
+void
+App::OnNack(shared_ptr<const lp::Nack> nack)
+{
+  NS_LOG_FUNCTION(this << nack);
+
+  // @TODO Implement
+  // m_receivedDatas(data, this, m_face);
+}
+
 // Application Methods
 void
 App::StartApplication() // Called at time specified by Start
@@ -128,7 +138,13 @@
                 "Ndn stack should be installed on the node " << GetNode());
 
   // step 1. Create a face
-  m_face = std::make_shared<AppFace>(this);
+  auto appLink = make_unique<AppLinkService>(this);
+  auto transport = make_unique<NullTransport>("appFace://", "appFace://",
+                                              ::ndn::nfd::FACE_SCOPE_LOCAL);
+  // @TODO Consider making AppTransport instead
+  m_face = std::make_shared<Face>(std::move(appLink), std::move(transport));
+  m_appLink = static_cast<AppLinkService*>(m_face->getLinkService());
+  m_face->setMetric(1);
 
   // step 2. Add face to the Ndn stack
   GetNode()->GetObject<L3Protocol>()->addFace(m_face);
diff --git a/apps/ndn-app.hpp b/apps/ndn-app.hpp
index 2d84134..c5b3ae7 100644
--- a/apps/ndn-app.hpp
+++ b/apps/ndn-app.hpp
@@ -21,7 +21,8 @@
 #define NDN_APP_H
 
 #include "ns3/ndnSIM/model/ndn-common.hpp"
-#include "ns3/ndnSIM/model/ndn-app-face.hpp"
+#include "ns3/ndnSIM/model/ndn-app-link-service.hpp"
+#include "ns3/ndnSIM/NFD/daemon/face/face.hpp"
 
 #include "ns3/application.h"
 #include "ns3/ptr.h"
@@ -63,26 +64,26 @@
 
   /**
    * @brief Method that will be called every time new Interest arrives
-   * @param interest Interest header
-   * @param packet   "Payload" of the interests packet. The actual payload should be zero, but
-   * packet itself
-   *                 may be useful to get packet tags
    */
   virtual void
   OnInterest(shared_ptr<const Interest> interest);
 
   /**
    * @brief Method that will be called every time new Data arrives
-   * @param contentObject Data header
-   * @param payload payload (potentially virtual) of the Data packet (may include packet tags of
-   * original packet)
    */
   virtual void
   OnData(shared_ptr<const Data> data);
 
+   /**
+   * @brief Method that will be called every time new Nack arrives
+   */
+  virtual void
+  OnNack(shared_ptr<const lp::Nack> nack);
+
 public:
   typedef void (*InterestTraceCallback)(shared_ptr<const Interest>, Ptr<App>, shared_ptr<Face>);
   typedef void (*DataTraceCallback)(shared_ptr<const Data>, Ptr<App>, shared_ptr<Face>);
+  // @TODO add NACK
 
 protected:
   virtual void
@@ -100,7 +101,9 @@
 
 protected:
   bool m_active; ///< @brief Flag to indicate that application is active (set by StartApplication and StopApplication)
-  shared_ptr<AppFace> m_face; ///< @brief automatically created application face through which application communicates
+  shared_ptr<Face> m_face;
+  AppLinkService* m_appLink;
+
   uint32_t m_appId;
 
   TracedCallback<shared_ptr<const Interest>, Ptr<App>, shared_ptr<Face>>
@@ -109,11 +112,15 @@
   TracedCallback<shared_ptr<const Data>, Ptr<App>, shared_ptr<Face>>
     m_receivedDatas; ///< @brief App-level trace of received Data
 
+  // @TODO add NACK
+
   TracedCallback<shared_ptr<const Interest>, Ptr<App>, shared_ptr<Face>>
     m_transmittedInterests; ///< @brief App-level trace of transmitted Interests
 
   TracedCallback<shared_ptr<const Data>, Ptr<App>, shared_ptr<Face>>
     m_transmittedDatas; ///< @brief App-level trace of transmitted Data
+
+  // @TODO add NACK
 };
 
 } // namespace ndn
