diff --git a/src/handles/delete-handle.cpp b/src/handles/delete-handle.cpp
index 5c06015..17882bb 100644
--- a/src/handles/delete-handle.cpp
+++ b/src/handles/delete-handle.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017, Regents of the University of California.
+ * Copyright (c) 2014-2018, Regents of the University of California.
  *
  * This file is part of NDN repo-ng (Next generation of NDN repository).
  * See AUTHORS.md for complete list of repo-ng authors and contributors.
@@ -44,7 +44,7 @@
   try {
     extractParameter(interest, prefix, parameter);
   }
-  catch (RepoCommandParameter::Error) {
+  catch (const RepoCommandParameter::Error&) {
     negativeReply(interest, 403);
     return;
   }
diff --git a/src/handles/watch-handle.cpp b/src/handles/watch-handle.cpp
index bee036f..6fe93d4 100644
--- a/src/handles/watch-handle.cpp
+++ b/src/handles/watch-handle.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017, Regents of the University of California.
+ * Copyright (c) 2014-2018, Regents of the University of California.
  *
  * This file is part of NDN repo-ng (Next generation of NDN repository).
  * See AUTHORS.md for complete list of repo-ng authors and contributors.
@@ -59,7 +59,7 @@
   try {
     extractParameter(interest, prefix, parameter);
   }
-  catch (RepoCommandParameter::Error) {
+  catch (const RepoCommandParameter::Error&) {
     negativeReply(interest, 403);
     return;
   }
@@ -223,7 +223,7 @@
   try {
     extractParameter(interest, prefix, parameter);
   }
-  catch (RepoCommandParameter::Error) {
+  catch (const RepoCommandParameter::Error&) {
     negativeReply(interest, 403);
     return;
   }
@@ -254,7 +254,7 @@
   try {
     extractParameter(interest, prefix, parameter);
   }
-  catch (RepoCommandParameter::Error) {
+  catch (const RepoCommandParameter::Error&) {
     negativeReply(interest, 403);
     return;
   }
diff --git a/src/handles/write-handle.cpp b/src/handles/write-handle.cpp
index 4586bad..0283728 100644
--- a/src/handles/write-handle.cpp
+++ b/src/handles/write-handle.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017, Regents of the University of California.
+ * Copyright (c) 2014-2018, Regents of the University of California.
  *
  * This file is part of NDN repo-ng (Next generation of NDN repository).
  * See AUTHORS.md for complete list of repo-ng authors and contributors.
@@ -57,12 +57,11 @@
 void
 WriteHandle::onValidated(const Interest& interest, const Name& prefix)
 {
-  //m_validResult = 1;
   RepoCommandParameter parameter;
   try {
     extractParameter(interest, prefix, parameter);
   }
-  catch (RepoCommandParameter::Error) {
+  catch (const RepoCommandParameter::Error&) {
     negativeReply(interest, 403);
     return;
   }
@@ -133,23 +132,23 @@
 void
 WriteHandle::onSegmentDataValidated(const Interest& interest, const Data& data, ProcessId processId)
 {
-  if (m_processes.count(processId) == 0) {
+  auto it = m_processes.find(processId);
+  if (it == m_processes.end()) {
     return;
   }
-  RepoCommandResponse& response = m_processes[processId].response;
+  RepoCommandResponse& response = it->second.response;
 
   //refresh endBlockId
-  Name::Component finalBlockId = data.getFinalBlockId();
-
-  if (!finalBlockId.empty()) {
-    SegmentNo final = finalBlockId.toSegment();
+  auto finalBlock = data.getFinalBlock();
+  if (finalBlock && finalBlock->isSegment()) {
+    auto finalSeg = finalBlock->toSegment();
     if (response.hasEndBlockId()) {
-      if (final < response.getEndBlockId()) {
-        response.setEndBlockId(final);
+      if (finalSeg < response.getEndBlockId()) {
+        response.setEndBlockId(finalSeg);
       }
     }
     else {
-      response.setEndBlockId(final);
+      response.setEndBlockId(finalSeg);
     }
   }
 
@@ -386,7 +385,7 @@
   try {
     extractParameter(interest, prefix, parameter);
   }
-  catch (RepoCommandParameter::Error) {
+  catch (const RepoCommandParameter::Error&) {
     negativeReply(interest, 403);
     return;
   }
diff --git a/tools/ndngetfile.cpp b/tools/ndngetfile.cpp
index dbc5b5d..4d26763 100644
--- a/tools/ndngetfile.cpp
+++ b/tools/ndngetfile.cpp
@@ -167,7 +167,7 @@
   uint64_t segment = name[-1].toSegment();
   BOOST_VERIFY(segment == (m_nextSegment - 1));
 
-  const ndn::name::Component& finalBlockId = data.getMetaInfo().getFinalBlockId();
+  auto finalBlockId = data.getFinalBlock();
   if (finalBlockId == name[-1]) {
     m_isFinished = true;
   }
diff --git a/tools/ndnputfile.cpp b/tools/ndnputfile.cpp
index 6b34376..583d478 100644
--- a/tools/ndnputfile.cpp
+++ b/tools/ndnputfile.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017, Regents of the University of California.
+ * Copyright (c) 2014-2018, Regents of the University of California.
  *
  * This file is part of NDN repo-ng (Next generation of NDN repository).
  * See AUTHORS.md for complete list of repo-ng authors and contributors.
@@ -201,7 +201,7 @@
                                     .appendSegment(m_currentSegmentNo));
 
     if (insertStream->peek() == std::istream::traits_type::eof()) {
-      data->setFinalBlockId(ndn::name::Component::fromSegment(m_currentSegmentNo));
+      data->setFinalBlock(ndn::name::Component::fromSegment(m_currentSegmentNo));
       m_isFinished = true;
     }
 
@@ -318,8 +318,7 @@
 
   if (m_isFinished) {
     uint64_t final = m_currentSegmentNo - 1;
-    item->second->setFinalBlockId(ndn::name::Component::fromSegment(final));
-
+    item->second->setFinalBlock(ndn::name::Component::fromSegment(final));
   }
   m_face.put(*item->second);
 }
