diff --git a/tools/ndngetfile.cpp b/tools/ndngetfile.cpp
index 559541c..b552ec8 100644
--- a/tools/ndngetfile.cpp
+++ b/tools/ndngetfile.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018, Regents of the University of California.
+ * Copyright (c) 2014-2019, 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.
@@ -17,7 +17,9 @@
  * repo-ng, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "ndngetfile.hpp"
+#include <ndn-cxx/data.hpp>
+#include <ndn-cxx/face.hpp>
+#include <ndn-cxx/interest.hpp>
 
 #include <fstream>
 #include <iostream>
@@ -29,13 +31,73 @@
 using ndn::Name;
 using ndn::Interest;
 using ndn::Data;
-using ndn::Block;
 
-using std::bind;
-using std::placeholders::_1;
-using std::placeholders::_2;
+class Consumer : boost::noncopyable
+{
+public:
+  Consumer(const std::string& dataName, std::ostream& os,
+           bool verbose, bool versioned, bool single,
+           int interestLifetime, int timeout,
+           bool mustBeFresh = false,
+           bool canBePrefix = false)
+    : m_dataName(dataName)
+    , m_os(os)
+    , m_verbose(verbose)
+    , m_hasVersion(versioned)
+    , m_isSingle(single)
+    , m_isFinished(false)
+    , m_isFirst(true)
+    , m_interestLifetime(interestLifetime)
+    , m_timeout(timeout)
+    , m_nextSegment(0)
+    , m_totalSize(0)
+    , m_retryCount(0)
+    , m_mustBeFresh(mustBeFresh)
+    , m_canBePrefix(canBePrefix)
+  {
+  }
 
-static const int MAX_RETRY = 3;
+  void
+  run();
+
+private:
+  void
+  fetchData(const ndn::Name& name);
+
+  void
+  onVersionedData(const ndn::Interest& interest, const ndn::Data& data);
+
+  void
+  onUnversionedData(const ndn::Interest& interest, const ndn::Data& data);
+
+  void
+  onTimeout(const ndn::Interest& interest);
+
+  void
+  readData(const ndn::Data& data);
+
+  void
+  fetchNextData(const ndn::Name& name, const ndn::Data& data);
+
+private:
+  ndn::Face m_face;
+  ndn::Name m_dataName;
+  std::ostream& m_os;
+  bool m_verbose;
+  bool m_hasVersion;
+  bool m_isSingle;
+  bool m_isFinished;
+  bool m_isFirst;
+  ndn::time::milliseconds m_interestLifetime;
+  ndn::time::milliseconds m_timeout;
+  uint64_t m_nextSegment;
+  int m_totalSize;
+  int m_retryCount;
+  bool m_mustBeFresh;
+  bool m_canBePrefix;
+
+  static constexpr int MAX_RETRY = 3;
+};
 
 void
 Consumer::fetchData(const Name& name)
@@ -148,7 +210,7 @@
 void
 Consumer::readData(const Data& data)
 {
-  const Block& content = data.getContent();
+  const auto& content = data.getContent();
   m_os.write(reinterpret_cast<const char*>(content.value()), content.value_size());
   m_totalSize += content.value_size();
   if (m_verbose) {
@@ -198,7 +260,7 @@
   }
 }
 
-int
+static int
 usage(const std::string& filename)
 {
   std::cerr << "Usage: \n    "
@@ -214,7 +276,7 @@
   return 1;
 }
 
-int
+static int
 main(int argc, char** argv)
 {
   std::string name;
diff --git a/tools/ndngetfile.hpp b/tools/ndngetfile.hpp
deleted file mode 100644
index 92cf799..0000000
--- a/tools/ndngetfile.hpp
+++ /dev/null
@@ -1,95 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * 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.
- *
- * repo-ng is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * repo-ng is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * repo-ng, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef REPO_NG_TOOLS_NDNGETFILE_HPP
-#define REPO_NG_TOOLS_NDNGETFILE_HPP
-
-#include <ndn-cxx/face.hpp>
-
-namespace repo {
-
-class Consumer : boost::noncopyable
-{
-public:
-  Consumer(const std::string& dataName, std::ostream& os,
-           bool verbose, bool versioned, bool single,
-           int interestLifetime, int timeout,
-           bool mustBeFresh = false,
-           bool canBePrefix = false)
-    : m_dataName(dataName)
-    , m_os(os)
-    , m_verbose(verbose)
-    , m_hasVersion(versioned)
-    , m_isSingle(single)
-    , m_isFinished(false)
-    , m_isFirst(true)
-    , m_interestLifetime(interestLifetime)
-    , m_timeout(timeout)
-    , m_nextSegment(0)
-    , m_totalSize(0)
-    , m_retryCount(0)
-    , m_mustBeFresh(mustBeFresh)
-    , m_canBePrefix(canBePrefix)
-  {
-  }
-
-  void
-  run();
-
-private:
-  void
-  fetchData(const ndn::Name& name);
-
-  void
-  onVersionedData(const ndn::Interest& interest, const ndn::Data& data);
-
-  void
-  onUnversionedData(const ndn::Interest& interest, const ndn::Data& data);
-
-  void
-  onTimeout(const ndn::Interest& interest);
-
-  void
-  readData(const ndn::Data& data);
-
-  void
-  fetchNextData(const ndn::Name& name, const ndn::Data& data);
-
-private:
-
-  ndn::Face m_face;
-  ndn::Name m_dataName;
-  std::ostream& m_os;
-  bool m_verbose;
-  bool m_hasVersion;
-  bool m_isSingle;
-  bool m_isFinished;
-  bool m_isFirst;
-  ndn::time::milliseconds m_interestLifetime;
-  ndn::time::milliseconds m_timeout;
-  uint64_t m_nextSegment;
-  int m_totalSize;
-  int m_retryCount;
-  bool m_mustBeFresh;
-  bool m_canBePrefix;
-};
-
-} // namespace repo
-
-#endif // REPO_NG_TOOLS_NDNGETFILE_HPP
