diff --git a/psrdada_cpp/dadaflow/DadaAutoGen.hpp b/psrdada_cpp/dadaflow/DadaAutoGen.hpp
index e0d5673d9faa6a443e13504064ed1a887ec008f2..875b5428aab51715f6735641928271a0295efb1b 100644
--- a/psrdada_cpp/dadaflow/DadaAutoGen.hpp
+++ b/psrdada_cpp/dadaflow/DadaAutoGen.hpp
@@ -18,6 +18,7 @@
 
 namespace psrdada_cpp {
 
+
 struct DefaultKeyFormatter {
     static std::string format(std::string const& key) {
         return key;
@@ -227,6 +228,14 @@ class InvalidBlockSize: public std::runtime_error
     }
 };
 
+
+template <typename ContainerType, typename... Dimensions>
+void dimensions_to_header(DescribedData<ContainerType, Dimensions...> const& data, DadaHeader& header)
+{
+    (DimensionParser<Dimensions>::to_header(data, header), ...);
+};
+
+
 template <typename T>
 class DadaAutoGen;
 
diff --git a/psrdada_cpp/dadaflow/test/src/DadaAutoGenTester.cpp b/psrdada_cpp/dadaflow/test/src/DadaAutoGenTester.cpp
index 06cdc116af636fb128398c9c0ba10a02700f11e2..22bbc3405e14000535241816b2876f416a30c3c7 100644
--- a/psrdada_cpp/dadaflow/test/src/DadaAutoGenTester.cpp
+++ b/psrdada_cpp/dadaflow/test/src/DadaAutoGenTester.cpp
@@ -125,6 +125,17 @@ TEST(DadaAutoGenTester, missing_key_parse)
     
 }
 
+TEST(DadaAutoGenTester, write_dims_to_header)
+{
+    DadaHeader header;
+    DescribedData<std::vector<int>, TimeDimension> data;
+    data.resize({10});
+    data.timestep(std::chrono::duration<double>(1.0001));
+    dimensions_to_header(data, header);
+    ASSERT_EQ(header.get<std::size_t>("NSAMPLES"), 10);
+    ASSERT_EQ(header.get<double>("TSAMP"), 1.0001);
+}
+
 
 
 } // namespace test