diff --git a/MeshLib/Elements/Hex.h b/MeshLib/Elements/Hex.h
index dab38b430912d66a85bd70e3454cd7c2cb963cd9..f691bad8cc15a8d38d67e3d1e1a273b7dadb66ab 100644
--- a/MeshLib/Elements/Hex.h
+++ b/MeshLib/Elements/Hex.h
@@ -19,6 +19,9 @@
 #include "HexRule8.h"
 #include "HexRule20.h"
 
+extern template class MeshLib::TemplateElement<MeshLib::HexRule20>;
+extern template class MeshLib::TemplateElement<MeshLib::HexRule8>;
+
 namespace MeshLib {
 typedef TemplateElement<HexRule8> Hex;
 typedef TemplateElement<HexRule20> Hex20;
diff --git a/MeshLib/Elements/Line.h b/MeshLib/Elements/Line.h
index 5616c32120adc75ef77e1d6b6016ce553426a5dd..392e3061be1f6aacf4dcf17dc0052d46ce0310b0 100644
--- a/MeshLib/Elements/Line.h
+++ b/MeshLib/Elements/Line.h
@@ -19,6 +19,9 @@
 #include "LineRule2.h"
 #include "LineRule3.h"
 
+extern template class MeshLib::TemplateElement<MeshLib::LineRule2>;
+extern template class MeshLib::TemplateElement<MeshLib::LineRule3>;
+
 namespace MeshLib {
 
 typedef TemplateElement<LineRule2> Line;
diff --git a/MeshLib/Elements/Prism.h b/MeshLib/Elements/Prism.h
index 037f75200b0e8c726ed94a4fa8bb2446a02d0a93..82f8b23e001c6fe25b03dd082a803140b40e0a3f 100644
--- a/MeshLib/Elements/Prism.h
+++ b/MeshLib/Elements/Prism.h
@@ -19,6 +19,9 @@
 #include "PrismRule6.h"
 #include "PrismRule15.h"
 
+extern template class MeshLib::TemplateElement<MeshLib::PrismRule15>;
+extern template class MeshLib::TemplateElement<MeshLib::PrismRule6>;
+
 namespace MeshLib {
 
 typedef TemplateElement<PrismRule6> Prism;
diff --git a/MeshLib/Elements/Pyramid.h b/MeshLib/Elements/Pyramid.h
index d4e1628bc6ae21c11f05338e8eff90cbe79bddab..a2653d6eb874a43d4955288a111eecfbc8fa72df 100644
--- a/MeshLib/Elements/Pyramid.h
+++ b/MeshLib/Elements/Pyramid.h
@@ -19,6 +19,9 @@
 #include "PyramidRule5.h"
 #include "PyramidRule13.h"
 
+extern template class MeshLib::TemplateElement<MeshLib::PyramidRule13>;
+extern template class MeshLib::TemplateElement<MeshLib::PyramidRule5>;
+
 namespace MeshLib {
 
 typedef TemplateElement<PyramidRule5> Pyramid;
diff --git a/MeshLib/Elements/Quad.h b/MeshLib/Elements/Quad.h
index c8bdb1d05da63a1f1a654604c3d0ad5fab5c706a..750a436c3f6e53f745b3464f514ad8302adccba6 100644
--- a/MeshLib/Elements/Quad.h
+++ b/MeshLib/Elements/Quad.h
@@ -20,6 +20,10 @@
 #include "QuadRule8.h"
 #include "QuadRule9.h"
 
+extern template class MeshLib::TemplateElement<MeshLib::QuadRule4>;
+extern template class MeshLib::TemplateElement<MeshLib::QuadRule8>;
+extern template class MeshLib::TemplateElement<MeshLib::QuadRule9>;
+
 namespace MeshLib
 {
 
diff --git a/MeshLib/Elements/TemplateElement.cpp b/MeshLib/Elements/TemplateElement.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..134775fb3c550fc1aa3f551a9bcc9a230a9390fa
--- /dev/null
+++ b/MeshLib/Elements/TemplateElement.cpp
@@ -0,0 +1,34 @@
+/**
+ * \copyright
+ * Copyright (c) 2012-2015, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#include "TemplateElement.h"
+
+#include "MeshLib/Elements/Hex.h"
+#include "MeshLib/Elements/Line.h"
+#include "MeshLib/Elements/Prism.h"
+#include "MeshLib/Elements/Pyramid.h"
+#include "MeshLib/Elements/Quad.h"
+#include "MeshLib/Elements/Tet.h"
+#include "MeshLib/Elements/Tri.h"
+
+template class MeshLib::TemplateElement<MeshLib::HexRule20    >;
+template class MeshLib::TemplateElement<MeshLib::HexRule8     >;
+template class MeshLib::TemplateElement<MeshLib::LineRule2    >;
+template class MeshLib::TemplateElement<MeshLib::LineRule3    >;
+template class MeshLib::TemplateElement<MeshLib::PrismRule15  >;
+template class MeshLib::TemplateElement<MeshLib::PrismRule6   >;
+template class MeshLib::TemplateElement<MeshLib::PyramidRule13>;
+template class MeshLib::TemplateElement<MeshLib::PyramidRule5 >;
+template class MeshLib::TemplateElement<MeshLib::QuadRule4    >;
+template class MeshLib::TemplateElement<MeshLib::QuadRule8    >;
+template class MeshLib::TemplateElement<MeshLib::QuadRule9    >;
+template class MeshLib::TemplateElement<MeshLib::TetRule10    >;
+template class MeshLib::TemplateElement<MeshLib::TetRule4     >;
+template class MeshLib::TemplateElement<MeshLib::TriRule3     >;
+template class MeshLib::TemplateElement<MeshLib::TriRule6     >;
diff --git a/MeshLib/Elements/Tet.h b/MeshLib/Elements/Tet.h
index f8fd7b598d26d41c37115a8bdc6f498642d60d4c..ad55b78c7074c165b4eb6b60679be3e3a30e003c 100644
--- a/MeshLib/Elements/Tet.h
+++ b/MeshLib/Elements/Tet.h
@@ -19,6 +19,9 @@
 #include "TetRule4.h"
 #include "TetRule10.h"
 
+extern template class MeshLib::TemplateElement<MeshLib::TetRule10>;
+extern template class MeshLib::TemplateElement<MeshLib::TetRule4>;
+
 namespace MeshLib {
 
 typedef TemplateElement<TetRule4> Tet;
diff --git a/MeshLib/Elements/Tri.h b/MeshLib/Elements/Tri.h
index 80ea9c6e449b1820c0182549bd587e85c1d41962..7bfc72ba7b61e6c71512a693e34e45788e9a650f 100644
--- a/MeshLib/Elements/Tri.h
+++ b/MeshLib/Elements/Tri.h
@@ -19,6 +19,10 @@
 #include "TriRule3.h"
 #include "TriRule6.h"
 
+
+extern template class MeshLib::TemplateElement<MeshLib::TriRule3>;
+extern template class MeshLib::TemplateElement<MeshLib::TriRule6>;
+
 namespace MeshLib {
 
 typedef TemplateElement<TriRule3> Tri;