diff --git a/MeshLib/Elements/TemplateEdge.h b/MeshLib/Elements/TemplateEdge.h
index c4662ff019c8f6ec4acf23ad54ab4015fdfcf0ae..0a6d35265d9f7c554a5ee46d06dac9f5bda7d327 100644
--- a/MeshLib/Elements/TemplateEdge.h
+++ b/MeshLib/Elements/TemplateEdge.h
@@ -15,6 +15,7 @@
 #ifndef TEMPLATEEDGE_H_
 #define TEMPLATEEDGE_H_
 
+#include <array>
 #include <limits>
 
 #include "MshEnums.h"
@@ -39,6 +40,9 @@ public:
 	/// Constructor with an array of mesh nodes.
 	TemplateEdge(Node* nodes[NNODES], unsigned value = 0);
 
+	/// Constructs an edge from array of Node pointers.
+	TemplateEdge(std::array<Node*, NNODES> const& nodes, unsigned value = 0);
+
 	/// Copy constructor
 	TemplateEdge(const TemplateEdge &edge);
 
diff --git a/MeshLib/Elements/TemplateEdge.tpp b/MeshLib/Elements/TemplateEdge.tpp
index 1fe174047bcf2824685445d021fbff2ecbc0b7aa..0b31fed5de5819eb281bdaf4e9c842380e092430 100644
--- a/MeshLib/Elements/TemplateEdge.tpp
+++ b/MeshLib/Elements/TemplateEdge.tpp
@@ -12,7 +12,18 @@
  *
  */
 
-namespace MeshLib {
+namespace MeshLib
+{
+template<unsigned NNODES, CellType::type CELLEDGETYPE>
+TemplateEdge<NNODES,CELLEDGETYPE>::TemplateEdge(std::array<Node*, NNODES> const& nodes,
+                                                unsigned value)
+	: Element(value)
+{
+	_nodes = new Node*[NNODES];
+	std::copy(nodes.begin(), nodes.end(), _nodes);
+
+	this->_length = this->computeVolume();
+}
 
 template<unsigned NNODES, CellType::type CELLEDGETYPE>
 TemplateEdge<NNODES,CELLEDGETYPE>::TemplateEdge(Node* nodes[NNODES], unsigned value) :
diff --git a/MeshLib/Elements/TemplateQuad.h b/MeshLib/Elements/TemplateQuad.h
index 6e1e5320a5b778b7b90923f7e66248ed420b46d2..528fd5ea52ec65b0843dedf27ed79ae663a8b82a 100644
--- a/MeshLib/Elements/TemplateQuad.h
+++ b/MeshLib/Elements/TemplateQuad.h
@@ -42,6 +42,13 @@ public:
 	/// Constructor with an array of mesh nodes.
 	TemplateQuad(Node* nodes[NNODES], unsigned value = 0);
 
+	/// Constructs an edge from array of Node pointers.
+	TemplateQuad(std::array<Node*, NNODES> const& nodes, unsigned value = 0);
+
+	/// Constructs a quad from NNODES of Nodes initializing Face with
+	//  value = 0.
+	TemplateQuad(Node* n0, Node* n1, Node* n2, Node* n3, ...);
+
 	/// Copy constructor
 	TemplateQuad(const TemplateQuad &quad);
 
diff --git a/MeshLib/Elements/TemplateQuad.tpp b/MeshLib/Elements/TemplateQuad.tpp
index e79a85a2d87eaee9e7ffbd7077b7bbcc4cf5ba4f..fcd938744c5eb6dff8c2af6052363464539dad4e 100644
--- a/MeshLib/Elements/TemplateQuad.tpp
+++ b/MeshLib/Elements/TemplateQuad.tpp
@@ -12,6 +12,8 @@
  *
  */
 
+#include <array>
+
 #include "Node.h"
 #include "Tri.h"
 
@@ -19,7 +21,21 @@
 #include "MathTools.h"
 #include "AnalyticalGeometry.h"
 
-namespace MeshLib {
+namespace MeshLib
+{
+template<unsigned NNODES, CellType::type CELLQUADTYPE>
+TemplateQuad<NNODES,CELLQUADTYPE>::TemplateQuad(std::array<Node*, NNODES> const& nodes,
+                                                unsigned value)
+	: Face(value)
+{
+	_nodes = new Node*[NNODES];
+	std::copy(nodes.begin(), nodes.end(), _nodes);
+
+	_neighbors = new Element*[4];
+	std::fill(_neighbors, _neighbors + 4, nullptr);
+
+	this->_area = this->computeVolume();
+}
 
 template <unsigned NNODES, CellType::type CELLQUADTYPE>
 TemplateQuad<NNODES,CELLQUADTYPE>::TemplateQuad(Node* nodes[NNODES], unsigned value)