diff --git a/src/content-server.cpp b/src/content-server.cpp
index 382a029..968d8d1 100644
--- a/src/content-server.cpp
+++ b/src/content-server.cpp
@@ -117,14 +117,14 @@
 {
   Name forwardingHint = Name(interestFilter);
   Name interest = interestTrue.getName();
-  _LOG_DEBUG("I'm serving ForwardingHint: " << forwardingHint << " Interest: " << interest);
+  _LOG_TRACE("Serving ForwardingHint: " << forwardingHint << " Interest: " << interest);
   if (forwardingHint.size() > 0 && m_userName.size() >= forwardingHint.size() &&
       m_userName.getSubName(0, forwardingHint.size()) == forwardingHint) {
     _LOG_DEBUG("Triggered without Forwardinghint!");
     filterAndServeImpl(Name("/"), interest, interest); // try without forwarding hints
   }
 
-  _LOG_DEBUG("Triggered with Forwardinghint~!");
+  _LOG_TRACE("Triggered with Forwardinghint~!");
   filterAndServeImpl(forwardingHint, interest.getSubName(forwardingHint.size()),
                      interest); // always try with hint... :( have to
 }
diff --git a/src/dispatcher.cpp b/src/dispatcher.cpp
index cae79a2..d94c027 100644
--- a/src/dispatcher.cpp
+++ b/src/dispatcher.cpp
@@ -79,7 +79,7 @@
   m_actionFetcher =
     make_shared<FetchManager>(m_face, bind(&SyncLog::LookupLocator, &*m_syncLog, _1),
                               Name(BROADCAST_DOMAIN), // no appname suffix now
-                              3,
+                              3, false,
                               bind(&Dispatcher::Did_FetchManager_ActionFetch, this, _1, _2, _3, _4),
                               FetchManager::FinishCallback(), actionTaskDb);
 
@@ -87,7 +87,7 @@
   m_fileFetcher =
     make_shared<FetchManager>(m_face, bind(&SyncLog::LookupLocator, &*m_syncLog, _1),
                               Name(BROADCAST_DOMAIN), // no appname suffix now
-                              3, bind(&Dispatcher::Did_FetchManager_FileSegmentFetch, this, _1, _2,
+                              3, true, bind(&Dispatcher::Did_FetchManager_FileSegmentFetch, this, _1, _2,
                                       _3, _4),
                               bind(&Dispatcher::Did_FetchManager_FileFetchComplete, this, _1, _2),
                               fileTaskDb);
@@ -329,8 +329,7 @@
 
     Name fileNameBase = Name("/");
     fileNameBase.append(deviceName).append(CHRONOSHARE_APP).append("file");
-    //      fileNameBase.append(name::Component(hash));
-    fileNameBase.appendImplicitSha256Digest(hash);
+    fileNameBase.append(name::Component(hash));
 
     std::string hashStr = toHex(*hash);
     if (ObjectDb::doesExist(m_rootDir / ".chronoshare", deviceName, hashStr)) {
diff --git a/src/fetch-manager.cpp b/src/fetch-manager.cpp
index d8dd6a6..f7e428f 100644
--- a/src/fetch-manager.cpp
+++ b/src/fetch-manager.cpp
@@ -40,6 +40,7 @@
 
 FetchManager::FetchManager(Face& face, const Mapping& mapping, const Name& broadcastForwardingHint,
                            uint32_t parallelFetches, // = 3
+                           bool isSegment,
                            const SegmentCallback& defaultSegmentCallback,
                            const FinishCallback& defaultFinishCallback, const FetchTaskDbPtr& taskDb)
   : m_face(face)
@@ -53,6 +54,7 @@
   , m_taskDb(taskDb)
   , m_broadcastHint(broadcastForwardingHint)
   , m_ioService(m_face.getIoService())
+  , m_isSegment(isSegment)
 {
   // no need to check to often. if needed, will be rescheduled
   m_scheduledFetchesEvent =
@@ -102,7 +104,7 @@
 
   _LOG_TRACE("++++ Create fetcher: " << baseName);
   Fetcher* fetcher =
-    new Fetcher(m_face, segmentCallback, finishCallback,
+    new Fetcher(m_face, m_isSegment, segmentCallback, finishCallback,
                 bind(&FetchManager::DidFetchComplete, this, _1, _2, _3),
                 bind(&FetchManager::DidNoDataTimeout, this, _1), deviceName, baseName, minSeqNo,
                 maxSeqNo, time::seconds(30), forwardingHint);
diff --git a/src/fetch-manager.hpp b/src/fetch-manager.hpp
index 5dae0ff..6cd84c9 100644
--- a/src/fetch-manager.hpp
+++ b/src/fetch-manager.hpp
@@ -18,8 +18,8 @@
  * See AUTHORS.md for complete list of ChronoShare authors and contributors.
  */
 
-#ifndef FETCH_MANAGER_H
-#define FETCH_MANAGER_H
+#ifndef CHRONOSHARE_SRC_FETCH_MANAGER_HPP
+#define CHRONOSHARE_SRC_FETCH_MANAGER_HPP
 
 #include "fetch-task-db.hpp"
 #include "fetcher.hpp"
@@ -54,6 +54,7 @@
 public:
   FetchManager(Face& face, const Mapping& mapping, const Name& broadcastForwardingHint,
                uint32_t parallelFetches = 3,
+               bool isSegment = true,
                const SegmentCallback& defaultSegmentCallback = SegmentCallback(),
                const FinishCallback& defaultFinishCallback = FinishCallback(),
                const FetchTaskDbPtr& taskDb = FetchTaskDbPtr());
@@ -110,6 +111,8 @@
 
   const Name m_broadcastHint;
   boost::asio::io_service& m_ioService;
+
+  bool m_isSegment;
 };
 
 typedef shared_ptr<FetchManager> FetchManagerPtr;
@@ -117,4 +120,4 @@
 } // namespace chronoshare
 } // namespace ndn
 
-#endif // FETCHER_H
+#endif // CHRONOSHARE_SRC_FETCH_MANAGER_HPP
diff --git a/src/fetcher.cpp b/src/fetcher.cpp
index 56899de..5a11074 100644
--- a/src/fetcher.cpp
+++ b/src/fetcher.cpp
@@ -31,6 +31,7 @@
 _LOG_INIT(Fetcher);
 
 Fetcher::Fetcher(Face& face,
+                 bool isSegment,
                  const SegmentCallback& segmentCallback,
                  const FinishCallback& finishCallback,
                  const OnFetchCompleteCallback& onFetchComplete,
@@ -67,6 +68,7 @@
   , m_nextScheduledRetry(time::steady_clock::now())
 
   , m_ioService(m_face.getIoService())
+  , m_isSegment(isSegment)
 {
 }
 
@@ -110,15 +112,21 @@
 
     // cout << ">>> " << m_minSendSeqNo+1 << endl;
 
-    Interest interest(
-      Name(m_forwardingHint).append(m_name).appendNumber(m_minSendSeqNo + 1)); // Alex: this lifetime should be changed to RTO
-    _LOG_DEBUG("interest Name: " << interest);
-    interest.setInterestLifetime(time::seconds(1));
+    Name name = Name(m_forwardingHint).append(m_name);
+    if (m_isSegment) {
+       name.appendSegment(m_minSendSeqNo + 1);
+    }
+    else {
+       name.appendNumber(m_minSendSeqNo + 1);
+    }
+    Interest interest(name);
+    interest.setInterestLifetime(time::seconds(1));  // Alex: this lifetime should be changed to RTO
+    _LOG_DEBUG("interest: " << interest);
     m_face.expressInterest(interest,
                            bind(&Fetcher::OnData, this, m_minSendSeqNo + 1, _1, _2),
                            bind(&Fetcher::OnTimeout, this, m_minSendSeqNo + 1, _1));
 
-    _LOG_DEBUG(" >>> i ok");
+    _LOG_TRACE(" >>> i ok");
 
     m_activePipeline++;
   }
diff --git a/src/fetcher.hpp b/src/fetcher.hpp
index 40d5258..cdee6c3 100644
--- a/src/fetcher.hpp
+++ b/src/fetcher.hpp
@@ -44,6 +44,7 @@
   typedef std::function<void(Fetcher&)> OnFetchFailedCallback;
 
   Fetcher(Face& face,
+          bool isSegment,
           const SegmentCallback& segmentCallback, // callback passed by caller of FetchManager
           const FinishCallback& finishCallback,   // callback passed by caller of FetchManager
           const OnFetchCompleteCallback& onFetchComplete,
@@ -166,6 +167,7 @@
   std::mutex m_seqNoMutex;
 
   boost::asio::io_service& m_ioService;
+  bool m_isSegment;
 };
 
 typedef shared_ptr<Fetcher> FetcherPtr;
diff --git a/src/object-manager.cpp b/src/object-manager.cpp
index 4ca0361..649c29f 100644
--- a/src/object-manager.cpp
+++ b/src/object-manager.cpp
@@ -75,8 +75,8 @@
     name.append(deviceName)
       .append(m_appName)
       .append("file")
-      .appendImplicitSha256Digest(fileHash.computeDigest())
-      .appendNumber(segment);
+      .append(name::Component(fileHash.computeDigest()))
+      .appendSegment(segment);
 
     shared_ptr<Data> data = make_shared<Data>();
     data->setName(name);
@@ -94,9 +94,9 @@
     Name name = Name("/");
     name.append(m_appName)
       .append("file")
-      .appendImplicitSha256Digest(fileHash.computeDigest())
+      .append(name::Component(fileHash.computeDigest()))
       .append(deviceName)
-      .appendNumber(0);
+      .appendSegment(0);
 
     shared_ptr<Data> data = make_shared<Data>();
     data->setName(name);
diff --git a/src/sync-core.cpp b/src/sync-core.cpp
index 23c65c3..8e781f1 100644
--- a/src/sync-core.cpp
+++ b/src/sync-core.cpp
@@ -108,7 +108,7 @@
   // reply sync Interest with oldDigest as last component
 
   Name syncName(m_syncPrefix);
-  syncName.appendImplicitSha256Digest(oldDigest);
+  syncName.append(name::Component(oldDigest));
 
   BufferPtr syncData = serializeGZipMsg(*msg);
 
@@ -150,7 +150,7 @@
 {
   Name syncInterest(m_syncPrefix);
   //  syncInterest.append(name::Component(*m_rootDigest));
-  syncInterest.appendImplicitSha256Digest(m_rootDigest);
+  syncInterest.append(name::Component(m_rootDigest));
 
   _LOG_DEBUG("[" << m_log->GetLocalName() << "] >>> send SYNC Interest for " << toHex(*m_rootDigest)
                  << ": "
@@ -178,7 +178,7 @@
     // unfortunately we still don't recognize this digest
     // append the unknown digest
     Name recoverInterest(m_syncPrefix);
-    recoverInterest.append(RECOVER).appendImplicitSha256Digest(digest);
+    recoverInterest.append(RECOVER).append(name::Component(digest));
 
     _LOG_DEBUG("[" << m_log->GetLocalName() << "] >>> send RECOVER Interests for " << toHex(*digest));
 
diff --git a/tests/unit-tests/fetch-manager.t.cpp b/tests/unit-tests/fetch-manager.t.cpp
index 32304fb..69d8a05 100644
--- a/tests/unit-tests/fetch-manager.t.cpp
+++ b/tests/unit-tests/fetch-manager.t.cpp
@@ -55,7 +55,7 @@
     recvData.insert(seqno);
     differentNames.insert(basename);
     Name name = basename;
-    name.appendNumber(seqno);
+    name.appendSegment(seqno);
     segmentNames.insert(name);
 
     Block block = data->getContent();
@@ -111,7 +111,7 @@
 
         auto data = make_shared<Data>();
         Name name(baseName);
-        name.appendNumber(requestedSeqNo);
+        name.appendSegment(requestedSeqNo);
 
         data->setName(name);
         data->setFreshnessPeriod(time::seconds(300));
@@ -122,7 +122,7 @@
       }
     });
 
-  Fetcher fetcher(face, bind(&FetcherTestData::onData, this, _1, _2, _3, _4),
+  Fetcher fetcher(face, true, bind(&FetcherTestData::onData, this, _1, _2, _3, _4),
                   bind(&FetcherTestData::finish, this, _1, _2),
                   bind(&FetcherTestData::onComplete, this, _1),
                   bind(&FetcherTestData::onFail, this, _1), deviceName, Name("/fetchtest"), 0, 26,
