diff --git a/MeshLib/Elements/TemplateElement-impl.h b/MeshLib/Elements/TemplateElement-impl.h
index cba91a51bb326b423673efeec0c369ee5ed735e3..6667db0c115f927db86beb301d235e293a676974 100644
--- a/MeshLib/Elements/TemplateElement-impl.h
+++ b/MeshLib/Elements/TemplateElement-impl.h
@@ -22,6 +22,16 @@ TemplateElement<ELEMENT_RULE>::TemplateElement(Node* nodes[n_all_nodes], unsigne
 	this->_content = ELEMENT_RULE::computeVolume(this->_nodes);
 }
 
+template <class ELEMENT_RULE>
+TemplateElement<ELEMENT_RULE>::TemplateElement(Node* nodes[n_all_nodes], std::size_t id)
+: Element(id)
+{
+	this->_nodes = nodes;
+	this->_neighbors = new Element*[getNNeighbors()];
+	std::fill(this->_neighbors, this->_neighbors + getNNeighbors(), nullptr);
+	this->_content = ELEMENT_RULE::computeVolume(this->_nodes);
+}
+
 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)
@@ -33,9 +43,20 @@ TemplateElement<ELEMENT_RULE>::TemplateElement(std::array<Node*, n_all_nodes> co
 	this->_content = ELEMENT_RULE::computeVolume(this->_nodes);
 }
 
+template <class ELEMENT_RULE>
+TemplateElement<ELEMENT_RULE>::TemplateElement(std::array<Node*, n_all_nodes> const& nodes, std::size_t id)
+: Element(id)
+{
+	this->_nodes = new Node*[n_all_nodes];
+	std::copy(nodes.begin(), nodes.end(), this->_nodes);
+	this->_neighbors = new Element*[getNNeighbors()];
+	std::fill(this->_neighbors, this->_neighbors + getNNeighbors(), nullptr);
+	this->_content = ELEMENT_RULE::computeVolume(this->_nodes);
+}
+
 template <class ELEMENT_RULE>
 TemplateElement<ELEMENT_RULE>::TemplateElement(const TemplateElement &e)
-: Element(e.getValue(), e.getID())
+: Element(e.getID())
 {
 	this->_nodes = new Node*[n_all_nodes];
 	for (unsigned i=0; i<n_all_nodes; i++)
diff --git a/MeshLib/Elements/TemplateElement.h b/MeshLib/Elements/TemplateElement.h
index 9fe5b5aaf144e5f3b74e827db94569eb2021a609..bb50401f5da49ac0716dbc06705bea48aaeadeac 100644
--- a/MeshLib/Elements/TemplateElement.h
+++ b/MeshLib/Elements/TemplateElement.h
@@ -48,7 +48,15 @@ public:
 	 * @param value  element value, e.g. material ID
 	 * @param id     element id
 	 */
-	TemplateElement(Node* nodes[n_all_nodes], unsigned value = 0, std::size_t id = std::numeric_limits<std::size_t>::max());
+	TemplateElement(Node* nodes[n_all_nodes], unsigned value, std::size_t id);
+
+	/**
+	 * Constructor with an array of mesh nodes.
+	 *
+	 * @param nodes  an array of pointers of mesh nodes which form this element
+	 * @param id     element id
+	 */
+	TemplateElement(Node* nodes[n_all_nodes], std::size_t id = std::numeric_limits<std::size_t>::max());
 
 	/**
 	 * Constructor with an array of mesh nodes
@@ -57,7 +65,15 @@ public:
 	 * @param value  element value, e.g. material ID
 	 * @param id     element id
 	 */
-	TemplateElement(std::array<Node*, n_all_nodes> const& nodes, unsigned value = 0, std::size_t id = std::numeric_limits<std::size_t>::max());
+	TemplateElement(std::array<Node*, n_all_nodes> const& nodes, unsigned value, std::size_t id);
+
+	/**
+	 * Constructor with an array of mesh nodes
+	 *
+	 * @param nodes  an array of pointers of mesh nodes which form this element
+	 * @param id     element id
+	 */
+	TemplateElement(std::array<Node*, n_all_nodes> const& nodes, std::size_t id = std::numeric_limits<std::size_t>::max());
 
 	/// Copy constructor
 	TemplateElement(const TemplateElement &e);