diff --git a/MeshModel/MeshModel.iml b/MeshModel/MeshModel.iml
index e29c6dca310c26b61d1d875e4eb34838860ffbb4..6476cacf6bb438bfff413f5145f09fc4b3f4285e 100644
--- a/MeshModel/MeshModel.iml
+++ b/MeshModel/MeshModel.iml
@@ -5,7 +5,7 @@
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
     <orderEntry type="inheritedJdk" />
diff --git a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshComponent.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshComponent.java
similarity index 86%
rename from MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshComponent.java
rename to MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshComponent.java
index acbea11f6aeac0bca87c2f72555a64b70e146dcd..475bb816cbdc6aae77d50ef000c61109b452c66b 100644
--- a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshComponent.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshComponent.java
@@ -2,6 +2,11 @@ package cz.fidentis.analyst.mesh.core;
 
 import java.util.List;
 
+/**
+ * Abstract universal node, implements management of parent elements
+ *
+ * @author Matej Lukes
+ */
 public abstract class MeshComponent {
     private List<MeshComponent> parents;
 
diff --git a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshComposite.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshComposite.java
similarity index 82%
rename from MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshComposite.java
rename to MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshComposite.java
index e4d1c57e9eef9a7d1faaabfa0944238f9fb62d9b..0c36e473eb7aa5883c3967b66a76146c955c367e 100644
--- a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshComposite.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshComposite.java
@@ -2,6 +2,11 @@ package cz.fidentis.analyst.mesh.core;
 
 import java.util.List;
 
+/**
+ * Inner node of the Hierarchy, implements management of child elements
+ *
+ * @author Matej Lukes
+ */
 public class MeshComposite extends MeshComponent {
     private List<MeshComponent> children;
 
diff --git a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshEdge.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshEdge.java
similarity index 75%
rename from MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshEdge.java
rename to MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshEdge.java
index f9a4fd2b903ccbada158733d93d0c3f7d73cbc81..d44572b91efb98da2a33d412f52369b38fcd0c50 100644
--- a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshEdge.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshEdge.java
@@ -1,7 +1,10 @@
 package cz.fidentis.analyst.mesh.core;
 
-import java.util.List;
-
+/**
+ * MeshEdge is an edge shared between two MeshFaces.
+ *
+ * @author Matej Lukes
+ */
 public class MeshEdge extends MeshComposite {
 
     public MeshEdge(MeshPoint point1, MeshPoint point2){
@@ -40,4 +43,14 @@ public class MeshEdge extends MeshComposite {
 
         return true;
     }
+
+    @Override
+    public int hashCode() {
+        int hash = 0;
+        for (MeshComponent point :
+                getChildren()) {
+            hash += point.hashCode();
+        }
+        return hash;
+    }
 }
diff --git a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshFace.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFace.java
similarity index 79%
rename from MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshFace.java
rename to MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFace.java
index 56353420db51b5258e056136c4e4e4120b4b6228..dc7a6dff591b198ecc3d23e881fdfbe0667d04a9 100644
--- a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshFace.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFace.java
@@ -1,5 +1,10 @@
 package cz.fidentis.analyst.mesh.core;
 
+/**
+ * MeshFace is a surface triangle or planar polygon
+ *
+ * @author Matej Lukes
+ */
 public class MeshFace extends MeshComposite {
     /**
      * @param newChild new child element must be MeshEdge
diff --git a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshFacet.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacet.java
similarity index 92%
rename from MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshFacet.java
rename to MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacet.java
index 5afa5c8c30ac0e1f6980ea5b26ba5d0ffdf34c68..0578c7221a44e3bfa7a8be86ebeaf5d9e2ac3020 100644
--- a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshFacet.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshFacet.java
@@ -1,9 +1,13 @@
 package cz.fidentis.analyst.mesh.core;
 
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
+/**
+ * MashFacet is a group of MeshFaces
+ *
+ * @author Matej Lukes
+ */
 public class MeshFacet extends MeshComposite {
 
     private Map<MeshPoint, MeshPoint> pointPool = new HashMap<>();
diff --git a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshLeaf.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshLeaf.java
similarity index 82%
rename from MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshLeaf.java
rename to MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshLeaf.java
index 10f5eb42dcf44dfbe7e9c9e68778fe3dcbe402d5..19c6e0a48822ca423995a8ab82750235add596f6 100644
--- a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshLeaf.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshLeaf.java
@@ -1,8 +1,12 @@
 package cz.fidentis.analyst.mesh.core;
 
-import java.util.ArrayList;
 import java.util.List;
 
+/**
+ * MeshLeaf is a  leaf node of the hierarchy
+ *
+ * @author Matej Lukes
+ */
 public class MeshLeaf extends MeshComponent {
     /**
      * MeshLeaf does not have child elements
diff --git a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshModel.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshModel.java
similarity index 90%
rename from MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshModel.java
rename to MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshModel.java
index f1c7ff0fbf7fc81bf6f7ca4b1c5376464c6ac3b8..dee66decfda92fc6ed10dccd7755a22103990367 100644
--- a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshModel.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshModel.java
@@ -2,6 +2,9 @@ package cz.fidentis.analyst.mesh.core;
 
 import java.util.List;
 
+/**
+ * MeshModel is a root node of the hierarchy
+ */
 public class MeshModel extends MeshComposite {
     /**
      * MeshModel is root element, it does not have parent elements
diff --git a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshPoint.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPoint.java
similarity index 81%
rename from MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshPoint.java
rename to MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPoint.java
index e066417bd5da776d06d6adddb6cc4081627d3b9d..dc87a21bc044dcaed4132143b2c535d1f1202227 100644
--- a/MeshModel/src/main/cz/fidentis/analyst/mesh/core/MeshPoint.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshPoint.java
@@ -1,8 +1,12 @@
 package cz.fidentis.analyst.mesh.core;
 
 import javax.vecmath.Vector3d;
-import java.util.List;
 
+/**
+ * MeshPoint represents a point with position, normal, and texture coordinates
+ *
+ * @author Matej Lukes
+ */
 public class MeshPoint extends MeshLeaf {
     private final Vector3d position, normal, texCoord;
 
@@ -50,4 +54,9 @@ public class MeshPoint extends MeshLeaf {
                 && this.normal.equals(meshPointObj.normal)
                 && this.texCoord.equals(meshPointObj.texCoord);
     }
+
+    @Override
+    public int hashCode() {
+        return position.hashCode() + normal.hashCode() + texCoord.hashCode();
+    }
 }