diff --git a/tools/ndngetfile.cpp b/tools/ndngetfile.cpp
index 4d26763..9764ca6 100644
--- a/tools/ndngetfile.cpp
+++ b/tools/ndngetfile.cpp
@@ -187,8 +187,9 @@
   if (m_retryCount++ < MAX_RETRY) {
     // Retransmit the interest
     fetchData(interest.getName());
-    if (m_verbose)
-      std::cerr << "TIMEOUT: retransmit interest for " << interest.getName() << std::endl;
+    if (m_verbose) {
+        std::cerr << "TIMEOUT: retransmit interest for " << interest.getName() << std::endl;
+    }
   }
   else {
     std::cerr << "TIMEOUT: last interest sent for segment #" << (m_nextSegment - 1) << std::endl;
@@ -225,48 +226,50 @@
   int opt;
   while ((opt = getopt(argc, argv, "vsul:w:o:")) != -1) {
     switch (opt) {
-    case 'v':
-      verbose = true;
-      break;
-    case 's':
-      single = true;
-      break;
-    case 'u':
-      versioned = true;
-      break;
-    case 'l':
-      try {
-        interestLifetime = boost::lexical_cast<int>(optarg);
-      }
-      catch (const boost::bad_lexical_cast&) {
-        std::cerr << "ERROR: -l option should be an integer." << std::endl;
-        return 1;
-      }
-      interestLifetime = std::max(interestLifetime, 0);
-      break;
-    case 'w':
-      try {
-        timeout = boost::lexical_cast<int>(optarg);
-      }
-      catch (const boost::bad_lexical_cast&) {
-        std::cerr << "ERROR: -w option should be an integer." << std::endl;
-        return 1;
-      }
-      timeout = std::max(timeout, 0);
-      break;
-    case 'o':
-      outputFile = optarg;
-      break;
-    default:
-      return usage(argv[0]);
+      case 'v':
+        verbose = true;
+        break;
+      case 's':
+        single = true;
+        break;
+      case 'u':
+        versioned = true;
+        break;
+      case 'l':
+        try {
+          interestLifetime = boost::lexical_cast<int>(optarg);
+        }
+        catch (const boost::bad_lexical_cast&) {
+          std::cerr << "ERROR: -l option should be an integer." << std::endl;
+          return 1;
+        }
+        interestLifetime = std::max(interestLifetime, 0);
+        break;
+      case 'w':
+        try {
+          timeout = boost::lexical_cast<int>(optarg);
+        }
+        catch (const boost::bad_lexical_cast&) {
+          std::cerr << "ERROR: -w option should be an integer." << std::endl;
+          return 1;
+        }
+        timeout = std::max(timeout, 0);
+        break;
+      case 'o':
+        outputFile = optarg;
+        break;
+      default:
+        return usage(argv[0]);
     }
   }
 
-  if (optind < argc)
+  if (optind < argc) {
     name = argv[optind];
+  }
 
-  if (name.empty())
+  if (name.empty()) {
     return usage(argv[0]);
+  }
 
   std::streambuf* buf;
   std::ofstream of;
diff --git a/tools/ndnputfile.cpp b/tools/ndnputfile.cpp
index 583d478..b4f40f4 100644
--- a/tools/ndnputfile.cpp
+++ b/tools/ndnputfile.cpp
@@ -265,7 +265,8 @@
 NdnPutFile::onInsertCommandResponse(const ndn::Interest& interest, const ndn::Data& data)
 {
   RepoCommandResponse response(data.getContent().blockFromValue());
-  int statusCode = response.getStatusCode();
+  //int statusCode = response.getStatusCode();
+  int statusCode = response.getCode();
   if (statusCode >= 400) {
     BOOST_THROW_EXCEPTION(Error("insert command failed with code " +
                                 boost::lexical_cast<std::string>(statusCode)));
@@ -397,7 +398,7 @@
 NdnPutFile::onCheckCommandResponse(const ndn::Interest& interest, const ndn::Data& data)
 {
   RepoCommandResponse response(data.getContent().blockFromValue());
-  int statusCode = response.getStatusCode();
+  int statusCode = response.getCode();
   if (statusCode >= 400) {
     BOOST_THROW_EXCEPTION(Error("Insert check command failed with code: " +
                                 boost::lexical_cast<std::string>(statusCode)));
@@ -542,8 +543,8 @@
   if (argc != 3)
     usage();
 
-  ndnPutFile.repoPrefix = Name(argv[0]);
-  ndnPutFile.ndnName = Name(argv[1]);
+  ndnPutFile.repoPrefix = Name(argv[0]); std::cout << "Repo prefix: " << argv[0] << std::endl;
+  ndnPutFile.ndnName = Name(argv[1]);    std::cout << "NDN name: " << argv[1] << std::endl;
   if (strcmp(argv[2], "-") == 0) {
 
     ndnPutFile.insertStream = &std::cin;
diff --git a/tools/ndnrepowatch.cpp b/tools/ndnrepowatch.cpp
index 0707c87..b844c00 100644
--- a/tools/ndnrepowatch.cpp
+++ b/tools/ndnrepowatch.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.
@@ -24,6 +24,8 @@
 #include <ndn-cxx/security/command-interest-signer.hpp>
 #include <ndn-cxx/security/key-chain.hpp>
 #include <ndn-cxx/security/signing-helpers.hpp>
+
+#include <boost/asio/io_service.hpp>
 #include <ndn-cxx/util/scheduler.hpp>
 
 #include <stdint.h>
@@ -201,7 +203,7 @@
 NdnRepoWatch::onWatchCommandResponse(const ndn::Interest& interest, const ndn::Data& data)
 {
   RepoCommandResponse response(data.getContent().blockFromValue());
-  int statusCode = response.getStatusCode();
+  int statusCode = response.getCode();
   if (statusCode >= 400) {
     BOOST_THROW_EXCEPTION(Error("Watch command failed with code " +
                                 boost::lexical_cast<std::string>(statusCode)));
@@ -264,7 +266,7 @@
 NdnRepoWatch::onStopCommandResponse(const ndn::Interest& interest, ndn::Data& data)
 {
   RepoCommandResponse response(data.getContent().blockFromValue());
-  int statusCode = response.getStatusCode();
+  int statusCode = response.getCode();
   if (statusCode != 101) {
     BOOST_THROW_EXCEPTION(Error("Watch stop command failed with code: " +
                                 boost::lexical_cast<std::string>(statusCode)));
diff --git a/tools/wscript b/tools/wscript
index aadf3a4..0a9fcbf 100644
--- a/tools/wscript
+++ b/tools/wscript
@@ -8,6 +8,6 @@
             bld(features=['cxx', 'cxxprogram'],
                 target='%s' % (str(app.change_ext('', '.cpp'))),
                 source=app,
-                use='NDN_CXX',
+                use=["NDN_CXX", "ndn-repo-objects"],
                 includes="../src",
                 )
