diff --git a/include/utilities/format/bp1/BP1.h b/include/utilities/format/bp1/BP1.h
index 361fa1887bcdb749e0d8cd835841f5a9c8ff770c..d1b394088ed27a85e9d7a9cd2a448a9cbd986146 100644
--- a/include/utilities/format/bp1/BP1.h
+++ b/include/utilities/format/bp1/BP1.h
@@ -13,7 +13,6 @@
 
 #include "utilities/format/bp1/BP1Aggregator.h"
 #include "utilities/format/bp1/BP1Structs.h"
-//#include "utilities/format/bp1/BP1Writer.h"
-#include "utilities/format/bp1/BP1Writer.tcc"
+#include "utilities/format/bp1/BP1Writer.h"
 
 #endif /* BP1_H_ */
diff --git a/include/utilities/format/bp1/BP1Writer.h b/include/utilities/format/bp1/BP1Writer.h
index 0fca73c4a01ce3a9c4d42bca886026aa288d1f27..a551114ad7a117257c64656a331703d722c19311 100644
--- a/include/utilities/format/bp1/BP1Writer.h
+++ b/include/utilities/format/bp1/BP1Writer.h
@@ -279,55 +279,34 @@ private:
                          capsule::STLVector &buffer) const noexcept;
 };
 
-//#define declare_template_instantiation(T)                                      \
-//    extern template std::size_t BP1Writer::GetVariableIndexSize(               \
-//        const Variable<T> &variable) const noexcept;                           \
-//                                                                               \
-//    extern template void BP1Writer::WriteVariablePayload(                      \
-//        const Variable<T> &variable, capsule::STLVector &heap,                 \
-//        const unsigned int nthreads) const noexcept;                           \
-//                                                                               \
-//    extern template void BP1Writer::WriteBoundsRecord(                         \
-//        const bool isScalar, const Stats<T> &stats, std::vector<char> &buffer, \
-//        std::uint8_t &characteristicsCounter, const bool addLength)            \
-//        const noexcept;                                                        \
-//                                                                               \
-//    extern template void BP1Writer::WriteCharacteristicRecord(                 \
-//        const std::uint8_t characteristicID, const T &value,                   \
-//        std::vector<char> &buffer, std::uint8_t &characteristicsCounter,       \
-//        const bool addLength) const noexcept;
-//
-// ADIOS_FOREACH_TYPE_1ARG(declare_template_instantiation)
-//#undef declare_template_instantiation
-//
-//// SEPARATE PRIMITIVE FROM COMPLEX OVERLOADS
-//// PRIMITIVE
-//#define declare_template_instantiation(T)                                      \
-//    extern template void BP1Writer::WriteVariableMetadata(                     \
-//        const Variable<T> &variable, capsule::STLVector &heap,                 \
-//        BP1MetadataSet &metadataSet) const noexcept;                           \
-//                                                                               \
-//    extern template BP1Writer::Stats<T> BP1Writer::GetStats(                   \
-//        const Variable<T> &variable) const noexcept;
-//
-// ADIOS_FOREACH_PRIMITIVE_TYPE_1ARG(declare_template_instantiation)
-//#undef declare_template_instantiation
-//
-//// COMPLEX
-//#define declare_template_instantiation(T)                                      \
-//    extern template void BP1Writer::WriteVariableMetadata(                     \
-//        const Variable<std::complex<T>> &variable, capsule::STLVector &heap,   \
-//        BP1MetadataSet &metadataSet) const noexcept;                           \
-//                                                                               \
-//    extern template BP1Writer::Stats<T> BP1Writer::GetStats(                   \
-//        const Variable<std::complex<T>> &variable) const noexcept;
-//
-// ADIOS_FOREACH_COMPLEX_TYPE_1ARG(declare_template_instantiation)
-//#undef declare_template_instantiation
+#define declare_template_instantiation(T)                                      \
+    extern template void BP1Writer::WriteVariablePayload(                      \
+        const Variable<T> &variable, capsule::STLVector &heap,                 \
+        const unsigned int nthreads) const noexcept;
+
+ADIOS_FOREACH_TYPE_1ARG(declare_template_instantiation)
+#undef declare_template_instantiation
+
+// SEPARATE PRIMITIVE FROM COMPLEX OVERLOADS
+// PRIMITIVE
+#define declare_template_instantiation(T)                                      \
+    extern template void BP1Writer::WriteVariableMetadata(                     \
+        const Variable<T> &variable, capsule::STLVector &heap,                 \
+        BP1MetadataSet &metadataSet) const noexcept;
+
+ADIOS_FOREACH_PRIMITIVE_TYPE_1ARG(declare_template_instantiation)
+#undef declare_template_instantiation
+
+// COMPLEX
+#define declare_template_instantiation(T)                                      \
+    extern template void BP1Writer::WriteVariableMetadata(                     \
+        const Variable<std::complex<T>> &variable, capsule::STLVector &heap,   \
+        BP1MetadataSet &metadataSet) const noexcept;
+
+ADIOS_FOREACH_COMPLEX_TYPE_1ARG(declare_template_instantiation)
+#undef declare_template_instantiation
 
 } // end namespace format
 } // end namespace adios
 
-//#include "utilities/format/bp1/BP1Writer.tcc"
-
 #endif /* BP1WRITER_H_ */
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index 2ccf94700c6304df4b8eacf788824956bdc5ac8d..7ce7dfeb169a1c24f67f61a38a5763ead2611e5a 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -35,6 +35,7 @@ foreach(adios2_target IN LISTS adios2_targets)
     utilities/format/bp1/BP1Base.cpp
     utilities/format/bp1/BP1Aggregator.cpp
     utilities/format/bp1/BP1Writer.cpp
+    utilities/format/bp1/BP1Writer.tcc
     
     utilities/profiling/iochrono/Timer.cpp
   )
diff --git a/source/utilities/format/bp1/BP1Writer.cpp b/source/utilities/format/bp1/BP1Writer.cpp
index a586274ececdb397409e25fdd0dc90ac69d54280..1233cf2752c686a8686ab035ac92684264388f02 100644
--- a/source/utilities/format/bp1/BP1Writer.cpp
+++ b/source/utilities/format/bp1/BP1Writer.cpp
@@ -13,8 +13,8 @@
 #include <vector>
 /// \endcond
 
-//#include "utilities/format/bp1/BP1Writer.h"
-#include "utilities/format/bp1/BP1Writer.tcc"
+#include "BP1Writer.tcc"
+#include "utilities/format/bp1/BP1Writer.h"
 
 namespace adios
 {
@@ -418,5 +418,37 @@ void BP1Writer::FlattenMetadata(BP1MetadataSet &metadataSet,
         metadataSet.Log.TotalBytes.push_back(heap.m_DataAbsolutePosition);
 }
 
+//------------------------------------------------------------------------------
+// Explicit instantiaiton of public tempaltes
+
+#define declare_template_instantiation(T)                                      \
+    template void BP1Writer::WriteVariablePayload(                             \
+        const Variable<T> &variable, capsule::STLVector &heap,                 \
+        const unsigned int nthreads) const noexcept;
+
+ADIOS_FOREACH_TYPE_1ARG(declare_template_instantiation)
+#undef declare_template_instantiation
+
+// SEPARATE PRIMITIVE FROM COMPLEX OVERLOADS
+// PRIMITIVE
+#define declare_template_instantiation(T)                                      \
+    template void BP1Writer::WriteVariableMetadata(                            \
+        const Variable<T> &variable, capsule::STLVector &heap,                 \
+        BP1MetadataSet &metadataSet) const noexcept;
+
+ADIOS_FOREACH_PRIMITIVE_TYPE_1ARG(declare_template_instantiation)
+#undef declare_template_instantiation
+
+// COMPLEX
+#define declare_template_instantiation(T)                                      \
+    template void BP1Writer::WriteVariableMetadata(                            \
+        const Variable<std::complex<T>> &variable, capsule::STLVector &heap,   \
+        BP1MetadataSet &metadataSet) const noexcept;
+
+ADIOS_FOREACH_COMPLEX_TYPE_1ARG(declare_template_instantiation)
+#undef declare_template_instantiation
+
+//------------------------------------------------------------------------------
+
 } // end namespace format
 } // end namespace adios
diff --git a/include/utilities/format/bp1/BP1Writer.tcc b/source/utilities/format/bp1/BP1Writer.tcc
similarity index 99%
rename from include/utilities/format/bp1/BP1Writer.tcc
rename to source/utilities/format/bp1/BP1Writer.tcc
index 73a30f6e60e211035a0aa0fb74a5af1898722b5d..a554b0314590bfa29d3b8006ded75e7f5fc4956a 100644
--- a/include/utilities/format/bp1/BP1Writer.tcc
+++ b/source/utilities/format/bp1/BP1Writer.tcc
@@ -7,6 +7,8 @@
  *  Created on: Apr 11, 2017
  *      Author: wfg
  */
+#ifndef BP1WRITER_TCC_
+#define BP1WRITER_TCC_
 
 #include "utilities/format/bp1/BP1Writer.h"
 
@@ -343,4 +345,6 @@ void BP1Writer::WriteVariableCharacteristics(const Variable<T> &variable,
 }
 
 } // end namespace format
-} // end namespace
+} // end namespace adios
+
+#endif // BP1WRITER_TCC_