diff --git a/source/adios2/engine/dataman/DataManWriter.cpp b/source/adios2/engine/dataman/DataManWriter.cpp
index 1cf180ffe0fb5bbf3ec55ea8e8756ce948cdd4c5..39825a6ace651337c3fb41e01bd2970f060f2485 100644
--- a/source/adios2/engine/dataman/DataManWriter.cpp
+++ b/source/adios2/engine/dataman/DataManWriter.cpp
@@ -9,6 +9,7 @@
  */
 
 #include "DataManWriter.h"
+#include "DataManWriter.tcc"
 
 #include <iostream> //needs to go away, this is just for demo purposes
 
diff --git a/source/adios2/engine/dataman/DataManWriter.h b/source/adios2/engine/dataman/DataManWriter.h
index 44567dddff6d6fc6b497d17cfbe713b738c413db..1420ccc1f4994c4a638e607dc05d29f52d119d39 100644
--- a/source/adios2/engine/dataman/DataManWriter.h
+++ b/source/adios2/engine/dataman/DataManWriter.h
@@ -127,56 +127,7 @@ private:
                      const std::map<std::string, std::string> &mdtmParameters);
 
     template <class T>
-    void WriteVariableCommon(Variable<T> &variable, const T *values)
-    {
-        // here comes your magic at Writing now variable.m_UserValues has the
-        // data
-        // passed by the user
-        // set variable
-        variable.m_AppValues = values;
-        m_WrittenVariables.insert(variable.m_Name);
-
-        // This part will go away, this is just to monitor variables per rank
-
-        json jmsg;
-        jmsg["doid"] = m_Name;
-        jmsg["var"] = variable.m_Name;
-        jmsg["dtype"] = GetType<T>();
-        jmsg["putshape"] = variable.m_LocalDimensions;
-        if (variable.m_GlobalDimensions.size() == 0)
-            variable.m_GlobalDimensions = variable.m_LocalDimensions;
-        jmsg["varshape"] = variable.m_GlobalDimensions;
-        if (variable.m_Offsets.size() == 0)
-            variable.m_Offsets.assign(variable.m_LocalDimensions.size(), 0);
-        jmsg["offset"] = variable.m_Offsets;
-        jmsg["timestep"] = 0;
-        m_Man.put(values, jmsg);
-
-        if (m_DoMonitor)
-        {
-            MPI_Barrier(m_MPIComm);
-            std::cout << "I am hooked to the DataMan library\n";
-            std::cout << "putshape " << variable.m_LocalDimensions.size()
-                      << std::endl;
-            std::cout << "varshape " << variable.m_GlobalDimensions.size()
-                      << std::endl;
-            std::cout << "offset " << variable.m_Offsets.size() << std::endl;
-            for (int i = 0; i < m_SizeMPI; ++i)
-            {
-                if (i == m_RankMPI)
-                {
-                    std::cout << "Rank: " << m_RankMPI << "\n";
-                    variable.Monitor(std::cout);
-                    std::cout << std::endl;
-                }
-                else
-                {
-                    sleep(1);
-                }
-            }
-            MPI_Barrier(m_MPIComm);
-        }
-    }
+    void WriteVariableCommon(Variable<T> &variable, const T *values);
 };
 
 } // end namespace adios
diff --git a/source/adios2/engine/dataman/DataManWriter.tcc b/source/adios2/engine/dataman/DataManWriter.tcc
new file mode 100644
index 0000000000000000000000000000000000000000..e22d2e4b5fa9483030349cc094cc62c466fe0044
--- /dev/null
+++ b/source/adios2/engine/dataman/DataManWriter.tcc
@@ -0,0 +1,75 @@
+/*
+ * Distributed under the OSI-approved Apache License, Version 2.0.  See
+ * accompanying file Copyright.txt for details.
+ *
+ * DataMan.h
+ *
+ *  Created on: Jan 10, 2017
+ *      Author: wfg
+ */
+
+#ifndef ADIOS2_ENGINE_DATAMAN_DATAMAN_WRITER_TCC_
+#define ADIOS2_ENGINE_DATAMAN_DATAMAN_WRITER_TCC_
+
+#include "DataManWriter.h"
+
+#include "adios2/ADIOSMPI.h"
+
+namespace adios
+{
+
+template <class T>
+void DataManWriter::WriteVariableCommon(Variable<T> &variable, const T *values)
+{
+    // here comes your magic at Writing now variable.m_UserValues has the
+    // data
+    // passed by the user
+    // set variable
+    variable.m_AppValues = values;
+    m_WrittenVariables.insert(variable.m_Name);
+
+    // This part will go away, this is just to monitor variables per rank
+
+    json jmsg;
+    jmsg["doid"] = m_Name;
+    jmsg["var"] = variable.m_Name;
+    jmsg["dtype"] = GetType<T>();
+    jmsg["putshape"] = variable.m_LocalDimensions;
+    if (variable.m_GlobalDimensions.size() == 0)
+        variable.m_GlobalDimensions = variable.m_LocalDimensions;
+    jmsg["varshape"] = variable.m_GlobalDimensions;
+    if (variable.m_Offsets.size() == 0)
+        variable.m_Offsets.assign(variable.m_LocalDimensions.size(), 0);
+    jmsg["offset"] = variable.m_Offsets;
+    jmsg["timestep"] = 0;
+    m_Man.put(values, jmsg);
+
+    if (m_DoMonitor)
+    {
+        MPI_Barrier(m_MPIComm);
+        std::cout << "I am hooked to the DataMan library\n";
+        std::cout << "putshape " << variable.m_LocalDimensions.size()
+                  << std::endl;
+        std::cout << "varshape " << variable.m_GlobalDimensions.size()
+                  << std::endl;
+        std::cout << "offset " << variable.m_Offsets.size() << std::endl;
+        for (int i = 0; i < m_SizeMPI; ++i)
+        {
+            if (i == m_RankMPI)
+            {
+                std::cout << "Rank: " << m_RankMPI << "\n";
+                variable.Monitor(std::cout);
+                std::cout << std::endl;
+            }
+            else
+            {
+                sleep(1);
+            }
+        }
+        MPI_Barrier(m_MPIComm);
+    }
+}
+
+} // end namespace adios
+
+#endif /* ADIOS2_ENGINE_DATAMAN_DATAMAN_WRITER_H_ */