diff --git a/MeshLib/Elements/Edge.h b/MeshLib/Elements/Edge.h
index d0f9e5ae5d3caf827b5660480e66277f44a330a3..3e148e9a323b9f29e998c8e3cd13673aaf5e476c 100644
--- a/MeshLib/Elements/Edge.h
+++ b/MeshLib/Elements/Edge.h
@@ -16,7 +16,7 @@
 
 namespace MeshLib {
 
-typedef TemplateEdge<2,FEMElemType::EDGE2> Edge;
+typedef TemplateEdge<2,CellType::EDGE2> Edge;
 
 }
 
diff --git a/MeshLib/Elements/Element.h b/MeshLib/Elements/Element.h
index d66ea9dd0e7a3bdc31829a57f25bd334024f6433..63933f3a971456ce2edc21399ce91e31c0fd68d6 100644
--- a/MeshLib/Elements/Element.h
+++ b/MeshLib/Elements/Element.h
@@ -122,7 +122,7 @@ public:
 	 * Get the type of the element in context of the finite element method.
 	 * @return a value of the enum FEMElemType::type
 	 */
-	virtual FEMElemType::type getFEMType() const = 0;
+	virtual CellType::type getCellType() const = 0;
 
 	/**
 	 * Get the value for this element. The value can be used to store a link
diff --git a/MeshLib/Elements/Hex.h b/MeshLib/Elements/Hex.h
index 5e42c3230b8f41f37d1f9016438dca50714b566f..b17f087e5e005e652591f9dd18cf903162f11a3d 100644
--- a/MeshLib/Elements/Hex.h
+++ b/MeshLib/Elements/Hex.h
@@ -15,7 +15,7 @@
 #include "TemplateHex.h"
 
 namespace MeshLib {
-typedef TemplateHex<8, FEMElemType::HEX8> Hex;
+typedef TemplateHex<8, CellType::HEX8> Hex;
 }
 
 #endif /* HEX_H_ */
diff --git a/MeshLib/Elements/Prism.h b/MeshLib/Elements/Prism.h
index 23bebf882e606f9dc4ba2c075265d674890f5984..1f77d02a6151eb5fe37671d3361cffdab4e0ac40 100644
--- a/MeshLib/Elements/Prism.h
+++ b/MeshLib/Elements/Prism.h
@@ -16,7 +16,7 @@
 
 namespace MeshLib {
 
-typedef TemplatePrism<6, FEMElemType::PRISM6> Prism;
+typedef TemplatePrism<6, CellType::PRISM6> Prism;
 
 }
 
diff --git a/MeshLib/Elements/Pyramid.h b/MeshLib/Elements/Pyramid.h
index eb194e8e989c9defbdff9dbc778ed8f9c170a043..2344320814ba1f79cfd3feebad1f619c61aadb4e 100644
--- a/MeshLib/Elements/Pyramid.h
+++ b/MeshLib/Elements/Pyramid.h
@@ -16,7 +16,7 @@
 
 namespace MeshLib {
 
-typedef TemplatePyramid<5,FEMElemType::PYRAMID5> Pyramid;
+typedef TemplatePyramid<5,CellType::PYRAMID5> Pyramid;
 
 }
 
diff --git a/MeshLib/Elements/Quad.h b/MeshLib/Elements/Quad.h
index d8339208c75d73bd90ef68b37c05ceffe5146d69..8209ef1b39273ae7354c0cf46694713e7211f613 100644
--- a/MeshLib/Elements/Quad.h
+++ b/MeshLib/Elements/Quad.h
@@ -16,7 +16,7 @@
 
 namespace MeshLib {
 
-typedef TemplateQuad<4,FEMElemType::QUAD4> Quad;
+typedef TemplateQuad<4,CellType::QUAD4> Quad;
 
 }
 
diff --git a/MeshLib/Elements/TemplateEdge.h b/MeshLib/Elements/TemplateEdge.h
index e04e88932971f81c94bbb3808757da5ef12c3ea2..057f239035c61e15b27b4bf80f460ea890da52cc 100644
--- a/MeshLib/Elements/TemplateEdge.h
+++ b/MeshLib/Elements/TemplateEdge.h
@@ -30,7 +30,7 @@ namespace MeshLib {
  *  0--------1
  * @endcode
  */
-template<unsigned NNODES, FEMElemType::type FEMEDGETYPE>
+template<unsigned NNODES, CellType::type CELLEDGETYPE>
 class TemplateEdge : public Element
 {
 public:
@@ -89,7 +89,7 @@ public:
 	 * Get the type of the element in context of the finite element method.
 	 * @return a value of the enum FEMElemType::type
 	 */
-	virtual FEMElemType::type getFEMType() const { return FEMEDGETYPE; }
+	virtual CellType::type getCellType() const { return CELLEDGETYPE; }
 
 	/// Returns true if these two indices form an edge and false otherwise
 	bool isEdge(unsigned idx1, unsigned idx2) const
@@ -101,7 +101,7 @@ public:
 
 	virtual Element* clone() const
 	{
-		return new TemplateEdge<NNODES,FEMEDGETYPE>(*this);
+		return new TemplateEdge<NNODES,CELLEDGETYPE>(*this);
 	}
 
 	/**
diff --git a/MeshLib/Elements/TemplateEdge.tpp b/MeshLib/Elements/TemplateEdge.tpp
index d33393bc2cf316c01fbcc71b473f2128b1e3e454..fc9dcdb768098a1ab1f25fe2da42d4be868d4843 100644
--- a/MeshLib/Elements/TemplateEdge.tpp
+++ b/MeshLib/Elements/TemplateEdge.tpp
@@ -11,16 +11,16 @@
 
 namespace MeshLib {
 
-template <unsigned NNODES, FEMElemType::type FEMEDGETYPE>
-TemplateEdge<NNODES,FEMEDGETYPE>::TemplateEdge(Node* nodes[NNODES], unsigned value) :
+template<unsigned NNODES, CellType::type CELLEDGETYPE>
+TemplateEdge<NNODES,CELLEDGETYPE>::TemplateEdge(Node* nodes[NNODES], unsigned value) :
 	Element(value)
 {
 	_nodes = nodes;
 	this->_length = this->computeVolume();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMEDGETYPE>
-TemplateEdge<NNODES,FEMEDGETYPE>::TemplateEdge(const TemplateEdge<NNODES,FEMEDGETYPE> &edge) :
+template <unsigned NNODES, CellType::type CELLEDGETYPE>
+TemplateEdge<NNODES,CELLEDGETYPE>::TemplateEdge(const TemplateEdge<NNODES,CELLEDGETYPE> &edge) :
 	Element(edge.getValue())
 {
 	_nodes = new Node*[NNODES];
@@ -29,8 +29,8 @@ TemplateEdge<NNODES,FEMEDGETYPE>::TemplateEdge(const TemplateEdge<NNODES,FEMEDGE
 	_length = edge.getLength();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMEDGETYPE>
-TemplateEdge<NNODES,FEMEDGETYPE>::~TemplateEdge()
+template <unsigned NNODES, CellType::type CELLEDGETYPE>
+TemplateEdge<NNODES,CELLEDGETYPE>::~TemplateEdge()
 {}
 
 } // namespace MeshLib
diff --git a/MeshLib/Elements/TemplateHex.h b/MeshLib/Elements/TemplateHex.h
index 3aab5c49738fc3335a977534184a7b6cb480ebad..3e56c269d13319b0e5dc416aaa29d3d71ed003e2 100644
--- a/MeshLib/Elements/TemplateHex.h
+++ b/MeshLib/Elements/TemplateHex.h
@@ -43,7 +43,7 @@ namespace MeshLib {
  *
  * @endcode
  */
-template <unsigned NNODES, FEMElemType::type FEMHEXTYPE>
+template <unsigned NNODES, CellType::type CELLHEXTYPE>
 class TemplateHex : public Cell
 {
 public:
@@ -87,7 +87,7 @@ public:
 	 * Method returns the FEM type of the element.
 	 * @return
 	 */
-	virtual FEMElemType::type getFEMType() const { return FEMHEXTYPE; }
+	virtual CellType::type getCellType() const { return CELLHEXTYPE; }
 
 	/// Returns true if these two indices form an edge and false otherwise
 	bool isEdge(unsigned i, unsigned j) const;
diff --git a/MeshLib/Elements/TemplateHex.tpp b/MeshLib/Elements/TemplateHex.tpp
index 149bd32956077accaef2450dce39a4a82bb3ab0d..aa2b3d9893337714ce3456e9d5c5833535afca12 100644
--- a/MeshLib/Elements/TemplateHex.tpp
+++ b/MeshLib/Elements/TemplateHex.tpp
@@ -18,8 +18,8 @@
 
 namespace MeshLib {
 
-template <unsigned NNODES, FEMElemType::type FEMHEXTYPE>
-const unsigned TemplateHex<NNODES,FEMHEXTYPE>::_face_nodes[6][4] =
+template <unsigned NNODES, CellType::type CELLHEXTYPE>
+const unsigned TemplateHex<NNODES,CELLHEXTYPE>::_face_nodes[6][4] =
 {
 	{0, 3, 2, 1}, // Face 0
 	{0, 1, 5, 4}, // Face 1
@@ -29,8 +29,8 @@ const unsigned TemplateHex<NNODES,FEMHEXTYPE>::_face_nodes[6][4] =
 	{4, 5, 6, 7}  // Face 5
 };
 
-template <unsigned NNODES, FEMElemType::type FEMHEXTYPE>
-const unsigned TemplateHex<NNODES,FEMHEXTYPE>::_edge_nodes[12][2] =
+template <unsigned NNODES, CellType::type CELLHEXTYPE>
+const unsigned TemplateHex<NNODES,CELLHEXTYPE>::_edge_nodes[12][2] =
 {
 	{0, 1}, // Edge 0
 	{1, 2}, // Edge 1
@@ -46,8 +46,8 @@ const unsigned TemplateHex<NNODES,FEMHEXTYPE>::_edge_nodes[12][2] =
 	{4, 7}  // Edge 11
 };
 
-template <unsigned NNODES, FEMElemType::type FEMHEXTYPE>
-TemplateHex<NNODES,FEMHEXTYPE>::TemplateHex(Node* nodes[NNODES], unsigned value)
+template <unsigned NNODES, CellType::type CELLHEXTYPE>
+TemplateHex<NNODES,CELLHEXTYPE>::TemplateHex(Node* nodes[NNODES], unsigned value)
 	: Cell(value)
 {
 	_nodes = nodes;
@@ -59,8 +59,8 @@ TemplateHex<NNODES,FEMHEXTYPE>::TemplateHex(Node* nodes[NNODES], unsigned value)
 	this->_volume = this->computeVolume();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMHEXTYPE>
-TemplateHex<NNODES,FEMHEXTYPE>::TemplateHex(const TemplateHex<NNODES,FEMHEXTYPE> &hex)
+template <unsigned NNODES, CellType::type CELLHEXTYPE>
+TemplateHex<NNODES,CELLHEXTYPE>::TemplateHex(const TemplateHex<NNODES,CELLHEXTYPE> &hex)
 	: Cell(hex.getValue())
 {
 	_nodes = new Node*[NNODES];
@@ -74,13 +74,13 @@ TemplateHex<NNODES,FEMHEXTYPE>::TemplateHex(const TemplateHex<NNODES,FEMHEXTYPE>
 	_volume = hex.getVolume();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMHEXTYPE>
-TemplateHex<NNODES,FEMHEXTYPE>::~TemplateHex()
+template <unsigned NNODES, CellType::type CELLHEXTYPE>
+TemplateHex<NNODES,CELLHEXTYPE>::~TemplateHex()
 {
 }
 
-template <unsigned NNODES, FEMElemType::type FEMHEXTYPE>
-double TemplateHex<NNODES,FEMHEXTYPE>::computeVolume()
+template <unsigned NNODES, CellType::type CELLHEXTYPE>
+double TemplateHex<NNODES,CELLHEXTYPE>::computeVolume()
 {
 	return MathLib::calcTetrahedronVolume(_nodes[4]->getCoords(), _nodes[7]->getCoords(), _nodes[5]->getCoords(), _nodes[0]->getCoords())
 		 + MathLib::calcTetrahedronVolume(_nodes[5]->getCoords(), _nodes[3]->getCoords(), _nodes[1]->getCoords(), _nodes[0]->getCoords())
@@ -90,8 +90,8 @@ double TemplateHex<NNODES,FEMHEXTYPE>::computeVolume()
 		 + MathLib::calcTetrahedronVolume(_nodes[3]->getCoords(), _nodes[7]->getCoords(), _nodes[5]->getCoords(), _nodes[2]->getCoords());
 }
 
-template <unsigned NNODES, FEMElemType::type FEMHEXTYPE>
-const Element* TemplateHex<NNODES,FEMHEXTYPE>::getFace(unsigned i) const
+template <unsigned NNODES, CellType::type CELLHEXTYPE>
+const Element* TemplateHex<NNODES,CELLHEXTYPE>::getFace(unsigned i) const
 {
 	if (i<this->getNFaces())
 	{
@@ -105,8 +105,8 @@ const Element* TemplateHex<NNODES,FEMHEXTYPE>::getFace(unsigned i) const
 	return NULL;
 }
 
-template <unsigned NNODES, FEMElemType::type FEMHEXTYPE>
-bool TemplateHex<NNODES,FEMHEXTYPE>::isEdge(unsigned idx1, unsigned idx2) const
+template <unsigned NNODES, CellType::type CELLHEXTYPE>
+bool TemplateHex<NNODES,CELLHEXTYPE>::isEdge(unsigned idx1, unsigned idx2) const
 {
 	for (unsigned i(0); i<12; i++)
 	{
@@ -116,14 +116,14 @@ bool TemplateHex<NNODES,FEMHEXTYPE>::isEdge(unsigned idx1, unsigned idx2) const
 	return false;
 }
 
-template <unsigned NNODES, FEMElemType::type FEMHEXTYPE>
-Element* TemplateHex<NNODES,FEMHEXTYPE>::clone() const
+template <unsigned NNODES, CellType::type CELLHEXTYPE>
+Element* TemplateHex<NNODES,CELLHEXTYPE>::clone() const
 {
-	return new TemplateHex<NNODES,FEMHEXTYPE>(*this);
+	return new TemplateHex<NNODES,CELLHEXTYPE>(*this);
 }
 
-template <unsigned NNODES, FEMElemType::type FEMHEXTYPE>
-unsigned TemplateHex<NNODES,FEMHEXTYPE>::identifyFace(Node* nodes[3]) const
+template <unsigned NNODES, CellType::type CELLHEXTYPE>
+unsigned TemplateHex<NNODES,CELLHEXTYPE>::identifyFace(Node* nodes[3]) const
 {
 	for (unsigned i=0; i<6; i++)
 	{
@@ -138,8 +138,8 @@ unsigned TemplateHex<NNODES,FEMHEXTYPE>::identifyFace(Node* nodes[3]) const
 	return std::numeric_limits<unsigned>::max();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMHEXTYPE>
-Element* TemplateHex<NNODES,FEMHEXTYPE>::reviseElement() const
+template <unsigned NNODES, CellType::type CELLHEXTYPE>
+Element* TemplateHex<NNODES,CELLHEXTYPE>::reviseElement() const
 {
 	std::vector<size_t> collapsed_edges;
 	for (size_t edge(0); edge<getNEdges(); edge++) {
@@ -149,7 +149,7 @@ Element* TemplateHex<NNODES,FEMHEXTYPE>::reviseElement() const
 	}
 
 	if (collapsed_edges.size() == 1) {
-		std::cerr << "[TemplateHex<NNODES,FEMHEXTYPE>::reviseElement()] collapsing of one edge in hexahedron not handled" << std::endl;
+		std::cerr << "[TemplateHex<NNODES,CELLHEXTYPE>::reviseElement()] collapsing of one edge in hexahedron not handled" << std::endl;
 		return NULL;
 	}
 
diff --git a/MeshLib/Elements/TemplatePrism.h b/MeshLib/Elements/TemplatePrism.h
index 94e2599fcc98379aec20305d7cfa11f5a23d2da7..38e068dfda6569f3c131bf85d461626f5b307940 100644
--- a/MeshLib/Elements/TemplatePrism.h
+++ b/MeshLib/Elements/TemplatePrism.h
@@ -41,7 +41,7 @@ namespace MeshLib {
  *
  * @endcode
  */
-template <unsigned NNODES, FEMElemType::type FEMPRISMTYPE>
+template <unsigned NNODES, CellType::type CELLPRISMTYPE>
 class TemplatePrism : public Cell
 {
 public:
@@ -83,9 +83,9 @@ public:
 
 	/**
 	 * Get the type of the element in context of the finite element method.
-	 * @return a value of the enum FEMElemType::type
+	 * @return a value of the enum CellType::type
 	 */
-	virtual FEMElemType::type getFEMType() const { return FEMPRISMTYPE; };
+	virtual CellType::type getCellType() const { return CELLPRISMTYPE; };
 
 	/// Returns true if these two indeces form an edge and false otherwise
 	bool isEdge(unsigned i, unsigned j) const;
diff --git a/MeshLib/Elements/TemplatePrism.tpp b/MeshLib/Elements/TemplatePrism.tpp
index 2118479e7c4ce4fd523eca29e329728fbb90f060..a9b8885f34d1e4e40cc2265a55568f4897fce8d2 100644
--- a/MeshLib/Elements/TemplatePrism.tpp
+++ b/MeshLib/Elements/TemplatePrism.tpp
@@ -19,8 +19,8 @@
 
 namespace MeshLib {
 
-template <unsigned NNODES, FEMElemType::type FEMPRISMTYPE>
-const unsigned TemplatePrism<NNODES,FEMPRISMTYPE>::_face_nodes[5][4] =
+template <unsigned NNODES, CellType::type CELLPRISMTYPE>
+const unsigned TemplatePrism<NNODES,CELLPRISMTYPE>::_face_nodes[5][4] =
 {
 	{0, 2, 1, 99}, // Face 0
 	{0, 1, 4,  3}, // Face 1
@@ -29,8 +29,8 @@ const unsigned TemplatePrism<NNODES,FEMPRISMTYPE>::_face_nodes[5][4] =
 	{3, 4, 5, 99}  // Face 4
 };
 
-template <unsigned NNODES, FEMElemType::type FEMPRISMTYPE>
-const unsigned TemplatePrism<NNODES,FEMPRISMTYPE>::_edge_nodes[9][2] =
+template <unsigned NNODES, CellType::type CELLPRISMTYPE>
+const unsigned TemplatePrism<NNODES,CELLPRISMTYPE>::_edge_nodes[9][2] =
 {
 	{0, 1}, // Edge 0
 	{1, 2}, // Edge 1
@@ -43,11 +43,11 @@ const unsigned TemplatePrism<NNODES,FEMPRISMTYPE>::_edge_nodes[9][2] =
 	{3, 5}  // Edge 8
 };
 
-template <unsigned NNODES, FEMElemType::type FEMPRISMTYPE>
-const unsigned TemplatePrism<NNODES,FEMPRISMTYPE>::_n_face_nodes[5] = { 3, 4, 4, 4, 3 };
+template <unsigned NNODES, CellType::type CELLPRISMTYPE>
+const unsigned TemplatePrism<NNODES,CELLPRISMTYPE>::_n_face_nodes[5] = { 3, 4, 4, 4, 3 };
 
-template <unsigned NNODES, FEMElemType::type FEMPRISMTYPE>
-TemplatePrism<NNODES,FEMPRISMTYPE>::TemplatePrism(Node* nodes[NNODES], unsigned value)
+template <unsigned NNODES, CellType::type CELLPRISMTYPE>
+TemplatePrism<NNODES,CELLPRISMTYPE>::TemplatePrism(Node* nodes[NNODES], unsigned value)
 	: Cell(value)
 {
 	_nodes = nodes;
@@ -57,8 +57,8 @@ TemplatePrism<NNODES,FEMPRISMTYPE>::TemplatePrism(Node* nodes[NNODES], unsigned
 	this->_volume = this->computeVolume();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPRISMTYPE>
-TemplatePrism<NNODES,FEMPRISMTYPE>::TemplatePrism(const TemplatePrism<NNODES,FEMPRISMTYPE> &prism)
+template <unsigned NNODES, CellType::type CELLPRISMTYPE>
+TemplatePrism<NNODES,CELLPRISMTYPE>::TemplatePrism(const TemplatePrism<NNODES,CELLPRISMTYPE> &prism)
 	: Cell(prism.getValue())
 {
 	_nodes = new Node*[NNODES];
@@ -72,21 +72,21 @@ TemplatePrism<NNODES,FEMPRISMTYPE>::TemplatePrism(const TemplatePrism<NNODES,FEM
 	_volume = prism.getVolume();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPRISMTYPE>
-TemplatePrism<NNODES,FEMPRISMTYPE>::~TemplatePrism()
+template <unsigned NNODES, CellType::type CELLPRISMTYPE>
+TemplatePrism<NNODES,CELLPRISMTYPE>::~TemplatePrism()
 {
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPRISMTYPE>
-double TemplatePrism<NNODES,FEMPRISMTYPE>::computeVolume()
+template <unsigned NNODES, CellType::type CELLPRISMTYPE>
+double TemplatePrism<NNODES,CELLPRISMTYPE>::computeVolume()
 {
 	return MathLib::calcTetrahedronVolume(_nodes[0]->getCoords(), _nodes[1]->getCoords(), _nodes[2]->getCoords(), _nodes[3]->getCoords())
 		 + MathLib::calcTetrahedronVolume(_nodes[1]->getCoords(), _nodes[4]->getCoords(), _nodes[2]->getCoords(), _nodes[3]->getCoords())
 		 + MathLib::calcTetrahedronVolume(_nodes[2]->getCoords(), _nodes[4]->getCoords(), _nodes[5]->getCoords(), _nodes[3]->getCoords());
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPRISMTYPE>
-const Element* TemplatePrism<NNODES,FEMPRISMTYPE>::getFace(unsigned i) const
+template <unsigned NNODES, CellType::type CELLPRISMTYPE>
+const Element* TemplatePrism<NNODES,CELLPRISMTYPE>::getFace(unsigned i) const
 {
 	if (i<this->getNFaces())
 	{
@@ -104,8 +104,8 @@ const Element* TemplatePrism<NNODES,FEMPRISMTYPE>::getFace(unsigned i) const
 	return NULL;
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPRISMTYPE>
-unsigned TemplatePrism<NNODES,FEMPRISMTYPE>::getNFaceNodes(unsigned i) const
+template <unsigned NNODES, CellType::type CELLPRISMTYPE>
+unsigned TemplatePrism<NNODES,CELLPRISMTYPE>::getNFaceNodes(unsigned i) const
 {
 	if (i<5)
 		return _n_face_nodes[i];
@@ -113,8 +113,8 @@ unsigned TemplatePrism<NNODES,FEMPRISMTYPE>::getNFaceNodes(unsigned i) const
 	return 0;
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPRISMTYPE>
-bool TemplatePrism<NNODES,FEMPRISMTYPE>::isEdge(unsigned idx1, unsigned idx2) const
+template <unsigned NNODES, CellType::type CELLPRISMTYPE>
+bool TemplatePrism<NNODES,CELLPRISMTYPE>::isEdge(unsigned idx1, unsigned idx2) const
 {
 	for (unsigned i(0); i<9; i++)
 	{
@@ -124,14 +124,14 @@ bool TemplatePrism<NNODES,FEMPRISMTYPE>::isEdge(unsigned idx1, unsigned idx2) co
 	return false;
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPRISMTYPE>
-Element* TemplatePrism<NNODES,FEMPRISMTYPE>::clone() const
+template <unsigned NNODES, CellType::type CELLPRISMTYPE>
+Element* TemplatePrism<NNODES,CELLPRISMTYPE>::clone() const
 {
-	return new TemplatePrism<NNODES,FEMPRISMTYPE>(*this);
+	return new TemplatePrism<NNODES,CELLPRISMTYPE>(*this);
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPRISMTYPE>
-unsigned TemplatePrism<NNODES,FEMPRISMTYPE>::identifyFace(Node* nodes[3]) const
+template <unsigned NNODES, CellType::type CELLPRISMTYPE>
+unsigned TemplatePrism<NNODES,CELLPRISMTYPE>::identifyFace(Node* nodes[3]) const
 {
 	for (unsigned i=0; i<5; i++)
 	{
@@ -146,8 +146,8 @@ unsigned TemplatePrism<NNODES,FEMPRISMTYPE>::identifyFace(Node* nodes[3]) const
 	return std::numeric_limits<unsigned>::max();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPRISMTYPE>
-Element* TemplatePrism<NNODES,FEMPRISMTYPE>::reviseElement() const
+template <unsigned NNODES, CellType::type CELLPRISMTYPE>
+Element* TemplatePrism<NNODES,CELLPRISMTYPE>::reviseElement() const
 {
 	// try to create Pyramid
 	if (_nodes[_edge_nodes[3][0]] == _nodes[_edge_nodes[3][1]]) {
diff --git a/MeshLib/Elements/TemplatePyramid.h b/MeshLib/Elements/TemplatePyramid.h
index 03abf05b734e726e35f64ffa54251ddcaddc6221..540bf373ed75af8e776996bb82c74d7291a8c5f5 100644
--- a/MeshLib/Elements/TemplatePyramid.h
+++ b/MeshLib/Elements/TemplatePyramid.h
@@ -39,7 +39,7 @@ namespace MeshLib {
  *        0
  * @endcode
  */
-template <unsigned NNODES, FEMElemType::type FEMPYRAMIDTYPE>
+template <unsigned NNODES, CellType::type CELLPYRAMIDTYPE>
 class TemplatePyramid : public Cell
 {
 public:
@@ -81,9 +81,9 @@ public:
 
 	/**
 	 * Get the type of the element in context of the finite element method.
-	 * @return a value of the enum FEMElemType::type
+	 * @return a value of the enum CellType::type
 	 */
-	virtual FEMElemType::type getFEMType() const { return FEMPYRAMIDTYPE; }
+	virtual CellType::type getCellType() const { return CELLPYRAMIDTYPE; }
 
 	/// Returns true if these two indeces form an edge and false otherwise
 	bool isEdge(unsigned i, unsigned j) const;
diff --git a/MeshLib/Elements/TemplatePyramid.tpp b/MeshLib/Elements/TemplatePyramid.tpp
index cd3646e874131fe6e709ae5ebf458f494773062e..9b593253e962a9d3a24167bde7166daf849a1b62 100644
--- a/MeshLib/Elements/TemplatePyramid.tpp
+++ b/MeshLib/Elements/TemplatePyramid.tpp
@@ -19,8 +19,8 @@
 
 namespace MeshLib {
 
-template <unsigned NNODES, FEMElemType::type FEMPYRAMIDTYPE>
-const unsigned TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::_face_nodes[5][4] =
+template <unsigned NNODES, CellType::type CELLPYRAMIDTYPE>
+const unsigned TemplatePyramid<NNODES,CELLPYRAMIDTYPE>::_face_nodes[5][4] =
 {
 	{0, 1, 4, 99}, // Face 0
 	{1, 2, 4, 99}, // Face 1
@@ -29,8 +29,8 @@ const unsigned TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::_face_nodes[5][4] =
 	{0, 3, 2,  1}  // Face 4
 };
 
-template <unsigned NNODES, FEMElemType::type FEMPYRAMIDTYPE>
-const unsigned TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::_edge_nodes[8][2] =
+template <unsigned NNODES, CellType::type CELLPYRAMIDTYPE>
+const unsigned TemplatePyramid<NNODES,CELLPYRAMIDTYPE>::_edge_nodes[8][2] =
 {
 	{0, 1}, // Edge 0
 	{1, 2}, // Edge 1
@@ -42,11 +42,11 @@ const unsigned TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::_edge_nodes[8][2] =
 	{3, 4}  // Edge 7
 };
 
-template <unsigned NNODES, FEMElemType::type FEMPYRAMIDTYPE>
-const unsigned TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::_n_face_nodes[5] = { 3, 3, 3, 3, 4 };
+template <unsigned NNODES, CellType::type CELLPYRAMIDTYPE>
+const unsigned TemplatePyramid<NNODES,CELLPYRAMIDTYPE>::_n_face_nodes[5] = { 3, 3, 3, 3, 4 };
 
-template <unsigned NNODES, FEMElemType::type FEMPYRAMIDTYPE>
-TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::TemplatePyramid(Node* nodes[NNODES], unsigned value)
+template <unsigned NNODES, CellType::type CELLPYRAMIDTYPE>
+TemplatePyramid<NNODES,CELLPYRAMIDTYPE>::TemplatePyramid(Node* nodes[NNODES], unsigned value)
 	: Cell(value)
 {
 	_nodes = nodes;
@@ -58,8 +58,8 @@ TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::TemplatePyramid(Node* nodes[NNODES], uns
 	this->_volume = this->computeVolume();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPYRAMIDTYPE>
-TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::TemplatePyramid(const TemplatePyramid<NNODES,FEMPYRAMIDTYPE> &pyramid)
+template <unsigned NNODES, CellType::type CELLPYRAMIDTYPE>
+TemplatePyramid<NNODES,CELLPYRAMIDTYPE>::TemplatePyramid(const TemplatePyramid<NNODES,CELLPYRAMIDTYPE> &pyramid)
 	: Cell(pyramid.getValue())
 {
 	_nodes = new Node*[NNODES];
@@ -75,20 +75,20 @@ TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::TemplatePyramid(const TemplatePyramid<NN
 	_volume = pyramid.getVolume();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPYRAMIDTYPE>
-TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::~TemplatePyramid()
+template <unsigned NNODES, CellType::type CELLPYRAMIDTYPE>
+TemplatePyramid<NNODES,CELLPYRAMIDTYPE>::~TemplatePyramid()
 {
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPYRAMIDTYPE>
-double TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::computeVolume()
+template <unsigned NNODES, CellType::type CELLPYRAMIDTYPE>
+double TemplatePyramid<NNODES,CELLPYRAMIDTYPE>::computeVolume()
 {
 	return MathLib::calcTetrahedronVolume(_nodes[0]->getCoords(), _nodes[1]->getCoords(), _nodes[2]->getCoords(), _nodes[4]->getCoords())
 		 + MathLib::calcTetrahedronVolume(_nodes[2]->getCoords(), _nodes[3]->getCoords(), _nodes[0]->getCoords(), _nodes[4]->getCoords());
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPYRAMIDTYPE>
-const Element* TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::getFace(unsigned i) const
+template <unsigned NNODES, CellType::type CELLPYRAMIDTYPE>
+const Element* TemplatePyramid<NNODES,CELLPYRAMIDTYPE>::getFace(unsigned i) const
 {
 	if (i<this->getNFaces())
 	{
@@ -106,8 +106,8 @@ const Element* TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::getFace(unsigned i) const
 	return NULL;
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPYRAMIDTYPE>
-unsigned TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::getNFaceNodes(unsigned i) const
+template <unsigned NNODES, CellType::type CELLPYRAMIDTYPE>
+unsigned TemplatePyramid<NNODES,CELLPYRAMIDTYPE>::getNFaceNodes(unsigned i) const
 {
 	if (i<5)
 		return _n_face_nodes[i];
@@ -115,8 +115,8 @@ unsigned TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::getNFaceNodes(unsigned i) const
 	return 0;
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPYRAMIDTYPE>
-bool TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::isEdge(unsigned idx1, unsigned idx2) const
+template <unsigned NNODES, CellType::type CELLPYRAMIDTYPE>
+bool TemplatePyramid<NNODES,CELLPYRAMIDTYPE>::isEdge(unsigned idx1, unsigned idx2) const
 {
 	for (unsigned i(0); i<8; i++)
 	{
@@ -126,14 +126,14 @@ bool TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::isEdge(unsigned idx1, unsigned idx2
 	return false;
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPYRAMIDTYPE>
-Element* TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::clone() const
+template <unsigned NNODES, CellType::type CELLPYRAMIDTYPE>
+Element* TemplatePyramid<NNODES,CELLPYRAMIDTYPE>::clone() const
 {
-	return new TemplatePyramid<NNODES,FEMPYRAMIDTYPE>(*this);
+	return new TemplatePyramid<NNODES,CELLPYRAMIDTYPE>(*this);
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPYRAMIDTYPE>
-unsigned TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::identifyFace(Node* nodes[3]) const
+template <unsigned NNODES, CellType::type CELLPYRAMIDTYPE>
+unsigned TemplatePyramid<NNODES,CELLPYRAMIDTYPE>::identifyFace(Node* nodes[3]) const
 {
 	for (unsigned i=0; i<5; i++)
 	{
@@ -148,8 +148,8 @@ unsigned TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::identifyFace(Node* nodes[3]) co
 	return std::numeric_limits<unsigned>::max();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMPYRAMIDTYPE>
-Element* TemplatePyramid<NNODES,FEMPYRAMIDTYPE>::reviseElement() const
+template <unsigned NNODES, CellType::type CELLPYRAMIDTYPE>
+Element* TemplatePyramid<NNODES,CELLPYRAMIDTYPE>::reviseElement() const
 {
 	// try to create tetrahedron
 	if (_nodes[_edge_nodes[0][0]] == _nodes[_edge_nodes[0][1]]
diff --git a/MeshLib/Elements/TemplateQuad.h b/MeshLib/Elements/TemplateQuad.h
index 5acef9471e1000714888885dbfd3db423df849e3..1212a581711829b915b6a5d3798cb54280098463 100644
--- a/MeshLib/Elements/TemplateQuad.h
+++ b/MeshLib/Elements/TemplateQuad.h
@@ -33,7 +33,7 @@ namespace MeshLib {
  *              0
  * @endcode
  */
-template <unsigned NNODES, FEMElemType::type FEMQUADTYPE>
+template <unsigned NNODES, CellType::type CELLQUADTYPE>
 class TemplateQuad : public Face
 {
 public:
@@ -66,9 +66,9 @@ public:
 
 	/**
 	 * Get the type of the element in context of the finite element method.
-	 * @return a value of the enum FEMElemType::type
+	 * @return a value of the enum CellType::type
 	 */
-	virtual FEMElemType::type getFEMType() const { return FEMQUADTYPE; }
+	virtual CellType::type getCellType() const { return CELLQUADTYPE; }
 
 	/// Returns true if these two indeces form an edge and false otherwise
 	bool isEdge(unsigned i, unsigned j) const;
@@ -105,8 +105,8 @@ protected:
 
 }; /* class */
 
-template <unsigned NNODES, FEMElemType::type FEMQUADTYPE>
-const unsigned TemplateQuad<NNODES, FEMQUADTYPE>::_edge_nodes[4][2] =
+template <unsigned NNODES, CellType::type CELLQUADTYPE>
+const unsigned TemplateQuad<NNODES, CELLQUADTYPE>::_edge_nodes[4][2] =
 {
 	{0, 1}, // Edge 0
 	{1, 2}, // Edge 1
diff --git a/MeshLib/Elements/TemplateQuad.tpp b/MeshLib/Elements/TemplateQuad.tpp
index eeb46b579d35565e159009d36f1c3fa9cfbef83b..c43b38245542a8a50ba040f12a492e222cc4642c 100644
--- a/MeshLib/Elements/TemplateQuad.tpp
+++ b/MeshLib/Elements/TemplateQuad.tpp
@@ -17,8 +17,8 @@
 
 namespace MeshLib {
 
-template <unsigned NNODES, FEMElemType::type FEMQUADTYPE>
-TemplateQuad<NNODES,FEMQUADTYPE>::TemplateQuad(Node* nodes[NNODES], unsigned value)
+template <unsigned NNODES, CellType::type CELLQUADTYPE>
+TemplateQuad<NNODES,CELLQUADTYPE>::TemplateQuad(Node* nodes[NNODES], unsigned value)
 	: Face(value)
 {
 	_nodes = nodes;
@@ -30,8 +30,8 @@ TemplateQuad<NNODES,FEMQUADTYPE>::TemplateQuad(Node* nodes[NNODES], unsigned val
 	this->_area = this->computeVolume();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMQUADTYPE>
-TemplateQuad<NNODES,FEMQUADTYPE>::TemplateQuad(const TemplateQuad<NNODES,FEMQUADTYPE> &quad)
+template <unsigned NNODES, CellType::type CELLQUADTYPE>
+TemplateQuad<NNODES,CELLQUADTYPE>::TemplateQuad(const TemplateQuad<NNODES,CELLQUADTYPE> &quad)
 	: Face(quad.getValue())
 {
 	_nodes = new Node*[NNODES];
@@ -47,20 +47,20 @@ TemplateQuad<NNODES,FEMQUADTYPE>::TemplateQuad(const TemplateQuad<NNODES,FEMQUAD
 	_area = quad.getArea();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMQUADTYPE>
-TemplateQuad<NNODES,FEMQUADTYPE>::~TemplateQuad()
+template <unsigned NNODES, CellType::type CELLQUADTYPE>
+TemplateQuad<NNODES,CELLQUADTYPE>::~TemplateQuad()
 {
 }
 
-template <unsigned NNODES, FEMElemType::type FEMQUADTYPE>
-double TemplateQuad<NNODES,FEMQUADTYPE>::computeVolume()
+template <unsigned NNODES, CellType::type CELLQUADTYPE>
+double TemplateQuad<NNODES,CELLQUADTYPE>::computeVolume()
 {
 	return MathLib::calcTriangleArea(_nodes[0]->getCoords(), _nodes[1]->getCoords(), _nodes[2]->getCoords())
          + MathLib::calcTriangleArea(_nodes[2]->getCoords(), _nodes[3]->getCoords(), _nodes[0]->getCoords());
 }
 
-template <unsigned NNODES, FEMElemType::type FEMQUADTYPE>
-bool TemplateQuad<NNODES,FEMQUADTYPE>::isEdge(unsigned idx1, unsigned idx2) const
+template <unsigned NNODES, CellType::type CELLQUADTYPE>
+bool TemplateQuad<NNODES,CELLQUADTYPE>::isEdge(unsigned idx1, unsigned idx2) const
 {
 	for (unsigned i(0); i<4; i++)
 	{
@@ -70,14 +70,14 @@ bool TemplateQuad<NNODES,FEMQUADTYPE>::isEdge(unsigned idx1, unsigned idx2) cons
 	return false;
 }
 
-template <unsigned NNODES, FEMElemType::type FEMQUADTYPE>
-Element* TemplateQuad<NNODES,FEMQUADTYPE>::clone() const
+template <unsigned NNODES, CellType::type CELLQUADTYPE>
+Element* TemplateQuad<NNODES,CELLQUADTYPE>::clone() const
 {
 	return new TemplateQuad(*this);
 }
 
-template <unsigned NNODES, FEMElemType::type FEMQUADTYPE>
-unsigned TemplateQuad<NNODES,FEMQUADTYPE>::identifyFace(Node* nodes[3]) const
+template <unsigned NNODES, CellType::type CELLQUADTYPE>
+unsigned TemplateQuad<NNODES,CELLQUADTYPE>::identifyFace(Node* nodes[3]) const
 {
 	for (unsigned i=0; i<4; i++)
 	{
@@ -92,8 +92,8 @@ unsigned TemplateQuad<NNODES,FEMQUADTYPE>::identifyFace(Node* nodes[3]) const
 	return std::numeric_limits<unsigned>::max();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMQUADTYPE>
-Element* TemplateQuad<NNODES,FEMQUADTYPE>::reviseElement() const
+template <unsigned NNODES, CellType::type CELLQUADTYPE>
+Element* TemplateQuad<NNODES,CELLQUADTYPE>::reviseElement() const
 {
 	if (_nodes[0] == _nodes[1] || _nodes[1] == _nodes[2]) {
 		MeshLib::Node** tri_nodes = new MeshLib::Node*[3];
diff --git a/MeshLib/Elements/TemplateTet.h b/MeshLib/Elements/TemplateTet.h
index bc03f5012d8d66c35a4ff8501c18e4ccb10e47bc..713730ee3e2164bbbd5913883987e60a389b1805 100644
--- a/MeshLib/Elements/TemplateTet.h
+++ b/MeshLib/Elements/TemplateTet.h
@@ -38,7 +38,7 @@ namespace MeshLib {
  *
  * @endcode
  */
-template <unsigned NNODES, FEMElemType::type FEMTETTYPE>
+template <unsigned NNODES, CellType::type CELLTETTYPE>
 class TemplateTet : public Cell
 {
 public:
@@ -80,9 +80,9 @@ public:
 
 	/**
 	 * Get the type of the element in context of the finite element method.
-	 * @return a value of the enum FEMElemType::type
+	 * @return a value of the enum CellType::type
 	 */
-	virtual FEMElemType::type getFEMType() const { return FEMTETTYPE; }
+	virtual CellType::type getCellType() const { return CELLTETTYPE; }
 
 	/// Returns true if these two indeces form an edge and false otherwise
 	bool isEdge(unsigned i, unsigned j) const;
diff --git a/MeshLib/Elements/TemplateTet.tpp b/MeshLib/Elements/TemplateTet.tpp
index e5f1245091bc63685c5df03b6ed014b48d8c1ea7..ba0192fe0dd75773a3d5236a98199bb223f07e61 100644
--- a/MeshLib/Elements/TemplateTet.tpp
+++ b/MeshLib/Elements/TemplateTet.tpp
@@ -17,8 +17,8 @@
 
 namespace MeshLib {
 
-template <unsigned NNODES, FEMElemType::type FEMTETTYPE>
-const unsigned TemplateTet<NNODES,FEMTETTYPE>::_face_nodes[4][3] =
+template <unsigned NNODES, CellType::type CELLTETTYPE>
+const unsigned TemplateTet<NNODES,CELLTETTYPE>::_face_nodes[4][3] =
 {
 	{0, 2, 1}, // Face 0
 	{0, 1, 3}, // Face 1
@@ -26,8 +26,8 @@ const unsigned TemplateTet<NNODES,FEMTETTYPE>::_face_nodes[4][3] =
 	{2, 0, 3}  // Face 3
 };
 
-template <unsigned NNODES, FEMElemType::type FEMTETTYPE>
-const unsigned TemplateTet<NNODES,FEMTETTYPE>::_edge_nodes[6][2] =
+template <unsigned NNODES, CellType::type CELLTETTYPE>
+const unsigned TemplateTet<NNODES,CELLTETTYPE>::_edge_nodes[6][2] =
 {
 	{0, 1}, // Edge 0
 	{1, 2}, // Edge 1
@@ -37,8 +37,8 @@ const unsigned TemplateTet<NNODES,FEMTETTYPE>::_edge_nodes[6][2] =
 	{2, 3}  // Edge 5
 };
 
-template <unsigned NNODES, FEMElemType::type FEMTETTYPE>
-TemplateTet<NNODES,FEMTETTYPE>::TemplateTet(Node* nodes[NNODES], unsigned value)
+template <unsigned NNODES, CellType::type CELLTETTYPE>
+TemplateTet<NNODES,CELLTETTYPE>::TemplateTet(Node* nodes[NNODES], unsigned value)
 	: Cell(value)
 {
 	_nodes = nodes;
@@ -50,8 +50,8 @@ TemplateTet<NNODES,FEMTETTYPE>::TemplateTet(Node* nodes[NNODES], unsigned value)
 	this->_volume = this->computeVolume();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMTETTYPE>
-TemplateTet<NNODES,FEMTETTYPE>::TemplateTet(const TemplateTet<NNODES,FEMTETTYPE> &tet)
+template <unsigned NNODES, CellType::type CELLTETTYPE>
+TemplateTet<NNODES,CELLTETTYPE>::TemplateTet(const TemplateTet<NNODES,CELLTETTYPE> &tet)
 	: Cell(tet.getValue())
 {
 	_nodes = new Node*[NNODES];
@@ -68,19 +68,19 @@ TemplateTet<NNODES,FEMTETTYPE>::TemplateTet(const TemplateTet<NNODES,FEMTETTYPE>
 	_volume = tet.getVolume();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMTETTYPE>
-TemplateTet<NNODES,FEMTETTYPE>::~TemplateTet()
+template <unsigned NNODES, CellType::type CELLTETTYPE>
+TemplateTet<NNODES,CELLTETTYPE>::~TemplateTet()
 {
 }
 
-template <unsigned NNODES, FEMElemType::type FEMTETTYPE>
-double TemplateTet<NNODES,FEMTETTYPE>::computeVolume()
+template <unsigned NNODES, CellType::type CELLTETTYPE>
+double TemplateTet<NNODES,CELLTETTYPE>::computeVolume()
 {
 	return MathLib::calcTetrahedronVolume(_nodes[0]->getCoords(), _nodes[1]->getCoords(), _nodes[2]->getCoords(), _nodes[3]->getCoords());
 }
 
-template <unsigned NNODES, FEMElemType::type FEMTETTYPE>
-const Element* TemplateTet<NNODES,FEMTETTYPE>::getFace(unsigned i) const
+template <unsigned NNODES, CellType::type CELLTETTYPE>
+const Element* TemplateTet<NNODES,CELLTETTYPE>::getFace(unsigned i) const
 {
 	if (i<this->getNFaces())
 	{
@@ -94,8 +94,8 @@ const Element* TemplateTet<NNODES,FEMTETTYPE>::getFace(unsigned i) const
 	return NULL;
 }
 
-template <unsigned NNODES, FEMElemType::type FEMTETTYPE>
-bool TemplateTet<NNODES,FEMTETTYPE>::isEdge(unsigned idx1, unsigned idx2) const
+template <unsigned NNODES, CellType::type CELLTETTYPE>
+bool TemplateTet<NNODES,CELLTETTYPE>::isEdge(unsigned idx1, unsigned idx2) const
 {
 	for (unsigned i(0); i<6; i++)
 	{
@@ -105,14 +105,14 @@ bool TemplateTet<NNODES,FEMTETTYPE>::isEdge(unsigned idx1, unsigned idx2) const
 	return false;
 }
 
-template <unsigned NNODES, FEMElemType::type FEMTETTYPE>
-Element* TemplateTet<NNODES,FEMTETTYPE>::clone() const
+template <unsigned NNODES, CellType::type CELLTETTYPE>
+Element* TemplateTet<NNODES,CELLTETTYPE>::clone() const
 {
-	return new TemplateTet<NNODES,FEMTETTYPE>(*this);
+	return new TemplateTet<NNODES,CELLTETTYPE>(*this);
 }
 
-template <unsigned NNODES, FEMElemType::type FEMTETTYPE>
-unsigned TemplateTet<NNODES,FEMTETTYPE>::identifyFace(Node* nodes[3]) const
+template <unsigned NNODES, CellType::type CELLTETTYPE>
+unsigned TemplateTet<NNODES,CELLTETTYPE>::identifyFace(Node* nodes[3]) const
 {
 	for (unsigned i=0; i<4; i++)
 	{
@@ -127,8 +127,8 @@ unsigned TemplateTet<NNODES,FEMTETTYPE>::identifyFace(Node* nodes[3]) const
 	return std::numeric_limits<unsigned>::max();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMTETTYPE>
-Element* TemplateTet<NNODES,FEMTETTYPE>::reviseElement() const
+template <unsigned NNODES, CellType::type CELLTETTYPE>
+Element* TemplateTet<NNODES,CELLTETTYPE>::reviseElement() const
 {
 	if (_nodes[0] == _nodes[1] || _nodes[1] == _nodes[2]) {
 		MeshLib::Node** tri_nodes = new MeshLib::Node*[3];
diff --git a/MeshLib/Elements/TemplateTri.h b/MeshLib/Elements/TemplateTri.h
index 12ccd1ea1cdcad05ba0db15eff3300d9922da0ef..fc7c2daae7999793cb07a9174df7b01b6853cd61 100644
--- a/MeshLib/Elements/TemplateTri.h
+++ b/MeshLib/Elements/TemplateTri.h
@@ -40,7 +40,7 @@ namespace MeshLib {
  *
  * @endcode
  */
-template <unsigned NNODES, FEMElemType::type FEMTRITYPE>
+template <unsigned NNODES, CellType::type CELLTRITYPE>
 class TemplateTri : public Face
 {
 public:
@@ -73,9 +73,9 @@ public:
 
 	/**
 	 * Get the type of the element in context of the finite element method.
-	 * @return a value of the enum FEMElemType::type
+	 * @return a value of the enum CellType::type
 	 */
-	virtual FEMElemType::type getFEMType() const { return FEMTRITYPE; }
+	virtual CellType::type getCellType() const { return CELLTRITYPE; }
 
 	/// Returns true if these two indices form an edge and false otherwise
 	bool isEdge(unsigned idx1, unsigned idx2) const;
@@ -86,7 +86,7 @@ public:
 	 */
 	virtual Element* clone() const
 	{
-		return new TemplateTri<NNODES,FEMTRITYPE>(*this);
+		return new TemplateTri<NNODES,CELLTRITYPE>(*this);
 	}
 
 
@@ -120,8 +120,8 @@ protected:
 	static const unsigned _edge_nodes[3][2];
 }; /* class */
 
-template <unsigned NNODES, FEMElemType::type FEMTRITYPE>
-const unsigned TemplateTri<NNODES,FEMTRITYPE>::_edge_nodes[3][2] = {
+template <unsigned NNODES, CellType::type CELLTRITYPE>
+const unsigned TemplateTri<NNODES,CELLTRITYPE>::_edge_nodes[3][2] = {
 		{0, 1}, // Edge 0
 		{1, 2}, // Edge 1
 		{0, 2}  // Edge 2
diff --git a/MeshLib/Elements/TemplateTri.tpp b/MeshLib/Elements/TemplateTri.tpp
index ab1d48e8baac97c53a1ad757d6dc5bef956f731e..7390e018effaa12caef0fce159b571daf7c794bf 100644
--- a/MeshLib/Elements/TemplateTri.tpp
+++ b/MeshLib/Elements/TemplateTri.tpp
@@ -11,8 +11,8 @@
 
 namespace MeshLib {
 
-template <unsigned NNODES, FEMElemType::type FEMTRITYPE>
-TemplateTri<NNODES,FEMTRITYPE>::TemplateTri(Node* nodes[NNODES], unsigned value) :
+template <unsigned NNODES, CellType::type CELLTRITYPE>
+TemplateTri<NNODES,CELLTRITYPE>::TemplateTri(Node* nodes[NNODES], unsigned value) :
 	Face(value)
 {
 	_nodes = nodes;
@@ -22,8 +22,8 @@ TemplateTri<NNODES,FEMTRITYPE>::TemplateTri(Node* nodes[NNODES], unsigned value)
 	this->_area = this->computeVolume();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMTRITYPE>
-TemplateTri<NNODES,FEMTRITYPE>::TemplateTri(const TemplateTri<NNODES,FEMTRITYPE> &tri) :
+template <unsigned NNODES, CellType::type CELLTRITYPE>
+TemplateTri<NNODES,CELLTRITYPE>::TemplateTri(const TemplateTri<NNODES,CELLTRITYPE> &tri) :
 	Face(tri.getValue())
 {
 	_nodes = new Node*[NNODES];
@@ -40,12 +40,12 @@ TemplateTri<NNODES,FEMTRITYPE>::TemplateTri(const TemplateTri<NNODES,FEMTRITYPE>
 	_area = tri.getArea();
 }
 
-template <unsigned NNODES, FEMElemType::type FEMTRITYPE>
-TemplateTri<NNODES,FEMTRITYPE>::~TemplateTri()
+template <unsigned NNODES, CellType::type CELLTRITYPE>
+TemplateTri<NNODES,CELLTRITYPE>::~TemplateTri()
 {}
 
-template <unsigned NNODES, FEMElemType::type FEMTRITYPE>
-bool TemplateTri<NNODES,FEMTRITYPE>::isEdge(unsigned idx1, unsigned idx2) const
+template <unsigned NNODES, CellType::type CELLTRITYPE>
+bool TemplateTri<NNODES,CELLTRITYPE>::isEdge(unsigned idx1, unsigned idx2) const
 {
 	for (unsigned i(0); i<3; i++)
 	{
@@ -55,8 +55,8 @@ bool TemplateTri<NNODES,FEMTRITYPE>::isEdge(unsigned idx1, unsigned idx2) const
 	return false;
 }
 
-template <unsigned NNODES, FEMElemType::type FEMTRITYPE>
-Element* TemplateTri<NNODES,FEMTRITYPE>::reviseElement() const
+template <unsigned NNODES, CellType::type CELLTRITYPE>
+Element* TemplateTri<NNODES,CELLTRITYPE>::reviseElement() const
 {
 	// try to create an edge
 	if (_nodes[0] == _nodes[1] || _nodes[1] == _nodes[2]) {
@@ -76,8 +76,8 @@ Element* TemplateTri<NNODES,FEMTRITYPE>::reviseElement() const
 	return NULL;
 }
 
-template <unsigned NNODES, FEMElemType::type FEMTRITYPE>
-unsigned TemplateTri<NNODES,FEMTRITYPE>::identifyFace(Node* nodes[3]) const
+template <unsigned NNODES, CellType::type CELLTRITYPE>
+unsigned TemplateTri<NNODES,CELLTRITYPE>::identifyFace(Node* nodes[3]) const
 {
 	for (unsigned i=0; i<3; i++)
 	{
diff --git a/MeshLib/Elements/Tet.h b/MeshLib/Elements/Tet.h
index e146722708c6247cc092848f140dfc5caa3fa1df..96d11018ae9e420632bcd904ac02d9b2c26ffa04 100644
--- a/MeshLib/Elements/Tet.h
+++ b/MeshLib/Elements/Tet.h
@@ -16,7 +16,7 @@
 
 namespace MeshLib {
 
-typedef TemplateTet<4,FEMElemType::TET4> Tet;
+typedef TemplateTet<4,CellType::TET4> Tet;
 
 }
 
diff --git a/MeshLib/Elements/Tri.h b/MeshLib/Elements/Tri.h
index 4ea28d0f60af3dd830b281bf0d0ade5ae8b4e6cb..369658513aac1dc36388ad1e8734b6bef6313b6a 100644
--- a/MeshLib/Elements/Tri.h
+++ b/MeshLib/Elements/Tri.h
@@ -16,7 +16,7 @@
 
 namespace MeshLib {
 
-typedef TemplateTri<3,FEMElemType::TRI3> Tri;
+typedef TemplateTri<3,CellType::TRI3> Tri;
 
 }
 
diff --git a/MeshLib/MshEnums.h b/MeshLib/MshEnums.h
index efcef912af5ad60f8a3902818233a05c4999a2da..44ae4e39f926527ac721b228247c8e0f27c2c1c2 100644
--- a/MeshLib/MshEnums.h
+++ b/MeshLib/MshEnums.h
@@ -35,7 +35,7 @@ struct MshElemType
 /**
  * \brief Types of mesh elements supported by OpenGeoSys.
  */
-struct FEMElemType
+struct CellType
 {
 	enum type {
 		INVALID,