diff --git a/src/sync-logic.cc b/src/sync-logic.cc
index eccb3fa..38b624a 100644
--- a/src/sync-logic.cc
+++ b/src/sync-logic.cc
@@ -65,6 +65,8 @@
 
   SyncLogic::SyncLogic (const Name& syncPrefix,
                         shared_ptr<SyncPolicyManager> syncPolicyManager, 
+                        shared_ptr<Face> face,
+                        shared_ptr<Transport> transport,
                         LogicUpdateCallback onUpdate,
                         LogicRemoveCallback onRemove)
     : m_state (new FullState)
@@ -74,6 +76,8 @@
     , m_onRemove (onRemove)
     , m_perBranch (false)
     , m_policyManager(syncPolicyManager)
+    , m_face(face)
+    , m_transport(transport)
 #ifndef NS3_MODULE
     , m_randomGenerator (static_cast<unsigned int> (std::time (0)))
     , m_rangeUniformRandom (m_randomGenerator, uniform_int<> (200,1000))
@@ -87,10 +91,10 @@
 #ifndef NS3_MODULE
   // In NS3 module these functions are moved to StartApplication method
 
-  m_transport = make_shared<TcpTransport>();
-  m_face = make_shared<Face>(m_transport, make_shared<TcpTransport::ConnectionInfo>("localhost"));
+  // m_transport = make_shared<TcpTransport>();
+  // m_face = make_shared<Face>(m_transport, make_shared<TcpTransport::ConnectionInfo>("localhost"));
 
-  connectToDaemon();
+  // connectToDaemon();
 
   shared_ptr<BasicIdentityStorage> publicStorage = make_shared<BasicIdentityStorage>();
   shared_ptr<OSXPrivateKeyStorage> privateStorage = make_shared<OSXPrivateKeyStorage>();
@@ -109,6 +113,8 @@
 
 SyncLogic::SyncLogic (const Name& syncPrefix,
                       shared_ptr<SyncPolicyManager> syncPolicyManager,
+                      shared_ptr<Face> face,
+                      shared_ptr<Transport> transport,
                       LogicPerBranchCallback onUpdateBranch)
   : m_state (new FullState)
   , m_syncInterestTable (TIME_SECONDS (m_syncInterestReexpress))
@@ -116,6 +122,8 @@
   , m_onUpdateBranch (onUpdateBranch)
   , m_perBranch(true)
   , m_policyManager(syncPolicyManager)
+  , m_face(face)
+  , m_transport(transport)
 #ifndef NS3_MODULE
   , m_randomGenerator (static_cast<unsigned int> (std::time (0)))
   , m_rangeUniformRandom (m_randomGenerator, uniform_int<> (200,1000))
@@ -129,10 +137,10 @@
 #ifndef NS3_MODULE
   // In NS3 module these functions are moved to StartApplication method
 
-  m_transport = make_shared<TcpTransport>();
-  m_face = make_shared<Face>(m_transport, make_shared<TcpTransport::ConnectionInfo>("localhost"));
+  // m_transport = make_shared<TcpTransport>();
+  // m_face = make_shared<Face>(m_transport, make_shared<TcpTransport::ConnectionInfo>("localhost"));
 
-  connectToDaemon();
+  // connectToDaemon();
 
   shared_ptr<BasicIdentityStorage> publicStorage = make_shared<BasicIdentityStorage>();
   shared_ptr<OSXPrivateKeyStorage> privateStorage = make_shared<OSXPrivateKeyStorage>();
@@ -151,32 +159,31 @@
 SyncLogic::~SyncLogic ()
 {
   m_face->removeRegisteredPrefix(m_syncRegisteredPrefixId);
-  m_face->shutdown();
 }
 
-void
-SyncLogic::connectToDaemon()
-{
-  //Hack! transport does not connect to daemon unless an interest is expressed.
-  Name name("/ndn");
-  shared_ptr<ndn::Interest> interest = make_shared<ndn::Interest>(name);
-  m_face->expressInterest(*interest, 
-                          bind(&SyncLogic::onConnectionData, this, _1, _2),
-                          bind(&SyncLogic::onConnectionDataTimeout, this, _1));
-}
+// void
+// SyncLogic::connectToDaemon()
+// {
+//   //Hack! transport does not connect to daemon unless an interest is expressed.
+//   Name name("/ndn");
+//   shared_ptr<ndn::Interest> interest = make_shared<ndn::Interest>(name);
+//   m_face->expressInterest(*interest, 
+//                           bind(&SyncLogic::onConnectionData, this, _1, _2),
+//                           bind(&SyncLogic::onConnectionDataTimeout, this, _1));
+// }
 
-void
-SyncLogic::onConnectionData(const shared_ptr<const ndn::Interest>& interest,
-                            const shared_ptr<Data>& data)
-{
-  _LOG_DEBUG("onConnectionData");
-}
+// void
+// SyncLogic::onConnectionData(const shared_ptr<const ndn::Interest>& interest,
+//                             const shared_ptr<Data>& data)
+// {
+//   _LOG_DEBUG("onConnectionData");
+// }
 
-void
-SyncLogic::onConnectionDataTimeout(const shared_ptr<const ndn::Interest>& interest)
-{
-  _LOG_DEBUG("onConnectionDataTimeout");
-}
+// void
+// SyncLogic::onConnectionDataTimeout(const shared_ptr<const ndn::Interest>& interest)
+// {
+//   _LOG_DEBUG("onConnectionDataTimeout");
+// }
 
 #ifdef NS3_MODULE
 void
diff --git a/src/sync-logic.h b/src/sync-logic.h
index b9b3057..db28b90 100644
--- a/src/sync-logic.h
+++ b/src/sync-logic.h
@@ -87,11 +87,15 @@
    */
   SyncLogic (const ndn::Name& syncPrefix,
              ndn::ptr_lib::shared_ptr<SyncPolicyManager> syncPolicyManager,
+             ndn::ptr_lib::shared_ptr<ndn::Face> face,
+             ndn::ptr_lib::shared_ptr<ndn::Transport> transport,
              LogicUpdateCallback onUpdate,
              LogicRemoveCallback onRemove);
 
   SyncLogic (const ndn::Name& syncPrefix,
              ndn::ptr_lib::shared_ptr<SyncPolicyManager> syncPolicyManager,
+             ndn::ptr_lib::shared_ptr<ndn::Face> face,
+             ndn::ptr_lib::shared_ptr<ndn::Transport> transport,
              LogicPerBranchCallback onUpdateBranch);
 
   ~SyncLogic ();
@@ -143,15 +147,15 @@
   getBranchPrefixes() const;
 
 private:
-  void
-  connectToDaemon();
+  // void
+  // connectToDaemon();
 
-  void
-  onConnectionData(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
-                   const ndn::ptr_lib::shared_ptr<ndn::Data>& data);
+  // void
+  // onConnectionData(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
+  //                  const ndn::ptr_lib::shared_ptr<ndn::Data>& data);
  
-  void
-  onConnectionDataTimeout(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest);
+  // void
+  // onConnectionDataTimeout(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest);
  
   void
   delayedChecksLoop ();
diff --git a/src/sync-policy-manager.cc b/src/sync-policy-manager.cc
index d0850b6..d8cb1c1 100644
--- a/src/sync-policy-manager.cc
+++ b/src/sync-policy-manager.cc
@@ -26,16 +26,18 @@
 SyncPolicyManager::SyncPolicyManager(const Name& signingIdentity,
 				     const Name& signingCertificateName,
 				     const Name& syncPrefix,
+                                     shared_ptr<Face> face,
+                                     shared_ptr<Transport> transport,
                                      int stepLimit)
   : m_signingIdentity(signingIdentity)
   , m_signingCertificateName(signingCertificateName.getPrefix(signingCertificateName.size()-1))
   , m_syncPrefix(syncPrefix)
   , m_stepLimit(stepLimit)
 {
-  m_transport = make_shared<TcpTransport>();
-  m_face = make_shared<Face>(m_transport, make_shared<TcpTransport::ConnectionInfo>("localhost"));
+  // m_transport = make_shared<TcpTransport>();
+  // m_face = make_shared<Face>(m_transport, make_shared<TcpTransport::ConnectionInfo>("localhost"));
 
-  connectToDaemon();
+  // connectToDaemon();
   
   shared_ptr<IdentityStorage> publicStorage = make_shared<BasicIdentityStorage>();
   shared_ptr<PrivateKeyStorage> privateStorage = make_shared<OSXPrivateKeyStorage>();
@@ -53,29 +55,29 @@
 SyncPolicyManager::~SyncPolicyManager()
 {}
 
-void
-SyncPolicyManager::connectToDaemon()
-{
-  //Hack! transport does not connect to daemon unless an interest is expressed.
-  Name name("/ndn");
-  shared_ptr<ndn::Interest> interest = make_shared<ndn::Interest>(name);
-  m_face->expressInterest(*interest, 
-                          bind(&SyncPolicyManager::onConnectionData, this, _1, _2),
-                          bind(&SyncPolicyManager::onConnectionDataTimeout, this, _1));
-}
+// void
+// SyncPolicyManager::connectToDaemon()
+// {
+//   //Hack! transport does not connect to daemon unless an interest is expressed.
+//   Name name("/ndn");
+//   shared_ptr<ndn::Interest> interest = make_shared<ndn::Interest>(name);
+//   m_face->expressInterest(*interest, 
+//                           bind(&SyncPolicyManager::onConnectionData, this, _1, _2),
+//                           bind(&SyncPolicyManager::onConnectionDataTimeout, this, _1));
+// }
 
-void
-SyncPolicyManager::onConnectionData(const shared_ptr<const ndn::Interest>& interest,
-                                    const shared_ptr<Data>& data)
-{
-  _LOG_DEBUG("onConnectionData");
-}
+// void
+// SyncPolicyManager::onConnectionData(const shared_ptr<const ndn::Interest>& interest,
+//                                     const shared_ptr<Data>& data)
+// {
+//   _LOG_DEBUG("onConnectionData");
+// }
 
-void
-SyncPolicyManager::onConnectionDataTimeout(const shared_ptr<const ndn::Interest>& interest)
-{
-  _LOG_DEBUG("onConnectionDataTimeout");
-}
+// void
+// SyncPolicyManager::onConnectionDataTimeout(const shared_ptr<const ndn::Interest>& interest)
+// {
+//   _LOG_DEBUG("onConnectionDataTimeout");
+// }
 
 bool 
 SyncPolicyManager::skipVerifyAndTrust (const Data& data)
diff --git a/src/sync-policy-manager.h b/src/sync-policy-manager.h
index b7ec402..6a41f27 100644
--- a/src/sync-policy-manager.h
+++ b/src/sync-policy-manager.h
@@ -29,6 +29,8 @@
   SyncPolicyManager(const ndn::Name& signingIdentity,
                     const ndn::Name& signingCertificateName,
                     const ndn::Name& syncPrefix,
+                    ndn::ptr_lib::shared_ptr<ndn::Face> face,
+                    ndn::ptr_lib::shared_ptr<ndn::Transport> transport,
                     int m_stepLimit = 3);
   
   virtual
@@ -66,15 +68,15 @@
   // { face_ = face; }
 
 private:
-  void
-  connectToDaemon();
+  // void
+  // connectToDaemon();
 
-  void
-  onConnectionData(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
-                   const ndn::ptr_lib::shared_ptr<ndn::Data>& data);
+  // void
+  // onConnectionData(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
+  //                  const ndn::ptr_lib::shared_ptr<ndn::Data>& data);
  
-  void
-  onConnectionDataTimeout(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest);
+  // void
+  // onConnectionDataTimeout(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest);
 
   ndn::ptr_lib::shared_ptr<ndn::ValidationRequest>
   prepareIntroducerRequest(const ndn::Name& keyName,
diff --git a/src/sync-socket.cc b/src/sync-socket.cc
index 42612e0..a36d551 100644
--- a/src/sync-socket.cc
+++ b/src/sync-socket.cc
@@ -33,21 +33,22 @@
 namespace Sync {
 
 SyncSocket::SyncSocket (const string &syncPrefix, 
-                        shared_ptr<SyncPolicyManager> syncPolicyManager, 
+                        shared_ptr<SyncPolicyManager> syncPolicyManager,
+                        shared_ptr<Face> face,
+                        shared_ptr<Transport> transport,
                         NewDataCallback dataCallback, 
                         RemoveCallback rmCallback )
   : m_newDataCallback(dataCallback)
   , m_syncPolicyManager(syncPolicyManager)
+  , m_transport(transport)
+  , m_face(face)
   , m_syncLogic (syncPrefix,
                  syncPolicyManager,
+                 face,
+                 transport,
                  bind(&SyncSocket::passCallback, this, _1),
                  rmCallback)
 {
-  m_transport = make_shared<TcpTransport>();
-  m_face = make_shared<Face>(m_transport, make_shared<TcpTransport::ConnectionInfo>("localhost"));
-
-  connectToDaemon();
-
   shared_ptr<BasicIdentityStorage> publicStorage = make_shared<BasicIdentityStorage>();
   shared_ptr<OSXPrivateKeyStorage> privateStorage = make_shared<OSXPrivateKeyStorage>();
   m_identityManager = make_shared<IdentityManager>(publicStorage, privateStorage);
@@ -55,32 +56,31 @@
 
 SyncSocket::~SyncSocket()
 {
-  m_face->shutdown();
 }
 
-void
-SyncSocket::connectToDaemon()
-{
-  //Hack! transport does not connect to daemon unless an interest is expressed.
-  Name name("/ndn");
-  shared_ptr<ndn::Interest> interest = make_shared<ndn::Interest>(name);
-  m_face->expressInterest(*interest, 
-                          bind(&SyncSocket::onConnectionData, this, _1, _2),
-                          bind(&SyncSocket::onConnectionDataTimeout, this, _1));
-}
+// void
+// SyncSocket::connectToDaemon()
+// {
+//   //Hack! transport does not connect to daemon unless an interest is expressed.
+//   Name name("/ndn");
+//   shared_ptr<ndn::Interest> interest = make_shared<ndn::Interest>(name);
+//   m_face->expressInterest(*interest, 
+//                           bind(&SyncSocket::onConnectionData, this, _1, _2),
+//                           bind(&SyncSocket::onConnectionDataTimeout, this, _1));
+// }
 
-void
-SyncSocket::onConnectionData(const shared_ptr<const ndn::Interest>& interest,
-                             const shared_ptr<Data>& data)
-{
-  _LOG_DEBUG("onConnectionData");
-}
+// void
+// SyncSocket::onConnectionData(const shared_ptr<const ndn::Interest>& interest,
+//                              const shared_ptr<Data>& data)
+// {
+//   _LOG_DEBUG("onConnectionData");
+// }
 
-void
-SyncSocket::onConnectionDataTimeout(const shared_ptr<const ndn::Interest>& interest)
-{
-  _LOG_DEBUG("onConnectionDataTimeout");
-}
+// void
+// SyncSocket::onConnectionDataTimeout(const shared_ptr<const ndn::Interest>& interest)
+// {
+//   _LOG_DEBUG("onConnectionDataTimeout");
+// }
 
 bool 
 SyncSocket::publishData(const std::string &prefix, uint32_t session, const char *buf, size_t len, int freshness)
diff --git a/src/sync-socket.h b/src/sync-socket.h
index 170fde5..6fa7913 100644
--- a/src/sync-socket.h
+++ b/src/sync-socket.h
@@ -56,6 +56,8 @@
    */
   SyncSocket (const std::string &syncPrefix, 
               ndn::ptr_lib::shared_ptr<SyncPolicyManager> syncPolicyManager,
+              ndn::ptr_lib::shared_ptr<ndn::Face> face,
+              ndn::ptr_lib::shared_ptr<ndn::Transport> transport,
               NewDataCallback dataCallback, 
               RemoveCallback rmCallback);
 
@@ -88,15 +90,15 @@
   GetLocalPrefix (); 
   
 private:
-  void
-  connectToDaemon();
+  // void
+  // connectToDaemon();
 
-  void
-  onConnectionData(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
-                   const ndn::ptr_lib::shared_ptr<ndn::Data>& data);
+  // void
+  // onConnectionData(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest,
+  //                  const ndn::ptr_lib::shared_ptr<ndn::Data>& data);
  
-  void
-  onConnectionDataTimeout(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest);
+  // void
+  // onConnectionDataTimeout(const ndn::ptr_lib::shared_ptr<const ndn::Interest>& interest);
 
   void 
   passCallback(const std::vector<MissingDataInfo> &v) 
@@ -134,8 +136,8 @@
   SequenceLog m_sequenceLog;
   ndn::ptr_lib::shared_ptr<SyncPolicyManager> m_syncPolicyManager;
   ndn::ptr_lib::shared_ptr<ndn::IdentityManager> m_identityManager;
-  ndn::ptr_lib::shared_ptr<ndn::Face> m_face;
   ndn::ptr_lib::shared_ptr<ndn::Transport> m_transport;
+  ndn::ptr_lib::shared_ptr<ndn::Face> m_face;
   SyncLogic      m_syncLogic;
 };
 
