diff --git a/MeshLib/Elements/Quad.cpp b/MeshLib/Elements/Quad.cpp
index a4b632f16ea245b8eaa3b515c2b57f6b8592c1ce..922871ddbee54da7015e137f04d08dbbc75e3991 100644
--- a/MeshLib/Elements/Quad.cpp
+++ b/MeshLib/Elements/Quad.cpp
@@ -12,6 +12,7 @@
 
 #include "Quad.h"
 #include "Node.h"
+#include "Tri.h"
 
 #include "MathTools.h"
 
@@ -22,7 +23,7 @@ const unsigned Quad::_edge_nodes[4][2] =
 {
 	{0, 1}, // Edge 0
 	{1, 2}, // Edge 1
-	{0, 2}, // Edge 2
+	{2, 3}, // Edge 2
 	{0, 3}  // Edge 3
 };
 
@@ -79,6 +80,19 @@ Element* Quad::clone() const
 	return new Quad(*this);
 }
 
+Element* Quad::reviseElement() const
+{
+	if (_nodes[0] == _nodes[1] || _nodes[1] == _nodes[2]) {
+		return new Tri(_nodes[0], _nodes[2], _nodes[3], _value);
+	}
+
+	if (_nodes[2] == _nodes[3] || _nodes[3] == _nodes[0]) {
+		return new Tri(_nodes[0], _nodes[1], _nodes[2], _value);
+	}
+
+	// this should not happen
+	return NULL;
+}
 
 }
 
diff --git a/MeshLib/Elements/Quad.h b/MeshLib/Elements/Quad.h
index e633c5df7faf73e780db4dd31c13f043e76021dd..1ccd21b516c6d13828194f0383f6ed77c782f2e1 100644
--- a/MeshLib/Elements/Quad.h
+++ b/MeshLib/Elements/Quad.h
@@ -18,19 +18,18 @@
 namespace MeshLib {
 
 /**
- * A 2d Quadliteral Element.
+ * This class represents a 2d quadliteral element. The following sketch shows the node and edge numbering.
+ * @anchor QuadNodeAndEdgeNumbering
  * @code
- *
- *        3           2
- *  Quad: o-----------o
- *        |           |
+ *              2
+ *        3-----------2
  *        |           |
  *        |           |
+ *       3|           |1
  *        |           |
  *        |           |
- *        o-----------o
- *        0           1
- *
+ *        0-----------1
+ *              0
  * @endcode
  */
 class Quad : public Face
@@ -69,6 +68,17 @@ public:
 	 */
 	virtual Element* clone() const;
 
+	/**
+	 * This method should be called after at least two nodes of the quad
+	 * element are collapsed. As a consequence of the node collapsing an edge
+	 * of the quad will be collapsed. If one of the edges (see
+	 * sketch @ref PyramidNodeAndEdgeNumbering) is collapsed we obtain a
+	 * triangle. In this case the method will create the appropriate
+	 * object of class Tri.
+	 * @return a Tri object or NULL
+	 */
+	virtual Element* reviseElement() const;
+
 protected:
 	/// Calculates the area of a convex quadliteral by dividing it into two triangles.
 	double computeArea();