diff --git a/tools/chunks/README.md b/tools/chunks/README.md
index 3c73bcf..2c68eed 100644
--- a/tools/chunks/README.md
+++ b/tools/chunks/README.md
@@ -1,45 +1,14 @@
-# ndncatchunks and ndnputchunks
+# ndnputchunks
 
-**ndncatchunks** and **ndnputchunks** are a pair of programs to transfer a file as Data segments.
+**ndnputchunks** is a producer program that reads a file from the standard input, and makes
+it available as a set of NDN Data segments. It appends version and segment number components
+to the specified name as needed, according to the [NDN naming conventions](
+https://named-data.net/publications/techreports/ndn-tr-22-3-ndn-memo-naming-conventions/).
 
-* **ndnputchunks** is a producer program that reads a file from the standard input, and makes
-  it available as a set of NDN Data segments. It appends version and segment number components
-  to the specified name as needed, according to the [NDN naming conventions](
-  https://named-data.net/publications/techreports/ndn-tr-22-3-ndn-memo-naming-conventions/).
-
-* **ndncatchunks** is a consumer program that fetches Data segments of a file, optionally
-  discovering the latest version of the file, and writes the content of the retrieved file to
-  the standard output.
-
-## Version discovery in ndncatchunks
-
-If a version component is present at the end of the user-specified NDN name, the provided version
-number will be used, without any version discovery process. Otherwise, discovery Interest(s) will
-be sent out to fetch metadata of the solicited content from which the Data version will be resolved.
-For more information about the packet format and naming conventions of Interest and Data packets
-used for version discovery in ndncatchunks, please refer to:
-[Realtime Data Retrieval (RDR) protocol](https://redmine.named-data.net/projects/ndn-tlv/wiki/RDR).
-
-## Interest pipeline types in ndncatchunks
-
-* `fixed`: maintains a fixed-size window of Interests in flight; the window size is configurable
-           via a command line option and defaults to 1.
-
-* `aimd` : adjusts the window size via additive-increase/multiplicative-decrease (AIMD).
-           By default, it uses a Conservative Window Adaptation, that is, the congestion window
-           will be decreased at most once per round-trip-time.
-
-* `cubic`: adjusts the window size similar to the TCP CUBIC algorithm.
-           For details about both aimd and cubic please refer to:
-           [A Practical Congestion Control Scheme for Named Data
-           Networking](https://conferences2.sigcomm.org/acm-icn/2016/proceedings/p21-schneider.pdf).
-
-The default Interest pipeline type is `cubic`.
+Files published by ndnputchunks can be fetched with [ndnget](../get/README.md).
 
 ## Usage examples
 
-### Publishing
-
 The following command will publish the text of the GPL-3 license under the `/localhost/demo/gpl3`
 prefix:
 
@@ -60,17 +29,3 @@
 
 If the specified version component is not valid, ndnputchunks will exit with an error. If no version
 component is specified, one will be generated and appended to the name.
-
-### Retrieval
-
-To retrieve the latest version of a published file, the following command can be used:
-
-    ndncatchunks /localhost/demo/gpl3
-
-To fetch a specific version of a published file, you can specify the version number at the end of
-the name. For example, if the version is known to be 1449078495094, the following command
-will fetch that exact version of the file (without version discovery):
-
-    ndncatchunks -Nt /localhost/demo/gpl3/v=1449078495094
-
-For more information, run the programs with `--help` as argument.
diff --git a/tools/chunks/wscript b/tools/chunks/wscript
index 417bbf6..31fddd1 100644
--- a/tools/chunks/wscript
+++ b/tools/chunks/wscript
@@ -2,30 +2,13 @@
 top = '../..'
 
 def build(bld):
-
     bld.objects(
-        target='ndncatchunks-objects',
-        source=bld.path.ant_glob('catchunks/*.cpp', excl='catchunks/main.cpp'),
-        use='core-objects')
-
-    bld.program(
-        target='../../bin/ndncatchunks',
-        name='ndncatchunks',
-        source='catchunks/main.cpp',
-        use='ndncatchunks-objects')
-
-    bld.objects(
-        target='ndnputchunks-objects',
+        target='chunks-objects',
         source=bld.path.ant_glob('putchunks/*.cpp', excl='putchunks/main.cpp'),
         use='core-objects')
 
     bld.program(
-        target='../../bin/ndnputchunks',
+        target=f'{top}/bin/ndnputchunks',
         name='ndnputchunks',
         source='putchunks/main.cpp',
-        use='ndnputchunks-objects')
-
-    ## (for unit tests)
-
-    bld(target='chunks-objects',
-        use='ndncatchunks-objects ndnputchunks-objects')
+        use='chunks-objects')
diff --git a/tools/get/README.md b/tools/get/README.md
new file mode 100644
index 0000000..90774c9
--- /dev/null
+++ b/tools/get/README.md
@@ -0,0 +1,44 @@
+# ndnget
+
+**ndnget** is a consumer program that fetches the segments (Data packets) of a named object,
+optionally discovering the latest version of the object, and then writes the content of the
+retrieved object to the standard output.
+
+## Version discovery in ndnget
+
+If a version component is present at the end of the user-specified NDN name, the provided version
+number will be used, without any version discovery process. Otherwise, discovery Interest(s) will
+be sent out to fetch metadata of the solicited content from which the Data version will be resolved.
+For more information about the packet format and naming conventions of Interest and Data packets
+used for version discovery in ndnget, please refer to:
+[Realtime Data Retrieval (RDR) protocol](https://redmine.named-data.net/projects/ndn-tlv/wiki/RDR).
+
+## Interest pipeline types in ndnget
+
+* `fixed`: maintains a fixed-size window of Interests in flight; the window size is configurable
+           via a command line option and defaults to 1.
+
+* `aimd` : adjusts the window size via additive-increase/multiplicative-decrease (AIMD).
+           By default, it uses a Conservative Window Adaptation, that is, the congestion window
+           will be decreased at most once per round-trip-time.
+
+* `cubic`: adjusts the window size similar to the TCP CUBIC algorithm.
+           For details about both aimd and cubic please refer to:
+           [A Practical Congestion Control Scheme for Named Data
+           Networking](https://conferences2.sigcomm.org/acm-icn/2016/proceedings/p21-schneider.pdf).
+
+The default Interest pipeline type is `cubic`.
+
+## Usage examples
+
+To retrieve the latest version of a published object, the following command can be used:
+
+    ndnget /localhost/demo/gpl3
+
+To fetch a specific version of a published object, you can specify the version number at the end
+of the name. For example, if the version is known to be 1449078495094, the following command
+will fetch that exact version of the object (without version discovery):
+
+    ndnget -Nt /localhost/demo/gpl3/v=1449078495094
+
+For more information, run the programs with `--help` as argument.
diff --git a/tools/chunks/catchunks/consumer.cpp b/tools/get/consumer.cpp
similarity index 95%
rename from tools/chunks/catchunks/consumer.cpp
rename to tools/get/consumer.cpp
index 6d30d70..10b9d04 100644
--- a/tools/chunks/catchunks/consumer.cpp
+++ b/tools/get/consumer.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -29,7 +29,7 @@
 
 #include <ndn-cxx/util/exception.hpp>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 Consumer::Consumer(security::Validator& validator, std::ostream& os)
   : m_validator(validator)
@@ -87,4 +87,4 @@
   }
 }
 
-} // namespace ndn::chunks
+} // namespace ndn::get
diff --git a/tools/chunks/catchunks/consumer.hpp b/tools/get/consumer.hpp
similarity index 91%
rename from tools/chunks/catchunks/consumer.hpp
rename to tools/get/consumer.hpp
index 980df60..9e40dba 100644
--- a/tools/chunks/catchunks/consumer.hpp
+++ b/tools/get/consumer.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -25,8 +25,8 @@
  * @author Andrea Tosatto
  */
 
-#ifndef NDN_TOOLS_CHUNKS_CATCHUNKS_CONSUMER_HPP
-#define NDN_TOOLS_CHUNKS_CATCHUNKS_CONSUMER_HPP
+#ifndef NDN_TOOLS_GET_CONSUMER_HPP
+#define NDN_TOOLS_GET_CONSUMER_HPP
 
 #include "discover-version.hpp"
 #include "pipeline-interests.hpp"
@@ -38,7 +38,7 @@
 #include <iostream>
 #include <map>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 /**
  * @brief Segmented version consumer.
@@ -101,6 +101,6 @@
   std::map<uint64_t, std::shared_ptr<const Data>> m_bufferedData;
 };
 
-} // namespace ndn::chunks
+} // namespace ndn::get
 
-#endif // NDN_TOOLS_CHUNKS_CATCHUNKS_CONSUMER_HPP
+#endif // NDN_TOOLS_GET_CONSUMER_HPP
diff --git a/tools/chunks/catchunks/data-fetcher.cpp b/tools/get/data-fetcher.cpp
similarity index 97%
rename from tools/chunks/catchunks/data-fetcher.cpp
rename to tools/get/data-fetcher.cpp
index e058ca0..1f3506a 100644
--- a/tools/chunks/catchunks/data-fetcher.cpp
+++ b/tools/get/data-fetcher.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -31,7 +31,7 @@
 #include <cmath>
 #include <iostream>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 std::shared_ptr<DataFetcher>
 DataFetcher::fetch(Face& face, const Interest& interest, int maxNackRetries, int maxTimeoutRetries,
@@ -173,4 +173,4 @@
   }
 }
 
-} // namespace ndn::chunks
+} // namespace ndn::get
diff --git a/tools/chunks/catchunks/data-fetcher.hpp b/tools/get/data-fetcher.hpp
similarity index 93%
rename from tools/chunks/catchunks/data-fetcher.hpp
rename to tools/get/data-fetcher.hpp
index 765963d..fa968a8 100644
--- a/tools/chunks/catchunks/data-fetcher.hpp
+++ b/tools/get/data-fetcher.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -24,8 +24,8 @@
  * @author Davide Pesavento
  */
 
-#ifndef NDN_TOOLS_CHUNKS_CATCHUNKS_DATA_FETCHER_HPP
-#define NDN_TOOLS_CHUNKS_CATCHUNKS_DATA_FETCHER_HPP
+#ifndef NDN_TOOLS_GET_DATA_FETCHER_HPP
+#define NDN_TOOLS_GET_DATA_FETCHER_HPP
 
 #include "core/common.hpp"
 
@@ -34,7 +34,7 @@
 
 #include <functional>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 /**
  * @brief Fetch data for a given interest and handle timeout or nack error with retries.
@@ -130,6 +130,6 @@
   bool m_hasError = false;
 };
 
-} // namespace ndn::chunks
+} // namespace ndn::get
 
-#endif // NDN_TOOLS_CHUNKS_CATCHUNKS_DATA_FETCHER_HPP
+#endif // NDN_TOOLS_GET_DATA_FETCHER_HPP
diff --git a/tools/chunks/catchunks/discover-version.cpp b/tools/get/discover-version.cpp
similarity index 96%
rename from tools/chunks/catchunks/discover-version.cpp
rename to tools/get/discover-version.cpp
index 3e75850..530e469 100644
--- a/tools/chunks/catchunks/discover-version.cpp
+++ b/tools/get/discover-version.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -33,7 +33,7 @@
 
 #include <iostream>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 DiscoverVersion::DiscoverVersion(Face& face, const Name& prefix, const Options& options)
   : m_face(face)
@@ -94,4 +94,4 @@
   onDiscoverySuccess(mobject.getVersionedName());
 }
 
-} // namespace ndn::chunks
+} // namespace ndn::get
diff --git a/tools/chunks/catchunks/discover-version.hpp b/tools/get/discover-version.hpp
similarity index 87%
rename from tools/chunks/catchunks/discover-version.hpp
rename to tools/get/discover-version.hpp
index 1098d85..99eaa18 100644
--- a/tools/chunks/catchunks/discover-version.hpp
+++ b/tools/get/discover-version.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -26,15 +26,15 @@
  * @author Chavoosh Ghasemi
  */
 
-#ifndef NDN_TOOLS_CHUNKS_CATCHUNKS_DISCOVER_VERSION_HPP
-#define NDN_TOOLS_CHUNKS_CATCHUNKS_DISCOVER_VERSION_HPP
+#ifndef NDN_TOOLS_GET_DISCOVER_VERSION_HPP
+#define NDN_TOOLS_GET_DISCOVER_VERSION_HPP
 
 #include "options.hpp"
 
 #include <ndn-cxx/face.hpp>
 #include <ndn-cxx/util/signal.hpp>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 class DataFetcher;
 
@@ -73,6 +73,6 @@
   std::shared_ptr<DataFetcher> m_fetcher;
 };
 
-} // namespace ndn::chunks
+} // namespace ndn::get
 
-#endif // NDN_TOOLS_CHUNKS_CATCHUNKS_DISCOVER_VERSION_HPP
+#endif // NDN_TOOLS_GET_DISCOVER_VERSION_HPP
diff --git a/tools/chunks/catchunks/main.cpp b/tools/get/main.cpp
similarity index 97%
rename from tools/chunks/catchunks/main.cpp
rename to tools/get/main.cpp
index 6c763a9..bd1a0e8 100644
--- a/tools/chunks/catchunks/main.cpp
+++ b/tools/get/main.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -47,7 +47,7 @@
 #include <fstream>
 #include <iostream>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 namespace po = boost::program_options;
 
@@ -170,7 +170,7 @@
   }
 
   if (vm.count("version") > 0) {
-    std::cout << "ndncatchunks " << tools::VERSION << "\n";
+    std::cout << "ndnget " << tools::VERSION << "\n";
     return 0;
   }
 
@@ -310,10 +310,10 @@
   return 0;
 }
 
-} // namespace ndn::chunks
+} // namespace ndn::get
 
 int
 main(int argc, char* argv[])
 {
-  return ndn::chunks::main(argc, argv);
+  return ndn::get::main(argc, argv);
 }
diff --git a/tools/chunks/catchunks/options.hpp b/tools/get/options.hpp
similarity index 90%
rename from tools/chunks/catchunks/options.hpp
rename to tools/get/options.hpp
index d21481a..5b65540 100644
--- a/tools/chunks/catchunks/options.hpp
+++ b/tools/get/options.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -24,15 +24,15 @@
  * @author Davide Pesavento
  */
 
-#ifndef NDN_TOOLS_CHUNKS_CATCHUNKS_OPTIONS_HPP
-#define NDN_TOOLS_CHUNKS_CATCHUNKS_OPTIONS_HPP
+#ifndef NDN_TOOLS_GET_OPTIONS_HPP
+#define NDN_TOOLS_GET_OPTIONS_HPP
 
 #include <ndn-cxx/interest.hpp>
 #include <ndn-cxx/util/time.hpp>
 
 #include <limits>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 struct Options
 {
@@ -64,6 +64,6 @@
   bool enableFastConv = false;  ///< use cubic fast convergence
 };
 
-} // namespace ndn::chunks
+} // namespace ndn::get
 
-#endif // NDN_TOOLS_CHUNKS_CATCHUNKS_OPTIONS_HPP
+#endif // NDN_TOOLS_GET_OPTIONS_HPP
diff --git a/tools/chunks/catchunks/pipeline-interests-adaptive.cpp b/tools/get/pipeline-interests-adaptive.cpp
similarity index 98%
rename from tools/chunks/catchunks/pipeline-interests-adaptive.cpp
rename to tools/get/pipeline-interests-adaptive.cpp
index 492229f..96949ef 100644
--- a/tools/chunks/catchunks/pipeline-interests-adaptive.cpp
+++ b/tools/get/pipeline-interests-adaptive.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -33,7 +33,7 @@
 #include <iomanip>
 #include <iostream>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 PipelineInterestsAdaptive::PipelineInterestsAdaptive(Face& face,
                                                      RttEstimatorWithStats& rttEstimator,
@@ -458,4 +458,4 @@
   return os;
 }
 
-} // namespace ndn::chunks
+} // namespace ndn::get
diff --git a/tools/chunks/catchunks/pipeline-interests-adaptive.hpp b/tools/get/pipeline-interests-adaptive.hpp
similarity index 94%
rename from tools/chunks/catchunks/pipeline-interests-adaptive.hpp
rename to tools/get/pipeline-interests-adaptive.hpp
index 572418f..23e1138 100644
--- a/tools/chunks/catchunks/pipeline-interests-adaptive.hpp
+++ b/tools/get/pipeline-interests-adaptive.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -26,8 +26,8 @@
  * @author Klaus Schneider
  */
 
-#ifndef NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_ADAPTIVE_HPP
-#define NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_ADAPTIVE_HPP
+#ifndef NDN_TOOLS_GET_PIPELINE_INTERESTS_ADAPTIVE_HPP
+#define NDN_TOOLS_GET_PIPELINE_INTERESTS_ADAPTIVE_HPP
 
 #include "pipeline-interests.hpp"
 
@@ -38,7 +38,7 @@
 #include <queue>
 #include <unordered_map>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 using util::RttEstimatorWithStats;
 
@@ -70,8 +70,8 @@
  *
  * Retrieves all segmented Data under the specified prefix by maintaining a dynamic
  * congestion window combined with a Conservative Loss Adaptation algorithm. For details,
- * please refer to the description in section "Interest pipeline types in ndncatchunks" of
- * tools/chunks/README.md
+ * please refer to the description in section "Interest pipeline types in ndnget" of
+ * tools/get/README.md
  *
  * Provides retrieved Data on arrival with no ordering guarantees. Data is delivered to the
  * PipelineInterests' user via callback immediately upon arrival.
@@ -226,6 +226,6 @@
   std::string m_failureReason;
 };
 
-} // namespace ndn::chunks
+} // namespace ndn::get
 
-#endif // NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_ADAPTIVE_HPP
+#endif // NDN_TOOLS_GET_PIPELINE_INTERESTS_ADAPTIVE_HPP
diff --git a/tools/chunks/catchunks/pipeline-interests-aimd.cpp b/tools/get/pipeline-interests-aimd.cpp
similarity index 94%
rename from tools/chunks/catchunks/pipeline-interests-aimd.cpp
rename to tools/get/pipeline-interests-aimd.cpp
index 4d84fdd..37beb58 100644
--- a/tools/chunks/catchunks/pipeline-interests-aimd.cpp
+++ b/tools/get/pipeline-interests-aimd.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2022, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -30,7 +30,7 @@
 
 #include <cmath>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 PipelineInterestsAimd::PipelineInterestsAimd(Face& face, RttEstimatorWithStats& rttEstimator,
                                              const Options& opts)
@@ -64,4 +64,4 @@
   emitSignal(afterCwndChange, time::steady_clock::now() - getStartTime(), m_cwnd);
 }
 
-} // namespace ndn::chunks
+} // namespace ndn::get
diff --git a/tools/chunks/catchunks/pipeline-interests-aimd.hpp b/tools/get/pipeline-interests-aimd.hpp
similarity index 83%
rename from tools/chunks/catchunks/pipeline-interests-aimd.hpp
rename to tools/get/pipeline-interests-aimd.hpp
index 1792f95..858db87 100644
--- a/tools/chunks/catchunks/pipeline-interests-aimd.hpp
+++ b/tools/get/pipeline-interests-aimd.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2022, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -26,12 +26,12 @@
  * @author Klaus Schneider
  */
 
-#ifndef NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_AIMD_HPP
-#define NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_AIMD_HPP
+#ifndef NDN_TOOLS_GET_PIPELINE_INTERESTS_AIMD_HPP
+#define NDN_TOOLS_GET_PIPELINE_INTERESTS_AIMD_HPP
 
 #include "pipeline-interests-adaptive.hpp"
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 /**
  * @brief Implements AIMD window increase and decrease.
@@ -49,6 +49,6 @@
   decreaseWindow() final;
 };
 
-} // namespace ndn::chunks
+} // namespace ndn::get
 
-#endif // NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_AIMD_HPP
+#endif // NDN_TOOLS_GET_PIPELINE_INTERESTS_AIMD_HPP
diff --git a/tools/chunks/catchunks/pipeline-interests-cubic.cpp b/tools/get/pipeline-interests-cubic.cpp
similarity index 96%
rename from tools/chunks/catchunks/pipeline-interests-cubic.cpp
rename to tools/get/pipeline-interests-cubic.cpp
index 7fa57a5..a74e602 100644
--- a/tools/chunks/catchunks/pipeline-interests-cubic.cpp
+++ b/tools/get/pipeline-interests-cubic.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -28,7 +28,7 @@
 #include <cmath>
 #include <iostream>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 constexpr double CUBIC_C = 0.4;
 
@@ -111,4 +111,4 @@
   emitSignal(afterCwndChange, time::steady_clock::now() - getStartTime(), m_cwnd);
 }
 
-} // namespace ndn::chunks
+} // namespace ndn::get
diff --git a/tools/chunks/catchunks/pipeline-interests-cubic.hpp b/tools/get/pipeline-interests-cubic.hpp
similarity index 85%
rename from tools/chunks/catchunks/pipeline-interests-cubic.hpp
rename to tools/get/pipeline-interests-cubic.hpp
index 87b4824..8451fd3 100644
--- a/tools/chunks/catchunks/pipeline-interests-cubic.hpp
+++ b/tools/get/pipeline-interests-cubic.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2022, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -23,12 +23,12 @@
  * @author Klaus Schneider
  */
 
-#ifndef NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_CUBIC_HPP
-#define NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_CUBIC_HPP
+#ifndef NDN_TOOLS_GET_PIPELINE_INTERESTS_CUBIC_HPP
+#define NDN_TOOLS_GET_PIPELINE_INTERESTS_CUBIC_HPP
 
 #include "pipeline-interests-adaptive.hpp"
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 /**
  * @brief Implements Cubic window increase and decrease.
@@ -54,6 +54,6 @@
   time::steady_clock::time_point m_lastDecrease; ///< time of last window decrease
 };
 
-} // namespace ndn::chunks
+} // namespace ndn::get
 
-#endif // NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_CUBIC_HPP
+#endif // NDN_TOOLS_GET_PIPELINE_INTERESTS_CUBIC_HPP
diff --git a/tools/chunks/catchunks/pipeline-interests-fixed.cpp b/tools/get/pipeline-interests-fixed.cpp
similarity index 97%
rename from tools/chunks/catchunks/pipeline-interests-fixed.cpp
rename to tools/get/pipeline-interests-fixed.cpp
index 9e8ffa1..4d26a04 100644
--- a/tools/chunks/catchunks/pipeline-interests-fixed.cpp
+++ b/tools/get/pipeline-interests-fixed.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -32,7 +32,7 @@
 
 #include <iostream>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 PipelineInterestsFixed::PipelineInterestsFixed(Face& face, const Options& opts)
   : PipelineInterests(face, opts)
@@ -194,4 +194,4 @@
   }
 }
 
-} // namespace ndn::chunks
+} // namespace ndn::get
diff --git a/tools/chunks/catchunks/pipeline-interests-fixed.hpp b/tools/get/pipeline-interests-fixed.hpp
similarity index 90%
rename from tools/chunks/catchunks/pipeline-interests-fixed.hpp
rename to tools/get/pipeline-interests-fixed.hpp
index 8e9e3ce..6325123 100644
--- a/tools/chunks/catchunks/pipeline-interests-fixed.hpp
+++ b/tools/get/pipeline-interests-fixed.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024,  Regents of the University of California,
+ * Copyright (c) 2016-2025,  Regents of the University of California,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University.
  *
@@ -27,14 +27,14 @@
  * @author Chavoosh Ghasemi
  */
 
-#ifndef NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_FIXED_HPP
-#define NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_FIXED_HPP
+#ifndef NDN_TOOLS_GET_PIPELINE_INTERESTS_FIXED_HPP
+#define NDN_TOOLS_GET_PIPELINE_INTERESTS_FIXED_HPP
 
 #include "pipeline-interests.hpp"
 
 #include <vector>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 class DataFetcher;
 
@@ -92,6 +92,6 @@
   bool m_hasFailure = false;
 };
 
-} // namespace ndn::chunks
+} // namespace ndn::get
 
-#endif // NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_FIXED_HPP
+#endif // NDN_TOOLS_GET_PIPELINE_INTERESTS_FIXED_HPP
diff --git a/tools/chunks/catchunks/pipeline-interests.cpp b/tools/get/pipeline-interests.cpp
similarity index 97%
rename from tools/chunks/catchunks/pipeline-interests.cpp
rename to tools/get/pipeline-interests.cpp
index 2e29487..afcbd0c 100644
--- a/tools/chunks/catchunks/pipeline-interests.cpp
+++ b/tools/get/pipeline-interests.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -36,7 +36,7 @@
 
 #include <iostream>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 PipelineInterests::PipelineInterests(Face& face, const Options& opts)
   : m_options(opts)
@@ -157,4 +157,4 @@
   return "";
 }
 
-} // namespace ndn::chunks
+} // namespace ndn::get
diff --git a/tools/chunks/catchunks/pipeline-interests.hpp b/tools/get/pipeline-interests.hpp
similarity index 94%
rename from tools/chunks/catchunks/pipeline-interests.hpp
rename to tools/get/pipeline-interests.hpp
index 2757b21..93245c2 100644
--- a/tools/chunks/catchunks/pipeline-interests.hpp
+++ b/tools/get/pipeline-interests.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2024, Regents of the University of California,
+ * Copyright (c) 2016-2025, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -28,8 +28,8 @@
  * @author Chavoosh Ghasemi
  */
 
-#ifndef NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_HPP
-#define NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_HPP
+#ifndef NDN_TOOLS_GET_PIPELINE_INTERESTS_HPP
+#define NDN_TOOLS_GET_PIPELINE_INTERESTS_HPP
 
 #include "core/common.hpp"
 #include "options.hpp"
@@ -38,7 +38,7 @@
 
 #include <functional>
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 /**
  * @brief Service for retrieving Data via an Interest pipeline
@@ -181,6 +181,6 @@
   return packet.getName().at(-1).toSegment();
 }
 
-} // namespace ndn::chunks
+} // namespace ndn::get
 
-#endif // NDN_TOOLS_CHUNKS_CATCHUNKS_PIPELINE_INTERESTS_HPP
+#endif // NDN_TOOLS_GET_PIPELINE_INTERESTS_HPP
diff --git a/tools/chunks/catchunks/statistics-collector.cpp b/tools/get/statistics-collector.cpp
similarity index 93%
rename from tools/chunks/catchunks/statistics-collector.cpp
rename to tools/get/statistics-collector.cpp
index 2e303c9..214402f 100644
--- a/tools/chunks/catchunks/statistics-collector.cpp
+++ b/tools/get/statistics-collector.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2022,  Regents of the University of California,
+ * Copyright (c) 2016-2025,  Regents of the University of California,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University.
  *
@@ -24,7 +24,7 @@
 
 #include "statistics-collector.hpp"
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 StatisticsCollector::StatisticsCollector(PipelineInterestsAdaptive& pipeline,
                                          std::ostream& osCwnd, std::ostream& osRtt)
@@ -47,4 +47,4 @@
   });
 }
 
-} // namespace ndn::chunks
+} // namespace ndn::get
diff --git a/tools/chunks/catchunks/statistics-collector.hpp b/tools/get/statistics-collector.hpp
similarity index 82%
rename from tools/chunks/catchunks/statistics-collector.hpp
rename to tools/get/statistics-collector.hpp
index 95abbae..4aba545 100644
--- a/tools/chunks/catchunks/statistics-collector.hpp
+++ b/tools/get/statistics-collector.hpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2022,  Regents of the University of California,
+ * Copyright (c) 2016-2025,  Regents of the University of California,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University.
  *
@@ -22,12 +22,12 @@
  * @author Weiwei Liu
  */
 
-#ifndef NDN_TOOLS_CHUNKS_CATCHUNKS_STATISTICS_COLLECTOR_HPP
-#define NDN_TOOLS_CHUNKS_CATCHUNKS_STATISTICS_COLLECTOR_HPP
+#ifndef NDN_TOOLS_GET_STATISTICS_COLLECTOR_HPP
+#define NDN_TOOLS_GET_STATISTICS_COLLECTOR_HPP
 
 #include "pipeline-interests-adaptive.hpp"
 
-namespace ndn::chunks {
+namespace ndn::get {
 
 /**
  * @brief Statistics collector for Adaptive pipelines
@@ -43,6 +43,6 @@
   std::ostream& m_osRtt;
 };
 
-} // namespace ndn::chunks
+} // namespace ndn::get
 
-#endif // NDN_TOOLS_CHUNKS_CATCHUNKS_STATISTICS_COLLECTOR_HPP
+#endif // NDN_TOOLS_GET_STATISTICS_COLLECTOR_HPP
diff --git a/tools/get/wscript b/tools/get/wscript
new file mode 100644
index 0000000..9a325c4
--- /dev/null
+++ b/tools/get/wscript
@@ -0,0 +1,17 @@
+# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+top = '../..'
+
+def build(bld):
+    bld.objects(
+        target='get-objects',
+        source=bld.path.ant_glob('*.cpp', excl='main.cpp'),
+        use='core-objects')
+
+    bld.program(
+        target=f'{top}/bin/ndnget',
+        name='ndnget',
+        source='main.cpp',
+        use='get-objects')
+
+    # backward compatibility
+    bld.symlink_as('${BINDIR}/ndncatchunks', 'ndnget')
