diff --git a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/Plane.java b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/Plane.java
index 6e4243b00667a7ea82338544d348974d72639298..3237797a9041493bf2696089aa2e1c237b827f94 100644
--- a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/Plane.java
+++ b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/Plane.java
@@ -1,6 +1,7 @@
 package cz.fidentis.analyst.symmetry;
 
 import cz.fidentis.analyst.mesh.core.MeshFacet;
+import cz.fidentis.analyst.mesh.core.MeshFacetImpl;
 import cz.fidentis.analyst.mesh.core.MeshPoint;
 import cz.fidentis.analyst.mesh.core.MeshPointImpl;
 
@@ -54,7 +55,7 @@ public class Plane {
      * @return plane represented as mesh 
      */
     public static SymmetryEstimator createPlaneMesh(MeshPoint centroid, MeshPoint a, MeshPoint b, double scale) {
-        facet = new MeshFacet();
+        facet = new MeshFacetImpl();
         SymmetryEstimator planeMesh = new SymmetryEstimator(facet, Config.getDefault());
         
         MeshPoint[] points = new MeshPoint[4];
diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacet.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacet.java
index 3e225c924fc77b29688773d28d320e743334b0f5..9f662046f797f973043a7f0813abb2967e78fc1d 100644
--- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacet.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacet.java
@@ -1,80 +1,47 @@
-package cz.fidentis.analyst.mesh.core;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * MashFacet
- *
- * @author Matej Lukes
- */
-public class MeshFacet {
-    private List<MeshPoint> vertices = new ArrayList<>();
-    private CornerTable cornerTable;
-
-    /**
-     * Constructor of MeshFacet
-     */
-    public MeshFacet() {
-        cornerTable = new CornerTable();
-    }
-
-    /**
-     * Copy constructor of MeshFacet
-     *
-     * @param facet copied MeshFacet
-     */
-    public MeshFacet(MeshFacet facet) {
-        for (MeshPoint vertex: facet.vertices) {
-            vertices.add(new MeshPointImpl(vertex));
-        }
-        cornerTable = new CornerTable(facet.cornerTable);
-    }
-
-    /**
-     * returns vertex of specified index
-     *
-     * @param index index of vertex
-     * @return vertex
-     */
-    public MeshPoint getVertex(int index) {
-        return vertices.get(index);
-    }
-
-    /**
-     * adds vertex to MeshFacet
-     *
-     * @param point new vertex
-     */
-    public void addVertex(MeshPoint point) {
-        vertices.add(point);
-    }
-
-    /**
-     * returns number of vertices in MeshFacet
-     *
-     * @return number of vertices
-     */
-    public int getNumberOfVertices() {
-        return vertices.size();
-    }
-
-    /**
-     * returns list of vertices in MeshFacet
-     *
-     * @return list if vertices
-     */
-    public List<MeshPoint> getVertices() {
-        return vertices;
-    }
-
-    /**
-     * returns Corner Table representing MeshFacet
-     *
-     * @return corner table
-     */
-    public CornerTable getCornerTable() {
-        return cornerTable;
-    }
-}
-
+package cz.fidentis.analyst.mesh.core;
+
+import java.util.List;
+
+/**
+ * An ancapsulated mesh plate (with shared vertices).
+ *
+ * @author Matej Lukes
+ */
+public interface MeshFacet {
+    
+    /**
+     * returns vertex of specified index
+     *
+     * @param index index of vertex
+     * @return vertex
+     */
+    MeshPoint getVertex(int index);
+
+    /**
+     * adds vertex to MeshFacet
+     *
+     * @param point new vertex
+     */
+    void addVertex(MeshPoint point);
+
+    /**
+     * returns number of vertices in MeshFacet
+     *
+     * @return number of vertices
+     */
+    int getNumberOfVertices();
+
+    /**
+     * returns list of vertices in MeshFacet
+     *
+     * @return list if vertices
+     */
+    List<MeshPoint> getVertices();
+
+    /**
+     * returns Corner Table representing MeshFacet
+     *
+     * @return corner table
+     */
+    CornerTable getCornerTable();
+}
diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacetImpl.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacetImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..301548ec198e9e64b5b827d09fa2f604b5a56880
--- /dev/null
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacetImpl.java
@@ -0,0 +1,60 @@
+package cz.fidentis.analyst.mesh.core;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * MashFacet
+ *
+ * @author Matej Lukes
+ */
+public class MeshFacetImpl implements MeshFacet {
+    
+    private List<MeshPoint> vertices = new ArrayList<>();
+    private CornerTable cornerTable;
+
+    /**
+     * Constructor of MeshFacet
+     */
+    public MeshFacetImpl() {
+        cornerTable = new CornerTable();
+    }
+
+    /**
+     * Copy constructor of MeshFacet
+     *
+     * @param facet copied MeshFacet
+     */
+    public MeshFacetImpl(MeshFacet facet) {
+        for (MeshPoint vertex: facet.getVertices()) {
+            vertices.add(new MeshPointImpl(vertex));
+        }
+        cornerTable = new CornerTable(facet.getCornerTable());
+    }
+
+    @Override
+    public MeshPoint getVertex(int index) {
+        return vertices.get(index);
+    }
+
+    @Override
+    public void addVertex(MeshPoint point) {
+        vertices.add(point);
+    }
+
+    @Override
+    public int getNumberOfVertices() {
+        return vertices.size();
+    }
+
+    @Override
+    public List<MeshPoint> getVertices() {
+        return vertices;
+    }
+
+    @Override
+    public CornerTable getCornerTable() {
+        return cornerTable;
+    }
+}
+
diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshModel.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshModel.java
index 1f22bb850298923e44df81fef96a40ffb33cfd71..38a7b9c6c7c5e1bf081380af481898a7182f139a 100644
--- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshModel.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshModel.java
@@ -26,7 +26,7 @@ public class MeshModel {
     public MeshModel(MeshModel meshModel) {
         for (MeshFacet facet :
                 meshModel.facets) {
-            facets.add(new MeshFacet(facet));
+            facets.add(new MeshFacetImpl(facet));
         }
     }
 
diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/io/MeshObjLoader.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/io/MeshObjLoader.java
index eb3e48c2f660245388c6d5aed0b804cbc6f066fc..210616d4f472673037af0ce2d981ee75a514a5bd 100644
--- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/io/MeshObjLoader.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/io/MeshObjLoader.java
@@ -12,6 +12,7 @@ import com.mokiat.data.front.parser.OBJTexCoord;
 import com.mokiat.data.front.parser.OBJVertex;
 import cz.fidentis.analyst.mesh.core.CornerTableRow;
 import cz.fidentis.analyst.mesh.core.MeshFacet;
+import cz.fidentis.analyst.mesh.core.MeshFacetImpl;
 import cz.fidentis.analyst.mesh.core.MeshModel;
 import cz.fidentis.analyst.mesh.core.MeshPoint;
 import cz.fidentis.analyst.mesh.core.MeshPointImpl;
@@ -91,7 +92,7 @@ public class MeshObjLoader {
      * @throws IOException Data are corrupted
      */
     private static MeshFacet parseMeshToFacet(OBJModel model, OBJMesh mesh) throws IOException {
-        MeshFacet meshFacet = new MeshFacet();
+        MeshFacet meshFacet = new MeshFacetImpl();
         Map<MeshPoint, Integer> vertices = new HashMap();
         Map<Edge, Integer> edges = new HashMap();