diff --git a/src/fetcher.hpp b/src/fetcher.hpp
index c1da2a3..40d5258 100644
--- a/src/fetcher.hpp
+++ b/src/fetcher.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2016, Regents of the University of California.
+ * Copyright (c) 2013-2017, Regents of the University of California.
  *
  * This file is part of ChronoShare, a decentralized file sharing application over NDN.
  *
@@ -18,47 +18,46 @@
  * See AUTHORS.md for complete list of ChronoShare authors and contributors.
  */
 
-#ifndef FETCHER_H
-#define FETCHER_H
+#ifndef CHRONOSHARE_SRC_FETCHER_HPP
+#define CHRONOSHARE_SRC_FETCHER_HPP
 
-#include "ccnx-name.h"
-#include "ccnx-wrapper.h"
+#include "core/chronoshare-common.hpp"
 
-#include "executor.h"
-#include <boost/date_time/posix_time/posix_time_types.hpp>
+#include <ndn-cxx/face.hpp>
+
+#include <set>
+#include <thread>
+#include <mutex>
 #include <boost/intrusive/list.hpp>
-#include <set>
 
-#include <set>
+namespace ndn {
+namespace chronoshare {
 
 class FetchManager;
 
 class Fetcher
 {
 public:
-  typedef boost::function<void(Ccnx::Name& deviceName, Ccnx::Name& baseName, uint64_t seq, Ccnx::PcoPtr pco)>
-    SegmentCallback;
-  typedef boost::function<void(Ccnx::Name& deviceName, Ccnx::Name& baseName)> FinishCallback;
-  typedef boost::function<void(Fetcher&, const Ccnx::Name& deviceName, const Ccnx::Name& baseName)>
-    OnFetchCompleteCallback;
-  typedef boost::function<void(Fetcher&)> OnFetchFailedCallback;
+  typedef std::function<void(Name& deviceName, Name& baseName, uint64_t seq, shared_ptr<Data> data)> SegmentCallback;
+  typedef std::function<void(Name& deviceName, Name& baseName)> FinishCallback;
+  typedef std::function<void(Fetcher&, const Name& deviceName, const Name& baseName)> OnFetchCompleteCallback;
+  typedef std::function<void(Fetcher&)> OnFetchFailedCallback;
 
-  Fetcher(Ccnx::CcnxWrapperPtr ccnx, ExecutorPtr executor,
+  Fetcher(Face& face,
           const SegmentCallback& segmentCallback, // callback passed by caller of FetchManager
           const FinishCallback& finishCallback,   // callback passed by caller of FetchManager
-          OnFetchCompleteCallback onFetchComplete,
-          OnFetchFailedCallback onFetchFailed, // callbacks provided by FetchManager
-          const Ccnx::Name& deviceName, const Ccnx::Name& name, int64_t minSeqNo, int64_t maxSeqNo,
-          boost::posix_time::time_duration timeout =
-            boost::posix_time::seconds(30), // this time is not precise, but sets min bound
-                                            // actual time depends on how fast Interests timeout
-          const Ccnx::Name& forwardingHint = Ccnx::Name());
+          const OnFetchCompleteCallback& onFetchComplete,
+          const OnFetchFailedCallback& onFetchFailed, // callbacks provided by FetchManager
+          const Name& deviceName, const Name& name, int64_t minSeqNo, int64_t maxSeqNo,
+          time::milliseconds timeout = time::seconds(30), // this time is not precise, but sets min bound
+                                                          // actual time depends on how fast Interests timeout
+          const Name& forwardingHint = Name());
   virtual ~Fetcher();
 
-  inline bool
+  bool
   IsActive() const;
 
-  inline bool
+  bool
   IsTimedWait() const
   {
     return m_timedwait;
@@ -68,46 +67,46 @@
   RestartPipeline();
 
   void
-  SetForwardingHint(const Ccnx::Name& forwardingHint);
+  SetForwardingHint(const Name& forwardingHint);
 
-  const Ccnx::Name&
+  const Name&
   GetForwardingHint() const
   {
     return m_forwardingHint;
   }
 
-  const Ccnx::Name&
+  const Name&
   GetName() const
   {
     return m_name;
   }
 
-  const Ccnx::Name&
+  const Name&
   GetDeviceName() const
   {
     return m_deviceName;
   }
 
-  double
+  time::seconds
   GetRetryPause() const
   {
     return m_retryPause;
   }
 
   void
-  SetRetryPause(double pause)
+  SetRetryPause(time::seconds pause)
   {
     m_retryPause = pause;
   }
 
-  boost::posix_time::ptime
+  const time::steady_clock::TimePoint&
   GetNextScheduledRetry() const
   {
     return m_nextScheduledRetry;
   }
 
   void
-  SetNextScheduledRetry(boost::posix_time::ptime nextScheduledRetry)
+  SetNextScheduledRetry(const time::steady_clock::TimePoint& nextScheduledRetry)
   {
     m_nextScheduledRetry = nextScheduledRetry;
   }
@@ -117,24 +116,16 @@
   FillPipeline();
 
   void
-  OnData(uint64_t seqno, const Ccnx::Name& name, Ccnx::PcoPtr data);
+  OnData(uint64_t seqno, const Interest& interest, Data& data);
 
   void
-  OnData_Execute(uint64_t seqno, Ccnx::Name name, Ccnx::PcoPtr data);
-
-  void
-  OnTimeout(uint64_t seqno, const Ccnx::Name& name, const Ccnx::Closure& closure,
-            Ccnx::Selectors selectors);
-
-  void
-  OnTimeout_Execute(uint64_t seqno, Ccnx::Name name, Ccnx::Closure closure,
-                    Ccnx::Selectors selectors);
+  OnTimeout(uint64_t seqno, const Interest& interest);
 
 public:
   boost::intrusive::list_member_hook<> m_managerListHook;
 
 private:
-  Ndnx::NdnxWrapperPtr m_ndnx;
+  Face& m_face;
 
   SegmentCallback m_segmentCallback;
   OnFetchCompleteCallback m_onFetchComplete;
@@ -145,55 +136,47 @@
   bool m_active;
   bool m_timedwait;
 
-  Ndnx::Name m_name;
-  Ndnx::Name m_deviceName;
-  Ndnx::Name m_forwardingHint;
+  Name m_name;
+  Name m_deviceName;
+  Name m_forwardingHint;
 
-  boost::posix_time::time_duration m_maximumNoActivityPeriod;
+  time::milliseconds m_maximumNoActivityPeriod;
 
   int64_t m_minSendSeqNo;
   int64_t m_maxInOrderRecvSeqNo;
   std::set<int64_t> m_outOfOrderRecvSeqNo;
   std::set<int64_t> m_inActivePipeline;
 
-  int64_t m_minSeqNo;
+  // int64_t m_minSeqNo;
   int64_t m_maxSeqNo;
 
   uint32_t m_pipeline;
   uint32_t m_activePipeline;
-  double m_rto;
-  double m_maxRto;
+  // double m_rto;
+  // double m_maxRto;
   bool m_slowStart;
   uint32_t m_threshold;
   uint32_t m_roundCount;
 
-  boost::posix_time::ptime m_lastPositiveActivity;
+  time::steady_clock::TimePoint m_lastPositiveActivity;
 
-  double m_retryPause; // pause to stop trying to fetch (for fetch-manager)
-  boost::posix_time::ptime m_nextScheduledRetry;
+  time::seconds m_retryPause; // pause to stop trying to fetch(for fetch-manager)
+  time::steady_clock::TimePoint m_nextScheduledRetry;
 
-  ExecutorPtr m_executor; // to serialize FillPipeline events
+  std::mutex m_seqNoMutex;
 
-  boost::mutex m_seqNoMutex;
-  boost::mutex m_rtoMutex;
-  boost::mutex m_pipelineMutex;
+  boost::asio::io_service& m_ioService;
 };
 
-typedef boost::error_info<struct tag_errmsg, std::string> errmsg_info_str;
+typedef shared_ptr<Fetcher> FetcherPtr;
 
-namespace Error {
-struct Fetcher : virtual boost::exception, virtual std::exception
-{
-};
-}
-
-typedef boost::shared_ptr<Fetcher> FetcherPtr;
-
-bool
+inline bool
 Fetcher::IsActive() const
 {
   return m_active;
 }
 
+} // namespace chronoshare
+} // namespace ndn
 
-#endif // FETCHER_H
+#endif // CHRONOSHARE_SRC_FETCHER_HPP
