diff --git a/Dockerfile b/Dockerfile
index 99bcb88..3644452 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -23,7 +23,7 @@
     mkdir -p /deps/debian
     touch /deps/debian/control
     cd /deps
-    for binary in ndnpeek ndnpoke ndncatchunks ndnputchunks ndnping ndnpingserver ndndump ndn-dissect; do
+    for binary in ndnget ndnputchunks ndnpeek ndnpoke ndnping ndnpingserver ndndump ndn-dissect; do
         dpkg-shlibdeps --ignore-missing-info "/usr/bin/${binary}" -O \
             | sed -n 's|^shlibs:Depends=||p' | sed 's| ([^)]*),\?||g' > "${binary}"
     done
@@ -32,10 +32,10 @@
 
 FROM ghcr.io/named-data/ndn-cxx-runtime:${NDN_CXX_VERSION} AS ndn-tools
 
+COPY --link --from=build /usr/bin/ndnget /usr/bin/
+COPY --link --from=build /usr/bin/ndnputchunks /usr/bin/
 COPY --link --from=build /usr/bin/ndnpeek /usr/bin/
 COPY --link --from=build /usr/bin/ndnpoke /usr/bin/
-COPY --link --from=build /usr/bin/ndncatchunks /usr/bin/
-COPY --link --from=build /usr/bin/ndnputchunks /usr/bin/
 COPY --link --from=build /usr/bin/ndnping /usr/bin/
 COPY --link --from=build /usr/bin/ndnpingserver /usr/bin/
 COPY --link --from=build /usr/bin/ndndump /usr/bin/
diff --git a/tests/chunks/consumer.t.cpp b/tests/get/consumer.t.cpp
similarity index 92%
rename from tests/chunks/consumer.t.cpp
rename to tests/get/consumer.t.cpp
index 741ee03..f43eac6 100644
--- a/tests/chunks/consumer.t.cpp
+++ b/tests/get/consumer.t.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.
  *
@@ -23,9 +23,9 @@
  * @author Andrea Tosatto
  */
 
-#include "tools/chunks/catchunks/consumer.hpp"
-#include "tools/chunks/catchunks/discover-version.hpp"
-#include "tools/chunks/catchunks/pipeline-interests.hpp"
+#include "tools/get/consumer.hpp"
+#include "tools/get/discover-version.hpp"
+#include "tools/get/pipeline-interests.hpp"
 
 #include "tests/test-common.hpp"
 #include "tests/io-fixture.hpp"
@@ -35,12 +35,12 @@
 
 #include <boost/test/tools/output_test_stream.hpp>
 
-namespace ndn::chunks::tests {
+namespace ndn::tests {
 
-using namespace ndn::tests;
+using namespace ndn::get;
 using boost::test_tools::output_test_stream;
 
-BOOST_AUTO_TEST_SUITE(Chunks)
+BOOST_AUTO_TEST_SUITE(Get)
 BOOST_AUTO_TEST_SUITE(TestConsumer)
 
 BOOST_AUTO_TEST_CASE(InOrderData)
@@ -167,6 +167,6 @@
 }
 
 BOOST_AUTO_TEST_SUITE_END() // TestConsumer
-BOOST_AUTO_TEST_SUITE_END() // Chunks
+BOOST_AUTO_TEST_SUITE_END() // Get
 
-} // namespace ndn::chunks::tests
+} // namespace ndn::tests
diff --git a/tests/chunks/discover-version.t.cpp b/tests/get/discover-version.t.cpp
similarity index 95%
rename from tests/chunks/discover-version.t.cpp
rename to tests/get/discover-version.t.cpp
index 6b429b8..b4cc519 100644
--- a/tests/chunks/discover-version.t.cpp
+++ b/tests/get/discover-version.t.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.
  *
@@ -23,7 +23,7 @@
  * @author Chavoosh Ghasemi
  */
 
-#include "tools/chunks/catchunks/discover-version.hpp"
+#include "tools/get/discover-version.hpp"
 
 #include "tests/test-common.hpp"
 #include "tests/io-fixture.hpp"
@@ -32,9 +32,9 @@
 #include <ndn-cxx/metadata-object.hpp>
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
-namespace ndn::chunks::tests {
+namespace ndn::tests {
 
-using namespace ndn::tests;
+using namespace ndn::get;
 
 class DiscoverVersionFixture : public IoFixture, public KeyChainFixture
 {
@@ -68,7 +68,7 @@
   bool isDiscoveryFinished = false;
 };
 
-BOOST_AUTO_TEST_SUITE(Chunks)
+BOOST_AUTO_TEST_SUITE(Get)
 BOOST_FIXTURE_TEST_SUITE(TestDiscoverVersion, DiscoverVersionFixture)
 
 BOOST_AUTO_TEST_CASE(Disabled)
@@ -211,6 +211,6 @@
 }
 
 BOOST_AUTO_TEST_SUITE_END() // TestDiscoverVersion
-BOOST_AUTO_TEST_SUITE_END() // Chunks
+BOOST_AUTO_TEST_SUITE_END() // Get
 
-} // namespace ndn::chunks::tests
+} // namespace ndn::tests
diff --git a/tests/chunks/pipeline-interests-aimd.t.cpp b/tests/get/pipeline-interests-aimd.t.cpp
similarity index 98%
rename from tests/chunks/pipeline-interests-aimd.t.cpp
rename to tests/get/pipeline-interests-aimd.t.cpp
index 4688ee4..b35c01c 100644
--- a/tests/chunks/pipeline-interests-aimd.t.cpp
+++ b/tests/get/pipeline-interests-aimd.t.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.
  *
@@ -25,15 +25,13 @@
  * @author Klaus Schneider
  */
 
-#include "tools/chunks/catchunks/pipeline-interests-aimd.hpp"
+#include "tools/get/pipeline-interests-aimd.hpp"
 
 #include "pipeline-interests-fixture.hpp"
 
 #include <cmath>
 
-namespace ndn::chunks::tests {
-
-using namespace ndn::tests;
+namespace ndn::tests {
 
 class PipelineInterestAimdFixture : public PipelineInterestsFixture
 {
@@ -74,7 +72,7 @@
   static constexpr double MARGIN = 0.001;
 };
 
-BOOST_AUTO_TEST_SUITE(Chunks)
+BOOST_AUTO_TEST_SUITE(Get)
 BOOST_FIXTURE_TEST_SUITE(TestPipelineInterestsAimd, PipelineInterestAimdFixture)
 
 BOOST_AUTO_TEST_CASE(SlowStart)
@@ -640,6 +638,6 @@
 }
 
 BOOST_AUTO_TEST_SUITE_END() // TestPipelineInterestsAimd
-BOOST_AUTO_TEST_SUITE_END() // Chunks
+BOOST_AUTO_TEST_SUITE_END() // Get
 
-} // namespace ndn::chunks::tests
+} // namespace ndn::tests
diff --git a/tests/chunks/pipeline-interests-cubic.t.cpp b/tests/get/pipeline-interests-cubic.t.cpp
similarity index 98%
rename from tests/chunks/pipeline-interests-cubic.t.cpp
rename to tests/get/pipeline-interests-cubic.t.cpp
index 6a36105..c1f3b60 100644
--- a/tests/chunks/pipeline-interests-cubic.t.cpp
+++ b/tests/get/pipeline-interests-cubic.t.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.
  *
@@ -25,13 +25,11 @@
  * @author Klaus Schneider
  */
 
-#include "tools/chunks/catchunks/pipeline-interests-cubic.hpp"
+#include "tools/get/pipeline-interests-cubic.hpp"
 
 #include "pipeline-interests-fixture.hpp"
 
-namespace ndn::chunks::tests {
-
-using namespace ndn::tests;
+namespace ndn::tests {
 
 class PipelineInterestCubicFixture : public PipelineInterestsFixture
 {
@@ -72,7 +70,7 @@
   static constexpr double MARGIN = 0.001;
 };
 
-BOOST_AUTO_TEST_SUITE(Chunks)
+BOOST_AUTO_TEST_SUITE(Get)
 BOOST_FIXTURE_TEST_SUITE(TestPipelineInterestsCubic, PipelineInterestCubicFixture)
 
 BOOST_AUTO_TEST_CASE(SlowStart)
@@ -160,7 +158,6 @@
   BOOST_CHECK_EQUAL(pipeline->m_nRetransmitted, 3);
   BOOST_CHECK_EQUAL(pipeline->m_nTimeouts,
       pipeline->m_nRetransmitted + pipeline->m_nSkippedRetx);
-
 }
 
 BOOST_AUTO_TEST_CASE(CongestionMarksWithCwa)
@@ -553,8 +550,7 @@
   BOOST_CHECK_EQUAL(face.getNPendingInterests(), 0);
 }
 
-
 BOOST_AUTO_TEST_SUITE_END() // TestPipelineInterestsCubic
-BOOST_AUTO_TEST_SUITE_END() // Chunks
+BOOST_AUTO_TEST_SUITE_END() // Get
 
-} // namespace ndn::chunks::tests
+} // namespace ndn::tests
diff --git a/tests/chunks/pipeline-interests-fixed.t.cpp b/tests/get/pipeline-interests-fixed.t.cpp
similarity index 96%
rename from tests/chunks/pipeline-interests-fixed.t.cpp
rename to tests/get/pipeline-interests-fixed.t.cpp
index 24f14e9..c6e5464 100644
--- a/tests/chunks/pipeline-interests-fixed.t.cpp
+++ b/tests/get/pipeline-interests-fixed.t.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.
  *
@@ -24,14 +24,14 @@
  * @author Chavoosh Ghasemi
  */
 
-#include "tools/chunks/catchunks/pipeline-interests-fixed.hpp"
-#include "tools/chunks/catchunks/data-fetcher.hpp"
+#include "tools/get/pipeline-interests-fixed.hpp"
+#include "tools/get/data-fetcher.hpp"
 
 #include "pipeline-interests-fixture.hpp"
 
 #include <cmath>
 
-namespace ndn::chunks::tests {
+namespace ndn::tests {
 
 class PipelineInterestFixedFixture : public PipelineInterestsFixture
 {
@@ -58,7 +58,7 @@
   PipelineInterestsFixed* pipeline;
 };
 
-BOOST_AUTO_TEST_SUITE(Chunks)
+BOOST_AUTO_TEST_SUITE(Get)
 BOOST_FIXTURE_TEST_SUITE(TestPipelineInterestsFixed, PipelineInterestFixedFixture)
 
 BOOST_AUTO_TEST_CASE(FullPipeline)
@@ -296,6 +296,6 @@
 }
 
 BOOST_AUTO_TEST_SUITE_END() // TestPipelineInterests
-BOOST_AUTO_TEST_SUITE_END() // Chunks
+BOOST_AUTO_TEST_SUITE_END() // Get
 
-} // namespace ndn::chunks::tests
+} // namespace ndn::tests
diff --git a/tests/chunks/pipeline-interests-fixture.hpp b/tests/get/pipeline-interests-fixture.hpp
similarity index 86%
rename from tests/chunks/pipeline-interests-fixture.hpp
rename to tests/get/pipeline-interests-fixture.hpp
index 4e42223..543f817 100644
--- a/tests/chunks/pipeline-interests-fixture.hpp
+++ b/tests/get/pipeline-interests-fixture.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,19 +26,19 @@
  * @author Chavoosh Ghasemi
  */
 
-#ifndef NDN_TOOLS_TESTS_CHUNKS_PIPELINE_INTERESTS_FIXTURE_HPP
-#define NDN_TOOLS_TESTS_CHUNKS_PIPELINE_INTERESTS_FIXTURE_HPP
+#ifndef NDN_TOOLS_TESTS_GET_PIPELINE_INTERESTS_FIXTURE_HPP
+#define NDN_TOOLS_TESTS_GET_PIPELINE_INTERESTS_FIXTURE_HPP
 
-#include "tools/chunks/catchunks/pipeline-interests.hpp"
+#include "tools/get/pipeline-interests.hpp"
 
 #include "tests/test-common.hpp"
 #include "tests/io-fixture.hpp"
 
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
-namespace ndn::chunks::tests {
+namespace ndn::tests {
 
-using namespace ndn::tests;
+using namespace ndn::get;
 
 class PipelineInterestsFixture : public IoFixture
 {
@@ -86,6 +86,6 @@
   std::unique_ptr<PipelineInterests> m_pipeline;
 };
 
-} // namespace ndn::chunks::tests
+} // namespace ndn::tests
 
-#endif // NDN_TOOLS_TESTS_CHUNKS_PIPELINE_INTERESTS_FIXTURE_HPP
+#endif // NDN_TOOLS_TESTS_GET_PIPELINE_INTERESTS_FIXTURE_HPP
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')
