diff --git a/MeshLib/Elements/Hex.h b/MeshLib/Elements/Hex.h
index f8f1ff5dabd666816fb4b2818ce3d6b488628097..41ff206ad277f0538d37fe67d658210f16c38358 100644
--- a/MeshLib/Elements/Hex.h
+++ b/MeshLib/Elements/Hex.h
@@ -19,7 +19,7 @@
 #include "HexRule8.h"
 
 namespace MeshLib {
-typedef TemplateElement<Element, HexRule8> Hex;
+typedef TemplateElement<HexRule8> Hex;
 }
 
 #endif /* HEX_H_ */
diff --git a/MeshLib/Elements/Line.h b/MeshLib/Elements/Line.h
index 8e6eea1199b9826a3ec7c8e6464801e33bebd3a9..5616c32120adc75ef77e1d6b6016ce553426a5dd 100644
--- a/MeshLib/Elements/Line.h
+++ b/MeshLib/Elements/Line.h
@@ -21,8 +21,8 @@
 
 namespace MeshLib {
 
-typedef TemplateElement<Element, LineRule2> Line;
-typedef TemplateElement<Element, LineRule3> Line3;
+typedef TemplateElement<LineRule2> Line;
+typedef TemplateElement<LineRule3> Line3;
 
 }
 
diff --git a/MeshLib/Elements/Prism.h b/MeshLib/Elements/Prism.h
index ad6c2bf58c2077ea9f0fabdda65f765ea1a9fc90..74e27e10180df88470ed0045d57194aedd7216d7 100644
--- a/MeshLib/Elements/Prism.h
+++ b/MeshLib/Elements/Prism.h
@@ -20,7 +20,7 @@
 
 namespace MeshLib {
 
-typedef TemplateElement<Element, PrismRule6> Prism;
+typedef TemplateElement<PrismRule6> Prism;
 
 }
 
diff --git a/MeshLib/Elements/Pyramid.h b/MeshLib/Elements/Pyramid.h
index 1e4421f500af9c3098a5963246a0da2a06760f51..3e64caca3d6369ef5c26c4b24543d61b10bdf20b 100644
--- a/MeshLib/Elements/Pyramid.h
+++ b/MeshLib/Elements/Pyramid.h
@@ -20,7 +20,7 @@
 
 namespace MeshLib {
 
-typedef TemplateElement<Element, PyramidRule5> Pyramid;
+typedef TemplateElement<PyramidRule5> Pyramid;
 
 }
 
diff --git a/MeshLib/Elements/Quad.h b/MeshLib/Elements/Quad.h
index 6be29a91e1e774a63b0218b289b7710e536c6c2e..c8bdb1d05da63a1f1a654604c3d0ad5fab5c706a 100644
--- a/MeshLib/Elements/Quad.h
+++ b/MeshLib/Elements/Quad.h
@@ -23,9 +23,9 @@
 namespace MeshLib
 {
 
-typedef TemplateElement<Element, QuadRule4> Quad;
-typedef TemplateElement<Element, QuadRule8> Quad8;
-typedef TemplateElement<Element, QuadRule9> Quad9;
+typedef TemplateElement<QuadRule4> Quad;
+typedef TemplateElement<QuadRule8> Quad8;
+typedef TemplateElement<QuadRule9> Quad9;
 
 }
 
diff --git a/MeshLib/Elements/TemplateElement-impl.h b/MeshLib/Elements/TemplateElement-impl.h
index 37018153acd2a61915fe5d417129c56608369239..abf632023af7f6d4548023bd655af04c5afcc61c 100644
--- a/MeshLib/Elements/TemplateElement-impl.h
+++ b/MeshLib/Elements/TemplateElement-impl.h
@@ -14,19 +14,19 @@ namespace MeshLib
 
 #ifndef WIN32
 /// \todo Windows compiler does not accept this definition and issues a linking error.
-template <class T_BASE, class ELEMENT_RULE>
-const unsigned TemplateElement<T_BASE, ELEMENT_RULE>::n_all_nodes;
+template <class ELEMENT_RULE>
+const unsigned TemplateElement<ELEMENT_RULE>::n_all_nodes;
 
-template <class T_BASE, class ELEMENT_RULE>
-const unsigned TemplateElement<T_BASE, ELEMENT_RULE>::n_base_nodes;
+template <class ELEMENT_RULE>
+const unsigned TemplateElement<ELEMENT_RULE>::n_base_nodes;
 
-template <class T_BASE, class ELEMENT_RULE>
-const unsigned TemplateElement<T_BASE, ELEMENT_RULE>::dimension;
+template <class ELEMENT_RULE>
+const unsigned TemplateElement<ELEMENT_RULE>::dimension;
 #endif // WIN32
 
-template <class T_BASE, class ELEMENT_RULE>
-TemplateElement<T_BASE, ELEMENT_RULE>::TemplateElement(Node* nodes[n_all_nodes], unsigned value, std::size_t id)
-: T_BASE(value, id)
+template <class ELEMENT_RULE>
+TemplateElement<ELEMENT_RULE>::TemplateElement(Node* nodes[n_all_nodes], unsigned value, std::size_t id)
+: Element(value, id)
 {
 	this->_nodes = nodes;
 	this->_neighbors = new Element*[getNNeighbors()];
@@ -34,9 +34,9 @@ TemplateElement<T_BASE, ELEMENT_RULE>::TemplateElement(Node* nodes[n_all_nodes],
 	this->_content = ELEMENT_RULE::computeVolume(this->_nodes);
 }
 
-template <class T_BASE, class ELEMENT_RULE>
-TemplateElement<T_BASE, ELEMENT_RULE>::TemplateElement(std::array<Node*, n_all_nodes> const& nodes, unsigned value, std::size_t id)
-: T_BASE(value, id)
+template <class ELEMENT_RULE>
+TemplateElement<ELEMENT_RULE>::TemplateElement(std::array<Node*, n_all_nodes> const& nodes, unsigned value, std::size_t id)
+: Element(value, id)
 {
 	this->_nodes = new Node*[n_all_nodes];
 	std::copy(nodes.begin(), nodes.end(), this->_nodes);
@@ -45,9 +45,9 @@ TemplateElement<T_BASE, ELEMENT_RULE>::TemplateElement(std::array<Node*, n_all_n
 	this->_content = ELEMENT_RULE::computeVolume(this->_nodes);
 }
 
-template <class T_BASE, class ELEMENT_RULE>
-TemplateElement<T_BASE, ELEMENT_RULE>::TemplateElement(const TemplateElement &e)
-: T_BASE(e.getValue(), e.getID())
+template <class ELEMENT_RULE>
+TemplateElement<ELEMENT_RULE>::TemplateElement(const TemplateElement &e)
+: Element(e.getValue(), e.getID())
 {
 	this->_nodes = new Node*[n_all_nodes];
 	for (unsigned i=0; i<n_all_nodes; i++)
@@ -58,8 +58,8 @@ TemplateElement<T_BASE, ELEMENT_RULE>::TemplateElement(const TemplateElement &e)
 	this->_content = e.getContent();
 }
 
-template <class T_BASE, class ELEMENT_RULE>
-bool TemplateElement<T_BASE, ELEMENT_RULE>::isEdge(unsigned idx1, unsigned idx2) const
+template <class ELEMENT_RULE>
+bool TemplateElement<ELEMENT_RULE>::isEdge(unsigned idx1, unsigned idx2) const
 {
 	for (unsigned i(0); i<getNEdges(); i++)
 	{
diff --git a/MeshLib/Elements/TemplateElement.h b/MeshLib/Elements/TemplateElement.h
index 367f1f3e160155cf9e6391d24ddfcd8ffbc9311e..6dc375660796b587b34fe5d0fd9403a7ebab44ae 100644
--- a/MeshLib/Elements/TemplateElement.h
+++ b/MeshLib/Elements/TemplateElement.h
@@ -28,8 +28,8 @@ namespace MeshLib
  * \tparam T_BASE         Base element class, e.g. Face, Cell
  * \tparam ELEMENT_RULE   Geometrical and topological rules of the element
  */
-template <class T_BASE, class ELEMENT_RULE>
-class TemplateElement : public T_BASE
+template <class ELEMENT_RULE>
+class TemplateElement : public Element
 {
 public:
 	/// Constant: The number of all nodes for this element
diff --git a/MeshLib/Elements/Tet.h b/MeshLib/Elements/Tet.h
index b8ce5281e18dc9e48a2c80aaf47ce4fab9e220be..f8c9eaeeecf805bfb16234905929faaa5bd3b428 100644
--- a/MeshLib/Elements/Tet.h
+++ b/MeshLib/Elements/Tet.h
@@ -20,7 +20,7 @@
 
 namespace MeshLib {
 
-typedef TemplateElement<Element,TetRule4> Tet;
+typedef TemplateElement<TetRule4> Tet;
 
 }
 
diff --git a/MeshLib/Elements/Tri.h b/MeshLib/Elements/Tri.h
index 0a43e95c943bb93085f58f48aa13950ca75a87d6..7b7cc360329e31a1b5c57855d017050c2b9856a1 100644
--- a/MeshLib/Elements/Tri.h
+++ b/MeshLib/Elements/Tri.h
@@ -20,7 +20,7 @@
 
 namespace MeshLib {
 
-typedef TemplateElement<Element,TriRule3> Tri;
+typedef TemplateElement<TriRule3> Tri;
 
 }