diff --git a/Comparison/src/main/java/cz/fidentis/analyst/BatchProcessor.java b/Comparison/src/main/java/cz/fidentis/analyst/BatchProcessor.java
index 9b0aa3b56d876a5ca455a41094f7878f1408b0ee..0de5414dc250900339ad38ded8c12604b67faf91 100644
--- a/Comparison/src/main/java/cz/fidentis/analyst/BatchProcessor.java
+++ b/Comparison/src/main/java/cz/fidentis/analyst/BatchProcessor.java
@@ -7,8 +7,7 @@ import cz.fidentis.analyst.icp.IcpTransformer;
 import cz.fidentis.analyst.icp.UndersamplingStrategy;
 import cz.fidentis.analyst.kdtree.KdTree;
 import cz.fidentis.analyst.mesh.core.MeshFacet;
-import cz.fidentis.analyst.symmetry.SignificantPoints;
-import static cz.fidentis.analyst.symmetry.SignificantPoints.CurvatureAlg.GAUSSIAN;
+import cz.fidentis.analyst.symmetry.CurvatureAlg;
 import cz.fidentis.analyst.symmetry.SymmetryConfig;
 import cz.fidentis.analyst.symmetry.SymmetryEstimator;
 import java.io.File;
@@ -30,7 +29,6 @@ public class BatchProcessor {
     private double avgIcpIterations = 0.0;
     
     private SymmetryConfig symmetryConfig;
-    private SignificantPoints.CurvatureAlg symmetryCurvArg = GAUSSIAN;
     
     /**
      * Constructor.
@@ -72,7 +70,7 @@ public class BatchProcessor {
         for (String facePath: faceIDs) {
             String faceId = HumanFaceFactory.instance().loadFace(new File(facePath));
             HumanFace face = HumanFaceFactory.instance().getFace(faceId);
-            SymmetryEstimator se = new SymmetryEstimator(this.symmetryConfig, this.symmetryCurvArg);
+            SymmetryEstimator se = new SymmetryEstimator(this.symmetryConfig);
             face.getMeshModel().compute(se);
             face.setSymmetryPlane(se.getSymmetryPlane(), se.getSymmetryPlaneMesh());
         }
diff --git a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/CurvatureAlg.java b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/CurvatureAlg.java
new file mode 100644
index 0000000000000000000000000000000000000000..64eabced06338550c08014ce6b4ca0dae8b862a3
--- /dev/null
+++ b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/CurvatureAlg.java
@@ -0,0 +1,13 @@
+package cz.fidentis.analyst.symmetry;
+
+/**
+ * Curvature algorithm used for the selection of the top X significant points.
+ * 
+ * @author Radek Oslejsek
+ */
+public enum CurvatureAlg {
+    MEAN,
+    GAUSSIAN,
+    MAX,
+    MIN
+}
diff --git a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SignificantPoints.java b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SignificantPoints.java
index cee086f5094b1902c5fe24f9d42a58a49cab19f0..1aa8bceb697b75e943b69606835622c254c809b5 100644
--- a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SignificantPoints.java
+++ b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SignificantPoints.java
@@ -24,17 +24,6 @@ import javax.vecmath.Vector3d;
  */
 public class SignificantPoints extends MeshVisitor {
     
-    /**
-     * Curvature algorithm used for the selection of the top X significant points.
-     * @author Radek Oslejsek
-     */
-    public enum CurvatureAlg {
-        MEAN,
-        GAUSSIAN,
-        MAX,
-        MIN
-    };
-    
     private final int maxPoints;
     
     private final Curvature curvatureVisitor;
diff --git a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryConfig.java b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryConfig.java
index c4ee1faa4832f9757285a182e0cee19a1763f86c..bb4d0482a5cb2cb8846951f26da5b05e156c5509 100644
--- a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryConfig.java
+++ b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryConfig.java
@@ -16,6 +16,7 @@ public class SymmetryConfig {
     private static final double DEFAULT_MAX_REL_DISTANCE = 1.0 / 100.0;
     private static final int DEFAULT_SIGNIFICANT_POINT_COUNT = 200;
     private static final boolean DEFAULT_AVERAGING = true;
+    private static final CurvatureAlg DEFAULT_CURVATURE_ALGORITHM = CurvatureAlg.GAUSSIAN;
     
     private double minCurvRatio;
     private double minAngleCos;
@@ -23,6 +24,7 @@ public class SymmetryConfig {
     private double maxRelDistance;
     private int significantPointCount;
     private boolean averaging;
+    private CurvatureAlg curvatureAlg;
     
     /**
      * Creates configuration with default values 
@@ -34,6 +36,31 @@ public class SymmetryConfig {
         maxRelDistance = DEFAULT_MAX_REL_DISTANCE;
         significantPointCount = DEFAULT_SIGNIFICANT_POINT_COUNT;
         averaging = DEFAULT_AVERAGING;
+        curvatureAlg = DEFAULT_CURVATURE_ALGORITHM;
+    }
+    
+    /**
+     * Copy constructor.
+     * 
+     * @param conf Original configuration
+     */
+    public SymmetryConfig(SymmetryConfig conf) {
+        copy(conf);
+    }
+    
+    /**
+     * Copies values from another configuration object.
+     * 
+     * @param conf Another configuration
+     */
+    public void copy(SymmetryConfig conf) {
+        minCurvRatio = conf.minCurvRatio;
+        minAngleCos = conf.maxRelDistance;
+        minNormAngleCos = conf.minNormAngleCos;
+        maxRelDistance = conf.maxRelDistance;
+        significantPointCount = conf.significantPointCount;
+        averaging = conf.averaging;
+        curvatureAlg = conf.curvatureAlg;
     }
     
     /**
@@ -147,6 +174,22 @@ public class SymmetryConfig {
     public void setAveraging(boolean averaging) {
         this.averaging = averaging;
     }
+    
+    /**
+     * Returns curvature algorithm.
+     * @return curvature algorithm 
+     */
+    public CurvatureAlg getCurvatureAlg() {
+        return this.curvatureAlg;
+    }
+    
+    /**
+     * Sets  curvature algorithm.
+     * @param alg curvature algorithm
+     */
+    public void setCurvatureAlg(CurvatureAlg alg) {
+        this.curvatureAlg = alg;
+    }
 
     /**
      * 
@@ -162,6 +205,7 @@ public class SymmetryConfig {
         str += "Max relative distance: " + maxRelDistance + "\n";
         str += "Significant points: " + significantPointCount + "\n";
         str += "Averaging: " + averaging + "\n";
+        str += "Curvature: " + curvatureAlg + "\n";
         return str;
     }
 }
\ No newline at end of file
diff --git a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java
index 44b1f66152dcb982ac2a19c9124d3ef465c49b1f..4a2b0cc77c9a926c53f5bfd62e44bdc32100a8ad 100644
--- a/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java
+++ b/Comparison/src/main/java/cz/fidentis/analyst/symmetry/SymmetryEstimator.java
@@ -5,10 +5,8 @@ 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.MeshPointImpl;
-import cz.fidentis.analyst.symmetry.SignificantPoints.CurvatureAlg;
 import cz.fidentis.analyst.visitors.mesh.BoundingBox;
 import cz.fidentis.analyst.visitors.mesh.BoundingBox.BBox;
-import cz.fidentis.analyst.visitors.mesh.Curvature;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Callable;
@@ -46,16 +44,14 @@ public class SymmetryEstimator extends MeshVisitor {
      * Constructor.
      * 
      * @param config Algorithm options
-     * @param curvatureAlg Curvature algorithm used for the selection of significant points.
-     *        See {@link Curvature} for more details.
      * @throws IllegalArgumentException if some input parameter is missing
      */
-    public SymmetryEstimator(SymmetryConfig config, CurvatureAlg curvatureAlg) {
+    public SymmetryEstimator(SymmetryConfig config) {
         if (config == null) {
             throw new IllegalArgumentException("config");
         }
         this.config = config;
-        this.sigPointsVisitor = new SignificantPoints(curvatureAlg, config.getSignificantPointCount());
+        this.sigPointsVisitor = new SignificantPoints(config.getCurvatureAlg(), config.getSignificantPointCount());
     }
     
     @Override
@@ -76,8 +72,9 @@ public class SymmetryEstimator extends MeshVisitor {
     }
     
     /**
-     * Computes the symmetry plane concurrently. The plane is computed only once, 
-     * then the same instance is returned.
+     * Computes the symmetry plane concurrently.The plane is computed only once, then the same instance is returned.
+     * 
+     * @return Symmetry plane
      */
     public Plane getSymmetryPlane() {
         return getSymmetryPlane(true);
diff --git a/Comparison/src/test/java/cz/fidentis/analyst/visitors/kdtree/KdTreeApproxDistToTriTest.java b/Comparison/src/test/java/cz/fidentis/analyst/visitors/kdtree/KdTreeApproxDistToTriTest.java
index 9980ec45e3a5edafde31945ed15b4bffdb796ce8..1151119ee965afe396dcb75cc6e3bc92bc6a18b6 100644
--- a/Comparison/src/test/java/cz/fidentis/analyst/visitors/kdtree/KdTreeApproxDistToTriTest.java
+++ b/Comparison/src/test/java/cz/fidentis/analyst/visitors/kdtree/KdTreeApproxDistToTriTest.java
@@ -1,18 +1,10 @@
 package cz.fidentis.analyst.visitors.kdtree;
 
 import cz.fidentis.analyst.kdtree.KdTree;
-import cz.fidentis.analyst.kdtree.KdTreeVisitor;
 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.MeshPoint;
 import cz.fidentis.analyst.mesh.core.MeshPointImpl;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
 import javax.vecmath.Point3d;
 import javax.vecmath.Vector3d;
 import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Canvas.form b/GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.form
similarity index 86%
rename from GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Canvas.form
rename to GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.form
index 1c4273533b0c5a475555b30b37ca60567f472bfc..776493ee17f09e9f0184688002e2e24c46cea444 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Canvas.form
+++ b/GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.form
@@ -27,7 +27,6 @@
           <Color blue="28" green="28" red="28" type="rgb"/>
         </Property>
         <Property name="toolTipText" type="java.lang.String" value=""/>
-        <Property name="opaque" type="boolean" value="true"/>
       </Properties>
       <Events>
         <EventHandler event="componentResized" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="jLayeredPane1ComponentResized"/>
@@ -191,6 +190,9 @@
         </Component>
         <Component class="javax.swing.JLabel" name="jLabel1">
           <Properties>
+            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
+              <Color blue="28" green="28" red="28" type="rgb"/>
+            </Property>
             <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
               <Image iconType="3" name="/navigBackground.png"/>
             </Property>
@@ -226,44 +228,6 @@
             </Constraint>
           </Constraints>
         </Component>
-        <Component class="javax.swing.JLabel" name="whiteBackroundButton">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/whiteBackroundCanvas.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="White backround"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="whiteBackroundButtonMouseClicked"/>
-          </Events>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="50" y="130" width="-1" height="-1"/>
-            </Constraint>
-          </Constraints>
-        </Component>
-        <Component class="javax.swing.JLabel" name="blackBackroundButton">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/blackBackroundCanvas.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Dark background"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="blackBackroundButtonMouseClicked"/>
-          </Events>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="50" y="190" width="-1" height="-1"/>
-            </Constraint>
-          </Constraints>
-        </Component>
         <Container class="javax.swing.JPanel" name="jPanel1">
           <Properties>
             <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Canvas.java b/GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.java
similarity index 87%
rename from GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Canvas.java
rename to GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.java
index 8b74f81ac2ac1828de5c6208053e5e6c4f393e6d..bcc2da965d616d126c9ae36ab4ec576a1bc1986e 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Canvas.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.java
@@ -1,12 +1,12 @@
-package cz.fidentis.analyst.gui.canvas;
+package cz.fidentis.analyst.canvas;
 
 import com.jogamp.opengl.GLCapabilities;
 import com.jogamp.opengl.GLProfile;
 import com.jogamp.opengl.awt.GLCanvas;
 import cz.fidentis.analyst.face.HumanFace;
-import cz.fidentis.analyst.gui.scene.Camera;
-import cz.fidentis.analyst.gui.scene.Scene;
-import cz.fidentis.analyst.gui.scene.SceneRenderer;
+import cz.fidentis.analyst.scene.Camera;
+import cz.fidentis.analyst.scene.Scene;
+import cz.fidentis.analyst.scene.SceneRenderer;
 
 import java.awt.Color;
 import java.awt.Cursor;
@@ -83,7 +83,8 @@ public class Canvas extends javax.swing.JPanel {
     /**
      * Initializes the scene for the 1:1 comparison. Can be called only once.
      * 
-     * @param face Human face
+     * @param primary Primary face
+     * @param secondary Secondary face
      * @throws UnsupportedOperationException the the scene is already initiated
      * @throws IllegalArgumentException if some face is missing
      */
@@ -102,6 +103,9 @@ public class Canvas extends javax.swing.JPanel {
         return sceneRenderer;
     }
     
+    /**
+     * Renders the scene.
+     */
     public void renderScene() {
         glCanvas.display();
     }
@@ -169,8 +173,6 @@ public class Canvas extends javax.swing.JPanel {
         plusNavigationButton = new javax.swing.JButton();
         jLabel1 = new javax.swing.JLabel();
         rightNavigationButton1 = new javax.swing.JButton();
-        whiteBackroundButton = new javax.swing.JLabel();
-        blackBackroundButton = new javax.swing.JLabel();
         jPanel1 = new javax.swing.JPanel();
 
         setBackground(new java.awt.Color(0, 0, 0));
@@ -178,7 +180,6 @@ public class Canvas extends javax.swing.JPanel {
 
         jLayeredPane1.setBackground(new java.awt.Color(40, 40, 40));
         jLayeredPane1.setToolTipText("");
-        jLayeredPane1.setOpaque(true);
         jLayeredPane1.addComponentListener(new java.awt.event.ComponentAdapter() {
             public void componentResized(java.awt.event.ComponentEvent evt) {
                 jLayeredPane1ComponentResized(evt);
@@ -292,6 +293,7 @@ public class Canvas extends javax.swing.JPanel {
         jLayeredPane1.add(plusNavigationButton);
         plusNavigationButton.setBounds(30, 90, 30, 30);
 
+        jLabel1.setBackground(new java.awt.Color(40, 40, 40));
         jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/navigBackground.png"))); // NOI18N
         jLayeredPane1.add(jLabel1);
         jLabel1.setBounds(30, 10, 90, 90);
@@ -313,28 +315,6 @@ public class Canvas extends javax.swing.JPanel {
         jLayeredPane1.add(rightNavigationButton1);
         rightNavigationButton1.setBounds(90, 40, 30, 30);
 
-        whiteBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/whiteBackroundCanvas.png"))); // NOI18N
-        whiteBackroundButton.setToolTipText("White backround");
-        whiteBackroundButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        whiteBackroundButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                whiteBackroundButtonMouseClicked(evt);
-            }
-        });
-        jLayeredPane1.add(whiteBackroundButton);
-        whiteBackroundButton.setBounds(50, 130, 56, 56);
-
-        blackBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/blackBackroundCanvas.png"))); // NOI18N
-        blackBackroundButton.setToolTipText("Dark background");
-        blackBackroundButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        blackBackroundButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                blackBackroundButtonMouseClicked(evt);
-            }
-        });
-        jLayeredPane1.add(blackBackroundButton);
-        blackBackroundButton.setBounds(50, 190, 56, 56);
-
         jPanel1.setBackground(new java.awt.Color(0, 0, 0));
         jPanel1.setLayout(new java.awt.BorderLayout());
         jLayeredPane1.add(jPanel1);
@@ -427,22 +407,7 @@ public class Canvas extends javax.swing.JPanel {
         resetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resetButton.png")));
     }//GEN-LAST:event_resetButtonMouseExited
 
-    private void whiteBackroundButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_whiteBackroundButtonMouseClicked
-        sceneRenderer.setBrightBackground();
-        renderScene();
-        whiteBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/whiteBackroundCanvasPressed.png")));
-        blackBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/blackBackroundCanvas.png")));
-    }//GEN-LAST:event_whiteBackroundButtonMouseClicked
-
-    private void blackBackroundButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_blackBackroundButtonMouseClicked
-        sceneRenderer.setDarkBackground();
-        renderScene();
-        whiteBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/whiteBackroundCanvas.png")));
-        blackBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/blackBackroundCanvasPressed.png")));
-    }//GEN-LAST:event_blackBackroundButtonMouseClicked
-
     // Variables declaration - do not modify//GEN-BEGIN:variables
-    private javax.swing.JLabel blackBackroundButton;
     private javax.swing.JButton downNavigationButton;
     private javax.swing.JLabel jLabel1;
     private javax.swing.JLayeredPane jLayeredPane1;
@@ -453,6 +418,5 @@ public class Canvas extends javax.swing.JPanel {
     private javax.swing.JLabel resetButton;
     private javax.swing.JButton rightNavigationButton1;
     private javax.swing.JButton upNavigationButton;
-    private javax.swing.JLabel whiteBackroundButton;
     // End of variables declaration//GEN-END:variables
 }
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/CanvasListener.java b/GUI/src/main/java/cz/fidentis/analyst/canvas/CanvasListener.java
similarity index 94%
rename from GUI/src/main/java/cz/fidentis/analyst/gui/canvas/CanvasListener.java
rename to GUI/src/main/java/cz/fidentis/analyst/canvas/CanvasListener.java
index d8fbc1c9236e321ea829072988895a53fda7e7ca..21f9e7110aaa830b1cd3d2c5d9433153573c0b67 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/CanvasListener.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/canvas/CanvasListener.java
@@ -1,4 +1,4 @@
-package cz.fidentis.analyst.gui.canvas;
+package cz.fidentis.analyst.canvas;
 
 import com.jogamp.opengl.GLAutoDrawable;
 import com.jogamp.opengl.GLEventListener;
@@ -39,7 +39,7 @@ public class CanvasListener implements GLEventListener {
     @Override
     public void display(GLAutoDrawable glad) {
         //System.out.println("CanvasListener.display " + this.toString());
-        canvas.getSceneRenderer().renderScene(canvas.getCamera(), canvas.getScene().getDrawables());
+        canvas.getSceneRenderer().renderScene(canvas.getCamera(), canvas.getScene().getAllDrawables());
     }
 
     @Override
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Direction.java b/GUI/src/main/java/cz/fidentis/analyst/canvas/Direction.java
similarity index 89%
rename from GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Direction.java
rename to GUI/src/main/java/cz/fidentis/analyst/canvas/Direction.java
index a0be3b48a1f8a78770c302fe970a9a0e25652c34..04a8348e70dc6dc4491860d9b1f5d392b816e36e 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/Direction.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/canvas/Direction.java
@@ -3,7 +3,7 @@
  * To change this template file, choose Tools | Templates
  * and open the template in the editor.
  */
-package cz.fidentis.analyst.gui.canvas;
+package cz.fidentis.analyst.canvas;
 
 /**
  *
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/MouseRotationListener.java b/GUI/src/main/java/cz/fidentis/analyst/canvas/MouseRotationListener.java
similarity index 95%
rename from GUI/src/main/java/cz/fidentis/analyst/gui/canvas/MouseRotationListener.java
rename to GUI/src/main/java/cz/fidentis/analyst/canvas/MouseRotationListener.java
index 2a9ecd90239a937f08f0be6fb58e3907ede4571e..26753fbdd348d09f060a2a9b5eb419d948496df5 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/MouseRotationListener.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/canvas/MouseRotationListener.java
@@ -1,4 +1,4 @@
-package cz.fidentis.analyst.gui.canvas;
+package cz.fidentis.analyst.canvas;
 
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/RotationAnimator.java b/GUI/src/main/java/cz/fidentis/analyst/canvas/RotationAnimator.java
similarity index 97%
rename from GUI/src/main/java/cz/fidentis/analyst/gui/canvas/RotationAnimator.java
rename to GUI/src/main/java/cz/fidentis/analyst/canvas/RotationAnimator.java
index 850d395f45972db169ce6f2a48efdddb7feb7d67..618d50f314463ea7776b5086cb25ef00ae5e7145 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/canvas/RotationAnimator.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/canvas/RotationAnimator.java
@@ -1,8 +1,8 @@
-package cz.fidentis.analyst.gui.canvas;
+package cz.fidentis.analyst.canvas;
 
 import com.jogamp.opengl.awt.GLCanvas;
 import com.jogamp.opengl.util.FPSAnimator;
-import cz.fidentis.analyst.gui.scene.Camera;
+import cz.fidentis.analyst.scene.Camera;
 import java.util.Timer;
 import java.util.TimerTask;
 
diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanel.java b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanel.java
new file mode 100644
index 0000000000000000000000000000000000000000..2df031451bc5b5508f788aac3fd305ac3cc637dc
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanel.java
@@ -0,0 +1,18 @@
+package cz.fidentis.analyst.core;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+
+/**
+ * An abstract class for control panels that can be docked in the {@link TopControlPanel}.
+ * 
+ * @author Radek Oslejsek
+ */
+public abstract class ControlPanel extends JPanel {
+    
+    /**
+     * Returns panel's icon.
+     * @return panel's icon
+     */
+    public abstract ImageIcon getIcon();
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelAction.java b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..da404c4984d67d296c726fb6a9dd6eb4f1f1ef57
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelAction.java
@@ -0,0 +1,98 @@
+package cz.fidentis.analyst.core;
+
+import cz.fidentis.analyst.canvas.Canvas;
+import cz.fidentis.analyst.scene.DrawableFace;
+import cz.fidentis.analyst.scene.DrawableFeaturePoints;
+import cz.fidentis.analyst.scene.Scene;
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import javax.swing.JTabbedPane;
+import javax.swing.JToggleButton;
+
+/**
+ * Default action listener used to connect specific control panel with the rest of
+ * the analytical tab, i.e. canvas and toolbar(s)
+ * 
+ * @author Radek Oslejsek
+ */
+public abstract class ControlPanelAction extends AbstractAction {
+    
+    /*
+     * Handled actions
+     */
+    public static final String ACTION_COMMAND_SHOW_HIDE_PANEL = "show-hide control panel";
+    
+    /*
+     * Top component - the space delimited for placing control panels
+     */
+    private final JTabbedPane topControlPanel;
+    
+    /**
+     * Canvas component
+     */
+    private final Canvas canvas;
+    
+    /**
+     * Constructor. 
+     * 
+     * @param canvas OpenGL canvas
+     * @param topControlPanel Top component for placing control panels
+     * @throws IllegalArgumentException if some param is missing
+     */
+    public ControlPanelAction(Canvas canvas, JTabbedPane topControlPanel) {
+        if (canvas == null) {
+            throw new IllegalArgumentException("canvas");
+        }
+        if (topControlPanel == null) {
+            throw new IllegalArgumentException("topControlPanel");
+        }
+        this.canvas = canvas;
+        this.topControlPanel = topControlPanel;
+    }
+    
+    @Override
+    public abstract void actionPerformed(ActionEvent ae);
+    
+    protected Canvas getCanvas() {
+        return canvas;
+    }
+    
+    /**
+     * The generic code for showing/hiding the control panel
+     * 
+     * @param ae Action event
+     */
+    protected void hideShowPanelActionPerformed(ActionEvent ae, ControlPanel controlPanel) {
+        if (((JToggleButton) ae.getSource()).isSelected()) {
+            topControlPanel.addTab(controlPanel.getName(), controlPanel.getIcon(), controlPanel);
+            topControlPanel.setSelectedComponent(controlPanel); // focus
+        } else {
+            topControlPanel.remove(controlPanel);
+        }
+    }
+    
+    protected Scene getScene() {
+        return canvas.getScene();
+    }
+    
+    protected DrawableFace getPrimaryDrawableFace() {
+        return (canvas.getScene() != null) ? canvas.getScene().getDrawableFace(0) : null;
+    }
+    
+    protected DrawableFace getSecondaryDrawableFace() {
+        return (canvas.getScene() != null) ? canvas.getScene().getDrawableFace(1) : null;
+    }
+    
+    protected DrawableFeaturePoints getPrimaryFeaturePoints() {
+        return (canvas.getScene() != null) ? canvas.getScene().getDrawableFeaturePoints(0) : null;
+    }
+    
+    protected DrawableFeaturePoints getSecondaryFeaturePoints() {
+        return (canvas.getScene() != null) ? canvas.getScene().getDrawableFeaturePoints(1) : null;
+    }
+
+    protected void renderScene() {
+        canvas.renderScene();
+    }
+    
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..5abef3e79f8d59530bc1c4902868257ab4309845
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java
@@ -0,0 +1,432 @@
+package cz.fidentis.analyst.core;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import javax.swing.Box;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JFormattedTextField;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.text.NumberFormatter;
+
+/**
+ * Builder for control panels. Layout is based on GridBagLayout. 
+ * 
+ * @author Radek Oslejsek
+ */
+public class ControlPanelBuilder {
+    
+    public static final Font CAPTION_FONT= new Font("Arial", 1, 18);
+    public static final Insets CAPTION_PADDING = new Insets(20, 0, 20, 0);  // top, left, bottom, right
+    public static final ImageIcon HELP_ICON = new ImageIcon(ControlPanelBuilder.class.getResource("/info.png"));
+    public static final Font OPTION_TEXT_FONT = new Font("Arial", 1, 14);
+    public static final Color OPTION_TEXT_COLOR = new Color(20, 114, 105);
+    public static final int OPTION_TEXT_WIDTH = 20; // number of cells
+    public static final int SLIDER_WIDTH = 20; // number of cells
+    public static final int BUTTON_WIDTH = 12; // number of cells
+    
+    public static final int NUMBER_OF_FRACTION_DIGITS = 3;
+    
+    private JPanel controlPanel;
+    private int row = 0;
+    private int col = 0;
+    
+    /**
+     * Constructor.
+     * 
+     * @param controlPanel Control panel to which the GUI elements are inserted.
+     */
+    public ControlPanelBuilder(JPanel controlPanel) {
+        if (controlPanel == null) {
+            throw new IllegalArgumentException("controlPanel");
+        }
+        this.controlPanel = controlPanel;
+        GridBagLayout layout = new GridBagLayout();
+        this.controlPanel.setLayout(layout);
+    }
+    
+    /**
+     * Helper method that parses and returns integer from the input field taking
+     * Local into consideration.
+     * 
+     * @param inputField The input field
+     * @return Integer or 0
+     */
+    public static int parseLocaleInt(JTextField inputField) {
+        NumberFormat format = NumberFormat.getInstance(Locale.getDefault());
+        try {
+            Number number = format.parse(inputField.getText());
+            return number.intValue();
+        } catch (ParseException ex) {
+            return 0;
+        }
+    }
+    
+    /**
+     * Helper method that parses and returns floating point number from the input field 
+     * takingLocale into consideration Locale.
+     * 
+     * @param inputField The input field
+     * @return Double or 0.0
+     */
+    public static double parseLocaleDouble(JTextField inputField) {
+        NumberFormat format = NumberFormat.getInstance(Locale.getDefault());
+        try {
+            Number number = format.parse(inputField.getText());
+            return number.doubleValue();
+        } catch (ParseException ex) {
+            return 0;
+        }
+    }
+    
+    /**
+     * Converts number into the text taking into account Locale
+     * @param value Number
+     * @return Text representation of given number
+     */
+    public static String intToStringLocale(int value) {
+        return ""+value;
+    }
+    
+    /**
+     * Converts number into the text taking into account Locale
+     * @param value Number
+     * @return Text representation of given number
+     */
+    public static String doubleToStringLocale(double value) {
+        NumberFormat formatter = DecimalFormat.getInstance(Locale.getDefault());
+        formatter.setMinimumFractionDigits(1);
+        formatter.setMaximumFractionDigits(NUMBER_OF_FRACTION_DIGITS);
+        formatter.setRoundingMode(RoundingMode.HALF_UP);
+        return formatter.format(value);
+    }
+    
+    /**
+     * Adds a line with caption.
+     * 
+     * @param caption Caption text.
+     * @return This new  GUI object
+     */
+    public JLabel addCaptionLine(String caption) {
+        GridBagConstraints c = new GridBagConstraints();
+        c.insets = CAPTION_PADDING; 
+        c.gridwidth = GridBagConstraints.REMAINDER;
+        c.gridx = col;
+        c.gridy = row;
+        c.anchor = GridBagConstraints.LINE_START;
+        c.fill = GridBagConstraints.NONE;
+        JLabel label = new JLabel(caption);
+        label.setFont(CAPTION_FONT);
+        controlPanel.add(label, c);
+        //addLine();
+        return label;
+    }
+    
+    /**
+     * Adds a line with slider option.
+     * 
+     * @param helpAction Action listener invoked when the help icon is clicked. If {@code null}, then no help is shown.
+     * @param text Option text.
+     * @param sliderMax Max value of the slider (and the value field). If {@code -1}, then percentage slider is shown with 100 as the max. value.
+     * @param helpAction Action listener invoked when the input field is changed
+     * @return Creates slider
+     */
+    public JTextField addSliderOptionLine(ActionListener helpAction, String text, int sliderMax, ActionListener inputAction) {
+        if (helpAction != null) {
+            addOptionHelpIcon(helpAction);
+        } else {
+            col++;
+        }
+        addOptionText((text == null) ? "" : text);
+        
+        NumberFormatter formatter;
+        if (sliderMax == -1) { // percents in [0,1] => use two digit double
+            NumberFormat format = DecimalFormat.getInstance(Locale.getDefault());
+            format.setMinimumFractionDigits(1);
+            format.setMaximumFractionDigits(NUMBER_OF_FRACTION_DIGITS);
+            format.setRoundingMode(RoundingMode.HALF_UP);
+            formatter = new NumberFormatter(format);
+            formatter.setValueClass(Double.class);
+            formatter.setMinimum(0.0);
+            formatter.setMaximum(1.0);
+        } else {
+            NumberFormat format = NumberFormat.getInstance();
+            formatter = new NumberFormatter(format);
+            formatter.setValueClass(Integer.class);
+            formatter.setMinimum(0);
+            formatter.setMaximum(sliderMax);
+        }
+        formatter.setAllowsInvalid(false);
+        JFormattedTextField input = new JFormattedTextField(formatter);
+        
+        //JTextField input = new JTextField();
+        input.setText("0");
+        input.addActionListener(inputAction);
+        addSliderWithVal(sliderMax, input);
+        //addLine();
+        return input;
+    }
+    
+    /**
+     * Adds a line with a checkbox option.
+     * 
+     * @param helpAction Action listener invoked when the help icon is clicked. If {@code null}, then no help is shown.
+     * @param text Option text.
+     * @param selected Initial state of the checkbox.
+     * @param checkBoxAction Action listener invoked when the check box is clicked.
+     * @return Created checkbox
+     */
+    public JCheckBox addCheckBoxOptionLine(ActionListener helpAction, String text, boolean selected, ActionListener checkBoxAction) {
+        if (helpAction != null) {
+            addOptionHelpIcon(helpAction);
+        } else {
+            col++;
+        }
+        addOptionText((text == null) ? "" : text);
+        JCheckBox cb = addCheckBox(selected, checkBoxAction);
+        //addLine();
+        return cb;
+    }
+
+    /**
+     * Moves the builder to the new line. Methods with "Line" suffix add new line automatically.
+     * 
+     * @return This builder
+     */
+    public ControlPanelBuilder addLine() {
+        row++;
+        col = 0; 
+        return this;
+    }
+    
+    /**
+     * Adds a button section at the bottom of the control panel.
+     * 
+     * @param buttons Labels.
+     * @param actions Action listener invoked when the corresponding button is clicked.
+     * @return This builder
+     * @throws IllegalArgumentException if the size of the two lists is different
+     */
+    public List<JButton> addButtons(List<String> buttons, List<ActionListener> actions) {
+        if (buttons.size() != actions.size()) {
+            throw new IllegalArgumentException();
+        }
+        
+        GridBagConstraints c = new GridBagConstraints();
+        c.insets = new Insets(2, 0, 40, 0); // small external space on top and bottom
+        c.weighty = 1.0;   //request any extra vertical space
+        c.gridwidth = BUTTON_WIDTH;
+        c.gridy = row;
+        c.anchor = GridBagConstraints.PAGE_END;
+        c.fill = GridBagConstraints.NONE;
+        
+        List<JButton> retButtons = new ArrayList<>();
+        for (int i = 0; i < buttons.size(); i++) {
+            JButton button = new JButton();
+            button.setText(buttons.get(i));
+            button.addActionListener(actions.get(i));
+            c.gridx = col;
+            col += BUTTON_WIDTH;
+            controlPanel.add(button, c);
+            retButtons.add(button);
+        }
+
+        return retButtons;
+    }
+    
+    /**
+     * Adds a combo box
+     * @param items Items
+     * @param action Action listener invoked when some item is selected
+     * @return 
+     */
+    public JComboBox addComboBox(List<String> items, ActionListener action) {
+        GridBagConstraints c = new GridBagConstraints();
+        c.insets = new Insets(0, 25, 0, 0);
+        c.gridwidth = OPTION_TEXT_WIDTH;
+        c.gridy = row;
+        c.gridx = col;
+        col += OPTION_TEXT_WIDTH;
+        c.anchor = GridBagConstraints.CENTER;
+        c.fill = GridBagConstraints.NONE;
+        
+        JComboBox cbox = new JComboBox(items.toArray(String[]::new));
+        cbox.addActionListener(action);
+        controlPanel.add(cbox, c);
+        
+        return cbox;
+    }
+    
+    /**
+     * Adds a horizontal strut that moves upper lines to the top of the panel
+     */
+    public void addVerticalStrut() {
+        GridBagConstraints c = new GridBagConstraints();
+        c.weighty = 1.0;
+        c.gridwidth = 1;
+        c.gridy = row;
+        c.gridx = col++;
+        c.anchor = GridBagConstraints.CENTER;
+        c.fill = GridBagConstraints.BOTH;
+        controlPanel.add(Box.createHorizontalStrut(5), c);
+    }
+    
+    /**
+     * Adds a gap occupying given number of grid cells
+     */
+    public void addGap() {
+        GridBagConstraints c = new GridBagConstraints();
+        c.weightx = 0.4;
+        c.gridwidth = 1;
+        c.gridy = row;
+        c.gridx = col++;
+        c.anchor = GridBagConstraints.CENTER;
+        c.fill = GridBagConstraints.HORIZONTAL;
+        controlPanel.add(Box.createVerticalStrut(5), c);
+    }
+    
+    /**
+     * Adds a check box.
+     * 
+     * @param selected Initial state
+     * @param actions Action listener invoked when the checkbox is clicked.
+     * @return This builder
+     */
+    public JCheckBox addCheckBox(boolean selected, ActionListener action) {
+        GridBagConstraints c = new GridBagConstraints();
+        c.insets = new Insets(0, 25, 0, 0);
+        c.gridwidth = 1;
+        c.gridx = col++;
+        c.gridy = row;
+        c.anchor = GridBagConstraints.CENTER;
+        c.fill = GridBagConstraints.NONE;
+
+        JCheckBox checkBox = new JCheckBox();
+        checkBox.setSelected(selected);
+        checkBox.addActionListener(action);
+        controlPanel.add(checkBox, c);
+
+        return checkBox;
+    }
+    
+    /**
+     * Adds a help icon.
+     * 
+     * @param actions Action listener invoked when the icon is clicked.
+     * @return This builder
+     */
+    public JButton addOptionHelpIcon(ActionListener action) {
+        GridBagConstraints c = new GridBagConstraints();
+        c.gridwidth = 1;
+        c.gridx = col++;
+        c.gridy = row;
+        c.anchor = GridBagConstraints.CENTER;
+        c.fill = GridBagConstraints.NONE;
+        
+        JButton button = new JButton();
+        button.setBorderPainted(false);
+        button.setFocusPainted(false);
+        button.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
+        button.addActionListener(action);
+        button.setIcon(HELP_ICON);
+        
+        controlPanel.add(button, c);
+        return button;
+    }
+    
+    /**
+     * Adds a text of the option.
+     * 
+     * @param text Text.
+     * @return This builder
+     */
+    public JLabel addOptionText(String text) {
+        GridBagConstraints c = new GridBagConstraints();
+        c.gridwidth = OPTION_TEXT_WIDTH;
+        c.gridx = col;
+        col += OPTION_TEXT_WIDTH;
+        c.gridy = row;
+        c.anchor = GridBagConstraints.LINE_START;
+        c.fill = GridBagConstraints.HORIZONTAL;
+        
+        JLabel label = new JLabel();
+        label.setFont(OPTION_TEXT_FONT);
+        label.setForeground(OPTION_TEXT_COLOR);
+        label.setText(text);
+        
+        controlPanel.add(label, c);
+        return label;
+    }
+    
+    /**
+     * Adds a slider and connects it with given input field
+     * 
+     * @param max Max value of the slider (and the value field). If {@code -1}, then percentage slider is shown with 100 as the max. value.
+     * @param inputField Input field connected with the slider.
+     * @return This builder
+     */
+    public JSlider addSliderWithVal(int max, JTextField inputField) {
+        GridBagConstraints c = new GridBagConstraints();
+        c.gridwidth = SLIDER_WIDTH;
+        c.gridx = col;
+        col += SLIDER_WIDTH;
+        c.gridy = row;
+        c.anchor = GridBagConstraints.CENTER;
+        c.fill = GridBagConstraints.HORIZONTAL;
+
+        JSlider slider = new JSlider();
+        
+        if (max == -1) { // percents
+            slider.setMaximum(100);
+        } else { // absolute values
+            slider.setMaximum(max);
+        }
+        
+        slider.addChangeListener((ChangeEvent ce) -> {
+            if (max == -1) {
+                inputField.setText(doubleToStringLocale(slider.getValue() / 100.0));
+            } else {
+                inputField.setText(intToStringLocale(slider.getValue()));
+            }
+            inputField.postActionEvent(); // invoke textField action listener
+        });
+        
+        inputField.addActionListener((ActionEvent ae) -> {
+            if (max == -1) { // percents in [0,1]
+                slider.setValue((int) (parseLocaleDouble(inputField) * 100));
+            } else { // integers
+                slider.setValue(parseLocaleInt(inputField));
+            }
+        });
+        controlPanel.add(slider, c);
+        
+        c.gridwidth = 2;
+        c.gridx = col;
+        col += 2;
+        c.gridy = row;
+        c.anchor = GridBagConstraints.CENTER;
+        c.fill = GridBagConstraints.BOTH;
+        controlPanel.add(inputField, c);
+        
+        return slider;
+    }
+    
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/FaceToFaceTab.java b/GUI/src/main/java/cz/fidentis/analyst/core/FaceToFaceTab.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb8b16bb0eed5071b66df2be89487ebfa3c93d9a
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/core/FaceToFaceTab.java
@@ -0,0 +1,72 @@
+package cz.fidentis.analyst.core;
+
+import cz.fidentis.analyst.canvas.Canvas;
+import cz.fidentis.analyst.face.HumanFace;
+import cz.fidentis.analyst.toolbar.FaceToFaceToolBar;
+import cz.fidentis.analyst.toolbar.RenderingToolBar;
+import javax.swing.GroupLayout;
+import javax.swing.LayoutStyle;
+import org.openide.windows.TopComponent;
+
+/**
+ * The non-singleton window/tab for the analysis of two faces.
+ *
+ * @author Radek Oslejsek
+ */
+public class FaceToFaceTab extends TopComponent {
+    
+    public static final int CONTROL_PANEL_WIDTH = 600;
+    
+    private final Canvas canvas ;
+    private final FaceToFaceToolBar renderingToolBar;
+    private final TopControlPanel controlPanel;
+
+    /**
+     * Constructor.
+     * @param primary Primary face
+     * @param secondary Secondary face
+     * @param name Tab name
+     */
+    public FaceToFaceTab(HumanFace primary, HumanFace secondary, String name) {
+        controlPanel = new TopControlPanel();
+        canvas = new Canvas();
+        renderingToolBar = new FaceToFaceToolBar(canvas, controlPanel);
+        canvas.initScene(primary, secondary);
+        setName(name);
+        initComponents();
+    }
+    
+    @Override
+    public int getPersistenceType() {
+        return TopComponent.PERSISTENCE_NEVER; // TO DO: change to .PERSISTENCE_ONLY_OPENED when we can re-create the ProjectTC
+    }
+    
+    private void initComponents() {
+        GroupLayout layout = new GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+                layout.createParallelGroup(GroupLayout.Alignment.LEADING)
+                        .addGroup(layout.createSequentialGroup()
+                                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(canvas, GroupLayout.DEFAULT_SIZE, 651, Short.MAX_VALUE)
+                                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(renderingToolBar, GroupLayout.PREFERRED_SIZE, RenderingToolBar.WIDTH, GroupLayout.PREFERRED_SIZE)
+                                .addComponent(controlPanel, CONTROL_PANEL_WIDTH, CONTROL_PANEL_WIDTH, CONTROL_PANEL_WIDTH)
+                        )
+        );
+        layout.setVerticalGroup(
+                layout.createParallelGroup(GroupLayout.Alignment.LEADING)
+                        .addGroup(layout.createSequentialGroup()
+                                .addGroup(layout.createBaselineGroup(true, true)
+                                        .addComponent(canvas)
+                                        .addComponent(renderingToolBar)
+                                        .addComponent(controlPanel)
+                                ))
+        );
+    }
+
+    public Canvas getCanvas() {
+        return canvas;
+    }
+    
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.form b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form
similarity index 91%
rename from GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.form
rename to GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form
index 4f1add03f53bc8b2f78668a5d393fbd63d52ca33..ad7009457170488e08a4a0fabe517a3993b8ede1 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.form
+++ b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form
@@ -160,7 +160,7 @@
                   <Font name="Tahoma" size="12" style="0"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.addButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.addButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
               <Events>
@@ -178,7 +178,7 @@
                   <Font name="Tahoma" size="12" style="0"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.removeButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.removeButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
               <Events>
@@ -196,7 +196,7 @@
                   <Font name="Tahoma" size="12" style="0"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.selectAllButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.selectAllButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
               <Constraints>
@@ -211,7 +211,7 @@
                   <Font name="Tahoma" size="12" style="0"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.deselectAllButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.deselectAllButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
               <Constraints>
@@ -226,7 +226,7 @@
                   <Font name="Tahoma" size="12" style="0"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.collapseButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.collapseButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
               <Constraints>
@@ -241,7 +241,7 @@
                   <Font name="Tahoma" size="12" style="0"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.inflateButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.inflateButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="alignmentX" type="float" value="0.5"/>
               </Properties>
@@ -260,10 +260,13 @@
                   <Font name="Tahoma" size="12" style="0"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/gui/Bundle.properties" key="ProjectTopComp.analyzeButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.analyzeButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="alignmentX" type="float" value="0.5"/>
               </Properties>
+              <Events>
+                <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="analyzeButton1MouseClicked"/>
+              </Events>
               <Constraints>
                 <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
                   <GridBagConstraints gridX="-1" gridY="-1" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="16" insetsLeft="43" insetsBottom="13" insetsRight="25" anchor="10" weightX="0.0" weightY="0.0"/>
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.java b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java
similarity index 77%
rename from GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.java
rename to GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java
index 19a2e835fe22f2c720ee3c41d730ef1546f7566a..c474a90427b104bbc24f2e70a66faa150ee65f0f 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/ProjectTopComp.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java
@@ -3,9 +3,8 @@
  * To change this template file, choose Tools | Templates
  * and open the template in the editor.
  */
-package cz.fidentis.analyst.gui;
+package cz.fidentis.analyst.core;
 
-import cz.fidentis.analyst.gui.tab.SingleFaceTab;
 import org.netbeans.api.settings.ConvertAsProperties;
 import org.openide.awt.ActionID;
 import org.openide.awt.ActionReference;
@@ -15,7 +14,11 @@ import cz.fidentis.analyst.Project;
 import cz.fidentis.analyst.face.HumanFace;
 import cz.fidentis.analyst.face.HumanFaceFactory;
 import java.io.File;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import javax.swing.filechooser.FileNameExtensionFilter;
 import org.openide.filesystems.FileChooserBuilder;
@@ -52,6 +55,7 @@ public final class ProjectTopComp extends TopComponent {
 
     private final Project project;
     private Map<HumanFace, SingleFaceTab> singleFaceTabs = new HashMap<>();
+    private Map<HumanFace, FaceToFaceTab> faceToFaceTabs = new HashMap<>();
 
     
     /**
@@ -197,6 +201,11 @@ public final class ProjectTopComp extends TopComponent {
         analyzeButton1.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
         org.openide.awt.Mnemonics.setLocalizedText(analyzeButton1, org.openide.util.NbBundle.getMessage(ProjectTopComp.class, "ProjectTopComp.analyzeButton1.text")); // NOI18N
         analyzeButton1.setAlignmentX(0.5F);
+        analyzeButton1.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseClicked(java.awt.event.MouseEvent evt) {
+                analyzeButton1MouseClicked(evt);
+            }
+        });
         gridBagConstraints = new java.awt.GridBagConstraints();
         gridBagConstraints.insets = new java.awt.Insets(16, 43, 13, 25);
         jPanel5.add(analyzeButton1, gridBagConstraints);
@@ -242,6 +251,11 @@ public final class ProjectTopComp extends TopComponent {
         }
     }//GEN-LAST:event_removeButton1MouseClicked
 
+    private void analyzeButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_analyzeButton1MouseClicked
+        // TODO add your handling code here:
+        loadTwoModels();
+    }//GEN-LAST:event_analyzeButton1MouseClicked
+
     // Variables declaration - do not modify//GEN-BEGIN:variables
     private javax.swing.JButton addButton1;
     private javax.swing.JButton analyzeButton1;
@@ -295,19 +309,99 @@ public final class ProjectTopComp extends TopComponent {
         } else {
             String faceId = HumanFaceFactory.instance().loadFace(file);
             HumanFace face = HumanFaceFactory.instance().getFace(faceId);
+            
+            try {
+                // simple hack:
+                Path path = Paths.get(file.getAbsolutePath());
+                Path folder = path.getParent();
+                Path filename = path.getFileName();
+                String filestr = filename.toString();
+                filestr = filestr.split("_ECA.obj")[0];
+                filestr = filestr + "_landmarks.csv";
+                face.loadFeaturePoints(folder.toString(), filestr);
+            } catch(IOException ex) {
+                ex.printStackTrace();
+            }
+            
             this.project.setPrimaryFace(face);
             jLabel1.setText(face.getName());
             createSingleFaceTab(face, face.getName());
         } 
     }
     
+    /**
+     * Load two models for 1:1 comparison
+     */
+    public void loadTwoModels () {
+        File file1 = new FileChooserBuilder(ProjectTopComp.class)
+                .setTitle("Open human face(s)")
+                .setDefaultWorkingDirectory(new File (System.getProperty("user.home")))
+                //.setApproveText("Add")
+                .setFileFilter(new FileNameExtensionFilter("obj files (*.obj)", "obj"))
+                .setAcceptAllFileFilterUsed(true)
+                .showOpenDialog();
+        
+        File file2 = new FileChooserBuilder(ProjectTopComp.class)
+                .setTitle("Open human face(s)")
+                .setDefaultWorkingDirectory(new File (System.getProperty("user.home")))
+                //.setApproveText("Add")
+                .setFileFilter(new FileNameExtensionFilter("obj files (*.obj)", "obj"))
+                .setAcceptAllFileFilterUsed(true)
+                .showOpenDialog();
+        
+        if (file1 == null || file2 == null) {
+            System.out.print("Missing file.");
+        } else {
+            String faceId1 = HumanFaceFactory.instance().loadFace(file1);
+            String faceId2 = HumanFaceFactory.instance().loadFace(file2);
+            HumanFace face1 = HumanFaceFactory.instance().getFace(faceId1);
+            HumanFace face2 = HumanFaceFactory.instance().getFace(faceId2);
+            
+            try {
+                // simple hack:
+                Path path = Paths.get(file1.getAbsolutePath());
+                Path folder = path.getParent();
+                Path filename = path.getFileName();
+                String filestr = filename.toString();
+                filestr = filestr.split("_ECA.obj")[0];
+                filestr = filestr + "_landmarks.csv";
+                face1.loadFeaturePoints(folder.toString(), filestr);
+            } catch(IOException ex) {
+                ex.printStackTrace();
+            }
+            
+            try {
+                // simple hack:
+                Path path = Paths.get(file2.getAbsolutePath());
+                Path folder = path.getParent();
+                Path filename = path.getFileName();
+                String filestr = filename.toString();
+                filestr = filestr.split("_ECA.obj")[0];
+                filestr = filestr + "_landmarks.csv";
+                face2.loadFeaturePoints(folder.toString(), filestr);
+            } catch(IOException ex) {
+                ex.printStackTrace();
+            }
+            
+            this.project.setPrimaryFace(face1);
+            this.project.setSecondaryFaces(List.of(face2));
+            jLabel1.setText(face1.getName());
+            createFaceToFaceTab(face1, face2, "1:1");
+        } 
+    }
+    
     private void createSingleFaceTab(HumanFace face, String name) {
-        SingleFaceTab newTab = new SingleFaceTab();
-        newTab.setName(name);
-        newTab.getCanvas().initScene(face);
+        SingleFaceTab newTab = new SingleFaceTab(face, name);
         this.singleFaceTabs.put(face, newTab);
         newTab.open();
         newTab.requestActive();
     }
 
+    private void createFaceToFaceTab(HumanFace face1, HumanFace face2, String name) {
+        FaceToFaceTab newTab = new FaceToFaceTab(face1, face2, name);
+        this.faceToFaceTabs.put(face1, newTab);
+        this.faceToFaceTabs.put(face2, newTab);
+        newTab.open();
+        newTab.requestActive();
+    }
 }
diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/SingleFaceTab.java b/GUI/src/main/java/cz/fidentis/analyst/core/SingleFaceTab.java
new file mode 100644
index 0000000000000000000000000000000000000000..7227d05cf944f2f954f44865a4d9ee1420e0fd18
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/core/SingleFaceTab.java
@@ -0,0 +1,70 @@
+package cz.fidentis.analyst.core;
+
+import cz.fidentis.analyst.canvas.Canvas;
+import cz.fidentis.analyst.face.HumanFace;
+import cz.fidentis.analyst.toolbar.RenderingToolBar;
+import cz.fidentis.analyst.toolbar.SingleFaceToolBar;
+import javax.swing.GroupLayout;
+import javax.swing.LayoutStyle;
+import org.openide.windows.TopComponent;
+
+/**
+ * The non-singleton window/tab for detail inspection of a single face.
+ *
+ * @author Radek Oslejsek
+ */
+public final class SingleFaceTab extends TopComponent {
+    
+    public static final int CONTROL_PANEL_WIDTH = 600;
+    
+    private final Canvas canvas;
+    private final RenderingToolBar renderingToolBar;
+    private final TopControlPanel controlPanel;
+    
+    /**
+     * Constructor.
+     * @param face Face
+     * @param name Tab name
+     */
+    public SingleFaceTab(HumanFace face, String name) {
+        controlPanel = new TopControlPanel();
+        canvas = new Canvas();
+        renderingToolBar = new SingleFaceToolBar(canvas, controlPanel);
+        canvas.initScene(face);
+        setName(name);
+        initComponents();
+    }
+    
+    @Override
+    public int getPersistenceType() {
+        return TopComponent.PERSISTENCE_NEVER; // TO DO: change to .PERSISTENCE_ONLY_OPENED when we can re-create the ProjectTC
+    }
+    
+    private void initComponents() {
+        GroupLayout layout = new GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+                layout.createParallelGroup(GroupLayout.Alignment.LEADING)
+                        .addGroup(layout.createSequentialGroup()
+                                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(canvas, GroupLayout.DEFAULT_SIZE, 651, Short.MAX_VALUE)
+                                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(renderingToolBar, GroupLayout.PREFERRED_SIZE, RenderingToolBar.WIDTH, GroupLayout.PREFERRED_SIZE)
+                                .addComponent(controlPanel, CONTROL_PANEL_WIDTH, CONTROL_PANEL_WIDTH, CONTROL_PANEL_WIDTH)
+                        )
+        );
+        layout.setVerticalGroup(
+                layout.createParallelGroup(GroupLayout.Alignment.LEADING)
+                        .addGroup(layout.createSequentialGroup()
+                                .addGroup(layout.createBaselineGroup(true, true)
+                                        .addComponent(canvas)
+                                        .addComponent(renderingToolBar)
+                                        .addComponent(controlPanel)
+                                ))
+        );
+    }
+
+    public Canvas getCanvas() {
+        return canvas;
+    }
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/TopControlPanel.java b/GUI/src/main/java/cz/fidentis/analyst/core/TopControlPanel.java
new file mode 100644
index 0000000000000000000000000000000000000000..b66128635efb54ec03f6221d0db4324926ecaeb9
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/core/TopControlPanel.java
@@ -0,0 +1,24 @@
+package cz.fidentis.analyst.core;
+
+import java.awt.Font;
+import javax.swing.BorderFactory;
+import javax.swing.JTabbedPane;
+import javax.swing.border.TitledBorder;
+
+/**
+ * The space for control panels.
+ * 
+ * @author Radek Oslejsek
+ */
+public class TopControlPanel extends JTabbedPane {
+    
+    /**
+     * Constructor.
+     */
+    public TopControlPanel() {
+        TitledBorder border = BorderFactory.createTitledBorder("Control Panels");
+        border.setTitleFont(border.getTitleFont().deriveFont(Font.BOLD));
+        //border.setTitleColor(ControlPanelBuilder.OPTION_TEXT_COLOR);
+        setBorder(border);
+    }    
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/curvature/CurvatureAction.java b/GUI/src/main/java/cz/fidentis/analyst/curvature/CurvatureAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..b6622eff31e767a847bd36481675429a5197dfa1
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/curvature/CurvatureAction.java
@@ -0,0 +1,94 @@
+package cz.fidentis.analyst.curvature;
+
+import cz.fidentis.analyst.canvas.Canvas;
+import cz.fidentis.analyst.core.ControlPanelAction;
+import cz.fidentis.analyst.visitors.mesh.Curvature;
+import java.awt.event.ActionEvent;
+import javax.swing.JComboBox;
+import javax.swing.JTabbedPane;
+import javax.swing.JToggleButton;
+
+/**
+ * Action listener for the curvature computation.
+ * 
+ * @author Radek Oslejsek
+ */
+public class CurvatureAction extends ControlPanelAction {
+    
+    /*
+     * Handled actions
+     */
+    public static final String ACTION_COMMAND_SHOW_HIDE_HEATMAP = "show-hide heatmap";
+    public static final String ACTION_COMMAND_SET_CURVATURE_TYPE = "set curvature type";
+    
+    /*
+     * Attributes handling the state
+     */
+    private Curvature visitor = null;
+    private String curvatureType = CurvaturePanel.GAUSSIAN_CURVATURE;
+    
+    private final CurvaturePanel controlPanel;
+    
+    /**
+     * Constructor.
+     * 
+     * @param canvas OpenGL canvas
+     * @param topControlPanel Top component for placing control panels
+     */
+    public CurvatureAction(Canvas canvas, JTabbedPane topControlPanel) {
+        super(canvas, topControlPanel);
+        this.controlPanel = new CurvaturePanel(this);
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent ae) {
+        String action = ae.getActionCommand();
+        
+        switch (action) {
+            case ACTION_COMMAND_SHOW_HIDE_PANEL:
+                hideShowPanelActionPerformed(ae, this.controlPanel);
+                break;
+            case ACTION_COMMAND_SHOW_HIDE_HEATMAP:
+                if (((JToggleButton) ae.getSource()).isSelected()) {
+                    setHeatmap();
+                    getPrimaryDrawableFace().setRenderHeatmap(true);
+                } else {
+                    getPrimaryDrawableFace().setRenderHeatmap(false);
+                }
+                break;
+            case ACTION_COMMAND_SET_CURVATURE_TYPE:
+                this.curvatureType = (String) ((JComboBox) ae.getSource()).getSelectedItem();
+                setHeatmap();
+                break;
+            default:
+                throw new UnsupportedOperationException(action);
+        }
+        
+        renderScene();
+    }
+    
+    protected void setHeatmap() {
+        if (visitor == null) { // compute missing curvature
+            this.visitor = new Curvature();
+            getPrimaryDrawableFace().getModel().compute(visitor);
+        }
+        
+        switch (this.curvatureType) {
+            case CurvaturePanel.GAUSSIAN_CURVATURE:
+                    getPrimaryDrawableFace().setHeatMap(visitor.getGaussianCurvatures());
+                break;
+            case CurvaturePanel.MEAN_CURVATURE:
+                    getPrimaryDrawableFace().setHeatMap(visitor.getMeanCurvatures());
+                break;
+            case CurvaturePanel.MIN_CURVATURE:
+                    getPrimaryDrawableFace().setHeatMap(visitor.getMinPrincipalCurvatures());
+                break;
+            case CurvaturePanel.MAX_CURVATURE:
+                    getPrimaryDrawableFace().setHeatMap(visitor.getMaxPrincipalCurvatures());
+                break;
+            default:
+                throw new UnsupportedOperationException(curvatureType);
+        }
+        
+    }
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/curvature/CurvaturePanel.java b/GUI/src/main/java/cz/fidentis/analyst/curvature/CurvaturePanel.java
new file mode 100644
index 0000000000000000000000000000000000000000..f4bccda7263c25b50dc3dfa68bbf577c889f9b24
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/curvature/CurvaturePanel.java
@@ -0,0 +1,78 @@
+package cz.fidentis.analyst.curvature;
+
+import cz.fidentis.analyst.core.ControlPanel;
+import cz.fidentis.analyst.core.ControlPanelBuilder;
+import java.awt.event.ActionEvent;
+import java.util.List;
+import javax.swing.ImageIcon;
+
+/**
+ * Control panel for curvature analysis.
+ * 
+ * @author Radek Oslejsek
+ */
+public class CurvaturePanel extends ControlPanel {
+    
+    /*
+     * Mandatory design elements
+     */
+    public static final String ICON = "curvature28x28.png";
+    public static final String NAME = "Curvature";
+    
+    /*
+     * Configuration of panel-specific GUI elements
+     */
+    public static final String GAUSSIAN_CURVATURE = "Gaussian";
+    public static final String MEAN_CURVATURE = "Mean";
+    public static final String MIN_CURVATURE = "Min";
+    public static final String MAX_CURVATURE = "Max";
+    
+    /**
+     * Constructor.
+     * @param action Action listener
+     */
+    public CurvaturePanel(CurvatureAction action) {
+        this.setName(NAME);
+        
+        ControlPanelBuilder builder = new ControlPanelBuilder(this);
+        
+        builder.addCaptionLine("Visualization options:");
+        builder.addLine();
+        
+        builder.addCheckBoxOptionLine(null, "Show curvature", false,
+                (ActionEvent e) -> {
+                    action.actionPerformed(new ActionEvent(
+                            e.getSource(), 
+                            ActionEvent.ACTION_PERFORMED, 
+                            CurvatureAction.ACTION_COMMAND_SHOW_HIDE_HEATMAP)
+                    ); 
+                });
+        builder.addComboBox(List.of(GAUSSIAN_CURVATURE, MEAN_CURVATURE, MIN_CURVATURE, MAX_CURVATURE), 
+                (ActionEvent e) -> {                    
+                    action.actionPerformed(new ActionEvent(
+                            e.getSource(), 
+                            ActionEvent.ACTION_PERFORMED, 
+                            CurvatureAction.ACTION_COMMAND_SET_CURVATURE_TYPE)
+                    ); 
+                });
+        builder.addGap();
+        builder.addLine();
+        builder.addCaptionLine("TO DO: Interactive histogram");
+        builder.addLine();
+        builder.addVerticalStrut();
+    }
+
+    @Override
+    public ImageIcon getIcon() {
+        return getStaticIcon();
+    }
+    
+    /**
+     * Static implementation of the {@link #getIcon()} method.
+     * 
+     * @return Control panel icon
+     */
+    public static ImageIcon getStaticIcon() {
+        return new ImageIcon(CurvaturePanel.class.getClassLoader().getResource("/" + ICON));
+    }
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java b/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..72b26fa37e07843ad8a7f076044d81318baf938a
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java
@@ -0,0 +1,98 @@
+package cz.fidentis.analyst.distance;
+
+import cz.fidentis.analyst.canvas.Canvas;
+import cz.fidentis.analyst.core.ControlPanelAction;
+import cz.fidentis.analyst.visitors.mesh.HausdorffDistance;
+import cz.fidentis.analyst.visitors.mesh.HausdorffDistance.Strategy;
+import java.awt.event.ActionEvent;
+import javax.swing.JComboBox;
+import javax.swing.JTabbedPane;
+import javax.swing.JToggleButton;
+
+/**
+ * Action listener for the curvature computation.
+ * 
+ * @author Radek Oslejsek
+ */
+public class DistanceAction extends ControlPanelAction {
+    
+    /*
+     * Handled actions
+     */
+    public static final String ACTION_COMMAND_SHOW_HIDE_HEATMAP = "show-hide heatmap";
+    public static final String ACTION_COMMAND_SET_DISTANCE_STRATEGY = "set strategy";
+    public static final String ACTION_COMMAND_RELATIVE_ABSOLUTE_DIST = "switch abosulte-relative distance";
+    
+    /*
+     * Attributes handling the state
+     */
+    private HausdorffDistance visitor = null;
+    private String strategy = DistancePanel.STRATEGY_POINT_TO_POINT;
+    private boolean relativeDist = false;
+    
+    private final DistancePanel controlPanel;
+    
+    /**
+     * Constructor.
+     * 
+     * @param canvas OpenGL canvas
+     * @param topControlPanel Top component for placing control panels
+     */
+    public DistanceAction(Canvas canvas, JTabbedPane topControlPanel) {
+        super(canvas, topControlPanel);
+        this.controlPanel = new DistancePanel(this);
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent ae) {
+        String action = ae.getActionCommand();
+        
+        switch (action) {
+            case ACTION_COMMAND_SHOW_HIDE_PANEL:
+                hideShowPanelActionPerformed(ae, this.controlPanel);
+                break;
+            case ACTION_COMMAND_SHOW_HIDE_HEATMAP:
+                if (((JToggleButton) ae.getSource()).isSelected()) {
+                    setHeatmap();
+                    getSecondaryDrawableFace().setRenderHeatmap(true);
+                } else {
+                    getSecondaryDrawableFace().setRenderHeatmap(false);
+                }
+                break;
+            case ACTION_COMMAND_SET_DISTANCE_STRATEGY:
+                strategy = (String) ((JComboBox) ae.getSource()).getSelectedItem();
+                this.visitor = null; // recompute
+                setHeatmap();
+                break;
+            case ACTION_COMMAND_RELATIVE_ABSOLUTE_DIST:
+                this.relativeDist = ((JToggleButton) ae.getSource()).isSelected();
+                this.visitor = null; // recompute
+                setHeatmap();
+                break;
+            default:
+                throw new UnsupportedOperationException(action);
+        }
+        renderScene();
+    }
+    
+    protected void setHeatmap() {
+        Strategy useStrategy;
+        switch (strategy) {
+            case DistancePanel.STRATEGY_POINT_TO_POINT:
+                useStrategy = Strategy.POINT_TO_POINT;
+                break;
+            case DistancePanel.STRATEGY_POINT_TO_TRIANGLE:
+                useStrategy = Strategy.POINT_TO_TRIANGLE_APPROXIMATE;
+                break;
+            default:
+                throw new UnsupportedOperationException(strategy);
+        }
+        
+        if (visitor == null) { 
+            this.visitor = new HausdorffDistance(getPrimaryDrawableFace().getModel(), useStrategy, relativeDist, true);
+            getSecondaryDrawableFace().getModel().compute(visitor);
+        }
+        
+        getSecondaryDrawableFace().setHeatMap(visitor.getDistances());
+    }
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java b/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java
new file mode 100644
index 0000000000000000000000000000000000000000..8a39790f2a1c09b78afff34c903f384971a022f1
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java
@@ -0,0 +1,90 @@
+package cz.fidentis.analyst.distance;
+
+import cz.fidentis.analyst.core.ControlPanel;
+import cz.fidentis.analyst.core.ControlPanelBuilder;
+import cz.fidentis.analyst.symmetry.SymmetryPanel;
+import java.awt.event.ActionEvent;
+import java.util.List;
+import javax.swing.ImageIcon;
+
+/**
+ * Control panel for Hausdorff distance.
+ * 
+ * @author Radek Oslejsek
+ */
+public class DistancePanel extends ControlPanel {
+    
+    /*
+     * Mandatory design elements
+     */
+    public static final String ICON = "distance28x28.png";
+    public static final String NAME = "Hausdorff distance";
+    
+    /*
+     * Configuration of panel-specific GUI elements
+     */
+    public static final String  STRATEGY_POINT_TO_POINT= "Point to point";
+    public static final String  STRATEGY_POINT_TO_TRIANGLE= "Point to triangle";
+    
+    /**
+     * Constructor.
+     * @param action Action listener
+     */
+    public DistancePanel(DistanceAction action) {
+        this.setName(NAME);
+        
+        ControlPanelBuilder builder = new ControlPanelBuilder(this);
+        
+        builder.addCaptionLine("Computation options:");
+        builder.addLine();
+        
+        builder.addCheckBoxOptionLine(null, "Relative distance", false,
+                (ActionEvent e) -> {
+                    action.actionPerformed(new ActionEvent(
+                            e.getSource(), 
+                            ActionEvent.ACTION_PERFORMED, 
+                            DistanceAction.ACTION_COMMAND_RELATIVE_ABSOLUTE_DIST)
+                    ); 
+                });
+        builder.addLine();
+        
+        builder.addOptionText("Distance strategy");
+        builder.addComboBox(List.of(STRATEGY_POINT_TO_POINT, STRATEGY_POINT_TO_TRIANGLE),
+                (ActionEvent e) -> {                    
+                    action.actionPerformed(new ActionEvent(
+                            e.getSource(), 
+                            ActionEvent.ACTION_PERFORMED, 
+                            DistanceAction.ACTION_COMMAND_SET_DISTANCE_STRATEGY)
+                    ); 
+                });
+        builder.addGap();
+        builder.addLine();
+        
+        builder.addCaptionLine("Visualization options:");
+        builder.addLine();
+        builder.addCheckBoxOptionLine(null, "Show Hausdorff distance", false,
+                (ActionEvent e) -> {
+                    action.actionPerformed(new ActionEvent(
+                            e.getSource(), 
+                            ActionEvent.ACTION_PERFORMED, 
+                            DistanceAction.ACTION_COMMAND_SHOW_HIDE_HEATMAP)
+                    ); 
+                });
+        builder.addLine();
+        builder.addVerticalStrut();
+    }
+    
+    @Override
+    public ImageIcon getIcon() {
+        return getStaticIcon();
+    }
+    
+    /**
+     * Static implementation of the {@link #getIcon()} method.
+     * 
+     * @return Control panel icon
+     */
+    public static ImageIcon getStaticIcon() {
+        return new ImageIcon(SymmetryPanel.class.getClassLoader().getResource("/" + ICON));
+    }
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/Canvas.form b/GUI/src/main/java/cz/fidentis/analyst/gui/Canvas.form
deleted file mode 100644
index d102516eb4e46619c14a2504400d662522b91d02..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/Canvas.form
+++ /dev/null
@@ -1,305 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<Form version="1.9" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
-  <Properties>
-    <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-      <Color blue="0" green="0" red="0" type="rgb"/>
-    </Property>
-  </Properties>
-  <AuxValues>
-    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
-    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
-    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
-    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
-    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,93,0,0,1,-79"/>
-  </AuxValues>
-
-  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
-  <SubComponents>
-    <Container class="javax.swing.JLayeredPane" name="jLayeredPane1">
-      <Properties>
-        <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-          <Color blue="28" green="28" red="28" type="rgb"/>
-        </Property>
-        <Property name="toolTipText" type="java.lang.String" value=""/>
-        <Property name="opaque" type="boolean" value="true"/>
-      </Properties>
-      <Events>
-        <EventHandler event="componentResized" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="jLayeredPane1ComponentResized"/>
-        <EventHandler event="componentShown" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="jLayeredPane1ComponentShown"/>
-      </Events>
-      <Constraints>
-        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
-          <BorderConstraints direction="Center"/>
-        </Constraint>
-      </Constraints>
-
-      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout">
-        <Property name="useNullLayout" type="boolean" value="true"/>
-      </Layout>
-      <SubComponents>
-        <Component class="javax.swing.JLabel" name="resetButton">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/resetButton.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Reset position of model"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="resetButtonMouseMoved"/>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="resetButtonMouseClicked"/>
-            <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="resetButtonMouseExited"/>
-          </Events>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="60" y="40" width="30" height="30"/>
-            </Constraint>
-          </Constraints>
-        </Component>
-        <Component class="javax.swing.JButton" name="upNavigationButton">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/upButton.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Rotate up"/>
-            <Property name="borderPainted" type="boolean" value="false"/>
-            <Property name="contentAreaFilled" type="boolean" value="false"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="upNavigationButtonMousePressed"/>
-            <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="upNavigationButtonMouseReleased"/>
-          </Events>
-          <AuxValues>
-            <AuxValue name="JLayeredPane.layer" type="java.lang.Integer" value="200"/>
-          </AuxValues>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="60" y="10" width="30" height="30"/>
-            </Constraint>
-          </Constraints>
-        </Component>
-        <Component class="javax.swing.JButton" name="leftNavigationButton">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/leftButton.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Rotate left"/>
-            <Property name="borderPainted" type="boolean" value="false"/>
-            <Property name="contentAreaFilled" type="boolean" value="false"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="leftNavigationButtonMousePressed"/>
-            <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="leftNavigationButtonMouseReleased"/>
-          </Events>
-          <AuxValues>
-            <AuxValue name="JLayeredPane.layer" type="java.lang.Integer" value="200"/>
-          </AuxValues>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="30" y="40" width="30" height="30"/>
-            </Constraint>
-          </Constraints>
-        </Component>
-        <Component class="javax.swing.JButton" name="minusNavigationButton">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/minus.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Zoom out"/>
-            <Property name="borderPainted" type="boolean" value="false"/>
-            <Property name="contentAreaFilled" type="boolean" value="false"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="minusNavigationButtonMousePressed"/>
-            <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="minusNavigationButtonMouseReleased"/>
-          </Events>
-          <AuxValues>
-            <AuxValue name="JLayeredPane.layer" type="java.lang.Integer" value="200"/>
-          </AuxValues>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="90" y="90" width="30" height="30"/>
-            </Constraint>
-          </Constraints>
-        </Component>
-        <Component class="javax.swing.JButton" name="downNavigationButton">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/downButton.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Rotate down"/>
-            <Property name="borderPainted" type="boolean" value="false"/>
-            <Property name="contentAreaFilled" type="boolean" value="false"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="downNavigationButtonMousePressed"/>
-            <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="downNavigationButtonMouseReleased"/>
-          </Events>
-          <AuxValues>
-            <AuxValue name="JLayeredPane.layer" type="java.lang.Integer" value="200"/>
-          </AuxValues>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="60" y="70" width="30" height="30"/>
-            </Constraint>
-          </Constraints>
-        </Component>
-        <Component class="javax.swing.JButton" name="plusNavigationButton">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/plus.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Zoom in"/>
-            <Property name="borderPainted" type="boolean" value="false"/>
-            <Property name="contentAreaFilled" type="boolean" value="false"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="plusNavigationButtonMousePressed"/>
-            <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="plusNavigationButtonMouseReleased"/>
-          </Events>
-          <AuxValues>
-            <AuxValue name="JLayeredPane.layer" type="java.lang.Integer" value="200"/>
-          </AuxValues>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="30" y="90" width="30" height="30"/>
-            </Constraint>
-          </Constraints>
-        </Component>
-        <Component class="javax.swing.JLabel" name="jLabel1">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/navigBackground.png"/>
-            </Property>
-          </Properties>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="30" y="10" width="90" height="90"/>
-            </Constraint>
-          </Constraints>
-        </Component>
-        <Component class="javax.swing.JLabel" name="loadModelButton">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/loadCanva.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value=""/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="loadModelButtonMouseMoved"/>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="loadModelButtonMouseClicked"/>
-            <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="loadModelButtonMouseExited"/>
-          </Events>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="200" y="100" width="210" height="220"/>
-            </Constraint>
-          </Constraints>
-        </Component>
-        <Component class="javax.swing.JButton" name="rightNavigationButton1">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/rightButton.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Rotate right"/>
-            <Property name="borderPainted" type="boolean" value="false"/>
-            <Property name="contentAreaFilled" type="boolean" value="false"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="rightNavigationButton1MousePressed"/>
-            <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="rightNavigationButton1MouseReleased"/>
-          </Events>
-          <AuxValues>
-            <AuxValue name="JLayeredPane.layer" type="java.lang.Integer" value="200"/>
-          </AuxValues>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="90" y="40" width="30" height="30"/>
-            </Constraint>
-          </Constraints>
-        </Component>
-        <Component class="javax.swing.JLabel" name="whiteBackroundButton">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/whiteBackroundCanvas.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="White backround"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="whiteBackroundButtonMouseClicked"/>
-          </Events>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="50" y="130" width="-1" height="-1"/>
-            </Constraint>
-          </Constraints>
-        </Component>
-        <Component class="javax.swing.JLabel" name="blackBackroundButton">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/blackBackroundCanvas.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Dark background"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="blackBackroundButtonMouseClicked"/>
-          </Events>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="50" y="190" width="-1" height="-1"/>
-            </Constraint>
-          </Constraints>
-        </Component>
-        <Container class="javax.swing.JPanel" name="jPanel1">
-          <Properties>
-            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="0" green="0" red="0" type="rgb"/>
-            </Property>
-          </Properties>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
-              <AbsoluteConstraints x="0" y="0" width="-1" height="-1"/>
-            </Constraint>
-          </Constraints>
-
-          <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
-        </Container>
-      </SubComponents>
-    </Container>
-  </SubComponents>
-</Form>
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/Canvas.java b/GUI/src/main/java/cz/fidentis/analyst/gui/Canvas.java
deleted file mode 100644
index 2c7113705780ef9ee26f9c53f425c2bfcf34b32f..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/Canvas.java
+++ /dev/null
@@ -1,803 +0,0 @@
-package cz.fidentis.analyst.gui;
-
-import com.jogamp.opengl.GLCapabilities;
-import com.jogamp.opengl.GLEventListener;
-import com.jogamp.opengl.GLProfile;
-import com.jogamp.opengl.awt.GLCanvas;
-import cz.fidentis.analyst.face.HumanFace;
-import cz.fidentis.analyst.mesh.core.MeshModel;
-import com.jogamp.opengl.util.FPSAnimator;
-
-import java.awt.Color;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Scanner;
-import java.util.Timer;
-import java.util.TimerTask;
-import javax.swing.ImageIcon;
-import javax.swing.JOptionPane;
-import javax.swing.filechooser.FileNameExtensionFilter;
-import org.openide.filesystems.FileChooserBuilder;
-
-/**
- * Canvas for displaying models containing GLCanvas and navigation.
- * 
- * @author Natalia Bebjakova 
- */
-public class Canvas extends javax.swing.JPanel {
-    
-    protected GLCanvas glCanvas;
-    protected long startClickTime = 0;
-    
-    protected TimerTask task;
-    protected Timer timer;
-    
-    protected GeneralGLEventListener listener;
-     
-    /**
-     * Mouse adapter for 3D manipulation
-     */
-    protected Manipulator3D manipulator;
-
-    /**
-     * animator's target frames per second
-     */
-    private static final int FPS = 60; 
-    private final FPSAnimator animator;
-    
-    /**
-     * decides if model is displayed as wire-frame 
-     */
-    protected static boolean drawWireModel;
-
-    /**
-     * decides if the symmetryPlane is displayed
-     */
-    protected static boolean drawSymmetryPlane;
-    
-    /**
-     * original face that is loaded from file
-     */
-    protected HumanFace loadedFace;
-    
-    protected boolean loaded;   
-    
-    /**
-     * 
-     * @return true if model is loaded on canvas, false otherwise
-     */
-    public boolean isLoaded() {
-        return loaded;
-    }
-    
-    /**
-     * Creates new form Canva
-     */
-    public Canvas() {
-        initComponents();
-        
-        // gl version 2 is used
-        GLCapabilities capabilities = new GLCapabilities(GLProfile.get(GLProfile.GL2));
-        capabilities.setDoubleBuffered(true);
-       
-        // creates new glCanvas panel for displaying model
-        glCanvas = new GLCanvas(capabilities);
-        jPanel1.add(glCanvas);
-        glCanvas.setVisible(false);     
-        glCanvas.setBackground(Color.black);
-        
-        // enables glCanvas to react to events
-        glCanvas.requestFocusInWindow();        
-        glCanvas.setSize(getWidth() - getInsets().left - getInsets().right, getHeight() - getInsets().top - getInsets().bottom);
-       
-        // enables animated transition 
-        animator = new FPSAnimator(glCanvas, FPS, true);
-        animator.start();
-        listener = new GeneralGLEventListener(this);
-        
-        // enables 3D manipualtion
-        manipulator = new Manipulator3D(listener);
-        setMouseListeners();
-
-        this.validate();   
-    }
-    
-    private void removeMoseListeners() {
-        glCanvas.removeMouseListener(this.manipulator);
-        glCanvas.removeMouseMotionListener(this.manipulator);
-        glCanvas.removeMouseWheelListener(this.manipulator);
-    }
-    
-    private void setMouseListeners() {
-        glCanvas.addMouseListener(manipulator);
-        glCanvas.addMouseMotionListener(manipulator);
-        glCanvas.addMouseWheelListener(manipulator);
-    }
-    
-    /**
-     * Sets new mouse listeners for this canvas
-     * 
-     * @param manipulator new Manipulator3D, probably with different listener
-     */
-    public void setManipulator(Manipulator3D manipulator) {
-        removeMoseListeners();
-        this.manipulator = manipulator;
-        setMouseListeners();
-    }
-    
-    /**
-     * Changing the size of glCanvas
-     * 
-     * @param d New size of glCanvas
-     */
-    public void resizeCanvas(Dimension d) {
-        jPanel1.setSize(d);
-        glCanvas.setSize(d);
-        this.validate();
-        this.repaint();
-        loadModelButton.setLocation(this.getWidth() / 2 - 35, this.getHeight() / 2 - 40);
-    }
-    
-    /**
-     * 
-     * @return Original face that is loaded from file
-     */
-    public HumanFace getLoadedFace() {
-        return loadedFace;
-    }
-    
-    /**
-     * Sets GLListener of the canvas 
-     * 
-     * @param listener GLListener for manipulation with model 
-     */
-    public void setListener(GeneralGLEventListener listener) {
-        this.listener = listener;
-    }
-    
-    /**
-     * 
-     * @param drawWire Decides if model is displayed as wife-frame
-     */
-    public static void setDrawWired(boolean drawWire) {
-        drawWireModel = drawWire;
-    }
-
-    /**
-     * 
-     * @return Returns if model is displayed as wife-frame
-     */
-    public boolean getDrawWired(){
-        return drawWireModel;
-    }
-
-    /**
-     *
-     * @param drawSymmetry Decides if the symmetry plane is displayed
-     */
-    public static void setDrawSymmetryPlane(boolean drawSymmetry) {
-        drawSymmetryPlane = drawSymmetry;
-    }
-
-    /**
-     *
-     * @return Returns if the symmetry plane is displayed
-     */
-    public boolean getDrawSymmetryPlane(){
-        return drawSymmetryPlane;
-    }
-
-    /**
-     *
-     * @param v Decides if button for loading model is visible
-     */
-    public void setImportLabelVisible(Boolean v) {
-        loadModelButton.setVisible(v);
-    }
-    
-    /**
-     * Loads model selected in file chooser by user
-     */
-    public void loadModel () {
-        File file = new FileChooserBuilder(ProjectTopComp.class)
-                .setTitle("Open human face(s)")
-                .setDefaultWorkingDirectory(new File (System.getProperty("user.home")))
-                //.setApproveText("Add")
-                .setFileFilter(new FileNameExtensionFilter("obj files (*.obj)", "obj"))
-                .setAcceptAllFileFilterUsed(true)
-                .showOpenDialog();
-        
-        if (file== null) {
-            System.out.print("No file chosen.");
-        } else {
-            this.addModel(file);
-        }       
-        glCanvas.setVisible(true);
-    }
-    
-    private void setPrefferedModelPath(String s) {
-        //TODO remove duplicate with PreferenceTopComponent
-        try {
-            FileWriter rewriter = new FileWriter("preferences.fip", false);
-            rewriter.write(s);
-            rewriter.close();
-        } catch (IOException ex) {
-            ex.printStackTrace();
-        }   
-    }
-    
-    private String getPrefferedModelPath() {
-        //TODO remove duplicate with PreferenceTopComponent
-        String data = "";
-        try {
-            File myObj = new File(/*propPath + */"preferences.fip");
-            if (myObj.length() == 0)
-                return data;
-            try (Scanner myReader = new Scanner(myObj)) {
-                data = myReader.nextLine();
-            }            
-        } catch (FileNotFoundException e) {
-            System.out.println("An error occurred.");
-            e.printStackTrace();
-        }
-        return data;
-    }
-
-    /**
-     * Loads the model in .obj format from file and adds this model to listener for displaying.
-     * If file does not contain 3D model or model is not correct, shows dialog with message
-     *
-     * @param file File from which model will be read
-     */
-    private void addModel (final File file) {
-        try {
-            loadedFace = new HumanFace(new File (file.getPath()));
-
-            if (loadedFace.getMeshModel() != null) {
-                // listener enables to manipulate and interact with model
-                listener.setCameraPosition(0, 0, 300);
-                glCanvas.addGLEventListener((GLEventListener) listener);
-                listener.setModel(loadedFace.getMeshModel());
-                listener.rotationAndSizeRestart();
-                loadModelButton.setVisible(false);
-                loaded = true;
-            }           
-        } catch (Exception e) {
-            System.out.println(e.getMessage());
-            JOptionPane.showMessageDialog(this, "File doesn't contain any model", "Model is not loaded.",
-                    0, new ImageIcon(getClass().getResource("/notLoadedModel.png")));
-            System.out.println ("File doesn't contain any model");
-            loaded = false;               
-        }
-    }
-    
-    /**
-     * reset position of the displayed model
-     */
-    public void resetPosition(){
-        listener.rotationAndSizeRestart();
-    }
-    
-    /**
-     * Changes the model to be displayed
-     * 
-     * @param model New model that will be displayed on canvas
-     */
-    public void changeModel(MeshModel model) {
-        MeshModel newModel = new MeshModel(model);
-        listener.setModel(newModel);
-    }
-    
-    /**
-     * Returns the model which is displayed on canvas
-     * 
-     * @return Model that is displayed on canvas
-     */
-    public MeshModel getModel() {
-        return listener.getModel();
-    }
-   
-    
-    /**
-     * This method is called from within the constructor to initialize the form.
-     * WARNING: Do NOT modify this code. The content of this method is always
-     * regenerated by the Form Editor.
-     * 
-     * Generated code from NetBeans
-     */
-    @SuppressWarnings("unchecked")
-    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
-    private void initComponents() {
-
-        jLayeredPane1 = new javax.swing.JLayeredPane();
-        resetButton = new javax.swing.JLabel();
-        upNavigationButton = new javax.swing.JButton();
-        leftNavigationButton = new javax.swing.JButton();
-        minusNavigationButton = new javax.swing.JButton();
-        downNavigationButton = new javax.swing.JButton();
-        plusNavigationButton = new javax.swing.JButton();
-        jLabel1 = new javax.swing.JLabel();
-        loadModelButton = new javax.swing.JLabel();
-        rightNavigationButton1 = new javax.swing.JButton();
-        whiteBackroundButton = new javax.swing.JLabel();
-        blackBackroundButton = new javax.swing.JLabel();
-        jPanel1 = new javax.swing.JPanel();
-
-        setBackground(new java.awt.Color(0, 0, 0));
-        setLayout(new java.awt.BorderLayout());
-
-        jLayeredPane1.setBackground(new java.awt.Color(40, 40, 40));
-        jLayeredPane1.setToolTipText("");
-        jLayeredPane1.setOpaque(true);
-        jLayeredPane1.addComponentListener(new java.awt.event.ComponentAdapter() {
-            public void componentResized(java.awt.event.ComponentEvent evt) {
-                jLayeredPane1ComponentResized(evt);
-            }
-            public void componentShown(java.awt.event.ComponentEvent evt) {
-                jLayeredPane1ComponentShown(evt);
-            }
-        });
-
-        resetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resetButton.png"))); // NOI18N
-        resetButton.setToolTipText("Reset position of model");
-        resetButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        resetButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
-            public void mouseMoved(java.awt.event.MouseEvent evt) {
-                resetButtonMouseMoved(evt);
-            }
-        });
-        resetButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                resetButtonMouseClicked(evt);
-            }
-            public void mouseExited(java.awt.event.MouseEvent evt) {
-                resetButtonMouseExited(evt);
-            }
-        });
-        jLayeredPane1.add(resetButton);
-        resetButton.setBounds(60, 40, 30, 30);
-
-        upNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/upButton.png"))); // NOI18N
-        upNavigationButton.setToolTipText("Rotate up");
-        upNavigationButton.setBorderPainted(false);
-        upNavigationButton.setContentAreaFilled(false);
-        upNavigationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        upNavigationButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                upNavigationButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                upNavigationButtonMouseReleased(evt);
-            }
-        });
-        jLayeredPane1.setLayer(upNavigationButton, javax.swing.JLayeredPane.MODAL_LAYER);
-        jLayeredPane1.add(upNavigationButton);
-        upNavigationButton.setBounds(60, 10, 30, 30);
-
-        leftNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/leftButton.png"))); // NOI18N
-        leftNavigationButton.setToolTipText("Rotate left");
-        leftNavigationButton.setBorderPainted(false);
-        leftNavigationButton.setContentAreaFilled(false);
-        leftNavigationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        leftNavigationButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                leftNavigationButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                leftNavigationButtonMouseReleased(evt);
-            }
-        });
-        jLayeredPane1.setLayer(leftNavigationButton, javax.swing.JLayeredPane.MODAL_LAYER);
-        jLayeredPane1.add(leftNavigationButton);
-        leftNavigationButton.setBounds(30, 40, 30, 30);
-
-        minusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/minus.png"))); // NOI18N
-        minusNavigationButton.setToolTipText("Zoom out");
-        minusNavigationButton.setBorderPainted(false);
-        minusNavigationButton.setContentAreaFilled(false);
-        minusNavigationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        minusNavigationButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                minusNavigationButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                minusNavigationButtonMouseReleased(evt);
-            }
-        });
-        jLayeredPane1.setLayer(minusNavigationButton, javax.swing.JLayeredPane.MODAL_LAYER);
-        jLayeredPane1.add(minusNavigationButton);
-        minusNavigationButton.setBounds(90, 90, 30, 30);
-
-        downNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/downButton.png"))); // NOI18N
-        downNavigationButton.setToolTipText("Rotate down");
-        downNavigationButton.setBorderPainted(false);
-        downNavigationButton.setContentAreaFilled(false);
-        downNavigationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        downNavigationButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                downNavigationButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                downNavigationButtonMouseReleased(evt);
-            }
-        });
-        jLayeredPane1.setLayer(downNavigationButton, javax.swing.JLayeredPane.MODAL_LAYER);
-        jLayeredPane1.add(downNavigationButton);
-        downNavigationButton.setBounds(60, 70, 30, 30);
-
-        plusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/plus.png"))); // NOI18N
-        plusNavigationButton.setToolTipText("Zoom in");
-        plusNavigationButton.setBorderPainted(false);
-        plusNavigationButton.setContentAreaFilled(false);
-        plusNavigationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        plusNavigationButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                plusNavigationButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                plusNavigationButtonMouseReleased(evt);
-            }
-        });
-        jLayeredPane1.setLayer(plusNavigationButton, javax.swing.JLayeredPane.MODAL_LAYER);
-        jLayeredPane1.add(plusNavigationButton);
-        plusNavigationButton.setBounds(30, 90, 30, 30);
-
-        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/navigBackground.png"))); // NOI18N
-        jLayeredPane1.add(jLabel1);
-        jLabel1.setBounds(30, 10, 90, 90);
-
-        loadModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/loadCanva.png"))); // NOI18N
-        loadModelButton.setToolTipText("");
-        loadModelButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        loadModelButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
-            public void mouseMoved(java.awt.event.MouseEvent evt) {
-                loadModelButtonMouseMoved(evt);
-            }
-        });
-        loadModelButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                loadModelButtonMouseClicked(evt);
-            }
-            public void mouseExited(java.awt.event.MouseEvent evt) {
-                loadModelButtonMouseExited(evt);
-            }
-        });
-        jLayeredPane1.add(loadModelButton);
-        loadModelButton.setBounds(200, 100, 210, 220);
-
-        rightNavigationButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/rightButton.png"))); // NOI18N
-        rightNavigationButton1.setToolTipText("Rotate right");
-        rightNavigationButton1.setBorderPainted(false);
-        rightNavigationButton1.setContentAreaFilled(false);
-        rightNavigationButton1.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        rightNavigationButton1.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                rightNavigationButton1MousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                rightNavigationButton1MouseReleased(evt);
-            }
-        });
-        jLayeredPane1.setLayer(rightNavigationButton1, javax.swing.JLayeredPane.MODAL_LAYER);
-        jLayeredPane1.add(rightNavigationButton1);
-        rightNavigationButton1.setBounds(90, 40, 30, 30);
-
-        whiteBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/whiteBackroundCanvas.png"))); // NOI18N
-        whiteBackroundButton.setToolTipText("White backround");
-        whiteBackroundButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        whiteBackroundButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                whiteBackroundButtonMouseClicked(evt);
-            }
-        });
-        jLayeredPane1.add(whiteBackroundButton);
-        whiteBackroundButton.setBounds(50, 130, 56, 56);
-
-        blackBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/blackBackroundCanvas.png"))); // NOI18N
-        blackBackroundButton.setToolTipText("Dark background");
-        blackBackroundButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        blackBackroundButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                blackBackroundButtonMouseClicked(evt);
-            }
-        });
-        jLayeredPane1.add(blackBackroundButton);
-        blackBackroundButton.setBounds(50, 190, 56, 56);
-
-        jPanel1.setBackground(new java.awt.Color(0, 0, 0));
-        jPanel1.setLayout(new java.awt.BorderLayout());
-        jLayeredPane1.add(jPanel1);
-        jPanel1.setBounds(0, 0, 0, 0);
-
-        add(jLayeredPane1, java.awt.BorderLayout.CENTER);
-    }// </editor-fold>//GEN-END:initComponents
-
-    /**
-     * 
-     * @param evt Resizing glCanvas cantaining components
-     */
-    private void jLayeredPane1ComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jLayeredPane1ComponentResized
-        jPanel1.setBounds(0, 0, jLayeredPane1.getWidth(), jLayeredPane1.getHeight());
-        glCanvas.setBounds(jLayeredPane1.getX(), jLayeredPane1.getY(), jLayeredPane1.getWidth(), jLayeredPane1.getHeight());
-        loadModelButton.setLocation(this.getWidth() / 2 - 35, this.getHeight() / 2 - 40);
-    }//GEN-LAST:event_jLayeredPane1ComponentResized
-
-    /**
-     * 
-     * @param evt Showing glCanvas cantaining components
-     */
-    private void jLayeredPane1ComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jLayeredPane1ComponentShown
-        jPanel1.setBounds(0, 0, jLayeredPane1.getWidth(), jLayeredPane1.getHeight());
-        glCanvas.setBounds(jLayeredPane1.getX(), jLayeredPane1.getY(), jLayeredPane1.getWidth(), jLayeredPane1.getHeight());
-        loadModelButton.setLocation(this.getWidth() / 2 - 35, this.getHeight() / 2 - 40);
-    }//GEN-LAST:event_jLayeredPane1ComponentShown
-
-    /**
-     * 
-     * @param evt Enables to rotate left the model when left navigation button is pressed
-     */
-    private void leftNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftNavigationButtonMousePressed
-        timer = new Timer();
-        startClickTime = System.currentTimeMillis();
-        task = new TimerTask() {
-            @Override
-            public void run() {
-                listener.rotateLeft(2);
-            }
-        };
-        timer.schedule(task, 500, 100);
-        leftNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/leftButtonPressed.png")));
-    }//GEN-LAST:event_leftNavigationButtonMousePressed
-
-    /**
-     * 
-     * @param evt Enables to rotate up the model when up navigation button is pressed
-     */
-    private void upNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_upNavigationButtonMousePressed
-        timer = new Timer();
-        startClickTime = System.currentTimeMillis();
-        task = new TimerTask() {
-            @Override
-            public void run() {
-                listener.rotateUp(2);
-            }
-        };
-        timer.schedule(task, 500, 100);
-        upNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/upButtonPressed.png")));
-    }//GEN-LAST:event_upNavigationButtonMousePressed
-
-    /**
-     * 
-     * @param evt Enables to rotate down the model when down navigation button is pressed
-     */
-    private void downNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_downNavigationButtonMousePressed
-        timer = new Timer();
-        startClickTime = System.currentTimeMillis();
-        task = new TimerTask() {
-            @Override
-            public void run() {
-                listener.rotateDown(2);
-            }
-        };
-        timer.schedule(task, 500, 100);
-        downNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/downButtonPressed.png")));
-    }//GEN-LAST:event_downNavigationButtonMousePressed
-
-    /**
-     * 
-     * @param evt Enables to zoom in the model when plus navigation button is pressed
-     */
-    private void plusNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_plusNavigationButtonMousePressed
-        timer = new Timer();
-        startClickTime = System.currentTimeMillis();
-        task = new TimerTask() {
-            @Override
-            public void run() {
-                listener.zoomIn(3);
-            }
-        };
-        timer.schedule(task, 500, 100);
-        plusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/plusPressed.png")));
-    }//GEN-LAST:event_plusNavigationButtonMousePressed
- 
-  /**
-  * 
-  * @param evt Enables to zoom out the model when minus navigation button is pressed
-  */
-    private void minusNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_minusNavigationButtonMousePressed
-        timer = new Timer();
-        startClickTime = System.currentTimeMillis();
-        task = new TimerTask() {
-            @Override
-            public void run() {
-                listener.zoomOut(3);
-            }
-        };
-        timer.schedule(task, 500, 100);
-        minusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/minusPressed.png")));
-    }//GEN-LAST:event_minusNavigationButtonMousePressed
-
-    /**
-     * 
-     * @param evt Stops rotating left
-     */
-    private void leftNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftNavigationButtonMouseReleased
-        timer.cancel();
-        if ((System.currentTimeMillis() - startClickTime) < 500) {
-            listener.rotateLeft(22.5);
-        }
-        startClickTime = 0;
-        leftNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/leftButton.png")));
-    }//GEN-LAST:event_leftNavigationButtonMouseReleased
-
-    /**
-     * 
-     * @param evt Stops rotating up
-     */
-    private void upNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_upNavigationButtonMouseReleased
-        timer.cancel();
-        if ((System.currentTimeMillis() - startClickTime) < 500) {
-            listener.rotateUp(22.5);
-        }
-        startClickTime = 0;
-        upNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/upButton.png")));
-    }//GEN-LAST:event_upNavigationButtonMouseReleased
-
-    /**
-     * 
-     * @param evt Stops rotating down
-     */
-    private void downNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_downNavigationButtonMouseReleased
-        timer.cancel();
-        if ((System.currentTimeMillis() - startClickTime) < 500) {
-            listener.rotateDown(22.5);
-        }
-        startClickTime = 0;
-        downNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/downButton.png")));
-    }//GEN-LAST:event_downNavigationButtonMouseReleased
-
-    /**
-     * 
-     * @param evt Stops zooming in 
-     */
-    private void plusNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_plusNavigationButtonMouseReleased
-        timer.cancel();
-        if ((System.currentTimeMillis() - startClickTime) < 500) {
-            listener.zoomIn(30);
-        }
-        startClickTime = 0;
-        plusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/plus.png")));
-    }//GEN-LAST:event_plusNavigationButtonMouseReleased
-
-    /**
-     * 
-     * @param evt  Stops zooming out
-     */
-    private void minusNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_minusNavigationButtonMouseReleased
-        timer.cancel();
-        if ((System.currentTimeMillis() - startClickTime) < 500) {
-            listener.zoomOut(30);
-        }
-        startClickTime = 0;
-        minusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/minus.png")));
-    }//GEN-LAST:event_minusNavigationButtonMouseReleased
-
-    /**
-     * 
-     * @param evt Laoding the .obj file when button pressed
-     */
-    private void loadModelButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_loadModelButtonMouseClicked
-       loadModel();
-    }//GEN-LAST:event_loadModelButtonMouseClicked
-
-    /**
-     * 
-     * @param evt Design is reacting to mouse movement 
-     */
-    private void loadModelButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_loadModelButtonMouseMoved
-        loadModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/loadCanvaClicked.png")));
-    }//GEN-LAST:event_loadModelButtonMouseMoved
-
-    /**
-     * 
-     * @param evt Design is reacting to mouse movement  
-     */
-    private void loadModelButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_loadModelButtonMouseExited
-        loadModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/loadCanva.png")));
-    }//GEN-LAST:event_loadModelButtonMouseExited
-
-    /**
-     * 
-     * @param evt Enables to rotate down the model when down navigation button is pressed
-     */
-    private void rightNavigationButton1MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightNavigationButton1MousePressed
-        timer = new Timer();
-        startClickTime = System.currentTimeMillis();
-        task = new TimerTask() {
-            @Override
-            public void run() {
-                listener.rotateRight(2);
-            }
-        };
-        timer.schedule(task, 500, 100);
-        rightNavigationButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/rightButtonPressed.png")));
-    }//GEN-LAST:event_rightNavigationButton1MousePressed
-
-    /**
-     * 
-     * @param evt Stops rotating right
-     */
-    private void rightNavigationButton1MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightNavigationButton1MouseReleased
-        timer.cancel();
-        if ((System.currentTimeMillis() - startClickTime) < 500) {
-            listener.rotateRight(22.5);
-        }
-        startClickTime = 0;
-        rightNavigationButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/rightButton.png")));
-    }//GEN-LAST:event_rightNavigationButton1MouseReleased
-
-    /**
-     * 
-     * @param evt Position of model on glCanvas is set to starting position
-     */
-    private void resetButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_resetButtonMouseClicked
-        listener.rotationAndSizeRestart();
-    }//GEN-LAST:event_resetButtonMouseClicked
-
-    /**
-     * 
-     * @param evt Design is reacting to mouse movement  
-     */
-    private void resetButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_resetButtonMouseMoved
-        resetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resetButtonPressed.png")));
-        resetButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
-    }//GEN-LAST:event_resetButtonMouseMoved
-
-    /**
-     * 
-     * @param evt Design is reacting to mouse movement  
-     */
-    private void resetButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_resetButtonMouseExited
-        resetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resetButton.png")));
-    }//GEN-LAST:event_resetButtonMouseExited
-
-    /**
-     * 
-     * @param evt Changes backround of the canvas into white color
-     */
-    private void whiteBackroundButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_whiteBackroundButtonMouseClicked
-        listener.setWhiteBackround(true);
-        whiteBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/whiteBackroundCanvasPressed.png")));
-        blackBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/blackBackroundCanvas.png")));
-    }//GEN-LAST:event_whiteBackroundButtonMouseClicked
-
-    /**
-     * 
-     * @param evt Changes backround of the canvas into dark color
-     */
-    private void blackBackroundButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_blackBackroundButtonMouseClicked
-        listener.setWhiteBackround(false);
-        whiteBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/whiteBackroundCanvas.png")));
-        blackBackroundButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/blackBackroundCanvasPressed.png")));
-    }//GEN-LAST:event_blackBackroundButtonMouseClicked
-
-    // Variables declaration - do not modify//GEN-BEGIN:variables
-    private javax.swing.JLabel blackBackroundButton;
-    private javax.swing.JButton downNavigationButton;
-    private javax.swing.JLabel jLabel1;
-    private javax.swing.JLayeredPane jLayeredPane1;
-    private javax.swing.JPanel jPanel1;
-    private javax.swing.JButton leftNavigationButton;
-    private javax.swing.JLabel loadModelButton;
-    private javax.swing.JButton minusNavigationButton;
-    private javax.swing.JButton plusNavigationButton;
-    private javax.swing.JLabel resetButton;
-    private javax.swing.JButton rightNavigationButton1;
-    private javax.swing.JButton upNavigationButton;
-    private javax.swing.JLabel whiteBackroundButton;
-    // End of variables declaration//GEN-END:variables
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/CanvasTopComponent.form b/GUI/src/main/java/cz/fidentis/analyst/gui/CanvasTopComponent.form
deleted file mode 100644
index 45c7d46376fe40d322bbbd95864b70b68d1d9fa4..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/CanvasTopComponent.form
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-<Form version="1.4" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
-  <AuxValues>
-    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
-    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
-    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
-    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
-  </AuxValues>
-
-  <Layout>
-    <DimensionLayout dim="0">
-      <Group type="103" groupAlignment="0" attributes="0">
-          <EmptySpace min="0" pref="575" max="32767" attributes="0"/>
-          <Group type="103" rootIndex="1" groupAlignment="0" attributes="0">
-              <Group type="102" alignment="0" attributes="0">
-                  <EmptySpace min="0" pref="0" max="-2" attributes="0"/>
-                  <Component id="canvas1" max="32767" attributes="0"/>
-                  <EmptySpace min="0" pref="0" max="-2" attributes="0"/>
-              </Group>
-          </Group>
-      </Group>
-    </DimensionLayout>
-    <DimensionLayout dim="1">
-      <Group type="103" groupAlignment="0" attributes="0">
-          <EmptySpace min="0" pref="411" max="32767" attributes="0"/>
-          <Group type="103" rootIndex="1" groupAlignment="0" attributes="0">
-              <Group type="102" alignment="0" attributes="0">
-                  <EmptySpace min="0" pref="0" max="-2" attributes="0"/>
-                  <Component id="canvas1" max="32767" attributes="0"/>
-                  <EmptySpace min="0" pref="0" max="-2" attributes="0"/>
-              </Group>
-          </Group>
-      </Group>
-    </DimensionLayout>
-  </Layout>
-  <SubComponents>
-    <Component class="cz.fidentis.analyst.gui.Canvas" name="canvas1">
-    </Component>
-  </SubComponents>
-</Form>
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/CanvasTopComponent.java b/GUI/src/main/java/cz/fidentis/analyst/gui/CanvasTopComponent.java
deleted file mode 100644
index 5f08cc63a4299f64e06982d0072941e4657a3efa..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/CanvasTopComponent.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
-package cz.fidentis.analyst.gui;
-
-import org.netbeans.api.settings.ConvertAsProperties;
-import org.openide.awt.ActionID;
-import org.openide.awt.ActionReference;
-import org.openide.windows.TopComponent;
-import org.openide.util.NbBundle.Messages;
-
-/**
- *
- * @author Richard Pajerský
- * 
- * Window for Canvas
- */
-@ConvertAsProperties(
-        dtd = "-//cz.fidentis.analyst.gui//Canvas//EN",
-        autostore = false
-)
-@TopComponent.Description(
-        preferredID = "CanvasTopComponent",
-        //iconBase="SET/PATH/TO/ICON/HERE",
-        persistenceType = TopComponent.PERSISTENCE_ALWAYS
-)
-@TopComponent.Registration(mode = "editor", openAtStartup = false)
-@ActionID(category = "Window", id = "cz.fidentis.analyst.gui.CanvasTopComponent")
-@ActionReference(path = "Menu/Window" /*, position = 333 */)
-@TopComponent.OpenActionRegistration(
-        displayName = "#CTL_CanvasAction",
-        preferredID = "CanvasTopComponent"
-)
-@Messages({
-    "CTL_CanvasAction=Canvas",
-    "CTL_CanvasTopComponent=Canvas",
-    "HINT_CanvasTopComponent=This is a Canvas window"
-})
-public final class CanvasTopComponent extends TopComponent {
-
-    public CanvasTopComponent() {
-        initComponents();
-        setName(Bundle.CTL_CanvasTopComponent());
-        setToolTipText(Bundle.HINT_CanvasTopComponent());
-        //putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.TRUE);
-        //putClientProperty(TopComponent.PROP_DRAGGING_DISABLED, Boolean.TRUE);
-        //putClientProperty(TopComponent.PROP_UNDOCKING_DISABLED, Boolean.TRUE);
-    }
-
-    /**
-     * This method is called from within the constructor to initialize the form.
-     * WARNING: Do NOT modify this code. The content of this method is always
-     * regenerated by the Form Editor.
-     */
-    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
-    private void initComponents() {
-
-        canvas1 = new cz.fidentis.analyst.gui.Canvas();
-
-        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
-        this.setLayout(layout);
-        layout.setHorizontalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 575, Short.MAX_VALUE)
-            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                .addGroup(layout.createSequentialGroup()
-                    .addGap(0, 0, 0)
-                    .addComponent(canvas1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                    .addGap(0, 0, 0)))
-        );
-        layout.setVerticalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 411, Short.MAX_VALUE)
-            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                .addGroup(layout.createSequentialGroup()
-                    .addGap(0, 0, 0)
-                    .addComponent(canvas1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                    .addGap(0, 0, 0)))
-        );
-    }// </editor-fold>//GEN-END:initComponents
-
-    // Variables declaration - do not modify//GEN-BEGIN:variables
-    private cz.fidentis.analyst.gui.Canvas canvas1;
-    // End of variables declaration//GEN-END:variables
-    @Override
-    public void componentOpened() {
-        // TODO add custom code on component opening
-    }
-
-    @Override
-    public void componentClosed() {
-        // TODO add custom code on component closing
-    }
-
-    void writeProperties(java.util.Properties p) {
-        // better to version settings since initial version as advocated at
-        // http://wiki.apidesign.org/wiki/PropertyFiles
-        p.setProperty("version", "1.0");
-        // TODO store your settings
-    }
-
-    void readProperties(java.util.Properties p) {
-        String version = p.getProperty("version");
-        // TODO read your settings according to their version
-    }
-    
-    public cz.fidentis.analyst.gui.Canvas getCanvas() {
-        return canvas1;
-    }
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/ComparisonGLEventListener.java b/GUI/src/main/java/cz/fidentis/analyst/gui/ComparisonGLEventListener.java
deleted file mode 100644
index c1b8dbd858c2e55a25544fad029dc4d07f9a893e..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/ComparisonGLEventListener.java
+++ /dev/null
@@ -1,176 +0,0 @@
-package cz.fidentis.analyst.gui;
-
-import com.jogamp.opengl.GL;
-import com.jogamp.opengl.GL2;
-import com.jogamp.opengl.GLAutoDrawable;
-import cz.fidentis.analyst.face.HumanFace;
-import cz.fidentis.analyst.mesh.core.MeshFacet;
-import cz.fidentis.analyst.mesh.core.MeshModel;
-import cz.fidentis.analyst.visitors.mesh.HausdorffDistance;
-
-import javax.vecmath.Vector3d;
-import java.awt.*;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static com.jogamp.opengl.GL.GL_FRONT_AND_BACK;
-import static com.jogamp.opengl.GL.GL_VIEWPORT;
-import static com.jogamp.opengl.GL2GL3.GL_FILL;
-import static com.jogamp.opengl.GL2GL3.GL_LINE;
-import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_MODELVIEW_MATRIX;
-import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_PROJECTION_MATRIX;
-import javax.vecmath.Point3d;
-
-/**
- *
- *  @author Daniel Sokol
- *
- *  Rendering face with heatmap.
- */
-public class ComparisonGLEventListener extends GeneralGLEventListener {
-    boolean renderHeatmap;
-    Color minColor;
-    Color maxColor;
-    private Map<MeshFacet, List<Double>> distances = new HashMap<>();
-    private HumanFace comparedFace;
-
-
-    public ComparisonGLEventListener(Canvas canvas) {
-        super(canvas);
-    }
-
-    public void setComparedFace(HumanFace inputComparedFace) {
-        if (inputComparedFace != null) {
-            comparedFace = inputComparedFace;
-        }
-        renderHeatmap = false;
-    }
-
-    public void compare(Color minColor, Color maxColor) {
-        HausdorffDistance hVisitor = new HausdorffDistance(getModel(), HausdorffDistance.Strategy.POINT_TO_POINT, false, false);
-        comparedFace.getMeshModel().compute(hVisitor);
-        distances = hVisitor.getDistances();
-        renderHeatmap = true;
-        this.minColor = minColor;
-        this.maxColor = maxColor;
-    }
-
-    @Override
-    public void display(GLAutoDrawable glad) {
-        wireModel = glCanvas.getDrawWired(); // is wire-frame or not
-
-        if (whiteBackround) {
-            gl.glClearColor(0.9f, 0.9f, 0.9f, 0);
-        } else {
-            gl.glClearColor(0.25f, 0.25f, 0.25f, 0);
-        }
-        // background for GLCanvas
-        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
-        gl.glLoadIdentity();
-
-        // sets model to proper position
-        glu.gluLookAt(xCameraPosition, yCameraPosition, zCameraPosition, xCenter, yCenter, zCenter, xUpPosition, yUpPosition, zUpPosition);
-
-        gl.glShadeModel(GL2.GL_SMOOTH);
-        gl.glGetIntegerv(GL_VIEWPORT, viewport, 0);
-        gl.glGetFloatv(GL_MODELVIEW_MATRIX, modelViewMatrix, 0);
-        gl.glGetFloatv(GL_PROJECTION_MATRIX, projectionMatrix, 0);
-
-        //if there is any model, draw
-        if (comparedFace != null) {
-            if (renderHeatmap) {
-                drawHeatmap(comparedFace.getMeshModel());
-            } else {
-                drawWithoutTextures(comparedFace.getMeshModel());
-            }
-        } else if (getModel() != null) {
-            if (wireModel) {
-                gl.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); //drawn as wire-frame
-            } else {
-                gl.glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // drawn as full traingles
-            }
-
-            drawWithoutTextures(getModel());
-        }
-
-        gl.glFlush();
-    }
-
-    public void drawHeatmap(MeshModel model) {
-        for (int i = 0; i < model.getFacets().size(); i++) {
-            List<Double> distanceList = distances.get(model.getFacets().get(i));
-            Double minDistance = distanceList.stream().mapToDouble(Double::doubleValue).min().getAsDouble();
-            Double maxDistance = distanceList.stream().mapToDouble(Double::doubleValue).max().getAsDouble();
-            renderFaceWithHeatmap(model.getFacets().get(i), distances.get(model.getFacets().get(i)), minDistance, maxDistance);
-        }
-    }
-
-    public void renderFaceWithHeatmap(MeshFacet facet, List<Double> distancesList, Double minDistance, Double maxDistance) {
-        gl.glBegin(GL2.GL_TRIANGLES); //vertices are rendered as triangles
-
-        // get the normal and tex coords indicies for face i
-        for (int v = 0; v < facet.getCornerTable().getSize(); v++) {
-            // render the normals
-            Vector3d norm = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getNormal();
-            if (norm != null) {
-                gl.glNormal3d(norm.x, norm.y, norm.z);
-            }
-            // render the vertices
-            Point3d vert = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getPosition();
-            //get color of vertex
-            Color c = getColor(distancesList.get(facet.getCornerTable().getRow(v).getVertexIndex()), minDistance, maxDistance);
-            gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, c.getComponents(null), 0);
-
-            gl.glVertex3d(vert.x, vert.y, vert.z);
-        }
-        gl.glEnd();
-        gl.glPopAttrib();
-    }
-
-    Color getColor(Double currentDistance, Double minDistance, Double maxDistance) {
-        double currentParameter = ((currentDistance - minDistance) / (maxDistance - minDistance));
-
-        float[] hsb1 = Color.RGBtoHSB(minColor.getRed(), minColor.getGreen(), minColor.getBlue(), null);
-        float h1 = hsb1[0];
-        float s1 = hsb1[1];
-        float b1 = hsb1[2];
-
-        float[] hsb2 = Color.RGBtoHSB(maxColor.getRed(), maxColor.getGreen(), maxColor.getBlue(), null);
-        float h2 = hsb2[0];
-        float s2 = hsb2[1];
-        float b2 = hsb2[2];
-
-        // determine clockwise and counter-clockwise distance between hues
-        float distCCW;
-        float distCW;
-
-        if (h1 >= h2) {
-            distCCW = h1 - h2;
-            distCW = 1 + h2 - h1;
-        } else {
-            distCCW = 1 + h1 - h2;
-            distCW = h2 - h1;
-        }
-
-        float hue;
-
-        if (distCW >= distCCW) {
-            hue = (float) (h1 + (distCW * currentParameter));
-        } else {
-            hue = (float) (h1 - (distCCW * currentParameter));
-        }
-
-        if (hue < 0) {
-            hue = 1 + hue;
-        }
-        if (hue > 1) {
-            hue = hue - 1;
-        }
-
-        float saturation = (float) ((1 - currentParameter) * s1 + currentParameter * s2);
-        float brightness = (float) ((1 - currentParameter) * b1 + currentParameter * b2);
-
-        return Color.getHSBColor(hue, saturation, brightness);
-    }
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/GeneralGLEventListener.java b/GUI/src/main/java/cz/fidentis/analyst/gui/GeneralGLEventListener.java
deleted file mode 100644
index f9b5276a2ac50935f73e34b21b40a3b77da75334..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/GeneralGLEventListener.java
+++ /dev/null
@@ -1,560 +0,0 @@
-package cz.fidentis.analyst.gui;
-
-import cz.fidentis.analyst.mesh.core.MeshModel;
-import cz.fidentis.analyst.mesh.core.MeshFacet;
-import com.jogamp.opengl.GL;
-import static com.jogamp.opengl.GL.GL_DEPTH_TEST;
-import static com.jogamp.opengl.GL.GL_FRONT_AND_BACK;
-import static com.jogamp.opengl.GL.GL_VIEWPORT;
-import com.jogamp.opengl.GL2;
-import static com.jogamp.opengl.GL2GL3.GL_FILL;
-import static com.jogamp.opengl.GL2GL3.GL_LINE;
-import com.jogamp.opengl.GLAutoDrawable;
-import com.jogamp.opengl.GLEventListener;
-import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_MODELVIEW_MATRIX;
-import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_PROJECTION_MATRIX;
-import com.jogamp.opengl.glu.GLU;
-import cz.fidentis.analyst.symmetry.SymmetryConfig;
-import cz.fidentis.analyst.symmetry.SignificantPoints;
-import cz.fidentis.analyst.symmetry.SymmetryEstimator;
-import javax.vecmath.Point3d;
-
-import javax.vecmath.Vector3d;
-import javax.vecmath.Vector3f;
-
-/**
- *
- * @author Natália Bebjaková
- */
-public class GeneralGLEventListener implements GLEventListener {  
-    
-    /**
-     * MeshModel that is displayed
-     */
-    private MeshModel model = new MeshModel();
-    
-    /**
-     * MeshModel of the symmetry plane
-     */
-    private MeshFacet symmetryPlaneFacet = null;
-    
-    /**
-     * GLCanvas which listener belongs to 
-     */
-    protected Canvas glCanvas;  
-    
-    /**
-    * GLU object.
-    */
-    protected GLU glu;
-    
-    /**
-     * Usage of openGL version 2
-     */
-    protected GL2 gl;
-    
-    /**
-     * The last viewport.
-     */
-    protected int[] viewport = new int[4];
-     
-    /**
-     * The last model matrix.
-     */
-    protected float[] modelViewMatrix = new float[16];
-    
-    /**
-     * The last projection matrix.
-     */
-    protected float[] projectionMatrix = new float[16];  
-    
-    /**
-     * The X coordinate of the last known mouse position during the scene rotation.
-     */
-    int mouseX = 0;
-    
-    /**
-     * The Y coordinate of the last know mouse position during the scene rotation.
-     */
-    int mouseY = 0;
-    
-    protected Vector3f defaultPosition = new Vector3f(0, 0, 300);
-    protected Vector3f currentPosition = new Vector3f(0, 0, 300);
-
-    protected double zCenter = 0;
-    protected double xCenter = 0;
-    protected double yCenter = 0;
-
-    protected double zCameraPosition;
-    protected double xCameraPosition;
-    protected double yCameraPosition;
-
-    protected double zUpPosition = 0;
-    protected double xUpPosition = 0;
-    protected double yUpPosition = 1;
-    
-    /**
-     * Decides if model is displayed as wire-frame
-     */  
-    protected boolean wireModel = false;
-
-    /**
-     * decides if the symmetryPlane is displayed
-     */
-    protected static boolean symmetryPlane;
-
-    /**
-     * Decides if the background will be white
-     */
-    protected boolean whiteBackround = false;
-    
-    /**
-     * 
-     * @return is background white or not
-     */
-    public boolean isWhiteBackround() {
-        return whiteBackround;
-    }
-    
-    /**
-     * 
-     * @return Matrix for model view
-     */
-    public float[] getModelViewMatrix() {
-        return modelViewMatrix;
-    }
-
-    /**
-     * 
-     * @return Matrix for projection
-     */
-    public float[] getProjectionMatrix() {
-        return projectionMatrix;
-    }
-    
-    /**
-     * 
-     * @return GlCanvas for displaying
-     */
-    public Canvas getGlCanvas() {
-        return glCanvas;
-    }
-    
-    /**
-     * 
-     * @param drawWire Decides if model is displayed as wire-frame
-     */
-    public void setWireMode(boolean drawWire) {
-        wireModel = drawWire;
-    }
-
-    /**
-     *
-     * @param drawSymmetry Decides if model is displayed as wire-frame
-     */
-    public void setSymmetryPlane(boolean drawSymmetry) {
-        symmetryPlane = drawSymmetry;
-    }
-
-    /**
-     * 
-     * @param whiteBackround Is backround white or not
-     */
-    public void setWhiteBackround(boolean whiteBackround) {
-        this.whiteBackround = whiteBackround;
-    }
-
-    /**
-     * Creates new EventListener
-     * @param canvas GLCanvas which listener belongs to
-     */
-    public GeneralGLEventListener(Canvas canvas) {
-        this.glCanvas = canvas;
-    }
-    
-    /**
-     *
-     * @param model Set model to be displayed
-     */
-    public void setModel(MeshModel model) {
-        this.model = model;
-    }
-
-    /**
-     *
-     * @param symmetryPlaneFacet Set model of the symmetry plane
-     */
-    public void setSymmetryPlaneFacet(MeshFacet symmetryPlaneFacet) {
-        this.symmetryPlaneFacet = symmetryPlaneFacet;
-    }
-
-    /**
-     *
-     * @return Returns displayed model 
-     */
-    public MeshModel getModel() {
-        return model;
-    }
-
-    
-    /**
-     * Invoked when main frame is created
-     * @param glad Glad object
-     */
-    @Override
-    public void init(GLAutoDrawable glad) {
-        System.out.println("OLD GeneralGLEventListener.init");
-        
-        this.gl = (GL2) glad.getGL();
-        glu = new GLU();
-      
-        gl.setSwapInterval(1);
-        gl.glEnable(GL2.GL_LIGHTING);
-        gl.glEnable(GL2.GL_LIGHT0);
-        gl.glEnable(GL2.GL_DEPTH_TEST);
-        gl.glClearColor(0,0,0,0);     // background for GLCanvas
-        gl.glClear(GL2.GL_COLOR_BUFFER_BIT);
-        
-        gl.glShadeModel(GL2.GL_SMOOTH);    // use smooth shading
-
-        gl.glDepthFunc(GL2.GL_LESS);
-        gl.glDepthRange(0.0, 1.0);
-        gl.glEnable(GL_DEPTH_TEST); 
-
-        gl.glEnable(GL2.GL_NORMALIZE);
-        gl.glDisable(GL2.GL_CULL_FACE);
-    }
-
-    /**
-     * Invoked when main frame is closed
-     * @param glad Glad object
-     */
-    @Override
-    public void dispose(GLAutoDrawable glad) {
-    }
-    
-    /**
-     * Invoked every frame.
-     * @param glad Glad object
-     */
-    @Override
-    public void display(GLAutoDrawable glad) {
-        wireModel = glCanvas.getDrawWired(); // is wire-frame or not
-        symmetryPlane = glCanvas.getDrawSymmetryPlane();
-
-        //Generate SymmetryPlane first time we request to see it
-        if (symmetryPlane && symmetryPlaneFacet == null) {
-            SymmetryEstimator estimator = new SymmetryEstimator(new SymmetryConfig(), SignificantPoints.CurvatureAlg.GAUSSIAN);
-            model.getFacets().get(0).accept(estimator);
-            symmetryPlaneFacet = estimator.getSymmetryPlaneMesh();
-
-            //Set calculated planes for the loaded Face
-            glCanvas.loadedFace.setSymmetryPlane(estimator.getSymmetryPlane(), symmetryPlaneFacet);
-            glCanvas.loadedFace.setCuttingPlane(symmetryPlaneFacet);
-        }
-
-        if (whiteBackround) {
-            gl.glClearColor(0.9f,0.9f,0.9f,0); 
-        } else {
-            gl.glClearColor(0.25f,0.25f,0.25f,0); 
-        }
-        // background for GLCanvas       
-        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
-        gl.glLoadIdentity();
-
-        // sets model to proper position
-        glu.gluLookAt(xCameraPosition, yCameraPosition, zCameraPosition, xCenter, yCenter, zCenter, xUpPosition, yUpPosition, zUpPosition);
-
-        gl.glShadeModel(GL2.GL_SMOOTH);
-        gl.glGetIntegerv(GL_VIEWPORT, viewport, 0);
-        gl.glGetFloatv(GL_MODELVIEW_MATRIX, modelViewMatrix, 0);
-        gl.glGetFloatv(GL_PROJECTION_MATRIX, projectionMatrix, 0);
-        
-        //if there is any model, draw 
-        if (model != null) {
-            if (wireModel) {
-                gl.glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); //drawn as wire-frame
-            } else {
-                gl.glPolygonMode( GL_FRONT_AND_BACK, GL_FILL); // drawn as full traingles
-            }
-
-            drawWithoutTextures(model);
-            if (symmetryPlane) {
-                renderFacet(symmetryPlaneFacet);
-            }
-        } 
-            
-        //gl.glPopMatrix();
-        gl.glFlush();
-    }
-    
-    /**
-     * Loops through the facets and render each of them 
-     * 
-     * @param model model of the face
-     */
-    public void drawWithoutTextures(MeshModel model) {
-        for (int i = 0; i < model.getFacets().size(); i++) {
-            renderFacet(model.getFacets().get(i));
-        }
-    }
-    
-    /**
-     * Loops through the facet and render all the vertices as they are stored in corner table
-     * 
-     * @param facet facet of model
-     */
-    public void renderFacet(MeshFacet facet) {
-        gl.glBegin(GL2.GL_TRIANGLES); //vertices are rendered as triangles
-     
-        // get the normal and tex coords indicies for face i  
-        for (int v = 0; v < facet.getCornerTable().getSize(); v++) { 
-            // render the normals
-            Vector3d norm = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getNormal(); 
-            if(norm != null) {
-                gl.glNormal3d(norm.x, norm.y, norm.z);
-            }
-            // render the vertices
-            Point3d vert = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getPosition(); 
-            gl.glVertex3d(vert.x, vert.y, vert.z);
-        }
-        gl.glEnd();
-
-    }
-
-    /**
-     *
-     * @param glad Glad object
-     * @param x x
-     * @param y y
-     * @param width New width
-     * @param height New height
-     */
-    @Override
-    public void reshape(GLAutoDrawable glad, int x, int y, int width, int height) {
-
-        if (height == 0) {
-            height = 1;    // to avoid division by 0 in aspect ratio below
-        }
-        gl.glViewport(x, y, width, height);  // size of drawing area
-
-        float h = (float) height / (float) width;
-
-        gl.glMatrixMode(GL2.GL_PROJECTION);
-        gl.glLoadIdentity();
-
-        glu.gluPerspective(65, width / (float) height, 5.0f, 1500.0f);
-        gl.glMatrixMode(GL2.GL_MODELVIEW);
-        gl.glLoadIdentity();
-
-        gl.glTranslatef(0.0f, 0.0f, -40.0f);
-    }
-
-    /**
-     *
-     * @param x New x position
-     * @param y New y position
-     * @param z New z position
-     */
-    public void setCameraPosition(float x, float y, float z) {
-        currentPosition.set(x, y, z);
-
-        setNewCameraPosition(currentPosition);
-        zCameraPosition = defaultPosition.z;
-        xCameraPosition = defaultPosition.x;
-        yCameraPosition = defaultPosition.y;
-    }    
-
-    /**
-     *
-     * @param position New position of camera
-     */
-    public void setNewCameraPosition(Vector3f position) {
-        xCameraPosition = position.x;
-        yCameraPosition = position.y;
-        zCameraPosition = position.z;
-    }
-
-    /**
-     *
-     * @param degree degree of rotation
-     */
-    public void rotateUp(double degree) {
-        rotate(-degree, 0);
-    }
-
-    /**
-     *
-     * @param degree degree of rotation
-     */
-    public void rotateDown(double degree) {
-        rotate(degree, 0);
-    }
-
-    /**
-     *
-     * @param degree degree of rotation
-     */
-    public void rotateLeft(double degree) {
-        rotate(0, degree);
-    }
-
-    /**
-     *
-     * @param degree degree of rotation
-     */
-    public void rotateRight(double degree) {
-        rotate(0, -degree);
-    }
-
-    /**
-     * 
-     * @return X axis
-     */
-    private Vector3f getXaxis() {
-        Vector3f xAxis = new Vector3f(
-                (float) ((yCameraPosition - yCenter) *zUpPosition - (zCameraPosition - zCenter) * yUpPosition),
-                (float) ((zCameraPosition - zCenter) * xUpPosition - (xCameraPosition - xCenter) * zUpPosition),
-                (float) ((xCameraPosition - xCenter) * yUpPosition - xUpPosition * (yCameraPosition - yCenter)));
-         
-        float length = (float) Math.sqrt(xAxis.x * xAxis.x +
-                xAxis.y * xAxis.y + xAxis.z * xAxis.z);
-        xAxis.set(xAxis.x / length, xAxis.y / length, xAxis.z / length);
-        return xAxis;
-    }
-
-    /**
-     * 
-     * @return Y axis
-     */
-    private Vector3f getYaxis() {
-         Vector3f yAxis = new Vector3f((float) xUpPosition, (float) yUpPosition, (float) zUpPosition);
-        float length = (float) Math.sqrt(yAxis.x * yAxis.x +
-                yAxis.y * yAxis.y + yAxis.z * yAxis.z);
-        yAxis.set((yAxis.x / length), (yAxis.y / length), (yAxis.z / length));
-        return yAxis;
-    }
-
-    /**
-     * Rotates object around axes that apear as horizontal and vertical axe on
-     * screen (paralel to the sceen edges), intersecting at the center of
-     * screen( i.e head center).
-     *
-     * @param xAngle angle around vertical axe on screen
-     * @param yAngle angle around horizontal axe on screen
-     */
-    public void rotate(double xAngle, double yAngle) {
-        Vector3f xAxis = getXaxis();
-        Vector3f yAxis = getYaxis();
-
-        Vector3f point = new Vector3f((float) xCameraPosition,
-                (float) yCameraPosition, (float) zCameraPosition);
-
-        Vector3f camera = rotateAroundAxe(point, xAxis, Math.toRadians(xAngle));
-        camera = rotateAroundAxe(camera, yAxis, Math.toRadians(yAngle));
-
-        point = new Vector3f((float) xUpPosition, (float) yUpPosition, (float) zUpPosition);
-
-        Vector3f up = rotateAroundAxe(point, xAxis, Math.toRadians(xAngle));
-        up = rotateAroundAxe(up, yAxis, Math.toRadians(yAngle));
-
-        xUpPosition = up.x;
-        yUpPosition = up.y;
-        zUpPosition = up.z;
-
-        setNewCameraPosition(camera);
-    }
-
-    /**
-     * 
-     * @param xShift xShift
-     * @param yShift yShift
-     */
-    public void move(double xShift, double yShift) {
-        Vector3f xAxis = getXaxis();
-        Vector3f yAxis = getYaxis();
-
-        Vector3f shift = new Vector3f((float) (xAxis.x * xShift + yAxis.x * yShift),
-                (float) (xAxis.y * xShift + yAxis.y * yShift), (float) (xAxis.z * xShift + yAxis.z * yShift));
-        Vector3f camera = new Vector3f((float) xCameraPosition + shift.x, (float) yCameraPosition + shift.y,
-                (float) zCameraPosition + shift.z);
-        xCenter += shift.x;
-        yCenter += shift.y;
-        zCenter += shift.z;
-
-        setNewCameraPosition(camera);
-    }
-
-    /**
-     * Calculate the new position f point from given angle and rotation axe.
-     *
-     * @param point original position
-     * @param u vector of rotation axe
-     * @param angle angle of rotation
-     * @return new position
-     */
-    public Vector3f rotateAroundAxe(Vector3f point, Vector3f u, double angle) {
-        Vector3f p;
-        float x = (float) ((Math.cos(angle) + u.x * u.x * (1 - Math.cos(angle))) * point.x
-                + (u.x * u.y * (1 - Math.cos(angle)) - u.z * Math.sin(angle)) * point.y
-                + (u.x * u.z * (1 - Math.cos(angle)) + u.y * Math.sin(angle)) * point.z);
-        float y = (float) ((u.x * u.y * (1 - Math.cos(angle)) + u.z * Math.sin(angle)) * point.x
-                + (Math.cos(angle) + u.y * u.y * (1 - Math.cos(angle))) * point.y
-                + (u.y * u.z * (1 - Math.cos(angle)) - u.x * Math.sin(angle)) * point.z);
-        float z = (float) ((u.x * u.z * (1 - Math.cos(angle)) - u.y * Math.sin(angle)) * point.x
-                + (u.y * u.z * (1 - Math.cos(angle)) + u.x * Math.sin(angle)) * point.y
-                + (Math.cos(angle) + u.z * u.z * (1 - Math.cos(angle))) * point.z);
-        p = new Vector3f(x, y, z);
-
-        return p;
-    }
-
-    /**
-     * Sets model to the starting position
-     */
-    public void rotationAndSizeRestart() {
-        xUpPosition = 0;
-        yUpPosition = 1;
-        zUpPosition = 0;
-
-        setNewCameraPosition(defaultPosition);
-        xCenter = 0;
-        yCenter = 0;
-        zCenter = 0;
-    }
-
-    /**
-     *
-     * @param distance Distance to be zoom in
-     */
-    public void zoomIn(double distance) {
-        double x = xCameraPosition - xCenter;
-        double y = yCameraPosition - yCenter;
-        double z = zCameraPosition - zCenter;
-        double sqrt = Math.sqrt(x * x + y * y + z * z);
-
-        if (sqrt > 0) {
-            xCameraPosition = xCenter + ((sqrt - distance) * x / sqrt);
-            yCameraPosition = yCenter + ((sqrt - distance) * y / sqrt);
-            zCameraPosition = zCenter + ((sqrt - distance) * z / sqrt);
-        }
-    }
-
-    /**
-     *
-     * @param distance Distance to be zoom out
-     */
-    public void zoomOut(double distance) {
-        double x = xCameraPosition - xCenter;
-        double y = yCameraPosition - yCenter;
-        double z = zCameraPosition - zCenter;
-        double sqrt = Math.sqrt(x * x + y * y + z * z);
-
-        if (sqrt == 0) {
-            sqrt = 1;
-        }
-        xCameraPosition = xCenter + ((sqrt + distance) * x / sqrt);
-        yCameraPosition = yCenter + ((sqrt + distance) * y / sqrt);
-        zCameraPosition = zCenter + ((sqrt + distance) * z / sqrt);
-    }
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/Manipulator3D.java b/GUI/src/main/java/cz/fidentis/analyst/gui/Manipulator3D.java
deleted file mode 100644
index eb1ef64a51d9aeac580ba6a1bddb852b68b91ed4..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/Manipulator3D.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package cz.fidentis.analyst.gui;
-
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseWheelEvent;
-//import javax.swing.JOptionPane;
-import javax.swing.SwingUtilities;
-
-/**
- *
- * @author Richard Pajersky
- * 
- * 3D manipulation with mouse, using 3D movement from GeneralGLEventListener
- */
-public class Manipulator3D extends MouseAdapter {
-    
-    private GeneralGLEventListener listener;
-
-    private float lastX = 0;
-    private float lastY = 0;
-    
-    private static double rotationSpeed = 0.4;
-    private static double moveSpeed = 0.4;
-
-    public Manipulator3D(GeneralGLEventListener listener) {
-        this.listener = listener;
-    }
-
-    /**
-     * Left mouse button dragging rotates
-     * Right mouse button dragging moves
-     * Middle mouse button dragging resets rotation and zoom
-     */
-    @Override
-    public void mouseDragged(MouseEvent evt) {
-        //JOptionPane.showMessageDialog(null, evt.getButton());
-
-        if (SwingUtilities.isLeftMouseButton(evt)) {
-            double rotateX = -(lastY - evt.getY()) * rotationSpeed;
-            double rotateY = +(lastX - evt.getX()) * rotationSpeed;
-            if (Math.abs(rotateX) < Math.abs(rotateY)) {
-                rotateX = 0;
-            } else if (Math.abs(rotateY) < Math.abs(rotateX)) {
-                rotateY = 0;
-            }
-            listener.rotate(rotateX, rotateY);
-        }
-        if (SwingUtilities.isRightMouseButton(evt)) {
-            double moveX = -(lastX - evt.getX()) * moveSpeed;
-            double moveY = -(lastY - evt.getY()) * moveSpeed;
-            listener.move(moveX, moveY);
-        }
-        if (SwingUtilities.isMiddleMouseButton(evt)) {
-            listener.rotationAndSizeRestart();
-        }
-        lastX = evt.getX();
-        lastY = evt.getY();
-    }
-
-    /**
-     * Actualize mouse movement
-     */
-    @Override
-    public void mouseMoved(MouseEvent e) {
-        lastX = e.getX();
-        lastY = e.getY();
-    }
-
-    /**
-     * Zoom in or out based on mouse wheel movement
-     */
-    @Override
-    public void mouseWheelMoved(MouseWheelEvent evt) {
-        if (evt.getWheelRotation() > 0) {
-            listener.zoomIn(-5 * evt.getWheelRotation());
-        } else {
-            listener.zoomOut(5 * evt.getWheelRotation());
-        }
-    }
-    
-    /**
-     * Middle mouse button click resets rotation and zoom
-     */
-    @Override
-    public void mouseClicked(MouseEvent evt) {
-        if (SwingUtilities.isMiddleMouseButton(evt))
-            listener.rotationAndSizeRestart();
-    }
-    
-    public static double getRotationSpeed() {
-        return rotationSpeed;
-    }
-
-    public static void setRotationSpeed(double rotationSpeed) {
-        Manipulator3D.rotationSpeed = rotationSpeed;
-    }
-
-    public static double getMoveSpeed() {
-        return moveSpeed;
-    }
-
-    public static void setMoveSpeed(double moveSpeed) {
-        Manipulator3D.moveSpeed = moveSpeed;
-    }
-
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/RegistrationGLEventListener.java b/GUI/src/main/java/cz/fidentis/analyst/gui/RegistrationGLEventListener.java
deleted file mode 100644
index 7317ff4e774468f3b7da09a22fb690f902386456..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/RegistrationGLEventListener.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
-package cz.fidentis.analyst.gui;
-
-import com.jogamp.opengl.GL;
-import static com.jogamp.opengl.GL.GL_FRONT_AND_BACK;
-import static com.jogamp.opengl.GL.GL_VIEWPORT;
-import com.jogamp.opengl.GL2;
-import static com.jogamp.opengl.GL2GL3.GL_FILL;
-import static com.jogamp.opengl.GL2GL3.GL_LINE;
-import com.jogamp.opengl.GLAutoDrawable;
-import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_MODELVIEW_MATRIX;
-import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_PROJECTION_MATRIX;
-import cz.fidentis.analyst.icp.IcpTransformer;
-import cz.fidentis.analyst.icp.RandomStrategy;
-//import cz.fidentis.analyst.face.HumanFace;
-import cz.fidentis.analyst.mesh.core.MeshFacet;
-import cz.fidentis.analyst.mesh.core.MeshModel;
-import cz.fidentis.analyst.mesh.core.MeshPoint;
-import java.awt.Color;
-import javax.vecmath.Point3d;
-import javax.vecmath.Vector3d;
-
-/**
- *
- * @author Richard Pajersky
- */
-public class RegistrationGLEventListener extends GeneralGLEventListener{
-    
-    private MeshModel primaryModel = null;
-    private MeshModel secondaryModel = null;
-    
-    private Color primaryColor = Color.BLUE;
-    private Color secondaryColor = Color.RED;
-    
-    private boolean other = false;
-    
-    private double leftPt = 0.0f;
-    private double rightPt = 0.0f;
-    private double topPt = 0.0f;
-    private double bottomPt = 0.0f;
-    private double farPt = 0.0f;
-    private double nearPt = 0.0f;
-    private Vector3d center;
-    
-    public RegistrationGLEventListener(Canvas primary, Canvas secondary) {
-        super(primary);
-    }
-    
-    private void calculateCenter(MeshModel model) {
-        for (MeshFacet mf : model.getFacets()) {
-            for (MeshPoint mp : mf.getVertices()) {
-                Point3d vert = mp.getPosition();
-                if (vert.x > rightPt) {
-                    rightPt = vert.x;
-                }
-                if (vert.x < leftPt) {
-                    leftPt = vert.x;
-                }
-                if (vert.y > topPt) {
-                    topPt = vert.y;
-                }
-                if (vert.y < bottomPt) {
-                    bottomPt = vert.y;
-                }
-                if (vert.z > nearPt) {
-                    nearPt = vert.z;
-                }
-                if (vert.z < farPt) {
-                    farPt = vert.z;
-                }
-            }
-        }
-        double xc = (rightPt + leftPt) / 2.0f;
-        double yc = (topPt + bottomPt) / 2.0f;
-        double zc = (nearPt + farPt) / 2.0f;
-        center = new Vector3d(xc, yc, zc);
-    }
-    
-    @Override
-    public void setModel(MeshModel model) {
-        if (primaryModel == null) { 
-            primaryModel = model;
-        }
-        else {
-            IcpTransformer icpVisitor = new IcpTransformer(primaryModel, 10, true, 0.05, new RandomStrategy(0.5));
-            for (MeshFacet f: model.getFacets()) {
-                icpVisitor.visitMeshFacet(f);
-            }
-            secondaryModel = model;
-            /*
-            Icp icp = new Icp();
-            icp.setParameters(10, false, 0.05);
-            MeshFacet facet = icp.getTransformedFacet(primaryModel.getFacets().get(0), model.getFacets().get(0));
-            MeshModel newModel = new MeshModel();
-            newModel.addFacet(facet);
-            secondaryModel = newModel;
-            */
-        }
-    }
-    
-    @Override
-    public void display(GLAutoDrawable glad) {
-        wireModel = glCanvas.getDrawWired(); // is wire-frame or not
-        if (whiteBackround) {
-            gl.glClearColor(0.9f,0.9f,0.9f,0); 
-        } else {
-            gl.glClearColor(0.25f,0.25f,0.25f,0);
-        }
-        // background for GLCanvas       
-        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
-        gl.glLoadIdentity();
-
-        // sets model to proper position
-        glu.gluLookAt(xCameraPosition, yCameraPosition, zCameraPosition, xCenter, yCenter, zCenter, xUpPosition, yUpPosition, zUpPosition);
-
-        gl.glShadeModel(GL2.GL_SMOOTH);
-        gl.glGetIntegerv(GL_VIEWPORT, viewport, 0);
-        gl.glGetFloatv(GL_MODELVIEW_MATRIX, modelViewMatrix, 0);
-        gl.glGetFloatv(GL_PROJECTION_MATRIX, projectionMatrix, 0);
-        
-        //if there is any model, draw 
-        if (primaryModel != null) {
-            if (wireModel) {
-                gl.glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); //drawn as wire-frame
-                drawWithoutTextures(primaryModel);
-                if (secondaryModel != null)
-                    drawWithoutTextures(secondaryModel);
-            } else {
-                gl.glPolygonMode( GL_FRONT_AND_BACK, GL_FILL); // drawn as full traingles
-                drawWithoutTextures(primaryModel);
-                if (secondaryModel != null)
-                    drawWithoutTextures(secondaryModel);
-            }
-        } 
-            
-        //gl.glPopMatrix();
-        gl.glFlush();
-    }
-    
-    /**
-     * Loops through the facets and render each of them 
-     * 
-     * @param model model of the face
-     */
-    @Override
-    public void drawWithoutTextures(MeshModel model) {
-        for (int i = 0; i < model.getFacets().size(); i++) {
-            renderFacet(model.getFacets().get(i));
-        }
-        other = !other;
-    }
-    
-    /**
-     * Loops through the facet and render all the vertices as they are stored in corner table
-     * 
-     * @param facet facet of model
-     */
-    @Override
-    public void renderFacet(MeshFacet facet) {
-        gl.glBegin(GL2.GL_TRIANGLES); //vertices are rendered as triangles
-        // get the normal and tex coords indicies for face i  
-        for (int v = 0; v < facet.getCornerTable().getSize(); v++) { 
-            // render the normals
-            Vector3d norm; 
-            norm = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getNormal();
-            if(norm != null) {
-                gl.glNormal3d(norm.x, norm.y, norm.z);
-            }
-            // render the vertices
-            Point3d vert; 
-            vert = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getPosition();
-            //Color c = Color.GREEN;
-            if (other && secondaryModel != null)
-                gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, secondaryColor.getComponents(null), 0);
-            else
-                gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, primaryColor.getComponents(null), 0);
-            gl.glVertex3d(vert.x, vert.y, vert.z);
-        }
-        gl.glEnd();
-    }
-    
-    public Color getPrimaryColor() {
-        return primaryColor;
-    }
-
-    public void setPrimaryColor(Color primaryColor) {
-        this.primaryColor = primaryColor;
-    }
-
-    public Color getSecondaryColor() {
-        return secondaryColor;
-    }
-
-    public void setSecondaryColor(Color secondaryColor) {
-        this.secondaryColor = secondaryColor;
-    }
-    
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryEstimator.java b/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryEstimator.java
deleted file mode 100644
index cadbb914dc697d00c95538de658354d33b4093b8..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryEstimator.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package cz.fidentis.analyst.gui;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import org.openide.awt.ActionID;
-import org.openide.awt.ActionReference;
-import org.openide.awt.ActionReferences;
-import org.openide.awt.ActionRegistration;
-import org.openide.util.NbBundle.Messages;
-
-/**
- *
- * @author Natalia Bebjakova 
- * 
- * Symmetry estimator.
- */
-
-@ActionID(
-        category = "File",
-        id = "cz.fidentis.analyst.gui.SymmetryEstimator"
-)
-@ActionRegistration(
-        iconBase = "symmetry16x16.png",
-        displayName = "#CTL_SymmetryEstimator"
-)
-@ActionReferences({
-    @ActionReference(path = "Menu/Edit", position = 2600, separatorBefore = 2550),
-    @ActionReference(path = "Toolbars/File", position = 300)
-})
-@Messages("CTL_SymmetryEstimator=Symmetry Estimator")
-public final class SymmetryEstimator implements ActionListener {
-
-    /**
-     * Flag for whether the symmetry plane should be displayed
-     */
-    boolean symmetryPlaneClicked = false;
-
-    @Override
-    public void actionPerformed(ActionEvent e) {
-        if (symmetryPlaneClicked) {
-            symmetryPlaneClicked = false;
-            Canvas.setDrawSymmetryPlane(symmetryPlaneClicked);
-        } else {
-            symmetryPlaneClicked = true;
-            Canvas.setDrawSymmetryPlane(symmetryPlaneClicked);
-        }
-    }
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryPanel.form b/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryPanel.form
deleted file mode 100644
index 6080c1c14b9ea359619d3141209a7efa4adaae1a..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryPanel.form
+++ /dev/null
@@ -1,499 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
-  <AuxValues>
-    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
-    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
-    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
-    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
-  </AuxValues>
-
-  <Layout>
-    <DimensionLayout dim="0">
-      <Group type="103" groupAlignment="0" attributes="0">
-          <Component id="symetrySpecificationPanel" alignment="0" max="32767" attributes="0"/>
-      </Group>
-    </DimensionLayout>
-    <DimensionLayout dim="1">
-      <Group type="103" groupAlignment="0" attributes="0">
-          <Component id="symetrySpecificationPanel" alignment="0" max="32767" attributes="0"/>
-      </Group>
-    </DimensionLayout>
-  </Layout>
-  <SubComponents>
-    <Container class="javax.swing.JPanel" name="symetrySpecificationPanel">
-      <Properties>
-        <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-          <Color blue="e2" green="e6" red="b0" type="rgb"/>
-        </Property>
-      </Properties>
-
-      <Layout>
-        <DimensionLayout dim="0">
-          <Group type="103" groupAlignment="0" attributes="0">
-              <Group type="102" attributes="0">
-                  <Group type="103" groupAlignment="1" attributes="0">
-                      <Group type="102" attributes="0">
-                          <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-                          <Component id="defaultValues" min="-2" max="-2" attributes="0"/>
-                      </Group>
-                      <Group type="102" attributes="0">
-                          <EmptySpace min="-2" pref="17" max="-2" attributes="0"/>
-                          <Group type="103" groupAlignment="0" attributes="0">
-                              <Group type="102" attributes="0">
-                                  <EmptySpace min="-2" pref="154" max="-2" attributes="0"/>
-                                  <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
-                              </Group>
-                              <Group type="102" attributes="0">
-                                  <Component id="showPlaneLabel" min="-2" pref="147" max="-2" attributes="0"/>
-                                  <EmptySpace max="32767" attributes="0"/>
-                                  <Component id="originalModelButton" min="-2" pref="181" max="-2" attributes="0"/>
-                              </Group>
-                          </Group>
-                      </Group>
-                      <Group type="102" attributes="0">
-                          <EmptySpace max="-2" attributes="0"/>
-                          <Group type="103" groupAlignment="0" attributes="0">
-                              <Group type="102" attributes="0">
-                                  <EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
-                                  <Component id="minCurvatio8" min="-2" max="-2" attributes="0"/>
-                                  <EmptySpace type="unrelated" max="-2" attributes="0"/>
-                                  <Component id="averagingCheckBox" min="-2" max="-2" attributes="0"/>
-                                  <EmptySpace max="32767" attributes="0"/>
-                                  <Component id="symetryButton" min="-2" max="-2" attributes="0"/>
-                              </Group>
-                              <Group type="102" attributes="0">
-                                  <Group type="103" groupAlignment="0" attributes="0">
-                                      <Component id="infoMinAngleCos" min="-2" max="-2" attributes="0"/>
-                                      <Component id="infoRelDist" alignment="0" min="-2" max="-2" attributes="0"/>
-                                      <Component id="infoNormalAngle" alignment="0" min="-2" max="-2" attributes="0"/>
-                                      <Component id="infoPoints" alignment="0" min="-2" max="-2" attributes="0"/>
-                                      <Component id="infoMinCurv" alignment="0" min="-2" max="-2" attributes="0"/>
-                                  </Group>
-                                  <EmptySpace max="-2" attributes="0"/>
-                                  <Group type="103" groupAlignment="0" attributes="0">
-                                      <Component id="minCurvatio4" pref="0" max="32767" attributes="0"/>
-                                      <Group type="102" alignment="0" attributes="0">
-                                          <Group type="103" groupAlignment="0" attributes="0">
-                                              <Component id="minCurvatio" min="-2" max="-2" attributes="0"/>
-                                              <Component id="minCurvatio3" min="-2" max="-2" attributes="0"/>
-                                              <Component id="minCurvatio2" alignment="0" min="-2" max="-2" attributes="0"/>
-                                              <Component id="significantPointLabel" alignment="0" min="-2" max="-2" attributes="0"/>
-                                          </Group>
-                                          <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-                                      </Group>
-                                  </Group>
-                                  <EmptySpace max="-2" attributes="0"/>
-                                  <Group type="103" groupAlignment="1" attributes="0">
-                                      <Group type="103" groupAlignment="0" max="-2" attributes="0">
-                                          <Component id="curavatureSlider" alignment="1" pref="0" max="32767" attributes="0"/>
-                                          <Component id="relativeDistanceSlider" alignment="1" pref="0" max="32767" attributes="0"/>
-                                          <Component id="significantPointSlider" alignment="1" min="-2" pref="164" max="-2" attributes="0"/>
-                                          <Component id="angleCosineSlider" alignment="1" min="-2" pref="164" max="-2" attributes="0"/>
-                                      </Group>
-                                      <Component id="normalAngleSlider" min="-2" pref="164" max="-2" attributes="0"/>
-                                  </Group>
-                                  <EmptySpace type="separate" max="-2" attributes="0"/>
-                                  <Group type="103" groupAlignment="0" max="-2" attributes="0">
-                                      <Component id="distanceTextField" max="32767" attributes="0"/>
-                                      <Component id="normalTextField" alignment="0" max="32767" attributes="0"/>
-                                      <Component id="significantTextField" min="-2" pref="46" max="-2" attributes="0"/>
-                                      <Component id="textFieldCurvature" min="-2" pref="46" max="-2" attributes="0"/>
-                                      <Component id="textFieldMinCos" min="-2" pref="46" max="-2" attributes="0"/>
-                                  </Group>
-                              </Group>
-                          </Group>
-                      </Group>
-                  </Group>
-                  <EmptySpace max="32767" attributes="0"/>
-              </Group>
-          </Group>
-        </DimensionLayout>
-        <DimensionLayout dim="1">
-          <Group type="103" groupAlignment="0" attributes="0">
-              <Group type="102" attributes="0">
-                  <EmptySpace max="32767" attributes="0"/>
-                  <Group type="103" groupAlignment="1" attributes="0">
-                      <Group type="103" alignment="1" groupAlignment="0" attributes="0">
-                          <Component id="infoPoints" min="-2" max="-2" attributes="0"/>
-                          <Component id="significantPointLabel" min="-2" pref="27" max="-2" attributes="0"/>
-                      </Group>
-                      <Group type="103" alignment="1" groupAlignment="0" attributes="0">
-                          <Component id="significantTextField" min="-2" max="-2" attributes="0"/>
-                          <Component id="significantPointSlider" min="-2" pref="28" max="-2" attributes="0"/>
-                      </Group>
-                  </Group>
-                  <EmptySpace type="unrelated" max="-2" attributes="0"/>
-                  <Group type="103" groupAlignment="1" attributes="0">
-                      <Component id="minCurvatio" min="-2" pref="26" max="-2" attributes="0"/>
-                      <Group type="102" alignment="1" attributes="0">
-                          <Component id="textFieldCurvature" min="-2" max="-2" attributes="0"/>
-                          <EmptySpace min="-2" pref="4" max="-2" attributes="0"/>
-                      </Group>
-                      <Component id="infoMinCurv" min="-2" max="-2" attributes="0"/>
-                      <Component id="curavatureSlider" min="-2" pref="26" max="-2" attributes="0"/>
-                  </Group>
-                  <EmptySpace type="unrelated" max="-2" attributes="0"/>
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <Component id="infoMinAngleCos" alignment="1" min="-2" max="-2" attributes="0"/>
-                      <Component id="minCurvatio2" alignment="1" min="-2" pref="26" max="-2" attributes="0"/>
-                      <Component id="textFieldMinCos" alignment="0" min="-2" max="-2" attributes="0"/>
-                      <Component id="angleCosineSlider" min="-2" max="-2" attributes="0"/>
-                  </Group>
-                  <EmptySpace type="unrelated" max="-2" attributes="0"/>
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <Group type="102" alignment="0" attributes="0">
-                          <Group type="103" groupAlignment="0" max="-2" attributes="0">
-                              <Component id="normalAngleSlider" max="32767" attributes="0"/>
-                              <Component id="normalTextField" max="32767" attributes="0"/>
-                          </Group>
-                          <EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
-                          <Component id="distanceTextField" min="-2" max="-2" attributes="0"/>
-                      </Group>
-                      <Group type="102" alignment="0" attributes="0">
-                          <Group type="103" groupAlignment="0" attributes="0">
-                              <Component id="minCurvatio4" min="-2" pref="27" max="-2" attributes="0"/>
-                              <Component id="infoNormalAngle" min="-2" max="-2" attributes="0"/>
-                          </Group>
-                          <EmptySpace max="32767" attributes="0"/>
-                          <Group type="103" groupAlignment="0" attributes="0">
-                              <Component id="infoRelDist" alignment="1" min="-2" max="-2" attributes="0"/>
-                              <Group type="103" alignment="1" groupAlignment="0" attributes="0">
-                                  <Component id="relativeDistanceSlider" min="-2" pref="22" max="-2" attributes="0"/>
-                                  <Component id="minCurvatio3" min="-2" pref="26" max="-2" attributes="0"/>
-                              </Group>
-                          </Group>
-                          <EmptySpace min="-2" pref="13" max="-2" attributes="0"/>
-                      </Group>
-                  </Group>
-                  <Component id="defaultValues" min="-2" max="-2" attributes="0"/>
-                  <EmptySpace min="-2" pref="17" max="-2" attributes="0"/>
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <Group type="102" attributes="0">
-                          <Component id="symetryButton" min="-2" pref="75" max="-2" attributes="0"/>
-                          <EmptySpace max="32767" attributes="0"/>
-                          <Component id="originalModelButton" min="-2" max="-2" attributes="0"/>
-                          <EmptySpace max="32767" attributes="0"/>
-                      </Group>
-                      <Group type="102" alignment="0" attributes="0">
-                          <Group type="103" groupAlignment="1" attributes="0">
-                              <Component id="averagingCheckBox" min="-2" max="-2" attributes="0"/>
-                              <Component id="minCurvatio8" min="-2" pref="28" max="-2" attributes="0"/>
-                          </Group>
-                          <EmptySpace pref="53" max="32767" attributes="0"/>
-                          <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
-                          <EmptySpace min="-2" pref="45" max="-2" attributes="0"/>
-                          <Component id="showPlaneLabel" min="-2" max="-2" attributes="0"/>
-                          <EmptySpace pref="27" max="32767" attributes="0"/>
-                      </Group>
-                  </Group>
-              </Group>
-          </Group>
-        </DimensionLayout>
-      </Layout>
-      <SubComponents>
-        <Component class="javax.swing.JSlider" name="curavatureSlider">
-          <Properties>
-            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="fa" green="fa" red="fa" type="rgb"/>
-            </Property>
-            <Property name="majorTickSpacing" type="int" value="1"/>
-            <Property name="minimum" type="int" value="50"/>
-            <Property name="snapToTicks" type="boolean" value="true"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JSlider" name="angleCosineSlider">
-          <Properties>
-            <Property name="minimum" type="int" value="80"/>
-            <Property name="snapToTicks" type="boolean" value="true"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JLabel" name="minCurvatio">
-          <Properties>
-            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-              <Font name="Arial" size="14" style="1"/>
-            </Property>
-            <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="text" type="java.lang.String" value="Min. Curvature Ratio"/>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JLabel" name="minCurvatio2">
-          <Properties>
-            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-              <Font name="Arial" size="14" style="1"/>
-            </Property>
-            <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="text" type="java.lang.String" value="Min. Angle Cosine"/>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JSlider" name="normalAngleSlider">
-          <Properties>
-            <Property name="minimum" type="int" value="80"/>
-            <Property name="snapToTicks" type="boolean" value="true"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JLabel" name="minCurvatio3">
-          <Properties>
-            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-              <Font name="Arial" size="14" style="1"/>
-            </Property>
-            <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="text" type="java.lang.String" value="Relative Distance"/>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JSlider" name="significantPointSlider">
-          <Properties>
-            <Property name="majorTickSpacing" type="int" value="100"/>
-            <Property name="maximum" type="int" value="300"/>
-            <Property name="snapToTicks" type="boolean" value="true"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JLabel" name="minCurvatio4">
-          <Properties>
-            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-              <Font name="Arial" size="14" style="1"/>
-            </Property>
-            <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="text" type="java.lang.String" value="Normal Angle Cosine"/>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JSlider" name="relativeDistanceSlider">
-          <Properties>
-            <Property name="maximum" type="int" value="5"/>
-            <Property name="snapToTicks" type="boolean" value="true"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JLabel" name="significantPointLabel">
-          <Properties>
-            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-              <Font name="Arial" size="14" style="1"/>
-            </Property>
-            <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="text" type="java.lang.String" value="Significant Points"/>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JLabel" name="symetryButton">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/symetryCount.png"/>
-            </Property>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="symetryButtonMouseMoved"/>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="symetryButtonMouseClicked"/>
-            <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="symetryButtonMouseExited"/>
-          </Events>
-        </Component>
-        <Component class="javax.swing.JCheckBox" name="averagingCheckBox">
-          <Properties>
-            <Property name="selected" type="boolean" value="true"/>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="averagingCheckBoxMouseClicked"/>
-          </Events>
-        </Component>
-        <Component class="javax.swing.JTextField" name="textFieldCurvature">
-          <Properties>
-            <Property name="text" type="java.lang.String" value="0.5"/>
-            <Property name="toolTipText" type="java.lang.String" value=""/>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JTextField" name="textFieldMinCos">
-          <Properties>
-            <Property name="text" type="java.lang.String" value="0.985"/>
-            <Property name="toolTipText" type="java.lang.String" value=""/>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JTextField" name="normalTextField">
-          <Properties>
-            <Property name="text" type="java.lang.String" value="0.985"/>
-            <Property name="toolTipText" type="java.lang.String" value=""/>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JTextField" name="distanceTextField">
-          <Properties>
-            <Property name="text" type="java.lang.String" value="0.01"/>
-            <Property name="toolTipText" type="java.lang.String" value=""/>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JTextField" name="significantTextField">
-          <Properties>
-            <Property name="text" type="java.lang.String" value="200"/>
-            <Property name="toolTipText" type="java.lang.String" value=""/>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JLabel" name="minCurvatio8">
-          <Properties>
-            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-              <Font name="Arial" size="14" style="1"/>
-            </Property>
-            <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="text" type="java.lang.String" value="Averaging"/>
-            <Property name="toolTipText" type="java.lang.String" value="Average planes with highest number of votes"/>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JLabel" name="jLabel1">
-        </Component>
-        <Component class="javax.swing.JLabel" name="originalModelButton">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/originalModel.png"/>
-            </Property>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="originalModelButtonMouseMoved"/>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="originalModelButtonMouseClicked"/>
-            <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="originalModelButtonMouseExited"/>
-          </Events>
-        </Component>
-        <Component class="javax.swing.JLabel" name="showPlaneLabel">
-          <Properties>
-            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-              <Font name="Arial" size="16" style="1"/>
-            </Property>
-            <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/show2.png"/>
-            </Property>
-            <Property name="text" type="java.lang.String" value="Show plane"/>
-            <Property name="toolTipText" type="java.lang.String" value="Show approximate plane of symmetry"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-            <Property name="doubleBuffered" type="boolean" value="true"/>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="showPlaneLabelMouseClicked"/>
-          </Events>
-        </Component>
-        <Component class="javax.swing.JLabel" name="defaultValues">
-          <Properties>
-            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-              <Font name="Arial" size="14" style="0"/>
-            </Property>
-            <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="text" type="java.lang.String" value="Default values"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="defaultValuesMouseClicked"/>
-          </Events>
-        </Component>
-        <Component class="javax.swing.JLabel" name="infoPoints">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/info.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Info "/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="infoPointsMouseClicked"/>
-          </Events>
-        </Component>
-        <Component class="javax.swing.JLabel" name="infoMinAngleCos">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/info.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Info "/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="infoMinAngleCosMouseClicked"/>
-          </Events>
-        </Component>
-        <Component class="javax.swing.JLabel" name="infoRelDist">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/info.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Info "/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="infoRelDistMouseClicked"/>
-          </Events>
-        </Component>
-        <Component class="javax.swing.JLabel" name="infoNormalAngle">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/info.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Info "/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="infoNormalAngleMouseClicked"/>
-          </Events>
-        </Component>
-        <Component class="javax.swing.JLabel" name="infoMinCurv">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/info.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Info "/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="infoMinCurvMouseClicked"/>
-          </Events>
-        </Component>
-      </SubComponents>
-    </Container>
-  </SubComponents>
-</Form>
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryPanel.java b/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryPanel.java
deleted file mode 100644
index d5de605ee9e3991d0afc688037cffe8e1bb1a621..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/SymmetryPanel.java
+++ /dev/null
@@ -1,727 +0,0 @@
-package cz.fidentis.analyst.gui;
-
-import static cz.fidentis.analyst.gui.UserInterface.frameMain;
-import cz.fidentis.analyst.mesh.core.MeshFacet;
-import cz.fidentis.analyst.mesh.core.MeshModel;
-import cz.fidentis.analyst.symmetry.SymmetryConfig;
-import cz.fidentis.analyst.symmetry.Plane;
-import cz.fidentis.analyst.symmetry.SignificantPoints;
-import cz.fidentis.analyst.symmetry.SymmetryEstimator;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.swing.ImageIcon;
-import javax.swing.JOptionPane;
-import javax.swing.JSlider;
-import javax.swing.JTextField;
-import javax.swing.event.ChangeEvent;
-
-/**
- * Panel for estimating approximate symmetry of the model
- *
- * @author Natalia Bebjakova
- */
-public final class SymmetryPanel extends javax.swing.JPanel {
-    
-    /**
-     * Configuration with optional parameters of the algorithm 
-     */
-    private SymmetryConfig config;
-    
-    /**
-     * GL Canvas on which model is displayed
-     */
-    private Canvas canvas;
-    
-    /**
-     * Computed approximate plane of the symmetry
-     */
-    private Plane symmetryPlane;
-
-    /**
-     * 
-     * @return GL canvas for displaying the model
-     */
-    public Canvas getCanvas() {
-        return canvas;
-    }
-
-    /**
-     * Sets canvas for displaying the model
-     * 
-     * @param canvas GL Canvas
-     */
-    public void setCanvas(Canvas canvas) {
-        this.canvas = canvas;
-    }
-
-    /**
-     * 
-     * @return Configuration for computing symmetry
-     */
-    public SymmetryConfig getConfig() {
-        return config;
-    }
-
-    /**
-     * 
-     * @param config Configuration for computing symmetry
-     */
-    public void setConfig(SymmetryConfig config) {
-        this.config = config;
-    }
-    
-        
-    /**
-     * Sets configuration values according to text fields on panel
-     * User can change this text fields
-     */
-    public void setConfigParams() {
-        config.setMaxRelDistance(Double.parseDouble(distanceTextField.getText()));
-        config.setMinAngleCos(Double.parseDouble(textFieldMinCos.getText()));
-        config.setMinCurvRatio(Double.parseDouble(textFieldCurvature.getText()));
-        config.setMinNormAngleCos(Double.parseDouble(normalTextField.getText()));
-        config.setSignificantPointCount(Integer.parseInt(significantTextField.getText()));
-    }
-    
-    /**
-     * Sets values in text field according to configuration
-     */
-    public void setTextFieldsDueToConfig() {
-        distanceTextField.setText(Double.toString(config.getMaxRelDistance()));
-        textFieldMinCos.setText(Double.toString(config.getMinAngleCos()));
-        textFieldCurvature.setText(Double.toString(config.getMinCurvRatio()));
-        normalTextField.setText(Double.toString(config.getMinNormAngleCos()));
-        significantTextField.setText(Integer.toString(config.getSignificantPointCount()));    
-    }
-    
-    /**
-     * 
-     * @param slider Slider 
-     * @param field text field which belongs to slider
-     */
-    public void setSlider(JSlider slider, JTextField field) {
-        slider.setValue((int) (Double.parseDouble(field.getText()) * 100));
-        
-        slider.addChangeListener((ChangeEvent ce) -> {
-            field.setText(""+slider.getValue()/100.0);
-            defaultValues.setVisible(true);
-        });
-        
-    }
-    
-    /**
-     * Sets values of the sliders according to textFields 
-     */
-    public void setSliders() {
-        setSlider(relativeDistanceSlider, distanceTextField);
-        setSlider(curavatureSlider, textFieldCurvature);
-        setSlider(angleCosineSlider, textFieldMinCos);
-        setSlider(normalAngleSlider, normalTextField);
-                
-        significantPointSlider.setValue((int) (Double.parseDouble(significantTextField.getText())));
-        significantPointSlider.addChangeListener((ChangeEvent ce) -> {
-            significantTextField.setText("" + significantPointSlider.getValue());
-        });
-    }
-    
-    /**
-     * If plane of symmtery is computed, three new buttons are shown on panel
-     * 
-     * @param isComputed true if plane is computed and shown on model otherwise false
-     */
-    public void showPlaneButtonsOnPanel(boolean isComputed) {
-        originalModelButton.setVisible(isComputed);
-        showPlaneLabel.setVisible(isComputed);
-    }
-    
-    /**
-     * Creates new form symmetryPanel
-     */
-    public SymmetryPanel() {
-        initComponents();
-        config = new SymmetryConfig();
-        setSliders();
-        
-        showPlaneButtonsOnPanel(false);
-    }
-
-    /**
-     * Calculate approxy symmetry of the model 
-     * Accuracy of the symmetry plane is influenced by configuration represented by config
-     * 
-     * @throws InterruptedException exception can be thrown beacause of progress monitor
-     */
-    private void computeSymmetryPlane() throws InterruptedException {
-        MeshModel model = new MeshModel();
-        canvas.changeModel(canvas.getLoadedFace().getMeshModel());
-        SymmetryEstimator est = new SymmetryEstimator(config, SignificantPoints.CurvatureAlg.GAUSSIAN); // MISTO TRUE MUSI BYT VYBER STRATEGIE VYPOCTU ZAKRIVENI!!!
-        canvas.getLoadedFace().getMeshModel().getFacets().get(0).accept(est);
-        symmetryPlane = est.getSymmetryPlane();
-        MeshFacet facet = est.getSymmetryPlaneMesh();
-        if (facet != null) {
-            model.addFacet(facet);
-            this.canvas.changeModel(model);
-        }
-    }
-
-
-    /**
-     * This method is called from within the constructor to initialize the form.
-     * WARNING: Do NOT modify this code. The content of this method is always
-     * regenerated by the Form Editor.
-     * 
-     * Code generated by NetBeans
-     */
-    @SuppressWarnings("unchecked")
-    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
-    private void initComponents() {
-
-        symetrySpecificationPanel = new javax.swing.JPanel();
-        curavatureSlider = new javax.swing.JSlider();
-        angleCosineSlider = new javax.swing.JSlider();
-        minCurvatio = new javax.swing.JLabel();
-        minCurvatio2 = new javax.swing.JLabel();
-        normalAngleSlider = new javax.swing.JSlider();
-        minCurvatio3 = new javax.swing.JLabel();
-        significantPointSlider = new javax.swing.JSlider();
-        minCurvatio4 = new javax.swing.JLabel();
-        relativeDistanceSlider = new javax.swing.JSlider();
-        significantPointLabel = new javax.swing.JLabel();
-        symetryButton = new javax.swing.JLabel();
-        averagingCheckBox = new javax.swing.JCheckBox();
-        textFieldCurvature = new javax.swing.JTextField();
-        textFieldMinCos = new javax.swing.JTextField();
-        normalTextField = new javax.swing.JTextField();
-        distanceTextField = new javax.swing.JTextField();
-        significantTextField = new javax.swing.JTextField();
-        minCurvatio8 = new javax.swing.JLabel();
-        jLabel1 = new javax.swing.JLabel();
-        originalModelButton = new javax.swing.JLabel();
-        showPlaneLabel = new javax.swing.JLabel();
-        defaultValues = new javax.swing.JLabel();
-        infoPoints = new javax.swing.JLabel();
-        infoMinAngleCos = new javax.swing.JLabel();
-        infoRelDist = new javax.swing.JLabel();
-        infoNormalAngle = new javax.swing.JLabel();
-        infoMinCurv = new javax.swing.JLabel();
-
-        symetrySpecificationPanel.setBackground(new java.awt.Color(176, 230, 226));
-
-        curavatureSlider.setBackground(new java.awt.Color(250, 250, 250));
-        curavatureSlider.setMajorTickSpacing(1);
-        curavatureSlider.setMinimum(50);
-        curavatureSlider.setSnapToTicks(true);
-        curavatureSlider.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        curavatureSlider.setOpaque(false);
-
-        angleCosineSlider.setMinimum(80);
-        angleCosineSlider.setSnapToTicks(true);
-        angleCosineSlider.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        angleCosineSlider.setOpaque(false);
-
-        minCurvatio.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N
-        minCurvatio.setForeground(new java.awt.Color(20, 114, 105));
-        minCurvatio.setText("Min. Curvature Ratio");
-
-        minCurvatio2.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N
-        minCurvatio2.setForeground(new java.awt.Color(20, 114, 105));
-        minCurvatio2.setText("Min. Angle Cosine");
-
-        normalAngleSlider.setMinimum(80);
-        normalAngleSlider.setSnapToTicks(true);
-        normalAngleSlider.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        normalAngleSlider.setOpaque(false);
-
-        minCurvatio3.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N
-        minCurvatio3.setForeground(new java.awt.Color(20, 114, 105));
-        minCurvatio3.setText("Relative Distance");
-
-        significantPointSlider.setMajorTickSpacing(100);
-        significantPointSlider.setMaximum(300);
-        significantPointSlider.setSnapToTicks(true);
-        significantPointSlider.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        significantPointSlider.setOpaque(false);
-
-        minCurvatio4.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N
-        minCurvatio4.setForeground(new java.awt.Color(20, 114, 105));
-        minCurvatio4.setText("Normal Angle Cosine");
-
-        relativeDistanceSlider.setMaximum(5);
-        relativeDistanceSlider.setSnapToTicks(true);
-        relativeDistanceSlider.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        relativeDistanceSlider.setOpaque(false);
-
-        significantPointLabel.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N
-        significantPointLabel.setForeground(new java.awt.Color(20, 114, 105));
-        significantPointLabel.setText("Significant Points");
-
-        symetryButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryCount.png"))); // NOI18N
-        symetryButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        symetryButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
-            public void mouseMoved(java.awt.event.MouseEvent evt) {
-                symetryButtonMouseMoved(evt);
-            }
-        });
-        symetryButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                symetryButtonMouseClicked(evt);
-            }
-            public void mouseExited(java.awt.event.MouseEvent evt) {
-                symetryButtonMouseExited(evt);
-            }
-        });
-
-        averagingCheckBox.setSelected(true);
-        averagingCheckBox.setOpaque(false);
-        averagingCheckBox.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                averagingCheckBoxMouseClicked(evt);
-            }
-        });
-
-        textFieldCurvature.setText("0.5");
-        textFieldCurvature.setToolTipText("");
-
-        textFieldMinCos.setText("0.985");
-        textFieldMinCos.setToolTipText("");
-
-        normalTextField.setText("0.985");
-        normalTextField.setToolTipText("");
-
-        distanceTextField.setText("0.01");
-        distanceTextField.setToolTipText("");
-
-        significantTextField.setText("200");
-        significantTextField.setToolTipText("");
-
-        minCurvatio8.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N
-        minCurvatio8.setForeground(new java.awt.Color(20, 114, 105));
-        minCurvatio8.setText("Averaging");
-        minCurvatio8.setToolTipText("Average planes with highest number of votes");
-
-        originalModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/originalModel.png"))); // NOI18N
-        originalModelButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        originalModelButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
-            public void mouseMoved(java.awt.event.MouseEvent evt) {
-                originalModelButtonMouseMoved(evt);
-            }
-        });
-        originalModelButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                originalModelButtonMouseClicked(evt);
-            }
-            public void mouseExited(java.awt.event.MouseEvent evt) {
-                originalModelButtonMouseExited(evt);
-            }
-        });
-
-        showPlaneLabel.setFont(new java.awt.Font("Arial", 1, 16)); // NOI18N
-        showPlaneLabel.setForeground(new java.awt.Color(20, 114, 105));
-        showPlaneLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/show2.png"))); // NOI18N
-        showPlaneLabel.setText("Show plane");
-        showPlaneLabel.setToolTipText("Show approximate plane of symmetry");
-        showPlaneLabel.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        showPlaneLabel.setDoubleBuffered(true);
-        showPlaneLabel.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                showPlaneLabelMouseClicked(evt);
-            }
-        });
-
-        defaultValues.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N
-        defaultValues.setForeground(new java.awt.Color(20, 114, 105));
-        defaultValues.setText("Default values");
-        defaultValues.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        defaultValues.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                defaultValuesMouseClicked(evt);
-            }
-        });
-
-        infoPoints.setIcon(new javax.swing.ImageIcon(getClass().getResource("/info.png"))); // NOI18N
-        infoPoints.setToolTipText("Info ");
-        infoPoints.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        infoPoints.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                infoPointsMouseClicked(evt);
-            }
-        });
-
-        infoMinAngleCos.setIcon(new javax.swing.ImageIcon(getClass().getResource("/info.png"))); // NOI18N
-        infoMinAngleCos.setToolTipText("Info ");
-        infoMinAngleCos.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        infoMinAngleCos.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                infoMinAngleCosMouseClicked(evt);
-            }
-        });
-
-        infoRelDist.setIcon(new javax.swing.ImageIcon(getClass().getResource("/info.png"))); // NOI18N
-        infoRelDist.setToolTipText("Info ");
-        infoRelDist.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        infoRelDist.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                infoRelDistMouseClicked(evt);
-            }
-        });
-
-        infoNormalAngle.setIcon(new javax.swing.ImageIcon(getClass().getResource("/info.png"))); // NOI18N
-        infoNormalAngle.setToolTipText("Info ");
-        infoNormalAngle.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        infoNormalAngle.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                infoNormalAngleMouseClicked(evt);
-            }
-        });
-
-        infoMinCurv.setIcon(new javax.swing.ImageIcon(getClass().getResource("/info.png"))); // NOI18N
-        infoMinCurv.setToolTipText("Info ");
-        infoMinCurv.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        infoMinCurv.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                infoMinCurvMouseClicked(evt);
-            }
-        });
-
-        javax.swing.GroupLayout symetrySpecificationPanelLayout = new javax.swing.GroupLayout(symetrySpecificationPanel);
-        symetrySpecificationPanel.setLayout(symetrySpecificationPanelLayout);
-        symetrySpecificationPanelLayout.setHorizontalGroup(
-            symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                    .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                        .addGap(0, 0, Short.MAX_VALUE)
-                        .addComponent(defaultValues))
-                    .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                        .addGap(17, 17, 17)
-                        .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                                .addGap(154, 154, 154)
-                                .addComponent(jLabel1))
-                            .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                                .addComponent(showPlaneLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 147, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                                .addComponent(originalModelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 181, javax.swing.GroupLayout.PREFERRED_SIZE))))
-                    .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                        .addContainerGap()
-                        .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                                .addGap(10, 10, 10)
-                                .addComponent(minCurvatio8)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                                .addComponent(averagingCheckBox)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                                .addComponent(symetryButton))
-                            .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                                .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                    .addComponent(infoMinAngleCos)
-                                    .addComponent(infoRelDist)
-                                    .addComponent(infoNormalAngle)
-                                    .addComponent(infoPoints)
-                                    .addComponent(infoMinCurv))
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                    .addComponent(minCurvatio4, javax.swing.GroupLayout.DEFAULT_SIZE, 157, Short.MAX_VALUE)
-                                    .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                                        .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                            .addComponent(minCurvatio)
-                                            .addComponent(minCurvatio3)
-                                            .addComponent(minCurvatio2)
-                                            .addComponent(significantPointLabel))
-                                        .addGap(0, 0, Short.MAX_VALUE)))
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                                    .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                                        .addComponent(curavatureSlider, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
-                                        .addComponent(relativeDistanceSlider, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
-                                        .addComponent(significantPointSlider, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                        .addComponent(angleCosineSlider, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE))
-                                    .addComponent(normalAngleSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE))
-                                .addGap(18, 18, 18)
-                                .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                                    .addComponent(distanceTextField)
-                                    .addComponent(normalTextField)
-                                    .addComponent(significantTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                    .addComponent(textFieldCurvature, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                    .addComponent(textFieldMinCos, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE))))))
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-        symetrySpecificationPanelLayout.setVerticalGroup(
-            symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                    .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                        .addComponent(infoPoints)
-                        .addComponent(significantPointLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE))
-                    .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                        .addComponent(significantTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addComponent(significantPointSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                    .addComponent(minCurvatio, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                        .addComponent(textFieldCurvature, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addGap(4, 4, 4))
-                    .addComponent(infoMinCurv)
-                    .addComponent(curavatureSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(infoMinAngleCos, javax.swing.GroupLayout.Alignment.TRAILING)
-                    .addComponent(minCurvatio2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(textFieldMinCos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(angleCosineSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                        .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                            .addComponent(normalAngleSlider, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                            .addComponent(normalTextField))
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                        .addComponent(distanceTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                    .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                        .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addComponent(minCurvatio4, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(infoNormalAngle))
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                        .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addComponent(infoRelDist, javax.swing.GroupLayout.Alignment.TRAILING)
-                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                .addComponent(relativeDistanceSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addComponent(minCurvatio3, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)))
-                        .addGap(13, 13, 13)))
-                .addComponent(defaultValues)
-                .addGap(17, 17, 17)
-                .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                        .addComponent(symetryButton, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                        .addComponent(originalModelButton)
-                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-                    .addGroup(symetrySpecificationPanelLayout.createSequentialGroup()
-                        .addGroup(symetrySpecificationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                            .addComponent(averagingCheckBox)
-                            .addComponent(minCurvatio8, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 53, Short.MAX_VALUE)
-                        .addComponent(jLabel1)
-                        .addGap(45, 45, 45)
-                        .addComponent(showPlaneLabel)
-                        .addContainerGap(27, Short.MAX_VALUE))))
-        );
-
-        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
-        this.setLayout(layout);
-        layout.setHorizontalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(symetrySpecificationPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-        );
-        layout.setVerticalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(symetrySpecificationPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-        );
-    }// </editor-fold>//GEN-END:initComponents
-
-    /**
-     * 
-     * @param evt Final computed plane is shown to user
-     */
-    private void showPlaneLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_showPlaneLabelMouseClicked
-        JOptionPane.showMessageDialog(frameMain, "Approximate plane of symmetry:  \n" + symmetryPlane.getNormal().x + "\n" + symmetryPlane.getNormal().y + "\n" + symmetryPlane.getNormal().z + "\n" +
-            symmetryPlane.getDistance() + "\n", "Final plane.", 0, new ImageIcon(getClass().getResource("/showPlanePane.png")));
-    }//GEN-LAST:event_showPlaneLabelMouseClicked
-
-    /**
-     * 
-     * @param evt Changes button
-     */
-    private void originalModelButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_originalModelButtonMouseExited
-        originalModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/originalModel.png")));
-    }//GEN-LAST:event_originalModelButtonMouseExited
-
-    /**
-     * 
-     * @param evt Original model (without plane) is displayed
-     */
-    private void originalModelButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_originalModelButtonMouseClicked
-        canvas.changeModel(canvas.getLoadedFace().getMeshModel());
-        showPlaneButtonsOnPanel(false);
-    }//GEN-LAST:event_originalModelButtonMouseClicked
-
-    /**
-     * 
-     * @param evt Changes button
-     */
-    private void originalModelButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_originalModelButtonMouseMoved
-        originalModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/originalModelPressed.png")));
-    }//GEN-LAST:event_originalModelButtonMouseMoved
-
-    /**
-     * 
-     * @param evt Decides if averaging is ON or OFF
-     */
-    private void averagingCheckBoxMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_averagingCheckBoxMouseClicked
-        if(config.isAveraging()) {
-            config.setAveraging(false);
-        } else {
-            config.setAveraging(true);
-        }
-    }//GEN-LAST:event_averagingCheckBoxMouseClicked
-
-    /**
-     * 
-     * @param evt Changes button
-     */
-    private void symetryButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_symetryButtonMouseExited
-        symetryButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryCount.png")));
-    }//GEN-LAST:event_symetryButtonMouseExited
-
-    /**
-     * 
-     * @param evt Symmetry is estimated. If model is not loaded, user is warned 
-     */
-    private void symetryButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_symetryButtonMouseClicked
-        setConfigParams();
-        if (canvas.getModel().getFacets().isEmpty()){
-            JOptionPane.showMessageDialog(frameMain, "You have to load the model.", "Model not loaded",
-                0, new ImageIcon(getClass().getResource("/notLoadedModel.png")));
-        } else {
-            try {
-                computeSymmetryPlane();
-            } catch (InterruptedException ex) {
-                Logger.getLogger(SymmetryPanel.class.getName()).log(Level.SEVERE, null, ex);
-            }
-            showPlaneButtonsOnPanel(true);
-        }
-    }//GEN-LAST:event_symetryButtonMouseClicked
-
-    /**
-    * 
-    * @param evt Changes button
-    */
-    private void symetryButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_symetryButtonMouseMoved
-        symetryButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryCountClicked.png")));
-    }//GEN-LAST:event_symetryButtonMouseMoved
-
-    /**
-     * 
-     * @param evt configuration is set to deafult values
-     */
-    private void defaultValuesMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_defaultValuesMouseClicked
-        config = new SymmetryConfig();
-        setTextFieldsDueToConfig();
-        setSliders();
-    }//GEN-LAST:event_defaultValuesMouseClicked
-
-    /**
-     * Shows details about minimum curv ratio parameter
-     * 
-     * @param evt 
-     */
-    private void infoMinCurvMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_infoMinCurvMouseClicked
-        JOptionPane.showMessageDialog(frameMain,
-                "Entered number represents how similar the curvature in two vertices must be\n"
-                        + "to take into account these vertices while counting the plane of approximate symmetry.\n"
-                        + "The higher the number is the more similar they must be.\n\n"
-                        
-                        + "Higher number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result.\n"
-                        + "Lower number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result.",
-                "Minimum curvature ratio",
-                0, new ImageIcon(getClass().getResource("/curvature.png")));
-    }//GEN-LAST:event_infoMinCurvMouseClicked
-
-    /**
-     * Shows details about maximum relative distance parameter
-     * 
-     * @param evt 
-    */
-    private void infoRelDistMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_infoRelDistMouseClicked
-        JOptionPane.showMessageDialog(frameMain,
-                "Entered number represents how far middle point of two vertices can be from candidate plane of symmetry\n"
-                        + "to give this plane vote. Plane with highest number of votes is plane of approximate symmetry.\n\n"
-                        
-                        + "Higher number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result.\n"
-                        + "Lower number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result.",
-                "Maximum relative distance from plane",
-                0, new ImageIcon(getClass().getResource("/distance.png")));
-    }//GEN-LAST:event_infoRelDistMouseClicked
-
-    /**
-     * Shows details about significant points parameter
-     * 
-     * @param evt 
-     */
-    private void infoPointsMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_infoPointsMouseClicked
-        JOptionPane.showMessageDialog(frameMain, 
-                "Entered number represents amount of points of the mesh that are taken into account\n"
-                        + "while counting the plane of approximate symmetry.\n\n"
-                        
-                        + "Higher number → longer calculation, possibly more accurate result.\n"
-                        + "Lower number → shorter calculation, possibly less accurate result.", 
-                "Significant points",
-                0, new ImageIcon(getClass().getResource("/points.png")));
-    }//GEN-LAST:event_infoPointsMouseClicked
-
-    /**
-     * Shows details about minimum angle cosine parameter
-     * 
-     * @param evt 
-     */
-    private void infoMinAngleCosMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_infoMinAngleCosMouseClicked
-        JOptionPane.showMessageDialog(frameMain,
-                "Entered number represents how large the angle between normal vector of candidate plane and the vector\n"
-                        + "of two vertices can be to take into account these vertices while counting the approximate symmetry.\n\n"
-                        
-                        + "Higher number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result.\n"
-                        + "Lower number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result.",
-                "Minimum angle",
-                0, new ImageIcon(getClass().getResource("/angle.png")));
-    }//GEN-LAST:event_infoMinAngleCosMouseClicked
-
-    /**
-     * Shows details about minimum normal angle cosine parameter
-     * 
-     * @param evt 
-     */
-    private void infoNormalAngleMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_infoNormalAngleMouseClicked
-        JOptionPane.showMessageDialog(frameMain,
-                "Entered number represents how large the angle between normal vector of candidate plane and vector\n"
-                        + "from subtraction of normal vectors of two vertices can be to take into account these vertices while counting the approximate symmetry.\n\n"
-                        
-                        + "Higher number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result.\n"
-                        + "Lower number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result.",
-                "Minimum normal angle",
-                0, new ImageIcon(getClass().getResource("/angle.png")));
-    }//GEN-LAST:event_infoNormalAngleMouseClicked
-
-
-    // Variables declaration - do not modify//GEN-BEGIN:variables
-    private javax.swing.JSlider angleCosineSlider;
-    private javax.swing.JCheckBox averagingCheckBox;
-    private javax.swing.JSlider curavatureSlider;
-    private javax.swing.JLabel defaultValues;
-    private javax.swing.JTextField distanceTextField;
-    private javax.swing.JLabel infoMinAngleCos;
-    private javax.swing.JLabel infoMinCurv;
-    private javax.swing.JLabel infoNormalAngle;
-    private javax.swing.JLabel infoPoints;
-    private javax.swing.JLabel infoRelDist;
-    private javax.swing.JLabel jLabel1;
-    private javax.swing.JLabel minCurvatio;
-    private javax.swing.JLabel minCurvatio2;
-    private javax.swing.JLabel minCurvatio3;
-    private javax.swing.JLabel minCurvatio4;
-    private javax.swing.JLabel minCurvatio8;
-    private javax.swing.JSlider normalAngleSlider;
-    private javax.swing.JTextField normalTextField;
-    private javax.swing.JLabel originalModelButton;
-    private javax.swing.JSlider relativeDistanceSlider;
-    private javax.swing.JLabel showPlaneLabel;
-    private javax.swing.JLabel significantPointLabel;
-    private javax.swing.JSlider significantPointSlider;
-    private javax.swing.JTextField significantTextField;
-    private javax.swing.JLabel symetryButton;
-    private javax.swing.JPanel symetrySpecificationPanel;
-    private javax.swing.JTextField textFieldCurvature;
-    private javax.swing.JTextField textFieldMinCos;
-    // End of variables declaration//GEN-END:variables
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/UserInterface.form b/GUI/src/main/java/cz/fidentis/analyst/gui/UserInterface.form
deleted file mode 100644
index 32e21d509eecc227098c5c444f58235a3bf4cc9a..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/UserInterface.form
+++ /dev/null
@@ -1,956 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
-  <Properties>
-    <Property name="defaultCloseOperation" type="int" value="3"/>
-    <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-      <Color blue="a3" green="ae" red="0" type="rgb"/>
-    </Property>
-    <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-      <Color id="Default Cursor"/>
-    </Property>
-    <Property name="locationByPlatform" type="boolean" value="true"/>
-  </Properties>
-  <SyntheticProperties>
-    <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
-    <SyntheticProperty name="generateCenter" type="boolean" value="true"/>
-  </SyntheticProperties>
-  <AuxValues>
-    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
-    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
-    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
-    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
-  </AuxValues>
-
-  <Layout>
-    <DimensionLayout dim="0">
-      <Group type="103" groupAlignment="0" attributes="0">
-          <Component id="topPanel" max="32767" attributes="0"/>
-          <Component id="jPanel1" alignment="1" max="32767" attributes="0"/>
-          <Group type="103" rootIndex="1" groupAlignment="0" attributes="0">
-              <Component id="jPanel2" alignment="0" max="32767" attributes="0"/>
-          </Group>
-      </Group>
-    </DimensionLayout>
-    <DimensionLayout dim="1">
-      <Group type="103" groupAlignment="0" attributes="0">
-          <Group type="102" alignment="0" attributes="0">
-              <Component id="jPanel1" min="-2" pref="52" max="-2" attributes="0"/>
-              <EmptySpace type="unrelated" max="-2" attributes="0"/>
-              <Component id="topPanel" min="-2" pref="239" max="-2" attributes="0"/>
-              <EmptySpace min="0" pref="565" max="32767" attributes="0"/>
-          </Group>
-          <Group type="103" rootIndex="1" groupAlignment="0" attributes="0">
-              <Component id="jPanel2" alignment="1" max="32767" attributes="0"/>
-          </Group>
-      </Group>
-    </DimensionLayout>
-  </Layout>
-  <SubComponents>
-    <Container class="javax.swing.JPanel" name="jPanel1">
-      <Properties>
-        <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-          <Color blue="69" green="72" red="14" type="rgb"/>
-        </Property>
-        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-          <Dimension value="[1200, 77]"/>
-        </Property>
-      </Properties>
-      <Events>
-        <EventHandler event="mouseDragged" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="jPanel1MouseDragged"/>
-        <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="jPanel1MousePressed"/>
-      </Events>
-
-      <Layout>
-        <DimensionLayout dim="0">
-          <Group type="103" groupAlignment="0" attributes="0">
-              <Group type="102" alignment="0" attributes="0">
-                  <EmptySpace max="-2" attributes="0"/>
-                  <Component id="homeButton" min="-2" max="-2" attributes="0"/>
-                  <EmptySpace max="-2" attributes="0"/>
-                  <Component id="newProject" min="-2" pref="149" max="-2" attributes="0"/>
-                  <EmptySpace max="-2" attributes="0"/>
-                  <Component id="wiredModelButton" min="-2" pref="134" max="-2" attributes="0"/>
-                  <EmptySpace max="32767" attributes="0"/>
-              </Group>
-          </Group>
-        </DimensionLayout>
-        <DimensionLayout dim="1">
-          <Group type="103" groupAlignment="0" attributes="0">
-              <Component id="wiredModelButton" alignment="0" max="32767" attributes="0"/>
-              <Component id="newProject" max="32767" attributes="0"/>
-              <Component id="homeButton" alignment="0" pref="52" max="32767" attributes="0"/>
-          </Group>
-        </DimensionLayout>
-      </Layout>
-      <SubComponents>
-        <Component class="javax.swing.JLabel" name="newProject">
-          <Properties>
-            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-              <Font name="Neue Haas Unica Pro" size="18" style="0"/>
-            </Property>
-            <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="ff" green="ff" red="ff" type="rgb"/>
-            </Property>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/newP.png"/>
-            </Property>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-            <Property name="opaque" type="boolean" value="true"/>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="newProjectMouseMoved"/>
-            <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="newProjectMouseExited"/>
-            <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="newProjectMousePressed"/>
-          </Events>
-        </Component>
-        <Component class="javax.swing.JLabel" name="wiredModelButton">
-          <Properties>
-            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/wireframe2.png"/>
-            </Property>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-            <Property name="opaque" type="boolean" value="true"/>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="wiredModelButtonMouseClicked"/>
-          </Events>
-        </Component>
-        <Component class="javax.swing.JLabel" name="homeButton">
-          <Properties>
-            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/home.png"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value="Home"/>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-            <Property name="opaque" type="boolean" value="true"/>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="homeButtonMouseMoved"/>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="homeButtonMouseClicked"/>
-            <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="homeButtonMouseExited"/>
-          </Events>
-        </Component>
-      </SubComponents>
-    </Container>
-    <Container class="javax.swing.JPanel" name="topPanel">
-      <Properties>
-        <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-          <Color blue="69" green="72" red="14" type="rgb"/>
-        </Property>
-        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-          <Dimension value="[1200, 266]"/>
-        </Property>
-      </Properties>
-      <AccessibilityProperties>
-        <Property name="AccessibleContext.accessibleName" type="java.lang.String" value=""/>
-      </AccessibilityProperties>
-
-      <Layout>
-        <DimensionLayout dim="0">
-          <Group type="103" groupAlignment="0" attributes="0">
-              <Group type="102" alignment="0" attributes="0">
-                  <EmptySpace pref="99" max="32767" attributes="0"/>
-                  <Component id="compareTwo" min="-2" max="-2" attributes="0"/>
-                  <EmptySpace min="-2" pref="105" max="-2" attributes="0"/>
-                  <Component id="compareDB" min="-2" max="-2" attributes="0"/>
-                  <EmptySpace min="-2" pref="94" max="-2" attributes="0"/>
-                  <Component id="batchProcessing" min="-2" max="-2" attributes="0"/>
-                  <EmptySpace min="-2" pref="94" max="-2" attributes="0"/>
-                  <Component id="symetryEstimator" min="-2" max="-2" attributes="0"/>
-                  <EmptySpace pref="98" max="32767" attributes="0"/>
-              </Group>
-          </Group>
-        </DimensionLayout>
-        <DimensionLayout dim="1">
-          <Group type="103" groupAlignment="0" attributes="0">
-              <Group type="102" attributes="0">
-                  <EmptySpace min="-2" pref="52" max="-2" attributes="0"/>
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <Component id="symetryEstimator" alignment="1" max="32767" attributes="0"/>
-                      <Component id="compareDB" alignment="1" max="32767" attributes="0"/>
-                      <Group type="102" alignment="1" attributes="0">
-                          <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-                          <Component id="compareTwo" min="-2" max="-2" attributes="0"/>
-                      </Group>
-                      <Component id="batchProcessing" alignment="1" max="32767" attributes="0"/>
-                  </Group>
-              </Group>
-          </Group>
-        </DimensionLayout>
-      </Layout>
-      <SubComponents>
-        <Container class="javax.swing.JPanel" name="compareTwo">
-          <Properties>
-            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-
-          <Layout>
-            <DimensionLayout dim="0">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" alignment="0" attributes="0">
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="jLabel1" max="32767" attributes="0"/>
-                      <EmptySpace max="-2" attributes="0"/>
-                  </Group>
-              </Group>
-            </DimensionLayout>
-            <DimensionLayout dim="1">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" attributes="0">
-                      <EmptySpace min="-2" pref="30" max="-2" attributes="0"/>
-                      <Component id="jLabel1" max="32767" attributes="0"/>
-                      <EmptySpace min="-2" pref="28" max="-2" attributes="0"/>
-                  </Group>
-              </Group>
-            </DimensionLayout>
-          </Layout>
-          <SubComponents>
-            <Component class="javax.swing.JLabel" name="jLabel1">
-              <Properties>
-                <Property name="horizontalAlignment" type="int" value="0"/>
-                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                  <Image iconType="3" name="/compareTwoStart.png"/>
-                </Property>
-                <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-                  <Color id="Default Cursor"/>
-                </Property>
-              </Properties>
-            </Component>
-          </SubComponents>
-        </Container>
-        <Container class="javax.swing.JPanel" name="compareDB">
-          <Properties>
-            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-
-          <Layout>
-            <DimensionLayout dim="0">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Component id="jLabel3" alignment="1" max="32767" attributes="0"/>
-              </Group>
-            </DimensionLayout>
-            <DimensionLayout dim="1">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Component id="jLabel3" alignment="1" max="32767" attributes="0"/>
-              </Group>
-            </DimensionLayout>
-          </Layout>
-          <SubComponents>
-            <Component class="javax.swing.JLabel" name="jLabel3">
-              <Properties>
-                <Property name="horizontalAlignment" type="int" value="0"/>
-                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                  <Image iconType="3" name="/batchProcessingStart.png"/>
-                </Property>
-                <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-                  <Color id="Default Cursor"/>
-                </Property>
-              </Properties>
-            </Component>
-          </SubComponents>
-        </Container>
-        <Container class="javax.swing.JPanel" name="batchProcessing">
-          <Properties>
-            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-
-          <Layout>
-            <DimensionLayout dim="0">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" attributes="0">
-                      <EmptySpace min="-2" pref="26" max="-2" attributes="0"/>
-                      <Component id="jLabel2" max="32767" attributes="0"/>
-                  </Group>
-              </Group>
-            </DimensionLayout>
-            <DimensionLayout dim="1">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" alignment="1" attributes="0">
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="jLabel2" max="32767" attributes="0"/>
-                  </Group>
-              </Group>
-            </DimensionLayout>
-          </Layout>
-          <SubComponents>
-            <Component class="javax.swing.JLabel" name="jLabel2">
-              <Properties>
-                <Property name="horizontalAlignment" type="int" value="0"/>
-                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                  <Image iconType="3" name="/copareWithDatabaseStart.png"/>
-                </Property>
-                <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-                  <Color id="Default Cursor"/>
-                </Property>
-              </Properties>
-            </Component>
-          </SubComponents>
-        </Container>
-        <Container class="javax.swing.JPanel" name="symetryEstimator">
-          <Properties>
-            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="69" green="72" red="14" type="rgb"/>
-            </Property>
-            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-              <Color id="Hand Cursor"/>
-            </Property>
-          </Properties>
-          <Events>
-            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="symetryEstimatorMouseClicked"/>
-          </Events>
-
-          <Layout>
-            <DimensionLayout dim="0">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" alignment="1" attributes="0">
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="jLabel4" max="32767" attributes="0"/>
-                      <EmptySpace max="-2" attributes="0"/>
-                  </Group>
-              </Group>
-            </DimensionLayout>
-            <DimensionLayout dim="1">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" alignment="1" attributes="0">
-                      <EmptySpace max="32767" attributes="0"/>
-                      <Component id="jLabel4" min="-2" pref="137" max="-2" attributes="0"/>
-                      <EmptySpace min="-2" pref="36" max="-2" attributes="0"/>
-                  </Group>
-              </Group>
-            </DimensionLayout>
-          </Layout>
-          <SubComponents>
-            <Component class="javax.swing.JLabel" name="jLabel4">
-              <Properties>
-                <Property name="horizontalAlignment" type="int" value="0"/>
-                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                  <Image iconType="3" name="/symetryStartP.png"/>
-                </Property>
-                <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-                  <Color id="Hand Cursor"/>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="jLabel4MouseMoved1"/>
-                <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="jLabel4MouseClicked"/>
-                <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="jLabel4MouseExited"/>
-              </Events>
-            </Component>
-          </SubComponents>
-        </Container>
-      </SubComponents>
-    </Container>
-    <Container class="javax.swing.JPanel" name="jPanel2">
-      <Properties>
-        <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-          <Color blue="a3" green="ae" red="0" type="rgb"/>
-        </Property>
-        <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-          <Font name="Arial" size="13" style="1"/>
-        </Property>
-        <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
-          <Connection component="Form" name="preferredSize" type="property"/>
-        </Property>
-      </Properties>
-
-      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignCardLayout"/>
-      <SubComponents>
-        <Container class="javax.swing.JPanel" name="startingPanel">
-          <Properties>
-            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="a3" green="ae" red="0" type="rgb"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value=""/>
-            <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-              <Dimension value="[0, 0]"/>
-            </Property>
-            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-              <Dimension value="[1200, 800]"/>
-            </Property>
-            <Property name="requestFocusEnabled" type="boolean" value="false"/>
-          </Properties>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignCardLayout" value="org.netbeans.modules.form.compat2.layouts.DesignCardLayout$CardConstraintsDescription">
-              <CardConstraints cardName="card3"/>
-            </Constraint>
-          </Constraints>
-
-          <Layout>
-            <DimensionLayout dim="0">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" attributes="0">
-                      <EmptySpace pref="81" max="32767" attributes="0"/>
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Component id="jPanel3" min="-2" max="-2" attributes="0"/>
-                          <Group type="102" alignment="1" attributes="0">
-                              <Component id="logo" min="-2" pref="218" max="-2" attributes="0"/>
-                              <EmptySpace min="-2" pref="400" max="-2" attributes="0"/>
-                          </Group>
-                      </Group>
-                      <EmptySpace pref="81" max="32767" attributes="0"/>
-                  </Group>
-              </Group>
-            </DimensionLayout>
-            <DimensionLayout dim="1">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" attributes="0">
-                      <EmptySpace pref="133" max="32767" attributes="0"/>
-                      <Component id="logo" min="-2" pref="124" max="-2" attributes="0"/>
-                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
-                      <Component id="jPanel3" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace pref="136" max="32767" attributes="0"/>
-                  </Group>
-              </Group>
-            </DimensionLayout>
-          </Layout>
-          <SubComponents>
-            <Component class="javax.swing.JLabel" name="logo">
-              <Properties>
-                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                  <Image iconType="3" name="/logo3.png"/>
-                </Property>
-              </Properties>
-              <AuxValues>
-                <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/>
-                <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/>
-              </AuxValues>
-            </Component>
-            <Container class="javax.swing.JPanel" name="jPanel3">
-              <Properties>
-                <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-                  <Color blue="a3" green="ae" red="0" type="rgb"/>
-                </Property>
-                <Property name="toolTipText" type="java.lang.String" value=""/>
-              </Properties>
-
-              <Layout>
-                <DimensionLayout dim="0">
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <Group type="102" alignment="0" attributes="0">
-                          <EmptySpace pref="17" max="32767" attributes="0"/>
-                          <Component id="viewerButton" min="-2" pref="323" max="-2" attributes="0"/>
-                          <EmptySpace type="separate" max="-2" attributes="0"/>
-                          <Group type="103" groupAlignment="0" attributes="0">
-                              <Component id="compareTwoMain" alignment="1" min="-2" max="-2" attributes="0"/>
-                              <Component id="compareTwoMain1" alignment="1" min="-2" max="-2" attributes="0"/>
-                          </Group>
-                          <EmptySpace min="-2" max="-2" attributes="0"/>
-                          <Group type="103" groupAlignment="0" attributes="0">
-                              <Group type="102" attributes="0">
-                                  <Component id="JLabel8" max="32767" attributes="0"/>
-                                  <EmptySpace min="-2" pref="62" max="-2" attributes="0"/>
-                              </Group>
-                              <Group type="102" attributes="0">
-                                  <Component id="JLabel9" min="-2" pref="196" max="-2" attributes="0"/>
-                                  <EmptySpace max="32767" attributes="0"/>
-                              </Group>
-                          </Group>
-                          <Group type="103" groupAlignment="0" attributes="0">
-                              <Component id="batchMain" min="-2" max="-2" attributes="0"/>
-                              <Group type="102" attributes="0">
-                                  <EmptySpace min="12" pref="12" max="-2" attributes="0"/>
-                                  <Component id="symetryMain" min="-2" max="-2" attributes="0"/>
-                              </Group>
-                          </Group>
-                          <EmptySpace pref="42" max="32767" attributes="0"/>
-                      </Group>
-                  </Group>
-                </DimensionLayout>
-                <DimensionLayout dim="1">
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <Group type="102" attributes="0">
-                          <Group type="103" groupAlignment="0" attributes="0">
-                              <Group type="102" alignment="1" attributes="0">
-                                  <EmptySpace max="-2" attributes="0"/>
-                                  <Group type="103" groupAlignment="1" attributes="0">
-                                      <Group type="103" alignment="1" groupAlignment="0" attributes="0">
-                                          <Component id="JLabel8" min="-2" pref="142" max="-2" attributes="0"/>
-                                          <Component id="compareTwoMain" min="-2" max="-2" attributes="0"/>
-                                      </Group>
-                                      <Group type="102" alignment="1" attributes="0">
-                                          <Component id="batchMain" min="-2" pref="173" max="-2" attributes="0"/>
-                                          <EmptySpace min="-2" pref="28" max="-2" attributes="0"/>
-                                      </Group>
-                                  </Group>
-                                  <Group type="103" groupAlignment="0" attributes="0">
-                                      <Component id="compareTwoMain1" alignment="1" min="-2" max="-2" attributes="0"/>
-                                      <Component id="symetryMain" alignment="1" min="-2" max="-2" attributes="0"/>
-                                  </Group>
-                              </Group>
-                              <Group type="102" alignment="0" attributes="0">
-                                  <EmptySpace min="-2" pref="296" max="-2" attributes="0"/>
-                                  <Component id="JLabel9" max="32767" attributes="0"/>
-                                  <EmptySpace min="-2" pref="8" max="-2" attributes="0"/>
-                              </Group>
-                          </Group>
-                          <EmptySpace max="-2" attributes="0"/>
-                      </Group>
-                      <Group type="102" alignment="1" attributes="0">
-                          <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-                          <Component id="viewerButton" min="-2" max="-2" attributes="0"/>
-                          <EmptySpace min="-2" pref="41" max="-2" attributes="0"/>
-                      </Group>
-                  </Group>
-                </DimensionLayout>
-              </Layout>
-              <SubComponents>
-                <Container class="javax.swing.JPanel" name="compareTwoMain">
-                  <Properties>
-                    <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-                      <Color blue="a3" green="ae" red="0" type="rgb"/>
-                    </Property>
-                  </Properties>
-
-                  <Layout>
-                    <DimensionLayout dim="0">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <EmptySpace min="0" pref="177" max="32767" attributes="0"/>
-                      </Group>
-                    </DimensionLayout>
-                    <DimensionLayout dim="1">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <EmptySpace min="0" pref="170" max="32767" attributes="0"/>
-                      </Group>
-                    </DimensionLayout>
-                  </Layout>
-                </Container>
-                <Container class="javax.swing.JPanel" name="compareTwoMain1">
-                  <Properties>
-                    <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-                      <Color blue="a3" green="ae" red="0" type="rgb"/>
-                    </Property>
-                  </Properties>
-
-                  <Layout>
-                    <DimensionLayout dim="0">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <EmptySpace min="0" pref="220" max="32767" attributes="0"/>
-                      </Group>
-                    </DimensionLayout>
-                    <DimensionLayout dim="1">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <EmptySpace min="0" pref="169" max="32767" attributes="0"/>
-                      </Group>
-                    </DimensionLayout>
-                  </Layout>
-                </Container>
-                <Container class="javax.swing.JPanel" name="batchMain">
-                  <Properties>
-                    <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-                      <Color blue="a3" green="ae" red="0" type="rgb"/>
-                    </Property>
-                  </Properties>
-
-                  <Layout>
-                    <DimensionLayout dim="0">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" alignment="0" attributes="0">
-                              <EmptySpace max="-2" attributes="0"/>
-                              <Component id="JLabel10" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace max="32767" attributes="0"/>
-                          </Group>
-                      </Group>
-                    </DimensionLayout>
-                    <DimensionLayout dim="1">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" alignment="0" attributes="0">
-                              <EmptySpace min="-2" pref="25" max="-2" attributes="0"/>
-                              <Component id="JLabel10" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace max="32767" attributes="0"/>
-                          </Group>
-                      </Group>
-                    </DimensionLayout>
-                  </Layout>
-                  <SubComponents>
-                    <Component class="javax.swing.JLabel" name="JLabel10">
-                      <Properties>
-                        <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                          <Image iconType="3" name="/batchProcessingStart.png"/>
-                        </Property>
-                      </Properties>
-                    </Component>
-                  </SubComponents>
-                </Container>
-                <Container class="javax.swing.JPanel" name="symetryMain">
-                  <Properties>
-                    <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-                      <Color blue="a3" green="ae" red="0" type="rgb"/>
-                    </Property>
-                  </Properties>
-
-                  <Layout>
-                    <DimensionLayout dim="0">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Component id="JLabel11" alignment="1" pref="189" max="32767" attributes="0"/>
-                      </Group>
-                    </DimensionLayout>
-                    <DimensionLayout dim="1">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" alignment="1" attributes="0">
-                              <EmptySpace min="-2" max="-2" attributes="0"/>
-                              <Component id="JLabel11" pref="167" max="32767" attributes="0"/>
-                          </Group>
-                      </Group>
-                    </DimensionLayout>
-                  </Layout>
-                  <SubComponents>
-                    <Component class="javax.swing.JLabel" name="JLabel11">
-                      <Properties>
-                        <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-                          <Color blue="a3" green="ae" red="0" type="rgb"/>
-                        </Property>
-                        <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                          <Image iconType="3" name="/symetryStart.png"/>
-                        </Property>
-                        <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-                          <Color id="Hand Cursor"/>
-                        </Property>
-                      </Properties>
-                      <Events>
-                        <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="JLabel11MouseMoved"/>
-                        <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="JLabel11MouseClicked"/>
-                        <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="JLabel11MouseExited"/>
-                      </Events>
-                    </Component>
-                  </SubComponents>
-                </Container>
-                <Component class="javax.swing.JLabel" name="viewerButton">
-                  <Properties>
-                    <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                      <Image iconType="3" name="/modelView.png"/>
-                    </Property>
-                    <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-                      <Color id="Hand Cursor"/>
-                    </Property>
-                  </Properties>
-                  <Events>
-                    <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="viewerButtonMouseMoved"/>
-                    <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="viewerButtonMouseClicked"/>
-                    <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="viewerButtonMouseExited"/>
-                  </Events>
-                </Component>
-                <Component class="javax.swing.JLabel" name="JLabel8">
-                  <Properties>
-                    <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                      <Image iconType="3" name="/compareTwoStart.png"/>
-                    </Property>
-                  </Properties>
-                </Component>
-                <Component class="javax.swing.JLabel" name="JLabel9">
-                  <Properties>
-                    <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-                      <Color blue="a3" green="ae" red="0" type="rgb"/>
-                    </Property>
-                    <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                      <Image iconType="3" name="/copareWithDatabaseStart.png"/>
-                    </Property>
-                  </Properties>
-                </Component>
-              </SubComponents>
-            </Container>
-          </SubComponents>
-        </Container>
-        <Container class="javax.swing.JPanel" name="symetryPanel">
-          <Properties>
-            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="a3" green="ae" red="0" type="rgb"/>
-            </Property>
-            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-              <Dimension value="[1200, 800]"/>
-            </Property>
-          </Properties>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignCardLayout" value="org.netbeans.modules.form.compat2.layouts.DesignCardLayout$CardConstraintsDescription">
-              <CardConstraints cardName="card3"/>
-            </Constraint>
-          </Constraints>
-
-          <Layout>
-            <DimensionLayout dim="0">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" alignment="0" attributes="0">
-                      <EmptySpace pref="78" max="32767" attributes="0"/>
-                      <Component id="viewerPanel" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace min="-2" pref="72" max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Component id="exportModelButton" alignment="0" min="-2" max="-2" attributes="0"/>
-                          <Component id="reloadModelButton" min="-2" max="-2" attributes="0"/>
-                          <Component id="symmetryPanel1" alignment="0" min="-2" pref="461" max="-2" attributes="0"/>
-                      </Group>
-                      <EmptySpace max="32767" attributes="0"/>
-                  </Group>
-                  <Component id="filler1" alignment="1" max="32767" attributes="0"/>
-                  <Component id="filler2" alignment="0" max="32767" attributes="0"/>
-              </Group>
-            </DimensionLayout>
-            <DimensionLayout dim="1">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" alignment="0" attributes="0">
-                      <Component id="filler2" min="-2" pref="58" max="-2" attributes="0"/>
-                      <EmptySpace pref="46" max="32767" attributes="0"/>
-                      <Group type="103" groupAlignment="0" max="-2" attributes="0">
-                          <Group type="102" attributes="0">
-                              <Component id="symmetryPanel1" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace max="32767" attributes="0"/>
-                              <Component id="exportModelButton" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace type="separate" max="-2" attributes="0"/>
-                              <Component id="reloadModelButton" min="-2" max="-2" attributes="0"/>
-                          </Group>
-                          <Component id="viewerPanel" min="-2" max="-2" attributes="0"/>
-                      </Group>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="filler1" min="-2" pref="51" max="-2" attributes="0"/>
-                      <EmptySpace min="-2" pref="93" max="-2" attributes="0"/>
-                  </Group>
-              </Group>
-            </DimensionLayout>
-          </Layout>
-          <SubComponents>
-            <Container class="javax.swing.JPanel" name="viewerPanel">
-
-              <Layout>
-                <DimensionLayout dim="0">
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <Group type="102" alignment="0" attributes="0">
-                          <EmptySpace max="-2" attributes="0"/>
-                          <Component id="canvasSymmetryPanel" pref="553" max="32767" attributes="0"/>
-                          <EmptySpace max="-2" attributes="0"/>
-                      </Group>
-                  </Group>
-                </DimensionLayout>
-                <DimensionLayout dim="1">
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <Group type="102" alignment="0" attributes="0">
-                          <EmptySpace max="-2" attributes="0"/>
-                          <Component id="canvasSymmetryPanel" pref="588" max="32767" attributes="0"/>
-                          <EmptySpace max="-2" attributes="0"/>
-                      </Group>
-                  </Group>
-                </DimensionLayout>
-              </Layout>
-              <SubComponents>
-                <Component class="cz.fidentis.analyst.gui.Canvas" name="canvasSymmetryPanel">
-                </Component>
-              </SubComponents>
-            </Container>
-            <Component class="javax.swing.JLabel" name="reloadModelButton">
-              <Properties>
-                <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-                  <Color blue="a3" green="ae" red="0" type="rgb"/>
-                </Property>
-                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                  <Image iconType="3" name="/loadModel.png"/>
-                </Property>
-                <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-                  <Color id="Hand Cursor"/>
-                </Property>
-                <Property name="opaque" type="boolean" value="true"/>
-              </Properties>
-              <Events>
-                <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="reloadModelButtonMouseMoved"/>
-                <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="reloadModelButtonMouseClicked"/>
-                <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="reloadModelButtonMouseExited"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JLabel" name="exportModelButton">
-              <Properties>
-                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                  <Image iconType="3" name="/exportModel.png"/>
-                </Property>
-                <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-                  <Color id="Hand Cursor"/>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="exportModelButtonMouseMoved"/>
-                <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="exportModelButtonMouseClicked"/>
-                <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="exportModelButtonMouseExited"/>
-              </Events>
-            </Component>
-            <Component class="cz.fidentis.analyst.gui.SymmetryPanel" name="symmetryPanel1">
-              <Properties>
-                <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-                  <Color blue="e2" green="e6" red="b0" type="rgb"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.Box$Filler" name="filler1">
-              <Properties>
-                <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-                  <Dimension value="[0, 32767]"/>
-                </Property>
-              </Properties>
-              <AuxValues>
-                <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/>
-              </AuxValues>
-            </Component>
-            <Component class="javax.swing.Box$Filler" name="filler2">
-              <Properties>
-                <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-                  <Dimension value="[0, 32767]"/>
-                </Property>
-              </Properties>
-              <AuxValues>
-                <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/>
-              </AuxValues>
-            </Component>
-          </SubComponents>
-        </Container>
-        <Container class="javax.swing.JPanel" name="modelViewPanel">
-          <Properties>
-            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-              <Color blue="a3" green="ae" red="0" type="rgb"/>
-            </Property>
-            <Property name="toolTipText" type="java.lang.String" value=""/>
-            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-              <Dimension value="[1200, 800]"/>
-            </Property>
-          </Properties>
-          <AccessibilityProperties>
-            <Property name="AccessibleContext.accessibleName" type="java.lang.String" value=""/>
-          </AccessibilityProperties>
-          <Constraints>
-            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignCardLayout" value="org.netbeans.modules.form.compat2.layouts.DesignCardLayout$CardConstraintsDescription">
-              <CardConstraints cardName="card4"/>
-            </Constraint>
-          </Constraints>
-
-          <Layout>
-            <DimensionLayout dim="0">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Component id="filler3" alignment="1" max="32767" attributes="0"/>
-                  <Group type="102" alignment="1" attributes="0">
-                      <EmptySpace pref="87" max="32767" attributes="0"/>
-                      <Component id="jPanel4" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace type="separate" max="-2" attributes="0"/>
-                      <Component id="reloadModelButton1" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace pref="95" max="32767" attributes="0"/>
-                  </Group>
-                  <Component id="filler4" alignment="0" max="32767" attributes="0"/>
-              </Group>
-            </DimensionLayout>
-            <DimensionLayout dim="1">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" attributes="0">
-                      <Component id="filler3" min="-2" pref="73" max="-2" attributes="0"/>
-                      <EmptySpace pref="87" max="32767" attributes="0"/>
-                      <Group type="103" groupAlignment="1" attributes="0">
-                          <Component id="jPanel4" min="-2" pref="579" max="-2" attributes="0"/>
-                          <Component id="reloadModelButton1" min="-2" max="-2" attributes="0"/>
-                      </Group>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="filler4" min="-2" pref="31" max="-2" attributes="0"/>
-                      <EmptySpace pref="92" max="32767" attributes="0"/>
-                  </Group>
-              </Group>
-            </DimensionLayout>
-          </Layout>
-          <SubComponents>
-            <Component class="javax.swing.JLabel" name="reloadModelButton1">
-              <Properties>
-                <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
-                  <Color blue="a3" green="ae" red="0" type="rgb"/>
-                </Property>
-                <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                  <Image iconType="3" name="/loadModel.png"/>
-                </Property>
-                <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-                  <Color id="Hand Cursor"/>
-                </Property>
-                <Property name="opaque" type="boolean" value="true"/>
-              </Properties>
-              <Events>
-                <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="reloadModelButton1MouseMoved"/>
-                <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="reloadModelButton1MouseClicked"/>
-                <EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="reloadModelButton1MouseExited"/>
-              </Events>
-            </Component>
-            <Container class="javax.swing.JPanel" name="jPanel4">
-
-              <Layout>
-                <DimensionLayout dim="0">
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <Group type="102" alignment="0" attributes="0">
-                          <EmptySpace max="-2" attributes="0"/>
-                          <Component id="canvasModelView" min="-2" pref="795" max="-2" attributes="0"/>
-                          <EmptySpace max="32767" attributes="0"/>
-                      </Group>
-                  </Group>
-                </DimensionLayout>
-                <DimensionLayout dim="1">
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <Group type="102" alignment="1" attributes="0">
-                          <EmptySpace max="32767" attributes="0"/>
-                          <Component id="canvasModelView" min="-2" pref="553" max="-2" attributes="0"/>
-                          <EmptySpace min="-2" pref="98" max="-2" attributes="0"/>
-                      </Group>
-                  </Group>
-                </DimensionLayout>
-              </Layout>
-              <SubComponents>
-                <Component class="cz.fidentis.analyst.gui.Canvas" name="canvasModelView">
-                </Component>
-              </SubComponents>
-            </Container>
-            <Component class="javax.swing.Box$Filler" name="filler3">
-              <Properties>
-                <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-                  <Dimension value="[0, 32767]"/>
-                </Property>
-              </Properties>
-              <AuxValues>
-                <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/>
-              </AuxValues>
-            </Component>
-            <Component class="javax.swing.Box$Filler" name="filler4">
-              <Properties>
-                <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-                  <Dimension value="[0, 32767]"/>
-                </Property>
-              </Properties>
-              <AuxValues>
-                <AuxValue name="classDetails" type="java.lang.String" value="Box.Filler.VerticalGlue"/>
-              </AuxValues>
-            </Component>
-          </SubComponents>
-        </Container>
-      </SubComponents>
-    </Container>
-  </SubComponents>
-</Form>
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/UserInterface.java b/GUI/src/main/java/cz/fidentis/analyst/gui/UserInterface.java
deleted file mode 100644
index ee3b9d80afdc1ec3f64c0493f9578c15969397cb..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/UserInterface.java
+++ /dev/null
@@ -1,1109 +0,0 @@
-package cz.fidentis.analyst.gui;
-
-import cz.fidentis.analyst.mesh.io.MeshObjExporter;
-import java.awt.Color;
-import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.swing.ImageIcon;
-import javax.swing.JFileChooser;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.UIManager;
-import javax.swing.UnsupportedLookAndFeelException;
-
-/**
- *
- * @author Natália Bebjaková
- * 
- * Main window of the applicaion
- */
-
-public class UserInterface extends javax.swing.JFrame {
-    /**
-     * Flag for backround color of the new project button
-     */
-    boolean pressedNewProject = false;
-    /**
-     * Flag for whether model should be displayed as wire-frame 
-     */
-    boolean wiredModelClicked = false;
-    /**
-     * Panel that is actualy displayed on the window
-     */
-    private JPanel actualPanel;
-    /**
-     * Main frame of the application
-     */
-    public static JFrame frameMain; 
-    /**
-     * x coordinate of the mouse 
-     */
-    int xMouse;
-    /**
-     * y coordinate of the mouse
-     */
-    int yMouse;
-    
-    /**
-    * Creates new form Interface
-     */
-    public UserInterface() {
-        initComponents();
-        topPanel.setVisible(false);
-        actualPanel = startingPanel;
-        symmetryPanel1.setCanvas(canvasSymmetryPanel);
-        this.setExtendedState(JFrame.MAXIMIZED_BOTH);
-    }
-
-    /**
-     * 
-     * @return JPanel for estimating symmetry of the model
-     */
-    public SymmetryPanel getSymmetryPanel1() {
-        return symmetryPanel1;
-    }
-    
-    /**
-     * Enables to switch between panels
-     * @param panel New panel that will be visible
-     */
-    private void switchPanelOnMainPanel(JPanel panel) {
-        actualPanel = panel;
-        jPanel2.removeAll();
-        jPanel2.repaint();
-        jPanel2.revalidate();
-        jPanel2.add(panel);
-        jPanel2.repaint();
-        jPanel2.revalidate();
-        panel.add(jPanel1);
-        jPanel1.setVisible(true);
-    }
-    
-    /**
-     * Changes backround of labels to darker green color
-     * @param jl label of which backround changes 
-     */
-    public void setLabelBackround(JLabel jl) {
-        jl.setBackground(new Color(11,56,49));
-    }
-    
-    /**
-     * Changes backround of the label back to original
-     * @param jl label of which backround is return to original
-     */
-    public void resetLabelBackround(JLabel jl) {
-        jl.setBackground(new Color(20,114,105));
-    }
-    
-    /**
-     * This method is called from within the constructor to initialize the form.
-     * WARNING: Do NOT modify this code. The content of this method is always
-     * regenerated by the Form Editor.
-     * 
-     * Code generated by NetBeans
-     */
-    @SuppressWarnings("unchecked")
-    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
-    private void initComponents() {
-
-        jPanel1 = new javax.swing.JPanel();
-        newProject = new javax.swing.JLabel();
-        wiredModelButton = new javax.swing.JLabel();
-        homeButton = new javax.swing.JLabel();
-        topPanel = new javax.swing.JPanel();
-        compareTwo = new javax.swing.JPanel();
-        jLabel1 = new javax.swing.JLabel();
-        compareDB = new javax.swing.JPanel();
-        jLabel3 = new javax.swing.JLabel();
-        batchProcessing = new javax.swing.JPanel();
-        jLabel2 = new javax.swing.JLabel();
-        symetryEstimator = new javax.swing.JPanel();
-        jLabel4 = new javax.swing.JLabel();
-        jPanel2 = new javax.swing.JPanel();
-        startingPanel = new javax.swing.JPanel();
-        javax.swing.JLabel logo = new javax.swing.JLabel();
-        jPanel3 = new javax.swing.JPanel();
-        compareTwoMain = new javax.swing.JPanel();
-        compareTwoMain1 = new javax.swing.JPanel();
-        batchMain = new javax.swing.JPanel();
-        JLabel10 = new javax.swing.JLabel();
-        symetryMain = new javax.swing.JPanel();
-        JLabel11 = new javax.swing.JLabel();
-        viewerButton = new javax.swing.JLabel();
-        JLabel8 = new javax.swing.JLabel();
-        JLabel9 = new javax.swing.JLabel();
-        symetryPanel = new javax.swing.JPanel();
-        viewerPanel = new javax.swing.JPanel();
-        canvasSymmetryPanel = new cz.fidentis.analyst.gui.Canvas();
-        reloadModelButton = new javax.swing.JLabel();
-        exportModelButton = new javax.swing.JLabel();
-        symmetryPanel1 = new cz.fidentis.analyst.gui.SymmetryPanel();
-        filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767));
-        filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767));
-        modelViewPanel = new javax.swing.JPanel();
-        reloadModelButton1 = new javax.swing.JLabel();
-        jPanel4 = new javax.swing.JPanel();
-        canvasModelView = new cz.fidentis.analyst.gui.Canvas();
-        filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767));
-        filler4 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767));
-
-        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
-        setBackground(new java.awt.Color(0, 174, 163));
-        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        setLocationByPlatform(true);
-
-        jPanel1.setBackground(new java.awt.Color(20, 114, 105));
-        jPanel1.setPreferredSize(new java.awt.Dimension(1200, 77));
-        jPanel1.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
-            public void mouseDragged(java.awt.event.MouseEvent evt) {
-                jPanel1MouseDragged(evt);
-            }
-        });
-        jPanel1.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                jPanel1MousePressed(evt);
-            }
-        });
-
-        newProject.setBackground(new java.awt.Color(20, 114, 105));
-        newProject.setFont(new java.awt.Font("Neue Haas Unica Pro", 0, 18)); // NOI18N
-        newProject.setForeground(new java.awt.Color(255, 255, 255));
-        newProject.setIcon(new javax.swing.ImageIcon(getClass().getResource("/newP.png"))); // NOI18N
-        newProject.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        newProject.setOpaque(true);
-        newProject.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
-            public void mouseMoved(java.awt.event.MouseEvent evt) {
-                newProjectMouseMoved(evt);
-            }
-        });
-        newProject.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseExited(java.awt.event.MouseEvent evt) {
-                newProjectMouseExited(evt);
-            }
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                newProjectMousePressed(evt);
-            }
-        });
-
-        wiredModelButton.setBackground(new java.awt.Color(20, 114, 105));
-        wiredModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/wireframe2.png"))); // NOI18N
-        wiredModelButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        wiredModelButton.setOpaque(true);
-        wiredModelButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                wiredModelButtonMouseClicked(evt);
-            }
-        });
-
-        homeButton.setBackground(new java.awt.Color(20, 114, 105));
-        homeButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/home.png"))); // NOI18N
-        homeButton.setToolTipText("Home");
-        homeButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        homeButton.setOpaque(true);
-        homeButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
-            public void mouseMoved(java.awt.event.MouseEvent evt) {
-                homeButtonMouseMoved(evt);
-            }
-        });
-        homeButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                homeButtonMouseClicked(evt);
-            }
-            public void mouseExited(java.awt.event.MouseEvent evt) {
-                homeButtonMouseExited(evt);
-            }
-        });
-
-        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
-        jPanel1.setLayout(jPanel1Layout);
-        jPanel1Layout.setHorizontalGroup(
-            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(jPanel1Layout.createSequentialGroup()
-                .addContainerGap()
-                .addComponent(homeButton)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(newProject, javax.swing.GroupLayout.PREFERRED_SIZE, 149, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(wiredModelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 134, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-        jPanel1Layout.setVerticalGroup(
-            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(wiredModelButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-            .addComponent(newProject, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-            .addComponent(homeButton, javax.swing.GroupLayout.DEFAULT_SIZE, 52, Short.MAX_VALUE)
-        );
-
-        topPanel.setBackground(new java.awt.Color(20, 114, 105));
-        topPanel.setPreferredSize(new java.awt.Dimension(1200, 266));
-
-        compareTwo.setBackground(new java.awt.Color(20, 114, 105));
-        compareTwo.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-
-        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
-        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/compareTwoStart.png"))); // NOI18N
-        jLabel1.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-
-        javax.swing.GroupLayout compareTwoLayout = new javax.swing.GroupLayout(compareTwo);
-        compareTwo.setLayout(compareTwoLayout);
-        compareTwoLayout.setHorizontalGroup(
-            compareTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(compareTwoLayout.createSequentialGroup()
-                .addContainerGap()
-                .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                .addContainerGap())
-        );
-        compareTwoLayout.setVerticalGroup(
-            compareTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(compareTwoLayout.createSequentialGroup()
-                .addGap(30, 30, 30)
-                .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                .addGap(28, 28, 28))
-        );
-
-        compareDB.setBackground(new java.awt.Color(20, 114, 105));
-        compareDB.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-
-        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
-        jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/batchProcessingStart.png"))); // NOI18N
-        jLabel3.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-
-        javax.swing.GroupLayout compareDBLayout = new javax.swing.GroupLayout(compareDB);
-        compareDB.setLayout(compareDBLayout);
-        compareDBLayout.setHorizontalGroup(
-            compareDBLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-        );
-        compareDBLayout.setVerticalGroup(
-            compareDBLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-        );
-
-        batchProcessing.setBackground(new java.awt.Color(20, 114, 105));
-        batchProcessing.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-
-        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
-        jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/copareWithDatabaseStart.png"))); // NOI18N
-        jLabel2.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-
-        javax.swing.GroupLayout batchProcessingLayout = new javax.swing.GroupLayout(batchProcessing);
-        batchProcessing.setLayout(batchProcessingLayout);
-        batchProcessingLayout.setHorizontalGroup(
-            batchProcessingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(batchProcessingLayout.createSequentialGroup()
-                .addGap(26, 26, 26)
-                .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-        batchProcessingLayout.setVerticalGroup(
-            batchProcessingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, batchProcessingLayout.createSequentialGroup()
-                .addContainerGap()
-                .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-
-        symetryEstimator.setBackground(new java.awt.Color(20, 114, 105));
-        symetryEstimator.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        symetryEstimator.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                symetryEstimatorMouseClicked(evt);
-            }
-        });
-
-        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
-        jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryStartP.png"))); // NOI18N
-        jLabel4.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        jLabel4.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
-            public void mouseMoved(java.awt.event.MouseEvent evt) {
-                jLabel4MouseMoved1(evt);
-            }
-        });
-        jLabel4.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                jLabel4MouseClicked(evt);
-            }
-            public void mouseExited(java.awt.event.MouseEvent evt) {
-                jLabel4MouseExited(evt);
-            }
-        });
-
-        javax.swing.GroupLayout symetryEstimatorLayout = new javax.swing.GroupLayout(symetryEstimator);
-        symetryEstimator.setLayout(symetryEstimatorLayout);
-        symetryEstimatorLayout.setHorizontalGroup(
-            symetryEstimatorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, symetryEstimatorLayout.createSequentialGroup()
-                .addContainerGap()
-                .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                .addContainerGap())
-        );
-        symetryEstimatorLayout.setVerticalGroup(
-            symetryEstimatorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, symetryEstimatorLayout.createSequentialGroup()
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 137, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(36, 36, 36))
-        );
-
-        javax.swing.GroupLayout topPanelLayout = new javax.swing.GroupLayout(topPanel);
-        topPanel.setLayout(topPanelLayout);
-        topPanelLayout.setHorizontalGroup(
-            topPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(topPanelLayout.createSequentialGroup()
-                .addContainerGap(99, Short.MAX_VALUE)
-                .addComponent(compareTwo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(105, 105, 105)
-                .addComponent(compareDB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(94, 94, 94)
-                .addComponent(batchProcessing, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(94, 94, 94)
-                .addComponent(symetryEstimator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addContainerGap(98, Short.MAX_VALUE))
-        );
-        topPanelLayout.setVerticalGroup(
-            topPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(topPanelLayout.createSequentialGroup()
-                .addGap(52, 52, 52)
-                .addGroup(topPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(symetryEstimator, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                    .addComponent(compareDB, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, topPanelLayout.createSequentialGroup()
-                        .addGap(0, 0, Short.MAX_VALUE)
-                        .addComponent(compareTwo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                    .addComponent(batchProcessing, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
-        );
-
-        jPanel2.setBackground(new java.awt.Color(0, 174, 163));
-        jPanel2.setFont(new java.awt.Font("Arial", 1, 13)); // NOI18N
-        jPanel2.setPreferredSize(getPreferredSize());
-        jPanel2.setLayout(new java.awt.CardLayout());
-
-        startingPanel.setBackground(new java.awt.Color(0, 174, 163));
-        startingPanel.setToolTipText("");
-        startingPanel.setMaximumSize(new java.awt.Dimension(0, 0));
-        startingPanel.setPreferredSize(new java.awt.Dimension(1200, 800));
-        startingPanel.setRequestFocusEnabled(false);
-
-        logo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/logo3.png"))); // NOI18N
-
-        jPanel3.setBackground(new java.awt.Color(0, 174, 163));
-        jPanel3.setToolTipText("");
-
-        compareTwoMain.setBackground(new java.awt.Color(0, 174, 163));
-
-        javax.swing.GroupLayout compareTwoMainLayout = new javax.swing.GroupLayout(compareTwoMain);
-        compareTwoMain.setLayout(compareTwoMainLayout);
-        compareTwoMainLayout.setHorizontalGroup(
-            compareTwoMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 177, Short.MAX_VALUE)
-        );
-        compareTwoMainLayout.setVerticalGroup(
-            compareTwoMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 170, Short.MAX_VALUE)
-        );
-
-        compareTwoMain1.setBackground(new java.awt.Color(0, 174, 163));
-
-        javax.swing.GroupLayout compareTwoMain1Layout = new javax.swing.GroupLayout(compareTwoMain1);
-        compareTwoMain1.setLayout(compareTwoMain1Layout);
-        compareTwoMain1Layout.setHorizontalGroup(
-            compareTwoMain1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 220, Short.MAX_VALUE)
-        );
-        compareTwoMain1Layout.setVerticalGroup(
-            compareTwoMain1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 169, Short.MAX_VALUE)
-        );
-
-        batchMain.setBackground(new java.awt.Color(0, 174, 163));
-
-        JLabel10.setIcon(new javax.swing.ImageIcon(getClass().getResource("/batchProcessingStart.png"))); // NOI18N
-
-        javax.swing.GroupLayout batchMainLayout = new javax.swing.GroupLayout(batchMain);
-        batchMain.setLayout(batchMainLayout);
-        batchMainLayout.setHorizontalGroup(
-            batchMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(batchMainLayout.createSequentialGroup()
-                .addContainerGap()
-                .addComponent(JLabel10)
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-        batchMainLayout.setVerticalGroup(
-            batchMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(batchMainLayout.createSequentialGroup()
-                .addGap(25, 25, 25)
-                .addComponent(JLabel10)
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-
-        symetryMain.setBackground(new java.awt.Color(0, 174, 163));
-
-        JLabel11.setBackground(new java.awt.Color(0, 174, 163));
-        JLabel11.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryStart.png"))); // NOI18N
-        JLabel11.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        JLabel11.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
-            public void mouseMoved(java.awt.event.MouseEvent evt) {
-                JLabel11MouseMoved(evt);
-            }
-        });
-        JLabel11.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                JLabel11MouseClicked(evt);
-            }
-            public void mouseExited(java.awt.event.MouseEvent evt) {
-                JLabel11MouseExited(evt);
-            }
-        });
-
-        javax.swing.GroupLayout symetryMainLayout = new javax.swing.GroupLayout(symetryMain);
-        symetryMain.setLayout(symetryMainLayout);
-        symetryMainLayout.setHorizontalGroup(
-            symetryMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(JLabel11, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 189, Short.MAX_VALUE)
-        );
-        symetryMainLayout.setVerticalGroup(
-            symetryMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, symetryMainLayout.createSequentialGroup()
-                .addContainerGap()
-                .addComponent(JLabel11, javax.swing.GroupLayout.DEFAULT_SIZE, 167, Short.MAX_VALUE))
-        );
-
-        viewerButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/modelView.png"))); // NOI18N
-        viewerButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        viewerButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
-            public void mouseMoved(java.awt.event.MouseEvent evt) {
-                viewerButtonMouseMoved(evt);
-            }
-        });
-        viewerButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                viewerButtonMouseClicked(evt);
-            }
-            public void mouseExited(java.awt.event.MouseEvent evt) {
-                viewerButtonMouseExited(evt);
-            }
-        });
-
-        JLabel8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/compareTwoStart.png"))); // NOI18N
-
-        JLabel9.setBackground(new java.awt.Color(0, 174, 163));
-        JLabel9.setIcon(new javax.swing.ImageIcon(getClass().getResource("/copareWithDatabaseStart.png"))); // NOI18N
-
-        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
-        jPanel3.setLayout(jPanel3Layout);
-        jPanel3Layout.setHorizontalGroup(
-            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(jPanel3Layout.createSequentialGroup()
-                .addContainerGap(17, Short.MAX_VALUE)
-                .addComponent(viewerButton, javax.swing.GroupLayout.PREFERRED_SIZE, 323, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(18, 18, 18)
-                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(compareTwoMain, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(compareTwoMain1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(jPanel3Layout.createSequentialGroup()
-                        .addComponent(JLabel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                        .addGap(62, 62, 62))
-                    .addGroup(jPanel3Layout.createSequentialGroup()
-                        .addComponent(JLabel9, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
-                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(batchMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addGroup(jPanel3Layout.createSequentialGroup()
-                        .addGap(12, 12, 12)
-                        .addComponent(symetryMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
-                .addContainerGap(42, Short.MAX_VALUE))
-        );
-        jPanel3Layout.setVerticalGroup(
-            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(jPanel3Layout.createSequentialGroup()
-                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
-                        .addContainerGap()
-                        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                            .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                .addComponent(JLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 142, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addComponent(compareTwoMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                            .addGroup(jPanel3Layout.createSequentialGroup()
-                                .addComponent(batchMain, javax.swing.GroupLayout.PREFERRED_SIZE, 173, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addGap(28, 28, 28)))
-                        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addComponent(compareTwoMain1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(symetryMain, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
-                    .addGroup(jPanel3Layout.createSequentialGroup()
-                        .addGap(296, 296, 296)
-                        .addComponent(JLabel9, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                        .addGap(8, 8, 8)))
-                .addContainerGap())
-            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
-                .addGap(0, 0, Short.MAX_VALUE)
-                .addComponent(viewerButton)
-                .addGap(41, 41, 41))
-        );
-
-        javax.swing.GroupLayout startingPanelLayout = new javax.swing.GroupLayout(startingPanel);
-        startingPanel.setLayout(startingPanelLayout);
-        startingPanelLayout.setHorizontalGroup(
-            startingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(startingPanelLayout.createSequentialGroup()
-                .addContainerGap(81, Short.MAX_VALUE)
-                .addGroup(startingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, startingPanelLayout.createSequentialGroup()
-                        .addComponent(logo, javax.swing.GroupLayout.PREFERRED_SIZE, 218, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addGap(400, 400, 400)))
-                .addContainerGap(81, Short.MAX_VALUE))
-        );
-        startingPanelLayout.setVerticalGroup(
-            startingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(startingPanelLayout.createSequentialGroup()
-                .addContainerGap(133, Short.MAX_VALUE)
-                .addComponent(logo, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addContainerGap(136, Short.MAX_VALUE))
-        );
-
-        jPanel2.add(startingPanel, "card3");
-
-        symetryPanel.setBackground(new java.awt.Color(0, 174, 163));
-        symetryPanel.setPreferredSize(new java.awt.Dimension(1200, 800));
-
-        javax.swing.GroupLayout viewerPanelLayout = new javax.swing.GroupLayout(viewerPanel);
-        viewerPanel.setLayout(viewerPanelLayout);
-        viewerPanelLayout.setHorizontalGroup(
-            viewerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(viewerPanelLayout.createSequentialGroup()
-                .addContainerGap()
-                .addComponent(canvasSymmetryPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 553, Short.MAX_VALUE)
-                .addContainerGap())
-        );
-        viewerPanelLayout.setVerticalGroup(
-            viewerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(viewerPanelLayout.createSequentialGroup()
-                .addContainerGap()
-                .addComponent(canvasSymmetryPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 588, Short.MAX_VALUE)
-                .addContainerGap())
-        );
-
-        reloadModelButton.setBackground(new java.awt.Color(0, 174, 163));
-        reloadModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/loadModel.png"))); // NOI18N
-        reloadModelButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        reloadModelButton.setOpaque(true);
-        reloadModelButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
-            public void mouseMoved(java.awt.event.MouseEvent evt) {
-                reloadModelButtonMouseMoved(evt);
-            }
-        });
-        reloadModelButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                reloadModelButtonMouseClicked(evt);
-            }
-            public void mouseExited(java.awt.event.MouseEvent evt) {
-                reloadModelButtonMouseExited(evt);
-            }
-        });
-
-        exportModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/exportModel.png"))); // NOI18N
-        exportModelButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        exportModelButton.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
-            public void mouseMoved(java.awt.event.MouseEvent evt) {
-                exportModelButtonMouseMoved(evt);
-            }
-        });
-        exportModelButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                exportModelButtonMouseClicked(evt);
-            }
-            public void mouseExited(java.awt.event.MouseEvent evt) {
-                exportModelButtonMouseExited(evt);
-            }
-        });
-
-        symmetryPanel1.setBackground(new java.awt.Color(176, 230, 226));
-
-        javax.swing.GroupLayout symetryPanelLayout = new javax.swing.GroupLayout(symetryPanel);
-        symetryPanel.setLayout(symetryPanelLayout);
-        symetryPanelLayout.setHorizontalGroup(
-            symetryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(symetryPanelLayout.createSequentialGroup()
-                .addContainerGap(78, Short.MAX_VALUE)
-                .addComponent(viewerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(72, 72, 72)
-                .addGroup(symetryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(exportModelButton)
-                    .addComponent(reloadModelButton)
-                    .addComponent(symmetryPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 461, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-            .addComponent(filler1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-            .addComponent(filler2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-        );
-        symetryPanelLayout.setVerticalGroup(
-            symetryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(symetryPanelLayout.createSequentialGroup()
-                .addComponent(filler2, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 46, Short.MAX_VALUE)
-                .addGroup(symetryPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                    .addGroup(symetryPanelLayout.createSequentialGroup()
-                        .addComponent(symmetryPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                        .addComponent(exportModelButton)
-                        .addGap(18, 18, 18)
-                        .addComponent(reloadModelButton))
-                    .addComponent(viewerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(filler1, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(93, 93, 93))
-        );
-
-        jPanel2.add(symetryPanel, "card3");
-
-        modelViewPanel.setBackground(new java.awt.Color(0, 174, 163));
-        modelViewPanel.setToolTipText("");
-        modelViewPanel.setPreferredSize(new java.awt.Dimension(1200, 800));
-
-        reloadModelButton1.setBackground(new java.awt.Color(0, 174, 163));
-        reloadModelButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/loadModel.png"))); // NOI18N
-        reloadModelButton1.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        reloadModelButton1.setOpaque(true);
-        reloadModelButton1.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
-            public void mouseMoved(java.awt.event.MouseEvent evt) {
-                reloadModelButton1MouseMoved(evt);
-            }
-        });
-        reloadModelButton1.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                reloadModelButton1MouseClicked(evt);
-            }
-            public void mouseExited(java.awt.event.MouseEvent evt) {
-                reloadModelButton1MouseExited(evt);
-            }
-        });
-
-        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
-        jPanel4.setLayout(jPanel4Layout);
-        jPanel4Layout.setHorizontalGroup(
-            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(jPanel4Layout.createSequentialGroup()
-                .addContainerGap()
-                .addComponent(canvasModelView, javax.swing.GroupLayout.PREFERRED_SIZE, 795, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-        jPanel4Layout.setVerticalGroup(
-            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                .addComponent(canvasModelView, javax.swing.GroupLayout.PREFERRED_SIZE, 553, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(98, 98, 98))
-        );
-
-        javax.swing.GroupLayout modelViewPanelLayout = new javax.swing.GroupLayout(modelViewPanel);
-        modelViewPanel.setLayout(modelViewPanelLayout);
-        modelViewPanelLayout.setHorizontalGroup(
-            modelViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(filler3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, modelViewPanelLayout.createSequentialGroup()
-                .addContainerGap(87, Short.MAX_VALUE)
-                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(18, 18, 18)
-                .addComponent(reloadModelButton1)
-                .addContainerGap(95, Short.MAX_VALUE))
-            .addComponent(filler4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-        );
-        modelViewPanelLayout.setVerticalGroup(
-            modelViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(modelViewPanelLayout.createSequentialGroup()
-                .addComponent(filler3, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 87, Short.MAX_VALUE)
-                .addGroup(modelViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                    .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, 579, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(reloadModelButton1))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(filler4, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addContainerGap(92, Short.MAX_VALUE))
-        );
-
-        jPanel2.add(modelViewPanel, "card4");
-        modelViewPanel.getAccessibleContext().setAccessibleName("");
-
-        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
-        getContentPane().setLayout(layout);
-        layout.setHorizontalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(topPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-            .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-        layout.setVerticalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(layout.createSequentialGroup()
-                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                .addComponent(topPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 239, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(0, 565, Short.MAX_VALUE))
-            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-
-        topPanel.getAccessibleContext().setAccessibleName("");
-
-        pack();
-        setLocationRelativeTo(null);
-    }// </editor-fold>//GEN-END:initComponents
-
-    /**
-     * 
-     * @param evt Changes the backround of the new project button
-     */
-    private void newProjectMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_newProjectMouseMoved
-        setLabelBackround(newProject);
-    }//GEN-LAST:event_newProjectMouseMoved
-
-    /**
-     * 
-     * @param evt Changes back the backround of the new project button
-     */
-    private void newProjectMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_newProjectMouseExited
-        if (!pressedNewProject) {
-            resetLabelBackround(newProject);
-        }
-    }//GEN-LAST:event_newProjectMouseExited
-
-    /**
-     * 
-     * @param evt While moved with mouse, symmetry label changes 
-     */
-    private void jLabel4MouseMoved1(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel4MouseMoved1
-        jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryStartPanel.png")));
-    }//GEN-LAST:event_jLabel4MouseMoved1
-
-    /**
-     * 
-     * @param evt Shows menu with icons for programs of the app
-     */
-    private void newProjectMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_newProjectMousePressed
-        if(pressedNewProject) {
-            topPanel.setVisible(false);
-            pressedNewProject = false;
-            switchPanelOnMainPanel(actualPanel);
-            newProject.setIcon(new javax.swing.ImageIcon(getClass().getResource("/newP.png")));
-        }else{
-            topPanel.setVisible(true);
-            topPanel.add(jPanel1);
-            pressedNewProject = true;
-            newProject.setIcon(new javax.swing.ImageIcon(getClass().getResource("/new_project_opened.png")));
-        }
-    }//GEN-LAST:event_newProjectMousePressed
-
-  
-    /**
-     * 
-     * @param evt Switch to symmetry panel
-     */
-    private void JLabel11MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_JLabel11MouseClicked
-        switchPanelOnMainPanel(symetryPanel);
-    }//GEN-LAST:event_JLabel11MouseClicked
-
-    /**
-     * 
-     * @param evt Switch to symmetry panel
-     */
-    private void symetryEstimatorMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_symetryEstimatorMouseClicked
-        switchPanelOnMainPanel(symetryPanel);
-        topPanel.setVisible(false);
-        ImageIcon icon = new ImageIcon(getClass().getResource("/newP.png"));
-        
-        newProject.setIcon(icon);
-        resetLabelBackround(newProject);
-    }//GEN-LAST:event_symetryEstimatorMouseClicked
-
-    /**
-     * 
-     * @param evt Enables to move with the window of the app
-     */
-    private void jPanel1MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPanel1MouseDragged
-        int x = evt.getXOnScreen();
-        int y = evt.getYOnScreen();
-        frameMain.setLocation(x - xMouse, y - yMouse);
-    }//GEN-LAST:event_jPanel1MouseDragged
-
-    /**
-     * 
-     * @param evt Enables to move with the window of the app
-     */
-    private void jPanel1MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPanel1MousePressed
-        xMouse  = evt.getX();
-        yMouse = evt.getY();
-    }//GEN-LAST:event_jPanel1MousePressed
-
-    /**
-     * 
-     * @param evt Changes the backround of the reload button
-     */
-    private void reloadModelButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_reloadModelButtonMouseMoved
-        reloadModelButton.setBackground(new Color(176,230,226));
-    }//GEN-LAST:event_reloadModelButtonMouseMoved
-
-    /**
-     * 
-     * @param evt Changes the backround of the reload button
-     */
-    private void reloadModelButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_reloadModelButtonMouseExited
-        reloadModelButton.setBackground(new Color(0,174,163));
-    }//GEN-LAST:event_reloadModelButtonMouseExited
-
-    /**
-     * 
-     * @param evt Loads the model that will be displayed
-     */
-    private void reloadModelButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_reloadModelButtonMouseClicked
-        canvasSymmetryPanel.loadModel();
-        if (canvasSymmetryPanel.isLoaded()) {
-            symmetryPanel1.showPlaneButtonsOnPanel(false);
-        } 
-    }//GEN-LAST:event_reloadModelButtonMouseClicked
-
-    /**
-     * letting know GLCanva if model will be displayed as wire-frame 
-     */
-    private void wiredModelButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_wiredModelButtonMouseClicked
-        if (wiredModelClicked) {
-            resetLabelBackround(wiredModelButton);
-            wiredModelClicked = false;
-            Canvas.setDrawWired(wiredModelClicked);
-            /*canvasSymmetryPanel.setDrawWired(wiredModelClicked);
-            canvasModelView.setDrawWired(wiredModelClicked);*/
-        } else {
-            setLabelBackround(wiredModelButton);
-            wiredModelClicked = true;
-            Canvas.setDrawWired(wiredModelClicked);
-            /*canvasSymmetryPanel.setDrawWired(wiredModelClicked);
-            canvasModelView.setDrawWired(wiredModelClicked);*/
-        }
-    }//GEN-LAST:event_wiredModelButtonMouseClicked
-
-    /**
-     * 
-     * @param evt Changes the backround of the home button
-     */
-    private void homeButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_homeButtonMouseMoved
-        setLabelBackround(homeButton);
-    }//GEN-LAST:event_homeButtonMouseMoved
-
-    /**
-     * 
-     * @param evt Changes the backround of the home button
-     */
-    private void homeButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_homeButtonMouseExited
-        resetLabelBackround(homeButton);
-    }//GEN-LAST:event_homeButtonMouseExited
-
-    /**
-     * 
-     * @param evt Returns to home panel of the app
-     */
-    private void homeButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_homeButtonMouseClicked
-        switchPanelOnMainPanel(startingPanel);
-    }//GEN-LAST:event_homeButtonMouseClicked
-
-    /**
-     * 
-     * @param evt Changes the backround of the reload button
-     */
-    private void reloadModelButton1MouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_reloadModelButton1MouseMoved
-        reloadModelButton1.setBackground(new Color(176,230,226));
-    }//GEN-LAST:event_reloadModelButton1MouseMoved
-
-    /**
-     * 
-     * @param evt Loads the model that will be displayed
-     */
-    private void reloadModelButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_reloadModelButton1MouseClicked
-        canvasModelView.loadModel();
-    }//GEN-LAST:event_reloadModelButton1MouseClicked
-
-    /**
-     * 
-     * @param evt Changes the backround of the reload button
-     */
-    private void reloadModelButton1MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_reloadModelButton1MouseExited
-        reloadModelButton1.setBackground(new Color(0,174,163));
-    }//GEN-LAST:event_reloadModelButton1MouseExited
-
-    /**
-     * 
-     * @param evt Switch to panel for viewing the model
-     */
-    private void viewerButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_viewerButtonMouseClicked
-        switchPanelOnMainPanel(modelViewPanel);
-    }//GEN-LAST:event_viewerButtonMouseClicked
-
-    /**
-     * 
-     * @param evt Changes the backround of the symmetry button
-     */
-    private void JLabel11MouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_JLabel11MouseMoved
-        JLabel11.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryStartMoved.png")));
-    }//GEN-LAST:event_JLabel11MouseMoved
-
-    /**
-     * 
-     * @param evt Changes the backround of the viewer panel button
-     */
-    private void viewerButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_viewerButtonMouseMoved
-        viewerButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/modelViewMoved.png")));
-    }//GEN-LAST:event_viewerButtonMouseMoved
-
-    /**
-     * 
-     * @param evt Changes the backround of the viewer panel button
-     */
-    private void viewerButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_viewerButtonMouseExited
-        viewerButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/modelView.png")));
-    }//GEN-LAST:event_viewerButtonMouseExited
-
-    /**
-     * 
-     * @param evt Changes the backround of the symmetry button
-     */
-    private void JLabel11MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_JLabel11MouseExited
-        JLabel11.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryStart.png")));
-    }//GEN-LAST:event_JLabel11MouseExited
-
-    /**
-     * 
-     * @param evt Switch to panel for symmetry
-     */
-    private void jLabel4MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel4MouseClicked
-        switchPanelOnMainPanel(symetryPanel);
-        topPanel.setVisible(false);
-        newProject.setIcon(new javax.swing.ImageIcon(getClass().getResource("/newP.png")));
-        resetLabelBackround(newProject);
-    }//GEN-LAST:event_jLabel4MouseClicked
-
-    /**
-     * 
-     * @param evt Changes the backround of the export button
-     */
-    private void exportModelButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_exportModelButtonMouseMoved
-        exportModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/exportModelPressed.png")));
-    }//GEN-LAST:event_exportModelButtonMouseMoved
-
-    /**
-     * 
-     * @param evt Changes the backround of the export button
-     */
-    private void exportModelButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_exportModelButtonMouseExited
-        exportModelButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/exportModel.png")));
-    }//GEN-LAST:event_exportModelButtonMouseExited
-
-    /**
-     * When export button pressed, new directory is created and model is exported to it
-     * If there is not loaded model, user is warned
-     */
-    private void exportModelButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_exportModelButtonMouseClicked
-        if (canvasSymmetryPanel.getModel().getFacets().isEmpty()){
-            JOptionPane.showMessageDialog(frameMain, "You have to load the model.", "Model not loaded",
-                    0, new ImageIcon(getClass().getResource("/notLoadedModel.png")));
-        } else {
-            JFileChooser chooser = new JFileChooser();
-            chooser.showSaveDialog(symetryPanel);
-            
-            MeshObjExporter exporter = new MeshObjExporter(canvasSymmetryPanel.getModel());
-            try {
-                if (chooser.getSelectedFile() != null) {
-                    exporter.exportModelToObj(chooser.getSelectedFile());
-                    JOptionPane.showMessageDialog(frameMain, "Model exported into: " +
-                            chooser.getCurrentDirectory().toString() + "\\" + chooser.getSelectedFile().getName(), "Model exported",
-                            0, new ImageIcon(getClass().getResource("/exportedModel.png")));
-                }
-            } catch (IOException ex) {
-                Logger.getLogger(UserInterface.class.getName()).log(Level.SEVERE, null, ex);
-            }
-        }
-    }//GEN-LAST:event_exportModelButtonMouseClicked
-
-    /**
-     * 
-     * @param evt Changes the backround of the symmetry button
-     */
-    private void jLabel4MouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel4MouseExited
-        jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/symetryStartP.png")));
-    }//GEN-LAST:event_jLabel4MouseExited
-
-  
-    /**
-     * @param args the command line arguments
-     */
-    public static void main(String args[]) {
-        try {
-            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
-                if ("Nimbus".equals(info.getName())) {
-                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
-                    break;
-                }
-            }
-        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
-            java.util.logging.Logger.getLogger(UserInterface.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
-        }
-        java.awt.EventQueue.invokeLater(() -> {
-            frameMain = new UserInterface();
-            frameMain.setBackground(new Color(49,165,154));
-            frameMain.pack();
-            frameMain.setVisible(true);           
-            //enables to use design of operating system
-            try {
-                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-            }catch(ClassNotFoundException | IllegalAccessException | InstantiationException | UnsupportedLookAndFeelException ex) {
-            }
-        });
-    }
-    
-
-    
-
-    // Variables declaration - do not modify//GEN-BEGIN:variables
-    private javax.swing.JLabel JLabel10;
-    private javax.swing.JLabel JLabel11;
-    private javax.swing.JLabel JLabel8;
-    private javax.swing.JLabel JLabel9;
-    private javax.swing.JPanel batchMain;
-    private javax.swing.JPanel batchProcessing;
-    private cz.fidentis.analyst.gui.Canvas canvasModelView;
-    private cz.fidentis.analyst.gui.Canvas canvasSymmetryPanel;
-    private javax.swing.JPanel compareDB;
-    private javax.swing.JPanel compareTwo;
-    private javax.swing.JPanel compareTwoMain;
-    private javax.swing.JPanel compareTwoMain1;
-    private javax.swing.JLabel exportModelButton;
-    private javax.swing.Box.Filler filler1;
-    private javax.swing.Box.Filler filler2;
-    private javax.swing.Box.Filler filler3;
-    private javax.swing.Box.Filler filler4;
-    private javax.swing.JLabel homeButton;
-    private javax.swing.JLabel jLabel1;
-    private javax.swing.JLabel jLabel2;
-    private javax.swing.JLabel jLabel3;
-    private javax.swing.JLabel jLabel4;
-    private javax.swing.JPanel jPanel1;
-    private javax.swing.JPanel jPanel2;
-    private javax.swing.JPanel jPanel3;
-    private javax.swing.JPanel jPanel4;
-    private javax.swing.JPanel modelViewPanel;
-    private javax.swing.JLabel newProject;
-    private javax.swing.JLabel reloadModelButton;
-    private javax.swing.JLabel reloadModelButton1;
-    private javax.swing.JPanel startingPanel;
-    private javax.swing.JPanel symetryEstimator;
-    private javax.swing.JPanel symetryMain;
-    private javax.swing.JPanel symetryPanel;
-    private cz.fidentis.analyst.gui.SymmetryPanel symmetryPanel1;
-    private javax.swing.JPanel topPanel;
-    private javax.swing.JLabel viewerButton;
-    private javax.swing.JPanel viewerPanel;
-    private javax.swing.JLabel wiredModelButton;
-    // End of variables declaration//GEN-END:variables
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/Wireframe.java b/GUI/src/main/java/cz/fidentis/analyst/gui/Wireframe.java
deleted file mode 100644
index a3e7abb5413c2a30d69d3f6acf15d36b4a16e581..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/Wireframe.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
-package cz.fidentis.analyst.gui;
-
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import javax.swing.JLabel;
-import org.openide.awt.ActionID;
-import org.openide.awt.ActionReference;
-import org.openide.awt.ActionReferences;
-import org.openide.awt.ActionRegistration;
-import org.openide.util.NbBundle.Messages;
-
-/**
- *
- * @author Richard Pajerský
- * 
- * Wireframe button in toolbar and Edit
- */
-@ActionID(
-        category = "Edit",
-        id = "cz.fidentis.analyst.gui.Wireframe"
-)
-@ActionRegistration(
-        iconBase = "wireframe16x16.png",
-        displayName = "#CTL_Wireframe"
-)
-@ActionReferences({
-    @ActionReference(path = "Menu/Edit", position = 2600, separatorBefore = 2550),
-    @ActionReference(path = "Toolbars/File", position = 300)
-})
-@Messages("CTL_Wireframe=Wireframe")
-public final class Wireframe implements ActionListener {
-
-    /**
-     * Flag for whether model should be displayed as wire-frame 
-     */
-    boolean wiredModelClicked = false;
-    
-    @Override
-    public void actionPerformed(ActionEvent e) {
-        if (wiredModelClicked) {
-            //resetLabelBackround(wiredModelButton);
-            wiredModelClicked = false;
-            Canvas.setDrawWired(wiredModelClicked);
-            /*canvasSymmetryPanel.setDrawWired(wiredModelClicked);
-            canvasModelView.setDrawWired(wiredModelClicked);*/
-        } else {
-            //setLabelBackround(wiredModelButton);
-            wiredModelClicked = true;
-            Canvas.setDrawWired(wiredModelClicked);
-            /*canvasSymmetryPanel.setDrawWired(wiredModelClicked);
-            canvasModelView.setDrawWired(wiredModelClicked);*/
-        }
-    }
-
-    /**
-     * Changes backround of labels to darker green color
-     * @param jl label of which backround changes 
-     */
-    private void setLabelBackround(JLabel jl) {
-        jl.setBackground(new Color(11,56,49));
-    }
-
-    /**
-     * Changes backround of the label back to original
-     * @param jl label of which backround is return to original
-     */
-    private void resetLabelBackround(JLabel jl) {
-        jl.setBackground(new Color(20,114,105));
-    }
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/DrawableMesh.java b/GUI/src/main/java/cz/fidentis/analyst/gui/scene/DrawableMesh.java
deleted file mode 100644
index 2355656c9962671e75fa993f96f9401dfca7b11d..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/DrawableMesh.java
+++ /dev/null
@@ -1,305 +0,0 @@
-package cz.fidentis.analyst.gui.scene;
-
-import com.jogamp.opengl.GL2;
-import cz.fidentis.analyst.feature.FeaturePoint;
-import cz.fidentis.analyst.mesh.core.MeshFacet;
-import cz.fidentis.analyst.mesh.core.MeshModel;
-import java.awt.Color;
-import java.util.ArrayList;
-import java.util.List;
-import javax.vecmath.Vector3d;
-
-/**
- * A drawable triangular mesh, i.e., a mesh model with drawing information like 
- * material, transparency, color, relative transformations in the scene etc. 
- * This class encapsulates rendering state and parameters,
- * 
- * @author Radek Oslejsek
- * @author Richard Pajersky
- */
-public class DrawableMesh {
-    
-    private final MeshModel model;
-    
-    private boolean display = true;
-    
-    /* material info */
-    /**
-     * {@link Color} of mesh
-     */
-    private Color color = new Color(255, 255, 255);
-    /**
-     * {@link Color} of highlights
-     */
-    private Color highlights = new Color(0, 0, 0, 1);
-    /**
-     * Transparency of mesh
-     */
-    private float transparency = 1;
-    
-    /* transformation info */
-    /**
-     * Translation
-     */
-    private Vector3d translation = new Vector3d(0, 0, 0);
-    /**
-     * Rotation
-     */
-    private Vector3d rotation = new Vector3d(0, 0, 0);
-    /**
-     * Scale
-     */
-    private Vector3d scale = new Vector3d(0, 0, 0);
-    
-    /* render mode */
-    /**
-     * Render mode to use, one from {@code GL_FILL}, {@code GL_LINE}, {@code GL_POINT}
-     */
-    private int renderMode = GL2.GL_FILL;
-    /**
-     * Flag if back should be rendered
-     */
-    private boolean showBackface = true;
-    
-    /* feature points */
-    /**
-     * {@link List} of feature points
-     */
-    private List<FeaturePoint> featurePoints = new ArrayList<>();
-    /**
-     * {@link List} of feature points color
-     */
-    private List<Color> featurePointsColor = new ArrayList<>();
-    /**
-     * Flag if feature points should be rendered
-     */
-    private boolean renderFeaturePoints = false;
-    
-    /**
-     * Constructor. 
-     * 
-     * @param model Drawable mesh model
-     * @throws IllegalArgumentException if the model is {@code null}
-     */
-    public DrawableMesh(MeshModel model) {
-        if (model == null) {
-            throw new IllegalArgumentException("model is null");
-        }
-        this.model = model;
-    }
-    
-    /**
-     * Returns list of individual facets.
-     * 
-     * @return list of individual facets.
-     */
-    public List<MeshFacet> getFacets() {
-        return model.getFacets();
-    }
-    
-    /**
-     * This drawable mesh is included in the rendered scene.
-     */
-    public void show() {
-        display = true;
-    }
-    
-    /**
-     * This drawable mesh is excluded from the rendered scene (skipped).
-     */
-    public void hide() {
-        display = false;
-    }
-    
-    /**
-     * 
-     * @return {@code true} if the object is included (rendered) in the scene.
-     */
-    public boolean isShown() {
-        return display;
-    }
-    
-    /**
-     * Sets color
-     * @param color Color
-     */
-    public void setColor(Color color) {
-        this.color = color;
-    }
-
-    /**
-     * @return {@link Color}
-     */
-    public Color getColor() {
-        return color;
-    }
-    
-    /**
-     * @return Current value of transparency
-     */
-    public float getTransparency() {
-        return transparency;
-    }
-
-    /**
-     * Sets transparency
-     * @param transparency Transparency
-     */
-    public void setTransparency(float transparency) {
-        this.transparency = transparency;
-    }
-    
-    /**
-     * @return Current translation
-     */
-    public Vector3d getTranslation() {
-        return translation;
-    }
-
-    /**
-     * Sets tranlation
-     * @param translation Translation
-     */
-    public void setTranslation(Vector3d translation) {
-        this.translation = translation;
-    }
-
-    /**
-     * @return Current rotation
-     */
-    public Vector3d getRotation() {
-        return rotation;
-    }
-
-    /**
-     * Sets rotation
-     * @param rotation 
-     */
-    public void setRotation(Vector3d rotation) {
-        this.rotation = rotation;
-    }
-
-    /**
-     * @return Current scale
-     */
-    public Vector3d getScale() {
-        return scale;
-    }
-
-    /**
-     * Sets scale
-     * @param scale Scale
-     */
-    public void setScale(Vector3d scale) {
-        this.scale = scale;
-    }
-    
-    /**
-     * @return {@link MeshModel}
-     */
-    public MeshModel getModel() {
-        return this.model;
-    }
-
-    /**
-     * @return {@link Color} of highlights
-     */
-    public Color getHighlights() {
-        return highlights;
-    }
-
-    /**
-     * Sets {@link Color} of highlights
-     * @param highlights 
-     */
-    public void setHighlights(Color highlights) {
-        this.highlights = highlights;
-    }
-    
-    /**
-     * @return Value of {@link #renderMode}
-     */
-    public int getRenderMode() {
-        return renderMode;
-    }
-
-    /**
-     * Sets render mode
-     * @param renderMode Render mode
-     * @throws IllegalArgumentException if renderMode isn't {@code GL_FILL}, {@code GL_LINE} or {@coed GL_POINT}
-     */
-    public void setRenderMode(int renderMode) {
-        if (renderMode != GL2.GL_FILL && 
-                renderMode != GL2.GL_LINE &&
-                renderMode != GL2.GL_POINT) {
-            throw new IllegalArgumentException("invalid mode");
-        }
-        this.renderMode = renderMode;
-    }
-
-    /**
-     * @return {@link List} of {@link FeaturePoint}
-     */
-    public List<FeaturePoint> getFeaturePoints() {
-        return featurePoints;
-    }
-
-    /**
-     * Sets feature points
-     * @param featurePoints Feature points
-     */
-    public void setFeaturePoints(List<FeaturePoint> featurePoints) {
-        this.featurePoints = featurePoints;
-        List<Color> colors = new ArrayList<>();
-        featurePoints.forEach((_item) -> {
-            colors.add(this.color);
-        });
-        this.setFeaturePointsColor(colors);
-    }   
-    
-    /**
-     * @return {@link List} of feature points {@link Color}
-     */
-    public List<Color> getFeaturePointsColor() {
-        return featurePointsColor;
-    }
-
-    /**
-     * Sets colors of feature points
-     * @param featurePointsColor Colors of feature points
-     */
-    public void setFeaturePointsColor(List<Color> featurePointsColor) {
-        this.featurePointsColor = featurePointsColor;
-    } 
-    
-    /**
-     * @return {@code true} if feature points should be rendered
-     */
-    public boolean isRenderFeaturePoints() {
-        return renderFeaturePoints;
-    }
-
-    /**
-     * Sets if feature points should be renderred or not
-     * @param renderFeaturePoints 
-     */
-    public void setRenderFeaturePoints(boolean renderFeaturePoints) {
-        this.renderFeaturePoints = renderFeaturePoints;
-    }
-
-    /**
-     * @return {@code true} if back face shoud be shown
-     */
-    public boolean isShowBackface() {
-        return showBackface;
-    }
-
-    /**
-     * Sets if back face should be shown or not
-     * @param showBackface 
-     */
-    public void setShowBackface(boolean showBackface) {
-        this.showBackface = showBackface;
-    }
-    
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/Scene.java b/GUI/src/main/java/cz/fidentis/analyst/gui/scene/Scene.java
deleted file mode 100644
index 975fb80f3cc08fcd0a66fcdcd5f18f24488b1c46..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/Scene.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package cz.fidentis.analyst.gui.scene;
-
-import cz.fidentis.analyst.face.HumanFace;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * Abstract class for ...
- * 
- * @author Radek Oslejsek
- */
-public class Scene {
-    
-    private final HumanFace primaryFace;
-    
-    private final HumanFace secondaryFace ;
-    
-    private final List<DrawableMesh> drawables = new ArrayList<>();
-    
-    /**
-     * Constructor for single face analysis.
-     * 
-     * @param face Human face to be analyzed
-     * @throws IllegalArgumentException if the {@code face} is {@code null}
-     */
-    public Scene(HumanFace face) {
-        if (face == null) {
-            throw new IllegalArgumentException("face");
-        }
-        this.primaryFace = face;
-        this.secondaryFace = null;
-        
-        drawables.add(new DrawableMesh(primaryFace.getMeshModel()));
-    }
-    
-    /**
-     * Constructor for one-to-one analysis.
-     * 
-     * @param primary Primary face to be analyzed
-     * @param primary Secondary face to be analyzed
-     * @throws IllegalArgumentException if some face is {@code null}
-     */
-    public Scene(HumanFace primary, HumanFace secondary) {
-        if (primary == null) {
-            throw new IllegalArgumentException("primary");
-        }
-        if (secondary == null) {
-            throw new IllegalArgumentException("secondary");
-        }
-        this.primaryFace = primary;
-        this.secondaryFace = secondary;
-        
-        drawables.add(new DrawableMesh(primaryFace.getMeshModel()));
-        drawables.add(new DrawableMesh(secondaryFace.getMeshModel()));
-    }
-    
-    /**
-     * Returns all drawable objects in a modifiable collection (should be refactored in the future).
-     * 
-     * @return all drawable objects 
-     */
-    public Collection<DrawableMesh> getDrawables() {
-        return this.drawables;
-    }
-    
-    /*public void setDrawables(Collection<DrawableMesh> drawables) {
-        this.drawables = this.drawables;
-    }*/
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/tab/SingleFaceTab.form b/GUI/src/main/java/cz/fidentis/analyst/gui/tab/SingleFaceTab.form
deleted file mode 100644
index cebe2c58f760e41ebae4086d6afc2f22201b7e1e..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/tab/SingleFaceTab.form
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-<Form version="1.4" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
-  <AuxValues>
-    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
-    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
-    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
-    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
-  </AuxValues>
-
-  <Layout>
-    <DimensionLayout dim="0">
-      <Group type="103" groupAlignment="0" attributes="0">
-          <Component id="jToolBar1" pref="685" max="32767" attributes="0"/>
-          <Component id="canvas1" alignment="0" max="32767" attributes="0"/>
-      </Group>
-    </DimensionLayout>
-    <DimensionLayout dim="1">
-      <Group type="103" groupAlignment="0" attributes="0">
-          <Group type="102" attributes="0">
-              <Component id="jToolBar1" min="-2" max="-2" attributes="0"/>
-              <EmptySpace max="-2" attributes="0"/>
-              <Component id="canvas1" pref="434" max="32767" attributes="0"/>
-          </Group>
-      </Group>
-    </DimensionLayout>
-  </Layout>
-  <SubComponents>
-    <Component class="cz.fidentis.analyst.gui.canvas.Canvas" name="canvas1">
-    </Component>
-    <Container class="javax.swing.JToolBar" name="jToolBar1">
-      <Properties>
-        <Property name="rollover" type="boolean" value="true"/>
-      </Properties>
-
-      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout"/>
-      <SubComponents>
-        <Component class="javax.swing.JButton" name="jButton1">
-          <Properties>
-            <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-              <Image iconType="3" name="/wireframe16x1624.png"/>
-            </Property>
-            <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-              <ResourceString bundle="cz/fidentis/analyst/newgui/swing/Bundle.properties" key="SingleFaceTab.jButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-            </Property>
-            <Property name="focusable" type="boolean" value="false"/>
-            <Property name="horizontalTextPosition" type="int" value="0"/>
-            <Property name="verticalTextPosition" type="int" value="3"/>
-          </Properties>
-        </Component>
-      </SubComponents>
-    </Container>
-  </SubComponents>
-</Form>
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/tab/SingleFaceTab.java b/GUI/src/main/java/cz/fidentis/analyst/gui/tab/SingleFaceTab.java
deleted file mode 100644
index 60e82105374ed069fdcaf4b5a0d33ac2bc84ca6d..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/tab/SingleFaceTab.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package cz.fidentis.analyst.gui.tab;
-
-import cz.fidentis.analyst.gui.canvas.Canvas;
-import org.netbeans.api.settings.ConvertAsProperties;
-import org.openide.windows.TopComponent;
-
-/**
- * The non-singleton window/tab for detail inspection of a single face.
- * For the discussion on crating non-singleton top component, 
- * see {@link http://netbeans.apache.org/wiki/DevFaqNonSingletonTopComponents.asciidoc}.
- *
- * @author Richard Pajersky
- */
-@ConvertAsProperties(
-        dtd = "-//cz.fidentis.analyst.gui.tab//SingleFaceTab//EN",
-        autostore = false
-)
-public final class SingleFaceTab extends TopComponent {
-
-    /**
-     * Constructor.
-     */
-    public SingleFaceTab() {
-        initComponents();
-    }
-    
-    @Override
-    public int getPersistenceType() {
-        return TopComponent.PERSISTENCE_NEVER; // TO DO: change to .PERSISTENCE_ONLY_OPENED when we can re-create the ProjectTC
-    }
-
-    /**
-     * This method is called from within the constructor to initialize the form.
-     * WARNING: Do NOT modify this code. The content of this method is always
-     * regenerated by the Form Editor.
-     */
-    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
-    private void initComponents() {
-
-        canvas1 = new cz.fidentis.analyst.gui.canvas.Canvas();
-        jToolBar1 = new javax.swing.JToolBar();
-        jButton1 = new javax.swing.JButton();
-
-        jToolBar1.setRollover(true);
-
-        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/wireframe16x1624.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(SingleFaceTab.class, "SingleFaceTab.jButton1.text")); // NOI18N
-        jButton1.setFocusable(false);
-        jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
-        jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
-        jToolBar1.add(jButton1);
-
-        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
-        this.setLayout(layout);
-        layout.setHorizontalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 685, Short.MAX_VALUE)
-            .addComponent(canvas1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-        );
-        layout.setVerticalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(layout.createSequentialGroup()
-                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(canvas1, javax.swing.GroupLayout.DEFAULT_SIZE, 434, Short.MAX_VALUE))
-        );
-    }// </editor-fold>//GEN-END:initComponents
-
-    // Variables declaration - do not modify//GEN-BEGIN:variables
-    private cz.fidentis.analyst.gui.canvas.Canvas canvas1;
-    private javax.swing.JButton jButton1;
-    private javax.swing.JToolBar jToolBar1;
-    // End of variables declaration//GEN-END:variables
-    @Override
-    public void componentOpened() {
-        // TODO add custom code on component opening
-    }
-
-    @Override
-    public void componentClosed() {
-        // TODO add custom code on component closing
-    }
-
-    void writeProperties(java.util.Properties p) {
-        // better to version settings since initial version as advocated at
-        // http://wiki.apidesign.org/wiki/PropertyFiles
-        p.setProperty("version", "1.0");
-        // TODO store your settings
-    }
-
-    void readProperties(java.util.Properties p) {
-        String version = p.getProperty("version");
-        // TODO read your settings according to their version
-    }
-    
-    public Canvas getCanvas() {
-        return canvas1;
-    }
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/options/TestOptionsPanelController.java b/GUI/src/main/java/cz/fidentis/analyst/options/TestOptionsPanelController.java
similarity index 98%
rename from GUI/src/main/java/cz/fidentis/analyst/gui/options/TestOptionsPanelController.java
rename to GUI/src/main/java/cz/fidentis/analyst/options/TestOptionsPanelController.java
index 19b26bc9b29749e09fb9afdf4b4838a2d1c6c90e..f9e474f30e8d3b1eed05ff04484041b1a3c4594b 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/options/TestOptionsPanelController.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/options/TestOptionsPanelController.java
@@ -1,4 +1,4 @@
-package cz.fidentis.analyst.gui.options;
+package cz.fidentis.analyst.options;
 
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/options/TestPanel.form b/GUI/src/main/java/cz/fidentis/analyst/options/TestPanel.form
similarity index 93%
rename from GUI/src/main/java/cz/fidentis/analyst/gui/options/TestPanel.form
rename to GUI/src/main/java/cz/fidentis/analyst/options/TestPanel.form
index df4f02829e54efa3fd5b783d7bc18e1387d4d6b9..1ebf417cc58919ab5d74b10cdb7c91ad2a4c5252 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/options/TestPanel.form
+++ b/GUI/src/main/java/cz/fidentis/analyst/options/TestPanel.form
@@ -58,7 +58,7 @@
     <Component class="javax.swing.JLabel" name="jLabel1">
       <Properties>
         <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-          <ResourceString bundle="cz/fidentis/analyst/gui/options/Bundle.properties" key="TestPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+          <ResourceString bundle="cz/fidentis/analyst/options/Bundle.properties" key="TestPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
         </Property>
       </Properties>
     </Component>
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/options/TestPanel.java b/GUI/src/main/java/cz/fidentis/analyst/options/TestPanel.java
similarity index 98%
rename from GUI/src/main/java/cz/fidentis/analyst/gui/options/TestPanel.java
rename to GUI/src/main/java/cz/fidentis/analyst/options/TestPanel.java
index 3645d60d1237e59d4c5589fa9e5e44e2026d0b61..54c09e3c0fba88e5cc4447695f160c6a55212648 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/options/TestPanel.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/options/TestPanel.java
@@ -1,4 +1,4 @@
-package cz.fidentis.analyst.gui.options;
+package cz.fidentis.analyst.options;
 
 /**
  * Test option panel. To be replaced with suitable implementation(s)
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/options/package-info.java b/GUI/src/main/java/cz/fidentis/analyst/options/package-info.java
similarity index 92%
rename from GUI/src/main/java/cz/fidentis/analyst/gui/options/package-info.java
rename to GUI/src/main/java/cz/fidentis/analyst/options/package-info.java
index 29f2b35bf8d488e24222e3657c816ec774c837dd..9a55e97db4cfb93c75b388e120d3f5c8edd78654 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/options/package-info.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/options/package-info.java
@@ -3,7 +3,7 @@
  */
 @OptionsPanelController.ContainerRegistration(id = "Fidentis", categoryName = "#OptionsCategory_Name_Fidentis", iconBase = "logo-28x32.png", keywords = "#OptionsCategory_Keywords_Fidentis", keywordsCategory = "Fidentis")
 @NbBundle.Messages(value = {"OptionsCategory_Name_Fidentis=Fidentis", "OptionsCategory_Keywords_Fidentis=fidentis"})
-package cz.fidentis.analyst.gui.options;
+package cz.fidentis.analyst.options;
 
 import org.netbeans.spi.options.OptionsPanelController;
 import org.openide.util.NbBundle;
diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/ModelRotationAnimator.java b/GUI/src/main/java/cz/fidentis/analyst/registration/ModelRotationAnimator.java
index 0ca7f89cbfe2b5fab7f83215e55ba7e6a7832a69..af62ed7b220eaeb617aaf85207c97a640efc2552 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/registration/ModelRotationAnimator.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/registration/ModelRotationAnimator.java
@@ -1,13 +1,13 @@
 package cz.fidentis.analyst.registration;
 
-import cz.fidentis.analyst.gui.canvas.Direction;
+import cz.fidentis.analyst.canvas.Direction;
 import com.jogamp.opengl.util.FPSAnimator;
 import java.util.Timer;
 import java.util.TimerTask;
 
 /**
  * Animator used to animate transformations of model.
- * Based on {@link cz.fidentis.analyst.gui.canvas.RotationAnimator}.
+ * Based on {@link cz.fidentis.analyst.canvas.RotationAnimator}.
  * 
  * @author Richard Pajersky
  */
@@ -44,7 +44,7 @@ public class ModelRotationAnimator {
      * @param dir Transform direction
      * @param panel Panel
      */
-    public void startModelAnimation(Direction dir, PostRegistrationCP panel) {
+    public void startModelAnimation(Direction dir, RegistrationPanel panel) {
         if (this.direction != Direction.NONE) {
             throw new UnsupportedOperationException(); // this should no happen
         }
@@ -66,7 +66,7 @@ public class ModelRotationAnimator {
     /**
      * Stops the animation.
      */
-    public void stopModelAnimation(PostRegistrationCP panel) {
+    public void stopModelAnimation(RegistrationPanel panel) {
         timer.cancel();
         if ((System.currentTimeMillis() - startClickTime) < 500) {
                 panel.transform(direction);
diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationCP.java b/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationCP.java
deleted file mode 100644
index ad014e815d6fc778cdffcb0279816f6053cd2fbd..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationCP.java
+++ /dev/null
@@ -1,2074 +0,0 @@
-package cz.fidentis.analyst.registration;
-
-import cz.fidentis.analyst.gui.canvas.Direction;
-import java.awt.Color;
-import javax.swing.JColorChooser;
-
-/**
- * Panel used to interactively visualize two face and adjust their registration.
- * 
- * @author Richard Pajersky
- */
-public class PostRegistrationCP extends javax.swing.JPanel {
-
-    /**
-     * Listener which translates executed actions 
-     * into {@link cz.fidentis.analyst.gui.scene.DrawableMesh}
-     */
-    private PostRegistrationListener listener;
-    /**
-     * Animator which animates transformations
-     */
-    private final ModelRotationAnimator animator = new ModelRotationAnimator();
-    
-    /**
-     * Creates new form {@link PostRegistrationPanel}
-     * 
-     * @param listener Listener
-     */
-    public void initPostRegistrationCP(PostRegistrationListener listener) {
-        initComponents();
-        this.listener = listener;
-        setDefaults();
-    }
-    
-    /**
-     * Additional initialization of panel
-     */
-    private void setDefaults() {
-        primaryColorPanel.setBackground(PostRegistrationListener.DEFAULT_PRIMARY_COLOR);
-        secondaryColorPanel.setBackground(PostRegistrationListener.DEFAULT_SECONDARY_COLOR);
-        primaryFillRB.setSelected(true);
-        secondaryFillRB.setSelected(true);
-        lowShiftRB.setSelected(true);
-        thersholdFTF.setValue(listener.getFeaturePointsThreshold());
-        resetAllButtonActionPerformed(null);
-    }
-    
-    /**
-     * Alters transformation based on move amount specified in listener
-     * by updating specific formatted field
-     * 
-     * @param dir Transformation direction
-     * @throws UnsupportedOperationException if {@code dir} is invalid
-     */
-    public void transform(Direction dir) {
-        double newValue;
-        switch (dir) {
-            case TRANSLATE_LEFT:
-                newValue = ((Number)translationXFTF.getValue()).doubleValue() - listener.getMoveModifier();
-                translationXFTF.setValue(newValue);
-                break;
-            case TRANSLATE_RIGHT:
-                newValue = ((Number)translationXFTF.getValue()).doubleValue() + listener.getMoveModifier();
-                translationXFTF.setValue(newValue);
-                break;
-            case TRANSLATE_UP:
-                newValue = ((Number)translationYFTF.getValue()).doubleValue() - listener.getMoveModifier();
-                translationYFTF.setValue(newValue);
-                break;
-            case TRANSLATE_DOWN:
-                newValue = ((Number)translationYFTF.getValue()).doubleValue() + listener.getMoveModifier();
-                translationYFTF.setValue(newValue);
-                break;
-            case TRANSLATE_IN:
-                newValue = ((Number)translationZFTF.getValue()).doubleValue() - listener.getMoveModifier();
-                translationZFTF.setValue(newValue);
-                break;
-            case TRANSLATE_OUT:
-                newValue = ((Number)translationZFTF.getValue()).doubleValue() + listener.getMoveModifier();
-                translationZFTF.setValue(newValue);
-                break;
-            case ROTATE_LEFT:
-                newValue = ((Number)rotationXFTF.getValue()).doubleValue() - listener.getMoveModifier();
-                rotationXFTF.setValue(newValue);
-                break;
-            case ROTATE_RIGHT:
-                newValue = ((Number)rotationXFTF.getValue()).doubleValue() + listener.getMoveModifier();
-                rotationXFTF.setValue(newValue);
-                break;
-            case ROTATE_UP:
-                newValue = ((Number)rotationYFTF.getValue()).doubleValue() - listener.getMoveModifier();
-                rotationYFTF.setValue(newValue);
-                break;
-            case ROTATE_DOWN:
-                newValue = ((Number)rotationYFTF.getValue()).doubleValue() + listener.getMoveModifier();
-                rotationYFTF.setValue(newValue);
-                break;
-            case ROTATE_IN:
-                newValue = ((Number)rotationZFTF.getValue()).doubleValue() - listener.getMoveModifier();
-                rotationZFTF.setValue(newValue);
-                break;
-            case ROTATE_OUT:
-                newValue = ((Number)rotationZFTF.getValue()).doubleValue() + listener.getMoveModifier();
-                rotationZFTF.setValue(newValue);
-                break;
-            case ZOOM_OUT:
-                newValue = ((Number)scaleFTF.getValue()).doubleValue() - listener.getMoveModifier();
-                scaleFTF.setValue(newValue);
-                break;
-            case ZOOM_IN:
-                newValue = ((Number)scaleFTF.getValue()).doubleValue() + listener.getMoveModifier();
-                scaleFTF.setValue(newValue);
-                break;
-            default:
-                throw new UnsupportedOperationException();
-        }
-    }
-
-    /**
-     * This method is called from within the constructor to initialize the form.
-     * WARNING: Do NOT modify this code. The content of this method is always
-     * regenerated by the Form Editor.
-     */
-    @SuppressWarnings("unchecked")
-    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
-    private void initComponents() {
-
-        primaryRenderModeGroup = new javax.swing.ButtonGroup();
-        secondaryRenerModeGroup = new javax.swing.ButtonGroup();
-        precisionGroup = new javax.swing.ButtonGroup();
-        registrationAdjustmentLabel = new javax.swing.JLabel();
-        jSeparator11 = new javax.swing.JSeparator();
-        visualizationPanel = new javax.swing.JPanel();
-        jSeparator8 = new javax.swing.JSeparator();
-        jSeparator4 = new javax.swing.JSeparator();
-        visualizationLabel = new javax.swing.JLabel();
-        jSeparator1 = new javax.swing.JSeparator();
-        modelPanel = new javax.swing.JPanel();
-        modelLabel = new javax.swing.JLabel();
-        pointsLabel = new javax.swing.JLabel();
-        transparencyButton = new javax.swing.JButton();
-        linesLabel = new javax.swing.JLabel();
-        colorButton = new javax.swing.JButton();
-        fillLabel = new javax.swing.JLabel();
-        renderModeLabel = new javax.swing.JLabel();
-        secondaryHighlightsCB = new javax.swing.JCheckBox();
-        primaryHighlightsCB = new javax.swing.JCheckBox();
-        highlightsLabel = new javax.swing.JLabel();
-        primaryLabel = new javax.swing.JLabel();
-        secondaryLabel = new javax.swing.JLabel();
-        transparencySlider = new javax.swing.JSlider();
-        secondaryColorPanel = new javax.swing.JPanel();
-        primaryColorPanel = new javax.swing.JPanel();
-        primaryLinesRB = new javax.swing.JRadioButton();
-        secondaryFillRB = new javax.swing.JRadioButton();
-        primaryPointsRB = new javax.swing.JRadioButton();
-        secondaryPointsRB = new javax.swing.JRadioButton();
-        secondaryLinesRB = new javax.swing.JRadioButton();
-        primaryFillRB = new javax.swing.JRadioButton();
-        viewPanel = new javax.swing.JPanel();
-        profileButton = new javax.swing.JButton();
-        frontButton = new javax.swing.JButton();
-        viewLabel = new javax.swing.JLabel();
-        backfaceButton = new javax.swing.JToggleButton();
-        featurePointsPanel = new javax.swing.JPanel();
-        featurePointsButton = new javax.swing.JToggleButton();
-        thresholdDownButton = new javax.swing.JButton();
-        thersholdUpButton = new javax.swing.JButton();
-        thersholdButton = new javax.swing.JButton();
-        thersholdFTF = new javax.swing.JFormattedTextField();
-        featurePointsLabel = new javax.swing.JLabel();
-        jSeparator3 = new javax.swing.JSeparator();
-        transformationPanel = new javax.swing.JPanel();
-        transformationLabel = new javax.swing.JLabel();
-        jSeparator2 = new javax.swing.JSeparator();
-        jSeparator6 = new javax.swing.JSeparator();
-        translationPanel = new javax.swing.JPanel();
-        translationButton = new javax.swing.JButton();
-        jLabel2 = new javax.swing.JLabel();
-        rightTranslationXButton = new javax.swing.JButton();
-        translationXFTF = new javax.swing.JFormattedTextField();
-        leftTranslationYButton = new javax.swing.JButton();
-        translationYFTF = new javax.swing.JFormattedTextField();
-        rightTranslationYButton = new javax.swing.JButton();
-        translXLabel = new javax.swing.JLabel();
-        translationZFTF = new javax.swing.JFormattedTextField();
-        translZLabel = new javax.swing.JLabel();
-        translYLabel = new javax.swing.JLabel();
-        rightTranslationZButton = new javax.swing.JButton();
-        leftTranslationXButton = new javax.swing.JButton();
-        leftTranslationZButton = new javax.swing.JButton();
-        rotationPanel = new javax.swing.JPanel();
-        leftRotationYButton = new javax.swing.JButton();
-        leftRotationXButton = new javax.swing.JButton();
-        rotatZLabel = new javax.swing.JLabel();
-        rotatYLabel = new javax.swing.JLabel();
-        rotatXLabel = new javax.swing.JLabel();
-        rotationButton = new javax.swing.JButton();
-        rotationZFTF = new javax.swing.JFormattedTextField();
-        rotationYFTF = new javax.swing.JFormattedTextField();
-        rightRotationZButton = new javax.swing.JButton();
-        rightRotationYButton = new javax.swing.JButton();
-        leftRotationZButton = new javax.swing.JButton();
-        rightRotationXButton = new javax.swing.JButton();
-        rotationXFTF = new javax.swing.JFormattedTextField();
-        jLabel3 = new javax.swing.JLabel();
-        scalePanel = new javax.swing.JPanel();
-        jLabel4 = new javax.swing.JLabel();
-        scalePlusButton = new javax.swing.JButton();
-        scaleMinusButton = new javax.swing.JButton();
-        scaleFTF = new javax.swing.JFormattedTextField();
-        scaleButton = new javax.swing.JButton();
-        resetAllButton = new javax.swing.JButton();
-        jSeparator7 = new javax.swing.JSeparator();
-        jSeparator9 = new javax.swing.JSeparator();
-        shiftPanel = new javax.swing.JPanel();
-        shiftLabel = new javax.swing.JLabel();
-        lowShiftRB = new javax.swing.JRadioButton();
-        highShiftRB = new javax.swing.JRadioButton();
-        jSeparator10 = new javax.swing.JSeparator();
-        applyButton = new javax.swing.JButton();
-        jSeparator5 = new javax.swing.JSeparator();
-
-        setMinimumSize(new java.awt.Dimension(415, 700));
-        setPreferredSize(new java.awt.Dimension(415, 700));
-
-        registrationAdjustmentLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(registrationAdjustmentLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.registrationAdjustmentLabel.text")); // NOI18N
-
-        visualizationPanel.setMinimumSize(new java.awt.Dimension(400, 0));
-        visualizationPanel.setPreferredSize(new java.awt.Dimension(400, 265));
-
-        visualizationLabel.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(visualizationLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.visualizationLabel.text")); // NOI18N
-
-        modelLabel.setFont(new java.awt.Font("Tahoma", 3, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(modelLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.modelLabel.text")); // NOI18N
-
-        org.openide.awt.Mnemonics.setLocalizedText(pointsLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.pointsLabel.text")); // NOI18N
-
-        transparencyButton.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(transparencyButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.transparencyButton.text")); // NOI18N
-        transparencyButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.transparencyButton.toolTipText")); // NOI18N
-        transparencyButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder()));
-        transparencyButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        transparencyButton.setPreferredSize(new java.awt.Dimension(100, 19));
-        transparencyButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                transparencyButtonActionPerformed(evt);
-            }
-        });
-
-        org.openide.awt.Mnemonics.setLocalizedText(linesLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.linesLabel.text")); // NOI18N
-
-        colorButton.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(colorButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.colorButton.text")); // NOI18N
-        colorButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.colorButton.toolTipText")); // NOI18N
-        colorButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder()));
-        colorButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        colorButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
-        colorButton.setIconTextGap(0);
-        colorButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                colorButtonActionPerformed(evt);
-            }
-        });
-
-        org.openide.awt.Mnemonics.setLocalizedText(fillLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.fillLabel.text")); // NOI18N
-
-        renderModeLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(renderModeLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.renderModeLabel.text")); // NOI18N
-
-        org.openide.awt.Mnemonics.setLocalizedText(secondaryHighlightsCB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.secondaryHighlightsCB.text")); // NOI18N
-        secondaryHighlightsCB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
-        secondaryHighlightsCB.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                secondaryHighlightsCBActionPerformed(evt);
-            }
-        });
-
-        org.openide.awt.Mnemonics.setLocalizedText(primaryHighlightsCB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.primaryHighlightsCB.text")); // NOI18N
-        primaryHighlightsCB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
-        primaryHighlightsCB.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                primaryHighlightsCBActionPerformed(evt);
-            }
-        });
-
-        highlightsLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(highlightsLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.highlightsLabel.text")); // NOI18N
-
-        primaryLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(primaryLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.primaryLabel.text")); // NOI18N
-
-        secondaryLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(secondaryLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.secondaryLabel.text")); // NOI18N
-        secondaryLabel.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.secondaryLabel.toolTipText")); // NOI18N
-
-        transparencySlider.setMajorTickSpacing(5);
-        transparencySlider.setMaximum(20);
-        transparencySlider.setMinorTickSpacing(5);
-        transparencySlider.setOrientation(javax.swing.JSlider.VERTICAL);
-        transparencySlider.setPaintTicks(true);
-        transparencySlider.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.transparencySlider.toolTipText")); // NOI18N
-        transparencySlider.setValue(10);
-        transparencySlider.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        transparencySlider.addChangeListener(new javax.swing.event.ChangeListener() {
-            public void stateChanged(javax.swing.event.ChangeEvent evt) {
-                transparencySliderStateChanged(evt);
-            }
-        });
-
-        secondaryColorPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
-        secondaryColorPanel.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.secondaryColorPanel.toolTipText")); // NOI18N
-        secondaryColorPanel.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        secondaryColorPanel.setPreferredSize(new java.awt.Dimension(70, 14));
-        secondaryColorPanel.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                secondaryColorPanelMouseClicked(evt);
-            }
-        });
-
-        javax.swing.GroupLayout secondaryColorPanelLayout = new javax.swing.GroupLayout(secondaryColorPanel);
-        secondaryColorPanel.setLayout(secondaryColorPanelLayout);
-        secondaryColorPanelLayout.setHorizontalGroup(
-            secondaryColorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 48, Short.MAX_VALUE)
-        );
-        secondaryColorPanelLayout.setVerticalGroup(
-            secondaryColorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 12, Short.MAX_VALUE)
-        );
-
-        primaryColorPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
-        primaryColorPanel.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.primaryColorPanel.toolTipText")); // NOI18N
-        primaryColorPanel.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        primaryColorPanel.setPreferredSize(new java.awt.Dimension(72, 14));
-        primaryColorPanel.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mouseClicked(java.awt.event.MouseEvent evt) {
-                primaryColorPanelMouseClicked(evt);
-            }
-        });
-
-        javax.swing.GroupLayout primaryColorPanelLayout = new javax.swing.GroupLayout(primaryColorPanel);
-        primaryColorPanel.setLayout(primaryColorPanelLayout);
-        primaryColorPanelLayout.setHorizontalGroup(
-            primaryColorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 48, Short.MAX_VALUE)
-        );
-        primaryColorPanelLayout.setVerticalGroup(
-            primaryColorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 12, Short.MAX_VALUE)
-        );
-
-        primaryRenderModeGroup.add(primaryLinesRB);
-        org.openide.awt.Mnemonics.setLocalizedText(primaryLinesRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.primaryLinesRB.text")); // NOI18N
-        primaryLinesRB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
-        primaryLinesRB.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                primaryLinesRBActionPerformed(evt);
-            }
-        });
-
-        secondaryRenerModeGroup.add(secondaryFillRB);
-        org.openide.awt.Mnemonics.setLocalizedText(secondaryFillRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.secondaryFillRB.text")); // NOI18N
-        secondaryFillRB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
-        secondaryFillRB.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                secondaryFillRBActionPerformed(evt);
-            }
-        });
-
-        primaryRenderModeGroup.add(primaryPointsRB);
-        org.openide.awt.Mnemonics.setLocalizedText(primaryPointsRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.primaryPointsRB.text")); // NOI18N
-        primaryPointsRB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
-        primaryPointsRB.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                primaryPointsRBActionPerformed(evt);
-            }
-        });
-
-        secondaryRenerModeGroup.add(secondaryPointsRB);
-        org.openide.awt.Mnemonics.setLocalizedText(secondaryPointsRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.secondaryPointsRB.text")); // NOI18N
-        secondaryPointsRB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
-        secondaryPointsRB.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                secondaryPointsRBActionPerformed(evt);
-            }
-        });
-
-        secondaryRenerModeGroup.add(secondaryLinesRB);
-        org.openide.awt.Mnemonics.setLocalizedText(secondaryLinesRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.secondaryLinesRB.text")); // NOI18N
-        secondaryLinesRB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
-        secondaryLinesRB.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                secondaryLinesRBActionPerformed(evt);
-            }
-        });
-
-        primaryRenderModeGroup.add(primaryFillRB);
-        org.openide.awt.Mnemonics.setLocalizedText(primaryFillRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.primaryFillRB.text")); // NOI18N
-        primaryFillRB.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
-        primaryFillRB.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                primaryFillRBActionPerformed(evt);
-            }
-        });
-
-        javax.swing.GroupLayout modelPanelLayout = new javax.swing.GroupLayout(modelPanel);
-        modelPanel.setLayout(modelPanelLayout);
-        modelPanelLayout.setHorizontalGroup(
-            modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(modelPanelLayout.createSequentialGroup()
-                .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(primaryLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(modelLabel)
-                    .addComponent(secondaryLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-                .addGap(18, 18, 18)
-                .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(modelPanelLayout.createSequentialGroup()
-                        .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(highlightsLabel)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                        .addComponent(renderModeLabel)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                        .addComponent(transparencyButton, javax.swing.GroupLayout.DEFAULT_SIZE, 67, Short.MAX_VALUE))
-                    .addGroup(modelPanelLayout.createSequentialGroup()
-                        .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addGroup(modelPanelLayout.createSequentialGroup()
-                                .addComponent(primaryColorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addGap(18, 18, 18)
-                                .addComponent(primaryHighlightsCB)
-                                .addGap(28, 28, 28)
-                                .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                    .addGroup(modelPanelLayout.createSequentialGroup()
-                                        .addComponent(primaryFillRB)
-                                        .addGap(18, 18, 18)
-                                        .addComponent(primaryLinesRB)
-                                        .addGap(18, 18, 18)
-                                        .addComponent(primaryPointsRB))
-                                    .addGroup(modelPanelLayout.createSequentialGroup()
-                                        .addComponent(secondaryFillRB)
-                                        .addGap(18, 18, 18)
-                                        .addComponent(secondaryLinesRB)
-                                        .addGap(18, 18, 18)
-                                        .addComponent(secondaryPointsRB))
-                                    .addGroup(modelPanelLayout.createSequentialGroup()
-                                        .addComponent(fillLabel)
-                                        .addGap(18, 18, 18)
-                                        .addComponent(linesLabel)
-                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                        .addComponent(pointsLabel))))
-                            .addGroup(modelPanelLayout.createSequentialGroup()
-                                .addComponent(secondaryColorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addGap(18, 18, 18)
-                                .addComponent(secondaryHighlightsCB)))
-                        .addGap(18, 18, 18)
-                        .addComponent(transparencySlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addGap(0, 0, Short.MAX_VALUE)))
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-        modelPanelLayout.setVerticalGroup(
-            modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(modelPanelLayout.createSequentialGroup()
-                .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(highlightsLabel)
-                    .addComponent(renderModeLabel)
-                    .addComponent(transparencyButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(colorButton))
-                .addGap(4, 4, 4)
-                .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(modelPanelLayout.createSequentialGroup()
-                        .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                            .addComponent(fillLabel)
-                            .addComponent(pointsLabel)
-                            .addComponent(linesLabel))
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(primaryPointsRB)
-                        .addGap(0, 0, Short.MAX_VALUE))
-                    .addComponent(transparencySlider, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)))
-            .addGroup(modelPanelLayout.createSequentialGroup()
-                .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                    .addComponent(secondaryColorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addGroup(modelPanelLayout.createSequentialGroup()
-                        .addComponent(modelLabel)
-                        .addGap(29, 29, 29)
-                        .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addComponent(primaryHighlightsCB)
-                            .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                                .addComponent(primaryColorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addComponent(primaryLabel))
-                            .addComponent(primaryFillRB)
-                            .addComponent(primaryLinesRB))
-                        .addGap(14, 14, 14)
-                        .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                            .addGroup(modelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                .addComponent(secondaryLabel)
-                                .addComponent(secondaryHighlightsCB, javax.swing.GroupLayout.Alignment.TRAILING))
-                            .addComponent(secondaryFillRB)
-                            .addComponent(secondaryLinesRB)
-                            .addComponent(secondaryPointsRB))))
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-
-        org.openide.awt.Mnemonics.setLocalizedText(profileButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.profileButton.text")); // NOI18N
-        profileButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.profileButton.toolTipText")); // NOI18N
-        profileButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder()));
-        profileButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        profileButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                profileButtonActionPerformed(evt);
-            }
-        });
-
-        org.openide.awt.Mnemonics.setLocalizedText(frontButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.frontButton.text")); // NOI18N
-        frontButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.frontButton.toolTipText")); // NOI18N
-        frontButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder()));
-        frontButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        frontButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                frontButtonActionPerformed(evt);
-            }
-        });
-
-        viewLabel.setFont(new java.awt.Font("Tahoma", 3, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(viewLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.viewLabel.text")); // NOI18N
-
-        org.openide.awt.Mnemonics.setLocalizedText(backfaceButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.backfaceButton.text")); // NOI18N
-        backfaceButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder()));
-        backfaceButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                backfaceButtonActionPerformed(evt);
-            }
-        });
-
-        javax.swing.GroupLayout viewPanelLayout = new javax.swing.GroupLayout(viewPanel);
-        viewPanel.setLayout(viewPanelLayout);
-        viewPanelLayout.setHorizontalGroup(
-            viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(viewPanelLayout.createSequentialGroup()
-                .addComponent(viewLabel)
-                .addGap(18, 18, 18)
-                .addComponent(frontButton, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(18, 18, 18)
-                .addComponent(profileButton, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(18, 18, 18)
-                .addComponent(backfaceButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-        viewPanelLayout.setVerticalGroup(
-            viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                .addComponent(viewLabel)
-                .addComponent(frontButton)
-                .addComponent(profileButton)
-                .addComponent(backfaceButton))
-        );
-
-        org.openide.awt.Mnemonics.setLocalizedText(featurePointsButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.featurePointsButton.text")); // NOI18N
-        featurePointsButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        featurePointsButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                featurePointsButtonActionPerformed(evt);
-            }
-        });
-
-        thresholdDownButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/subtract-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(thresholdDownButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.thresholdDownButton.text")); // NOI18N
-        thresholdDownButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        thresholdDownButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        thresholdDownButton.setEnabled(false);
-        thresholdDownButton.setMaximumSize(new java.awt.Dimension(24, 24));
-        thresholdDownButton.setMinimumSize(new java.awt.Dimension(24, 24));
-        thresholdDownButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        thresholdDownButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                thresholdDownButtonActionPerformed(evt);
-            }
-        });
-
-        thersholdUpButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/add-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(thersholdUpButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.thersholdUpButton.text")); // NOI18N
-        thersholdUpButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        thersholdUpButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        thersholdUpButton.setEnabled(false);
-        thersholdUpButton.setMaximumSize(new java.awt.Dimension(24, 24));
-        thersholdUpButton.setMinimumSize(new java.awt.Dimension(24, 24));
-        thersholdUpButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        thersholdUpButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                thersholdUpButtonActionPerformed(evt);
-            }
-        });
-
-        thersholdButton.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(thersholdButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.thersholdButton.text")); // NOI18N
-        thersholdButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        thersholdButton.setEnabled(false);
-        thersholdButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                thersholdButtonActionPerformed(evt);
-            }
-        });
-
-        thersholdFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
-        thersholdFTF.setEnabled(false);
-        thersholdFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
-            public void propertyChange(java.beans.PropertyChangeEvent evt) {
-                thersholdFTFPropertyChange(evt);
-            }
-        });
-
-        featurePointsLabel.setFont(new java.awt.Font("Tahoma", 3, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(featurePointsLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.featurePointsLabel.text")); // NOI18N
-
-        javax.swing.GroupLayout featurePointsPanelLayout = new javax.swing.GroupLayout(featurePointsPanel);
-        featurePointsPanel.setLayout(featurePointsPanelLayout);
-        featurePointsPanelLayout.setHorizontalGroup(
-            featurePointsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(featurePointsPanelLayout.createSequentialGroup()
-                .addComponent(featurePointsLabel)
-                .addGap(18, 18, 18)
-                .addComponent(featurePointsButton, javax.swing.GroupLayout.DEFAULT_SIZE, 43, Short.MAX_VALUE)
-                .addGap(18, 18, 18)
-                .addComponent(thersholdButton)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(thersholdFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(thersholdUpButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(thresholdDownButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-        );
-        featurePointsPanelLayout.setVerticalGroup(
-            featurePointsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(featurePointsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                .addComponent(featurePointsLabel)
-                .addComponent(featurePointsButton)
-                .addComponent(thersholdButton)
-                .addComponent(thersholdFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-            .addComponent(thersholdUpButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-            .addComponent(thresholdDownButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-        );
-
-        javax.swing.GroupLayout visualizationPanelLayout = new javax.swing.GroupLayout(visualizationPanel);
-        visualizationPanel.setLayout(visualizationPanelLayout);
-        visualizationPanelLayout.setHorizontalGroup(
-            visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(visualizationPanelLayout.createSequentialGroup()
-                .addContainerGap()
-                .addGroup(visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                    .addComponent(jSeparator1)
-                    .addComponent(jSeparator4)
-                    .addComponent(jSeparator8)
-                    .addComponent(visualizationLabel)
-                    .addComponent(modelPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(featurePointsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(viewPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-                .addContainerGap(12, Short.MAX_VALUE))
-            .addComponent(jSeparator3)
-        );
-        visualizationPanelLayout.setVerticalGroup(
-            visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, visualizationPanelLayout.createSequentialGroup()
-                .addComponent(visualizationLabel)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                .addComponent(jSeparator4, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(modelPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(jSeparator8, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(viewPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(featurePointsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(34, 34, 34)
-                .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(19, 19, 19))
-        );
-
-        transformationPanel.setPreferredSize(new java.awt.Dimension(400, 400));
-
-        transformationLabel.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(transformationLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.transformationLabel.text")); // NOI18N
-
-        translationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/restart-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(translationButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.translationButton.text")); // NOI18N
-        translationButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.translationButton.toolTipText")); // NOI18N
-        translationButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        translationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        translationButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        translationButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                translationButtonActionPerformed(evt);
-            }
-        });
-
-        jLabel2.setFont(new java.awt.Font("Tahoma", 3, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.jLabel2.text")); // NOI18N
-
-        rightTranslationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(rightTranslationXButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rightTranslationXButton.text")); // NOI18N
-        rightTranslationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        rightTranslationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        rightTranslationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        rightTranslationXButton.setMaximumSize(new java.awt.Dimension(24, 24));
-        rightTranslationXButton.setMinimumSize(new java.awt.Dimension(24, 24));
-        rightTranslationXButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        rightTranslationXButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                rightTranslationXButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                rightTranslationXButtonMouseReleased(evt);
-            }
-        });
-
-        translationXFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
-        translationXFTF.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.translationXFTF.toolTipText")); // NOI18N
-        translationXFTF.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR));
-        translationXFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
-            public void propertyChange(java.beans.PropertyChangeEvent evt) {
-                translationXFTFPropertyChange(evt);
-            }
-        });
-
-        leftTranslationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(leftTranslationYButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.leftTranslationYButton.text")); // NOI18N
-        leftTranslationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        leftTranslationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        leftTranslationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        leftTranslationYButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        leftTranslationYButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                leftTranslationYButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                leftTranslationYButtonMouseReleased(evt);
-            }
-        });
-
-        translationYFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
-        translationYFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
-            public void propertyChange(java.beans.PropertyChangeEvent evt) {
-                translationYFTFPropertyChange(evt);
-            }
-        });
-
-        rightTranslationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(rightTranslationYButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rightTranslationYButton.text")); // NOI18N
-        rightTranslationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        rightTranslationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        rightTranslationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        rightTranslationYButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        rightTranslationYButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                rightTranslationYButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                rightTranslationYButtonMouseReleased(evt);
-            }
-        });
-
-        translXLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(translXLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.translXLabel.text")); // NOI18N
-
-        translationZFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
-        translationZFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
-            public void propertyChange(java.beans.PropertyChangeEvent evt) {
-                translationZFTFPropertyChange(evt);
-            }
-        });
-
-        translZLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(translZLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.translZLabel.text")); // NOI18N
-
-        translYLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(translYLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.translYLabel.text")); // NOI18N
-
-        rightTranslationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(rightTranslationZButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rightTranslationZButton.text")); // NOI18N
-        rightTranslationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        rightTranslationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        rightTranslationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        rightTranslationZButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        rightTranslationZButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                rightTranslationZButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                rightTranslationZButtonMouseReleased(evt);
-            }
-        });
-
-        leftTranslationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(leftTranslationXButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.leftTranslationXButton.text")); // NOI18N
-        leftTranslationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        leftTranslationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        leftTranslationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        leftTranslationXButton.setMaximumSize(new java.awt.Dimension(24, 24));
-        leftTranslationXButton.setMinimumSize(new java.awt.Dimension(24, 24));
-        leftTranslationXButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        leftTranslationXButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                leftTranslationXButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                leftTranslationXButtonMouseReleased(evt);
-            }
-        });
-
-        leftTranslationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(leftTranslationZButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.leftTranslationZButton.text")); // NOI18N
-        leftTranslationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        leftTranslationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        leftTranslationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        leftTranslationZButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        leftTranslationZButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                leftTranslationZButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                leftTranslationZButtonMouseReleased(evt);
-            }
-        });
-
-        javax.swing.GroupLayout translationPanelLayout = new javax.swing.GroupLayout(translationPanel);
-        translationPanel.setLayout(translationPanelLayout);
-        translationPanelLayout.setHorizontalGroup(
-            translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(translationPanelLayout.createSequentialGroup()
-                .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(translationPanelLayout.createSequentialGroup()
-                        .addComponent(jLabel2)
-                        .addGap(28, 28, 28))
-                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, translationPanelLayout.createSequentialGroup()
-                        .addComponent(translationButton)
-                        .addGap(18, 18, 18)))
-                .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                    .addComponent(translXLabel)
-                    .addComponent(translationXFTF)
-                    .addGroup(translationPanelLayout.createSequentialGroup()
-                        .addComponent(leftTranslationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(rightTranslationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
-                .addGap(18, 18, 18)
-                .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                    .addGroup(translationPanelLayout.createSequentialGroup()
-                        .addComponent(leftTranslationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(rightTranslationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                    .addComponent(translYLabel)
-                    .addComponent(translationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addGap(18, 18, 18)
-                .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(translationPanelLayout.createSequentialGroup()
-                        .addComponent(leftTranslationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(rightTranslationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                    .addComponent(translationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(translZLabel))
-                .addContainerGap(14, Short.MAX_VALUE))
-        );
-        translationPanelLayout.setVerticalGroup(
-            translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(translationPanelLayout.createSequentialGroup()
-                .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                        .addComponent(translXLabel)
-                        .addComponent(translYLabel)
-                        .addComponent(translZLabel))
-                    .addComponent(jLabel2))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(translationPanelLayout.createSequentialGroup()
-                        .addComponent(rightTranslationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addGap(0, 0, Short.MAX_VALUE))
-                    .addGroup(translationPanelLayout.createSequentialGroup()
-                        .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addComponent(leftTranslationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(rightTranslationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                                .addGroup(translationPanelLayout.createSequentialGroup()
-                                    .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                        .addComponent(rightTranslationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                        .addComponent(leftTranslationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                    .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                                        .addComponent(translationXFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                        .addComponent(translationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                        .addComponent(translationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
-                                .addComponent(translationButton))
-                            .addComponent(leftTranslationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
-        );
-
-        leftRotationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(leftRotationYButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.leftRotationYButton.text")); // NOI18N
-        leftRotationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        leftRotationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        leftRotationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        leftRotationYButton.setMaximumSize(new java.awt.Dimension(24, 24));
-        leftRotationYButton.setMinimumSize(new java.awt.Dimension(24, 24));
-        leftRotationYButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        leftRotationYButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                leftRotationYButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                leftRotationYButtonMouseReleased(evt);
-            }
-        });
-
-        leftRotationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(leftRotationXButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.leftRotationXButton.text")); // NOI18N
-        leftRotationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        leftRotationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        leftRotationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        leftRotationXButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        leftRotationXButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                leftRotationXButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                leftRotationXButtonMouseReleased(evt);
-            }
-        });
-
-        rotatZLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(rotatZLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rotatZLabel.text")); // NOI18N
-
-        rotatYLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(rotatYLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rotatYLabel.text")); // NOI18N
-
-        rotatXLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(rotatXLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rotatXLabel.text")); // NOI18N
-
-        rotationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/restart-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(rotationButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rotationButton.text")); // NOI18N
-        rotationButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rotationButton.toolTipText")); // NOI18N
-        rotationButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        rotationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        rotationButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        rotationButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                rotationButtonActionPerformed(evt);
-            }
-        });
-
-        rotationZFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
-        rotationZFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
-            public void propertyChange(java.beans.PropertyChangeEvent evt) {
-                rotationZFTFPropertyChange(evt);
-            }
-        });
-
-        rotationYFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
-        rotationYFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
-            public void propertyChange(java.beans.PropertyChangeEvent evt) {
-                rotationYFTFPropertyChange(evt);
-            }
-        });
-
-        rightRotationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(rightRotationZButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rightRotationZButton.text")); // NOI18N
-        rightRotationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        rightRotationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        rightRotationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        rightRotationZButton.setMaximumSize(new java.awt.Dimension(24, 24));
-        rightRotationZButton.setMinimumSize(new java.awt.Dimension(24, 24));
-        rightRotationZButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        rightRotationZButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                rightRotationZButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                rightRotationZButtonMouseReleased(evt);
-            }
-        });
-
-        rightRotationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(rightRotationYButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rightRotationYButton.text")); // NOI18N
-        rightRotationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        rightRotationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        rightRotationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        rightRotationYButton.setMaximumSize(new java.awt.Dimension(24, 24));
-        rightRotationYButton.setMinimumSize(new java.awt.Dimension(24, 24));
-        rightRotationYButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        rightRotationYButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                rightRotationYButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                rightRotationYButtonMouseReleased(evt);
-            }
-        });
-
-        leftRotationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(leftRotationZButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.leftRotationZButton.text")); // NOI18N
-        leftRotationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        leftRotationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        leftRotationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        leftRotationZButton.setMaximumSize(new java.awt.Dimension(24, 24));
-        leftRotationZButton.setMinimumSize(new java.awt.Dimension(24, 24));
-        leftRotationZButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        leftRotationZButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                leftRotationZButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                leftRotationZButtonMouseReleased(evt);
-            }
-        });
-
-        rightRotationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(rightRotationXButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rightRotationXButton.text")); // NOI18N
-        rightRotationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        rightRotationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        rightRotationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        rightRotationXButton.setMaximumSize(new java.awt.Dimension(24, 24));
-        rightRotationXButton.setMinimumSize(new java.awt.Dimension(24, 24));
-        rightRotationXButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        rightRotationXButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                rightRotationXButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                rightRotationXButtonMouseReleased(evt);
-            }
-        });
-
-        rotationXFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
-        rotationXFTF.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.rotationXFTF.toolTipText")); // NOI18N
-        rotationXFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
-            public void propertyChange(java.beans.PropertyChangeEvent evt) {
-                rotationXFTFPropertyChange(evt);
-            }
-        });
-
-        jLabel3.setFont(new java.awt.Font("Tahoma", 3, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.jLabel3.text")); // NOI18N
-
-        javax.swing.GroupLayout rotationPanelLayout = new javax.swing.GroupLayout(rotationPanel);
-        rotationPanel.setLayout(rotationPanelLayout);
-        rotationPanelLayout.setHorizontalGroup(
-            rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(rotationPanelLayout.createSequentialGroup()
-                .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(rotationPanelLayout.createSequentialGroup()
-                        .addGap(48, 48, 48)
-                        .addComponent(rotationButton))
-                    .addComponent(jLabel3))
-                .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(rotationPanelLayout.createSequentialGroup()
-                        .addGap(18, 18, 18)
-                        .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addComponent(rotatXLabel)
-                            .addGroup(rotationPanelLayout.createSequentialGroup()
-                                .addComponent(leftRotationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addComponent(rightRotationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
-                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, rotationPanelLayout.createSequentialGroup()
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(rotationXFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)))
-                .addGap(21, 21, 21)
-                .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(rotationPanelLayout.createSequentialGroup()
-                        .addComponent(leftRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(rightRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                    .addComponent(rotationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(rotatYLabel))
-                .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(rotationPanelLayout.createSequentialGroup()
-                        .addGap(22, 22, 22)
-                        .addComponent(rotatZLabel))
-                    .addGroup(rotationPanelLayout.createSequentialGroup()
-                        .addGap(18, 18, 18)
-                        .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addComponent(rotationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addGroup(rotationPanelLayout.createSequentialGroup()
-                                .addComponent(leftRotationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addComponent(rightRotationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))))
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-        rotationPanelLayout.setVerticalGroup(
-            rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(rotationPanelLayout.createSequentialGroup()
-                .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                        .addComponent(rotatXLabel)
-                        .addComponent(jLabel3))
-                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                        .addComponent(rotatYLabel)
-                        .addComponent(rotatZLabel)))
-                .addGap(6, 6, 6)
-                .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                    .addComponent(rotationButton)
-                    .addGroup(rotationPanelLayout.createSequentialGroup()
-                        .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addComponent(rightRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(leftRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(leftRotationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(rightRotationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(leftRotationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(rightRotationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                            .addComponent(rotationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(rotationXFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(rotationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-
-        jLabel4.setFont(new java.awt.Font("Tahoma", 3, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.jLabel4.text")); // NOI18N
-
-        scalePlusButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/add-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(scalePlusButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.scalePlusButton.text")); // NOI18N
-        scalePlusButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        scalePlusButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        scalePlusButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        scalePlusButton.setMaximumSize(new java.awt.Dimension(24, 24));
-        scalePlusButton.setMinimumSize(new java.awt.Dimension(24, 24));
-        scalePlusButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        scalePlusButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                scalePlusButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                scalePlusButtonMouseReleased(evt);
-            }
-        });
-
-        scaleMinusButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/subtract-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(scaleMinusButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.scaleMinusButton.text")); // NOI18N
-        scaleMinusButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        scaleMinusButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        scaleMinusButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        scaleMinusButton.setMaximumSize(new java.awt.Dimension(24, 24));
-        scaleMinusButton.setMinimumSize(new java.awt.Dimension(24, 24));
-        scaleMinusButton.setPreferredSize(new java.awt.Dimension(24, 24));
-        scaleMinusButton.addMouseListener(new java.awt.event.MouseAdapter() {
-            public void mousePressed(java.awt.event.MouseEvent evt) {
-                scaleMinusButtonMousePressed(evt);
-            }
-            public void mouseReleased(java.awt.event.MouseEvent evt) {
-                scaleMinusButtonMouseReleased(evt);
-            }
-        });
-
-        scaleFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
-        scaleFTF.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.scaleFTF.toolTipText")); // NOI18N
-        scaleFTF.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
-            public void propertyChange(java.beans.PropertyChangeEvent evt) {
-                scaleFTFPropertyChange(evt);
-            }
-        });
-
-        scaleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/restart-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(scaleButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.scaleButton.text")); // NOI18N
-        scaleButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.scaleButton.toolTipText")); // NOI18N
-        scaleButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        scaleButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
-        scaleButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
-        scaleButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                scaleButtonActionPerformed(evt);
-            }
-        });
-
-        javax.swing.GroupLayout scalePanelLayout = new javax.swing.GroupLayout(scalePanel);
-        scalePanel.setLayout(scalePanelLayout);
-        scalePanelLayout.setHorizontalGroup(
-            scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, scalePanelLayout.createSequentialGroup()
-                .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(scalePanelLayout.createSequentialGroup()
-                        .addComponent(jLabel4)
-                        .addGap(0, 42, Short.MAX_VALUE))
-                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, scalePanelLayout.createSequentialGroup()
-                        .addGap(0, 0, Short.MAX_VALUE)
-                        .addComponent(scaleButton)))
-                .addGap(18, 18, 18)
-                .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, scalePanelLayout.createSequentialGroup()
-                        .addComponent(scalePlusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(scaleMinusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                    .addComponent(scaleFTF, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addContainerGap())
-        );
-        scalePanelLayout.setVerticalGroup(
-            scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(scalePanelLayout.createSequentialGroup()
-                .addGap(1, 1, 1)
-                .addComponent(jLabel4)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                .addComponent(scaleButton))
-            .addGroup(scalePanelLayout.createSequentialGroup()
-                .addContainerGap()
-                .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                    .addComponent(scaleMinusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(scalePlusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                .addComponent(scaleFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-        );
-
-        resetAllButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/refresh-line.png"))); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(resetAllButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.resetAllButton.text")); // NOI18N
-        resetAllButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.resetAllButton.toolTipText")); // NOI18N
-        resetAllButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        resetAllButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                resetAllButtonActionPerformed(evt);
-            }
-        });
-
-        jSeparator9.setOrientation(javax.swing.SwingConstants.VERTICAL);
-
-        shiftLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
-        org.openide.awt.Mnemonics.setLocalizedText(shiftLabel, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.shiftLabel.text")); // NOI18N
-        shiftLabel.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.shiftLabel.toolTipText")); // NOI18N
-
-        precisionGroup.add(lowShiftRB);
-        org.openide.awt.Mnemonics.setLocalizedText(lowShiftRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.lowShiftRB.text")); // NOI18N
-        lowShiftRB.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.lowShiftRB.toolTipText")); // NOI18N
-        lowShiftRB.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                lowShiftRBActionPerformed(evt);
-            }
-        });
-
-        precisionGroup.add(highShiftRB);
-        org.openide.awt.Mnemonics.setLocalizedText(highShiftRB, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.highShiftRB.text")); // NOI18N
-        highShiftRB.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.highShiftRB.toolTipText")); // NOI18N
-        highShiftRB.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                highShiftRBActionPerformed(evt);
-            }
-        });
-
-        javax.swing.GroupLayout shiftPanelLayout = new javax.swing.GroupLayout(shiftPanel);
-        shiftPanel.setLayout(shiftPanelLayout);
-        shiftPanelLayout.setHorizontalGroup(
-            shiftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(shiftPanelLayout.createSequentialGroup()
-                .addGroup(shiftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(lowShiftRB)
-                    .addComponent(highShiftRB))
-                .addGap(0, 8, Short.MAX_VALUE))
-            .addGroup(shiftPanelLayout.createSequentialGroup()
-                .addContainerGap()
-                .addComponent(shiftLabel)
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-        shiftPanelLayout.setVerticalGroup(
-            shiftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(shiftPanelLayout.createSequentialGroup()
-                .addComponent(shiftLabel)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(lowShiftRB)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(highShiftRB)
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-        );
-
-        jSeparator10.setOrientation(javax.swing.SwingConstants.VERTICAL);
-
-        org.openide.awt.Mnemonics.setLocalizedText(applyButton, org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.applyButton.text")); // NOI18N
-        applyButton.setToolTipText(org.openide.util.NbBundle.getMessage(PostRegistrationCP.class, "PostRegistrationCP.applyButton.toolTipText")); // NOI18N
-        applyButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
-        applyButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
-        applyButton.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(java.awt.event.ActionEvent evt) {
-                applyButtonActionPerformed(evt);
-            }
-        });
-
-        javax.swing.GroupLayout transformationPanelLayout = new javax.swing.GroupLayout(transformationPanel);
-        transformationPanel.setLayout(transformationPanelLayout);
-        transformationPanelLayout.setHorizontalGroup(
-            transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(transformationPanelLayout.createSequentialGroup()
-                .addContainerGap()
-                .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(rotationPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                    .addGroup(transformationPanelLayout.createSequentialGroup()
-                        .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                                .addComponent(transformationLabel)
-                                .addComponent(jSeparator6, javax.swing.GroupLayout.DEFAULT_SIZE, 371, Short.MAX_VALUE)
-                                .addComponent(jSeparator2))
-                            .addComponent(translationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(jSeparator7, javax.swing.GroupLayout.PREFERRED_SIZE, 371, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addGroup(transformationPanelLayout.createSequentialGroup()
-                                .addComponent(scalePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addComponent(jSeparator9, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addGap(18, 18, 18)
-                                .addComponent(shiftPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addComponent(jSeparator10, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                    .addComponent(resetAllButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                                    .addComponent(applyButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
-                        .addGap(0, 0, Short.MAX_VALUE)))
-                .addContainerGap())
-            .addComponent(jSeparator5, javax.swing.GroupLayout.Alignment.TRAILING)
-        );
-        transformationPanelLayout.setVerticalGroup(
-            transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(transformationPanelLayout.createSequentialGroup()
-                .addComponent(transformationLabel)
-                .addGap(13, 13, 13)
-                .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(1, 1, 1)
-                .addComponent(translationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(jSeparator6, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                .addComponent(rotationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(jSeparator7, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(transformationPanelLayout.createSequentialGroup()
-                        .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                            .addComponent(applyButton, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(jSeparator10, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE))
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-                    .addGroup(transformationPanelLayout.createSequentialGroup()
-                        .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                            .addGroup(transformationPanelLayout.createSequentialGroup()
-                                .addComponent(scalePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                                .addGap(7, 7, 7))
-                            .addComponent(jSeparator9, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(shiftPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                            .addComponent(resetAllButton))
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
-                .addComponent(jSeparator5, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE))
-        );
-
-        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
-        this.setLayout(layout);
-        layout.setHorizontalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(jSeparator11, javax.swing.GroupLayout.DEFAULT_SIZE, 415, Short.MAX_VALUE)
-            .addGroup(layout.createSequentialGroup()
-                .addContainerGap()
-                .addComponent(registrationAdjustmentLabel))
-            .addComponent(transformationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-            .addComponent(visualizationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-        );
-        layout.setVerticalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(layout.createSequentialGroup()
-                .addContainerGap()
-                .addComponent(registrationAdjustmentLabel)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(jSeparator11, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(visualizationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 244, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(transformationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 333, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addContainerGap(67, Short.MAX_VALUE))
-        );
-    }// </editor-fold>//GEN-END:initComponents
-
-    /**
-     * Creates color chooser to change primary color
-     * @param evt 
-     */
-    private void primaryColorPanelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_primaryColorPanelMouseClicked
-        if (transparencySlider.getValue() == 0) {
-            return;
-        }
-        Color current = primaryColorPanel.getBackground();
-        Color newColor = JColorChooser.showDialog(null, "Choose a color", current);
-            if (newColor != null) {
-            primaryColorPanel.setBackground(newColor);
-            listener.setPrimaryColor(newColor);
-        }
-    }//GEN-LAST:event_primaryColorPanelMouseClicked
-    
-    /**
-     * Creates color chooser to change secondary color
-     * @param evt 
-     */
-    private void secondaryColorPanelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_secondaryColorPanelMouseClicked
-        if (transparencySlider.getValue() == 2*PostRegistrationListener.TRANSPARENCY_RANGE) {
-            return;
-        }
-        Color current = secondaryColorPanel.getBackground();
-        Color newColor = JColorChooser.showDialog(null, "Choose a color", current);
-        if (newColor != null) {
-            secondaryColorPanel.setBackground(newColor);
-            listener.setSecondaryColor(newColor);
-        }
-    }//GEN-LAST:event_secondaryColorPanelMouseClicked
-
-    /**
-     * Resets transparency slider to default position
-     * @param evt 
-     */
-    private void transparencyButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_transparencyButtonActionPerformed
-        transparencySlider.setValue(PostRegistrationListener.TRANSPARENCY_RANGE);
-        transparencySlider.repaint();
-        listener.setTransparency(PostRegistrationListener.TRANSPARENCY_RANGE);
-    }//GEN-LAST:event_transparencyButtonActionPerformed
-
-    /**
-     * Disables buttons if set to maximum or minimum
-     * Sets transparency
-     * @param evt 
-     */
-    private void transparencySliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_transparencySliderStateChanged
-        int transparency = transparencySlider.getValue();
-        if (transparency == 0) {
-            primaryColorPanel.setBackground(Color.lightGray);
-            primaryHighlightsCB.setEnabled(false);
-            primaryHighlightsCB.setEnabled(false);
-            primaryFillRB.setEnabled(false);
-            primaryLinesRB.setEnabled(false);
-            primaryPointsRB.setEnabled(false);
-        } else if (transparency == 2*PostRegistrationListener.TRANSPARENCY_RANGE) {
-            secondaryColorPanel.setBackground(Color.lightGray);
-            secondaryHighlightsCB.setEnabled(false);
-            secondaryHighlightsCB.setEnabled(false);
-            secondaryFillRB.setEnabled(false);
-            secondaryLinesRB.setEnabled(false);
-            secondaryPointsRB.setEnabled(false);
-        } else if (!primaryFillRB.isEnabled()) {
-            primaryColorPanel.setBackground(listener.getPrimaryColor());
-            primaryHighlightsCB.setEnabled(true);
-            primaryHighlightsCB.setEnabled(true);
-            primaryFillRB.setEnabled(true);
-            primaryLinesRB.setEnabled(true);
-            primaryPointsRB.setEnabled(true);
-        } else if (!secondaryFillRB.isEnabled()) {
-            secondaryColorPanel.setBackground(listener.getSecondaryColor());
-            secondaryHighlightsCB.setEnabled(true);
-            secondaryHighlightsCB.setEnabled(true);
-            secondaryFillRB.setEnabled(true);
-            secondaryLinesRB.setEnabled(true);
-            secondaryPointsRB.setEnabled(true);
-        }
-        listener.setTransparency(transparency);
-    }//GEN-LAST:event_transparencySliderStateChanged
-
-    /**
-     * Sets front facing
-     * @param evt 
-     */
-    private void frontButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_frontButtonActionPerformed
-        listener.setFrontFacing();
-    }//GEN-LAST:event_frontButtonActionPerformed
-
-    /**
-     * Sets side facing
-     * @param evt 
-     */
-    private void profileButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_profileButtonActionPerformed
-        listener.setSideFacing();
-    }//GEN-LAST:event_profileButtonActionPerformed
-
-    /**
-     * Resets translation
-     * @param evt 
-     */
-    private void translationButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_translationButtonActionPerformed
-        translationXFTF.setValue(0);
-        translationYFTF.setValue(0);
-        translationZFTF.setValue(0);
-        listener.resetTranslation();
-    }//GEN-LAST:event_translationButtonActionPerformed
-
-    /**
-     * Resets rotation
-     * @param evt 
-     */
-    private void rotationButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rotationButtonActionPerformed
-        rotationXFTF.setValue(0);
-        rotationYFTF.setValue(0);
-        rotationZFTF.setValue(0);
-        listener.resetRotation();
-    }//GEN-LAST:event_rotationButtonActionPerformed
-
-    /**
-     * Resets scale
-     * @param evt 
-     */
-    private void scaleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_scaleButtonActionPerformed
-        scaleFTF.setValue(0);
-        listener.resetScale();
-    }//GEN-LAST:event_scaleButtonActionPerformed
-
-    /**
-     * Resetes all transformations
-     * @param evt 
-     */
-    private void resetAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetAllButtonActionPerformed
-        translationButtonActionPerformed(evt);
-        rotationButtonActionPerformed(evt);
-        scaleButtonActionPerformed(evt);
-    }//GEN-LAST:event_resetAllButtonActionPerformed
-
-    /**
-     * Sets new translation on X-axis
-     * @param evt 
-     */
-    private void translationXFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_translationXFTFPropertyChange
-        double value = ((Number)translationXFTF.getValue()).doubleValue();
-        listener.setXTranslation(value);
-    }//GEN-LAST:event_translationXFTFPropertyChange
-
-    /**
-     * Sets new translation on Y-axis
-     * @param evt 
-     */
-    private void translationYFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_translationYFTFPropertyChange
-        double value = ((Number)translationYFTF.getValue()).doubleValue();
-        listener.setYTranslation(value);
-    }//GEN-LAST:event_translationYFTFPropertyChange
-
-    /**
-     * Sets new translation on Z-axis
-     * @param evt 
-     */
-    private void translationZFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_translationZFTFPropertyChange
-        double value = ((Number)translationZFTF.getValue()).doubleValue();
-        listener.setZTranslation(value);
-    }//GEN-LAST:event_translationZFTFPropertyChange
-
-    /**
-     * Sets new rotation on X-axis
-     * @param evt 
-     */
-    private void rotationXFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_rotationXFTFPropertyChange
-        double value = ((Number)rotationXFTF.getValue()).doubleValue();
-        listener.setXRotation(value);
-    }//GEN-LAST:event_rotationXFTFPropertyChange
-
-    /**
-     * Sets new rotation on Y-axis
-     * @param evt 
-     */
-    private void rotationYFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_rotationYFTFPropertyChange
-        double value = ((Number)rotationYFTF.getValue()).doubleValue();
-        listener.setYRotation(value);
-    }//GEN-LAST:event_rotationYFTFPropertyChange
-
-    /**
-     * Sets new rotation o Z-axis
-     * @param evt 
-     */
-    private void rotationZFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_rotationZFTFPropertyChange
-        double value = ((Number)rotationZFTF.getValue()).doubleValue();
-        listener.setZRotation(value);
-    }//GEN-LAST:event_rotationZFTFPropertyChange
-
-    /**
-     * Sets new scale
-     * @param evt 
-     */
-    private void scaleFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_scaleFTFPropertyChange
-        double value = ((Number)scaleFTF.getValue()).doubleValue();
-        listener.setScale(value);
-    }//GEN-LAST:event_scaleFTFPropertyChange
-
-    /**
-     * Adds or removes highlights of primary face
-     * @param evt 
-     */
-    private void primaryHighlightsCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_primaryHighlightsCBActionPerformed
-        if (primaryHighlightsCB.isSelected()) {
-            listener.setPrimaryHighlights();
-        } else {
-            listener.removePrimaryHighlights();
-        }
-    }//GEN-LAST:event_primaryHighlightsCBActionPerformed
-
-    /**
-     * Adds or removes highlights of secondary face
-     * @param evt 
-     */
-    private void secondaryHighlightsCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_secondaryHighlightsCBActionPerformed
-        if (secondaryHighlightsCB.isSelected()) {
-            listener.setSecondaryHighlights();
-        } else {
-            listener.removeSecondaryHighlights();
-        }
-    }//GEN-LAST:event_secondaryHighlightsCBActionPerformed
-
-    /**
-     * Sets primary face to render solid
-     * @param evt 
-     */
-    private void primaryFillRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_primaryFillRBActionPerformed
-        listener.setPrimaryFill();
-    }//GEN-LAST:event_primaryFillRBActionPerformed
-
-    /**
-     * Sets primary face to render as lines
-     * @param evt 
-     */
-    private void primaryLinesRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_primaryLinesRBActionPerformed
-        listener.setPrimaryLines();
-    }//GEN-LAST:event_primaryLinesRBActionPerformed
-
-    /**
-     * Sets primary face to render as points
-     * @param evt 
-     */
-    private void primaryPointsRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_primaryPointsRBActionPerformed
-        listener.setPrimaryPoints();
-    }//GEN-LAST:event_primaryPointsRBActionPerformed
-
-    /**
-     * Sets secondary face to render solid
-     * @param evt 
-     */
-    private void secondaryFillRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_secondaryFillRBActionPerformed
-        listener.setSecondaryFill();
-    }//GEN-LAST:event_secondaryFillRBActionPerformed
-
-    /**
-     * Sets secondary face to render as lines
-     * @param evt 
-     */
-    private void secondaryLinesRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_secondaryLinesRBActionPerformed
-        listener.setSecondaryLines();
-    }//GEN-LAST:event_secondaryLinesRBActionPerformed
-
-    /**
-     * Sets secondary face to render as points
-     * @param evt 
-     */
-    private void secondaryPointsRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_secondaryPointsRBActionPerformed
-        listener.setSecondaryPoints();
-    }//GEN-LAST:event_secondaryPointsRBActionPerformed
-
-    /**
-     * Resets colors to default
-     * @param evt 
-     */
-    private void colorButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_colorButtonActionPerformed
-        primaryColorPanel.setBackground(PostRegistrationListener.DEFAULT_PRIMARY_COLOR);
-        secondaryColorPanel.setBackground(PostRegistrationListener.DEFAULT_SECONDARY_COLOR);
-        listener.setDeafultColor();
-    }//GEN-LAST:event_colorButtonActionPerformed
-
-    /**
-     * Applies performed transformations
-     * @param evt 
-     */
-    private void applyButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_applyButtonActionPerformed
-        listener.transformFace();
-        resetAllButtonActionPerformed(evt);
-    }//GEN-LAST:event_applyButtonActionPerformed
-
-    /**
-     * Disables or enables feature points options and shows/hides feature points
-     * @param evt 
-     */
-    private void featurePointsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_featurePointsButtonActionPerformed
-        if (listener.areFeaturePointsActive()) {
-            featurePointsButton.setText("show");
-            thersholdButton.setEnabled(false);
-            thersholdFTF.setEnabled(false);
-            thersholdUpButton.setEnabled(false);
-            thresholdDownButton.setEnabled(false);
-            listener.setFeaturePointsActive(false);
-        } else {
-            featurePointsButton.setText("hide");
-            thersholdButton.setEnabled(true);
-            thersholdFTF.setEnabled(true);
-            thersholdUpButton.setEnabled(true);
-            thresholdDownButton.setEnabled(true);
-            listener.setFeaturePointsActive(true);
-        }
-    }//GEN-LAST:event_featurePointsButtonActionPerformed
-
-    /**
-     * Sets new feature points thershold value
-     * @param evt 
-     */
-    private void thersholdFTFPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_thersholdFTFPropertyChange
-        listener.setFeaturePointsThreshold(((Number)thersholdFTF.getValue()).doubleValue());
-    }//GEN-LAST:event_thersholdFTFPropertyChange
-
-    /**
-     * Starts animation of negative translation on X-axis
-     * @param evt 
-     */
-    private void leftTranslationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationXButtonMousePressed
-        animator.startModelAnimation(Direction.TRANSLATE_LEFT, this);
-    }//GEN-LAST:event_leftTranslationXButtonMousePressed
-
-    /**
-     * Stops animation of negative translation on X-axis
-     * @param evt 
-     */
-    private void leftTranslationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationXButtonMouseReleased
-        animator.stopModelAnimation(this);
-    }//GEN-LAST:event_leftTranslationXButtonMouseReleased
-
-    /**
-     * Starts animation of positive translation on X-axis
-     * @param evt 
-     */
-    private void rightTranslationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationXButtonMousePressed
-        animator.startModelAnimation(Direction.TRANSLATE_RIGHT, this);
-    }//GEN-LAST:event_rightTranslationXButtonMousePressed
-
-    /**
-     * Stops animation of positive translation on X-axis
-     * @param evt 
-     */
-    private void rightTranslationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationXButtonMouseReleased
-        animator.stopModelAnimation(this);
-    }//GEN-LAST:event_rightTranslationXButtonMouseReleased
-    
-    /**
-     * Starts animation of negative translation on Y-axis
-     * @param evt 
-     */
-    private void leftTranslationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationYButtonMousePressed
-        animator.startModelAnimation(Direction.TRANSLATE_UP, this);
-    }//GEN-LAST:event_leftTranslationYButtonMousePressed
-
-    /**
-     * Stops animation of negative translation on Y-axis
-     * @param evt 
-     */
-    private void leftTranslationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationYButtonMouseReleased
-        animator.stopModelAnimation(this);
-    }//GEN-LAST:event_leftTranslationYButtonMouseReleased
-
-    /**
-     * Starts animation of positive translation on Y-axis
-     * @param evt 
-     */
-    private void rightTranslationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationYButtonMousePressed
-        animator.startModelAnimation(Direction.TRANSLATE_DOWN, this);
-    }//GEN-LAST:event_rightTranslationYButtonMousePressed
-
-    /**
-     * Stops animation of positive translation on Y-axis
-     * @param evt 
-     */
-    private void rightTranslationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationYButtonMouseReleased
-        animator.stopModelAnimation(this);
-    }//GEN-LAST:event_rightTranslationYButtonMouseReleased
-
-    /**
-     * Starts animation of negative translation on Z-axis
-     * @param evt 
-     */
-    private void leftTranslationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationZButtonMousePressed
-        animator.startModelAnimation(Direction.TRANSLATE_IN, this);
-    }//GEN-LAST:event_leftTranslationZButtonMousePressed
-
-    /**
-     * Stops animation of negative translation on Z-axis
-     * @param evt 
-     */
-    private void leftTranslationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationZButtonMouseReleased
-        animator.stopModelAnimation(this);
-    }//GEN-LAST:event_leftTranslationZButtonMouseReleased
-
-    /**
-     * Starts animation of positive translation on Z-axis
-     * @param evt 
-     */
-    private void rightTranslationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationZButtonMousePressed
-        animator.startModelAnimation(Direction.TRANSLATE_OUT, this);
-    }//GEN-LAST:event_rightTranslationZButtonMousePressed
-
-    /**
-     * Stops animation of positive translation on Z-axis
-     * @param evt 
-     */
-    private void rightTranslationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationZButtonMouseReleased
-        animator.stopModelAnimation(this);
-    }//GEN-LAST:event_rightTranslationZButtonMouseReleased
-
-    /**
-     * Starts animation of negative rotation on X-axis
-     * @param evt 
-     */
-    private void leftRotationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationXButtonMousePressed
-        animator.startModelAnimation(Direction.ROTATE_LEFT, this);
-    }//GEN-LAST:event_leftRotationXButtonMousePressed
-
-    /**
-     * Stops animation of negative rotation on X-axis
-     * @param evt 
-     */
-    private void leftRotationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationXButtonMouseReleased
-        animator.stopModelAnimation(this);
-    }//GEN-LAST:event_leftRotationXButtonMouseReleased
-
-    /**
-     * Starts animation of positive rotation on X-axis
-     * @param evt 
-     */
-    private void rightRotationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationXButtonMousePressed
-        animator.startModelAnimation(Direction.ROTATE_RIGHT, this);
-    }//GEN-LAST:event_rightRotationXButtonMousePressed
-
-    /**
-     * Stops animation of positive rotation on X-axis
-     * @param evt 
-     */
-    private void rightRotationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationXButtonMouseReleased
-        animator.stopModelAnimation(this);
-    }//GEN-LAST:event_rightRotationXButtonMouseReleased
-
-    /**
-     * Starts animation of negative rotation on Y-axis
-     * @param evt 
-     */
-    private void leftRotationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationYButtonMousePressed
-        animator.startModelAnimation(Direction.ROTATE_UP, this);
-    }//GEN-LAST:event_leftRotationYButtonMousePressed
-
-    /**
-     * Stops animation of negative rotation on Y-axis
-     * @param evt 
-     */
-    private void leftRotationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationYButtonMouseReleased
-        animator.stopModelAnimation(this);
-    }//GEN-LAST:event_leftRotationYButtonMouseReleased
-
-    /**
-     * Starts animation of positive rotation on Y-axis
-     * @param evt 
-     */
-    private void rightRotationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationYButtonMousePressed
-        animator.startModelAnimation(Direction.ROTATE_DOWN, this);
-    }//GEN-LAST:event_rightRotationYButtonMousePressed
-
-    /**
-     * Stops animation of positive rotation on Y-axis
-     * @param evt 
-     */
-    private void rightRotationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationYButtonMouseReleased
-        animator.stopModelAnimation(this);
-    }//GEN-LAST:event_rightRotationYButtonMouseReleased
-
-    /**
-     * Starts animation of negative rotation on Z-axis
-     * @param evt 
-     */
-    private void leftRotationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationZButtonMousePressed
-        animator.startModelAnimation(Direction.ROTATE_IN, this);
-    }//GEN-LAST:event_leftRotationZButtonMousePressed
-
-    /**
-     * Stops animation of negative rotation on Z-axis
-     * @param evt 
-     */
-    private void leftRotationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationZButtonMouseReleased
-        animator.stopModelAnimation(this);
-    }//GEN-LAST:event_leftRotationZButtonMouseReleased
-
-    /**
-     * Starts animation of positive rotation on Z-axis
-     * @param evt 
-     */
-    private void rightRotationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationZButtonMousePressed
-        animator.startModelAnimation(Direction.ROTATE_OUT, this);
-    }//GEN-LAST:event_rightRotationZButtonMousePressed
-
-    /**
-     * Stops animation of positive rotation on Z-axis
-     * @param evt 
-     */
-    private void rightRotationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationZButtonMouseReleased
-        animator.stopModelAnimation(this);
-    }//GEN-LAST:event_rightRotationZButtonMouseReleased
-
-    /**
-     * Starts animation of scaling down
-     * @param evt 
-     */
-    private void scaleMinusButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scaleMinusButtonMousePressed
-        animator.startModelAnimation(Direction.ZOOM_OUT, this);
-    }//GEN-LAST:event_scaleMinusButtonMousePressed
-
-    /**
-     * Stops animation of scaling down
-     * @param evt 
-     */
-    private void scaleMinusButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scaleMinusButtonMouseReleased
-        animator.stopModelAnimation(this);
-    }//GEN-LAST:event_scaleMinusButtonMouseReleased
-
-    /**
-     * Starts animation of scaling up
-     * @param evt 
-     */
-    private void scalePlusButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scalePlusButtonMousePressed
-        animator.startModelAnimation(Direction.ZOOM_IN, this);
-    }//GEN-LAST:event_scalePlusButtonMousePressed
-
-    /**
-     * Stops animation of scaling up
-     * @param evt 
-     */
-    private void scalePlusButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scalePlusButtonMouseReleased
-        animator.stopModelAnimation(this);
-    }//GEN-LAST:event_scalePlusButtonMouseReleased
-
-    /**
-     * Lowers feature points thershold
-     * @param evt 
-     */
-    private void thresholdDownButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_thresholdDownButtonActionPerformed
-        double newValue = ((Number)thersholdFTF.getValue()).doubleValue() - 0.1;
-        thersholdFTF.setValue(newValue);
-    }//GEN-LAST:event_thresholdDownButtonActionPerformed
-
-    /**
-    * Increases feature points thershold
-    * @param evt 
-    */
-    private void thersholdUpButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_thersholdUpButtonActionPerformed
-        double newValue = ((Number)thersholdFTF.getValue()).doubleValue() + 0.1;
-        thersholdFTF.setValue(newValue);
-    }//GEN-LAST:event_thersholdUpButtonActionPerformed
-
-    /**
-     * Resets feature poitns thershold
-     * @param evt 
-     */
-    private void thersholdButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_thersholdButtonActionPerformed
-        thersholdFTF.setValue(PostRegistrationListener.LOW_SHIFT_QUOTIENT);
-    }//GEN-LAST:event_thersholdButtonActionPerformed
-
-    /**
-     * Sets transformation shifting amount to low
-     * @param evt 
-     */
-    private void lowShiftRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lowShiftRBActionPerformed
-        listener.setMoveModifier(PostRegistrationListener.LOW_SHIFT_QUOTIENT);
-    }//GEN-LAST:event_lowShiftRBActionPerformed
-
-    /**
-     * Sets transformation shifting amount to high
-     * @param evt 
-     */
-    private void highShiftRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_highShiftRBActionPerformed
-        listener.setMoveModifier(PostRegistrationListener.HIGH_SHIFT_QUOTIENT);
-    }//GEN-LAST:event_highShiftRBActionPerformed
-
-    /**
-     * Toggles rendering of back face on and off
-     * @param evt 
-     */
-    private void backfaceButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backfaceButtonActionPerformed
-        if (listener.isShowBackfaceActive()) {
-            backfaceButton.setText("show backface");
-            listener.setShowBackfaceActive(false);
-        } else {
-            backfaceButton.setText("hide backface");
-            listener.setShowBackfaceActive(true);   
-        }
-    }//GEN-LAST:event_backfaceButtonActionPerformed
-
-
-    // Variables declaration - do not modify//GEN-BEGIN:variables
-    private javax.swing.JButton applyButton;
-    private javax.swing.JToggleButton backfaceButton;
-    private javax.swing.JButton colorButton;
-    private javax.swing.JToggleButton featurePointsButton;
-    private javax.swing.JLabel featurePointsLabel;
-    private javax.swing.JPanel featurePointsPanel;
-    private javax.swing.JLabel fillLabel;
-    private javax.swing.JButton frontButton;
-    private javax.swing.JRadioButton highShiftRB;
-    private javax.swing.JLabel highlightsLabel;
-    private javax.swing.JLabel jLabel2;
-    private javax.swing.JLabel jLabel3;
-    private javax.swing.JLabel jLabel4;
-    private javax.swing.JSeparator jSeparator1;
-    private javax.swing.JSeparator jSeparator10;
-    private javax.swing.JSeparator jSeparator11;
-    private javax.swing.JSeparator jSeparator2;
-    private javax.swing.JSeparator jSeparator3;
-    private javax.swing.JSeparator jSeparator4;
-    private javax.swing.JSeparator jSeparator5;
-    private javax.swing.JSeparator jSeparator6;
-    private javax.swing.JSeparator jSeparator7;
-    private javax.swing.JSeparator jSeparator8;
-    private javax.swing.JSeparator jSeparator9;
-    private javax.swing.JButton leftRotationXButton;
-    private javax.swing.JButton leftRotationYButton;
-    private javax.swing.JButton leftRotationZButton;
-    private javax.swing.JButton leftTranslationXButton;
-    private javax.swing.JButton leftTranslationYButton;
-    private javax.swing.JButton leftTranslationZButton;
-    private javax.swing.JLabel linesLabel;
-    private javax.swing.JRadioButton lowShiftRB;
-    private javax.swing.JLabel modelLabel;
-    private javax.swing.JPanel modelPanel;
-    private javax.swing.JLabel pointsLabel;
-    private javax.swing.ButtonGroup precisionGroup;
-    private javax.swing.JPanel primaryColorPanel;
-    private javax.swing.JRadioButton primaryFillRB;
-    private javax.swing.JCheckBox primaryHighlightsCB;
-    private javax.swing.JLabel primaryLabel;
-    private javax.swing.JRadioButton primaryLinesRB;
-    private javax.swing.JRadioButton primaryPointsRB;
-    private javax.swing.ButtonGroup primaryRenderModeGroup;
-    private javax.swing.JButton profileButton;
-    private javax.swing.JLabel registrationAdjustmentLabel;
-    private javax.swing.JLabel renderModeLabel;
-    private javax.swing.JButton resetAllButton;
-    private javax.swing.JButton rightRotationXButton;
-    private javax.swing.JButton rightRotationYButton;
-    private javax.swing.JButton rightRotationZButton;
-    private javax.swing.JButton rightTranslationXButton;
-    private javax.swing.JButton rightTranslationYButton;
-    private javax.swing.JButton rightTranslationZButton;
-    private javax.swing.JLabel rotatXLabel;
-    private javax.swing.JLabel rotatYLabel;
-    private javax.swing.JLabel rotatZLabel;
-    private javax.swing.JButton rotationButton;
-    private javax.swing.JPanel rotationPanel;
-    private javax.swing.JFormattedTextField rotationXFTF;
-    private javax.swing.JFormattedTextField rotationYFTF;
-    private javax.swing.JFormattedTextField rotationZFTF;
-    private javax.swing.JButton scaleButton;
-    private javax.swing.JFormattedTextField scaleFTF;
-    private javax.swing.JButton scaleMinusButton;
-    private javax.swing.JPanel scalePanel;
-    private javax.swing.JButton scalePlusButton;
-    private javax.swing.JPanel secondaryColorPanel;
-    private javax.swing.JRadioButton secondaryFillRB;
-    private javax.swing.JCheckBox secondaryHighlightsCB;
-    private javax.swing.JLabel secondaryLabel;
-    private javax.swing.JRadioButton secondaryLinesRB;
-    private javax.swing.JRadioButton secondaryPointsRB;
-    private javax.swing.ButtonGroup secondaryRenerModeGroup;
-    private javax.swing.JLabel shiftLabel;
-    private javax.swing.JPanel shiftPanel;
-    private javax.swing.JButton thersholdButton;
-    private javax.swing.JFormattedTextField thersholdFTF;
-    private javax.swing.JButton thersholdUpButton;
-    private javax.swing.JButton thresholdDownButton;
-    private javax.swing.JLabel transformationLabel;
-    private javax.swing.JPanel transformationPanel;
-    private javax.swing.JLabel translXLabel;
-    private javax.swing.JLabel translYLabel;
-    private javax.swing.JLabel translZLabel;
-    private javax.swing.JButton translationButton;
-    private javax.swing.JPanel translationPanel;
-    private javax.swing.JFormattedTextField translationXFTF;
-    private javax.swing.JFormattedTextField translationYFTF;
-    private javax.swing.JFormattedTextField translationZFTF;
-    private javax.swing.JButton transparencyButton;
-    private javax.swing.JSlider transparencySlider;
-    private javax.swing.JLabel viewLabel;
-    private javax.swing.JPanel viewPanel;
-    private javax.swing.JLabel visualizationLabel;
-    private javax.swing.JPanel visualizationPanel;
-    // End of variables declaration//GEN-END:variables
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationListener.java b/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationListener.java
deleted file mode 100644
index f0d28d27da8df632367186ea53f7cfb1bba5646b..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationListener.java
+++ /dev/null
@@ -1,603 +0,0 @@
-package cz.fidentis.analyst.registration;
-
-import com.jogamp.opengl.GL2;
-import cz.fidentis.analyst.feature.FeaturePoint;
-import cz.fidentis.analyst.gui.canvas.Canvas;
-import cz.fidentis.analyst.gui.scene.DrawableMesh;
-import cz.fidentis.analyst.mesh.core.MeshFacet;
-import cz.fidentis.analyst.mesh.core.MeshPoint;
-import cz.fidentis.analyst.visitors.mesh.BoundingBox;
-import java.awt.Color;
-import java.util.ArrayList;
-import javax.vecmath.Point3d;
-import javax.vecmath.Vector3d;
-
-/**
- * Updates primary resp. secondary {@link DrawableMesh}.
- * 
- * @author Richard Pajersky
- */
-
-public class PostRegistrationListener {
-    
-    /**
-     * Transformation shift is higher 
-     */
-    public static final double HIGH_SHIFT_QUOTIENT = 1;
-    
-    /**
-     * Transformation shift is lower 
-     */
-    public static final double LOW_SHIFT_QUOTIENT = 0.1;
-    
-    /**
-     * Quotient which determines translation and scale amount 
-     */
-    private static final double CHANGE_QUOTIENT = 500d;
-    
-    /**
-     * Color used as default color of primary face 
-     */
-    public static final Color DEFAULT_PRIMARY_COLOR = new Color(101, 119, 179);
-    
-    /**
-     * Color used as default color of secondary face 
-     */
-    public static final Color DEFAULT_SECONDARY_COLOR = new Color(237, 217, 76);
-    
-    /**
-     * Range of transparency 
-     */
-    public static final int TRANSPARENCY_RANGE = 10;
-    
-    /**
-     * Canvas which contains faces
-     */
-    private final Canvas canvas;
-    
-    /**
-     * Move amount on X-axis
-     */
-    private final double moveX;
-    
-    /**
-     * Move amount on Y-axis
-     */
-    private final double moveY;
-    
-    /**
-     * Move amount on Z-axis
-     */
-    private final double moveZ;
-    
-    /**
-     * Scale amount in all axis
-     */
-    private final double scaleXYZ;
-    
-    /**
-     * Primary face used for visualization
-     */
-    private final DrawableMesh primaryFace;
-    
-    /**
-     * Secondary face used for visualization and transformation
-     */
-    private final DrawableMesh secondaryFace;
-    
-    /**
-     * Transformation amount
-     */
-    private double moveModifier = LOW_SHIFT_QUOTIENT;
-    
-    /**
-     * Threshold of feature points showing too far away
-     */
-    private double featurePointsThreshold = LOW_SHIFT_QUOTIENT;
-    
-    /**
-     * Constructor
-     * First initialize {@link #canvas} then 
-     * {@link #primaryFace} and {@link #secondaryFace}
-     * Then computes movement amounts based on 
-     * {@link BoundingBox} of secondary face
-     * 
-     * @param canvas Canvas with two faces
-     * @throws IllegalArgumentException if the canvas is {@code null}
-     */
-    public PostRegistrationListener(Canvas canvas) {
-        if (canvas == null) {
-            throw new IllegalArgumentException("canvas is null");
-        }
-        this.canvas = canvas;
-        
-        ArrayList<DrawableMesh> drawables = new ArrayList<>(canvas.getScene().getDrawables());
-        if (drawables.size() < 2) {
-            throw new IllegalArgumentException("canvas doesn't contains at least 2 models");
-        }
-        this.primaryFace = drawables.get(0);
-        this.secondaryFace = drawables.get(1);
-        setDeafultColor();
-        
-        // set move amounts
-        BoundingBox visitor = new BoundingBox();
-        this.secondaryFace.getModel().compute(visitor);
-        Point3d maxPoint = visitor.getBoundingBox().getMaxPoint();
-        Point3d minPoint = visitor.getBoundingBox().getMinPoint();
-        moveX = (maxPoint.x - minPoint.x) / CHANGE_QUOTIENT;
-        moveY = (maxPoint.y - minPoint.y) / CHANGE_QUOTIENT;
-        moveZ = (maxPoint.z - minPoint.z) / CHANGE_QUOTIENT;
-        scaleXYZ = (visitor.getBoundingBox().getMaxDiag() / (10 * CHANGE_QUOTIENT));
-    }
-    
-    /**
-     * Calculates feature points which are too far away
-     * and changes their color to red
-     * otherwise set color to default
-     */
-    private void calculateFeaturePoints() {
-        if (!primaryFace.isRenderFeaturePoints()) {
-            return;
-        }
-        ArrayList<Color> color = (ArrayList)secondaryFace.getFeaturePointsColor();
-        for (int i = 0; i < primaryFace.getFeaturePoints().size(); i++) {
-            FeaturePoint primary = primaryFace.getFeaturePoints().get(i);
-            FeaturePoint secondary = secondaryFace.getFeaturePoints().get(i);
-            Point3d transformed = new Point3d(secondary.getX(), secondary.getY(), secondary.getZ());
-            transformPoint(transformed);
-            double distance = Math.sqrt(
-                Math.pow(transformed.x - primary.getX(), 2) + 
-                Math.pow(transformed.y - primary.getY(), 2) + 
-                Math.pow(transformed.z - primary.getZ(), 2));
-            if (distance > featurePointsThreshold) {
-                color.set(i, Color.RED);
-            } else {
-                color.set(i, DEFAULT_SECONDARY_COLOR);
-            }
-        }
-    }
-    
-    /**
-     * Applies carried out transformations
-     * first on {@link #secondaryFace}
-     * and then on {@link #secondaryFace} feature points
-     */
-    public void transformFace() {
-        for (MeshFacet transformedFacet : secondaryFace.getFacets()) {
-            for (MeshPoint comparedPoint : transformedFacet.getVertices()) {
-                transformPoint(comparedPoint.getPosition());
-            }
-        }
-        for (int i = 0; i < secondaryFace.getFeaturePoints().size(); i++) {
-            FeaturePoint point = secondaryFace.getFeaturePoints().get(i);
-            Point3d transformed = new Point3d(point.getX(), point.getY(), point.getZ());
-            transformPoint(transformed);
-            point = new FeaturePoint(transformed.x, transformed.y, 
-                    transformed.z, point.getFeaturePointType());
-            secondaryFace.getFeaturePoints().set(i, point);
-        }
-    }
-    
-    /**
-     * Transforms point based on transformation info from {@link #secondaryFace}
-     * 
-     * @param point Point to transform
-     */
-    public void transformPoint(Point3d point) {
-        if (point == null) {
-            throw new IllegalArgumentException("point is null");
-        }
-
-        Point3d newPoint = new Point3d(0, 0, 0);
-        double quotient;
-
-        // rotate around X
-        quotient = Math.toRadians(secondaryFace.getRotation().x);
-        if (!Double.isNaN(quotient)) {
-            double cos = Math.cos(quotient);
-            double sin = Math.sin(quotient);
-            newPoint.y = point.y * cos - point.z * sin;
-            newPoint.z = point.z * cos + point.y * sin;
-            point.y = newPoint.y;
-            point.z = newPoint.z;
-        }
-
-        // rotate around Y
-        quotient = Math.toRadians(secondaryFace.getRotation().y);
-        if (!Double.isNaN(quotient)) {
-            double cos = Math.cos(quotient);
-            double sin = Math.sin(quotient);
-            newPoint.x = point.x * cos + point.z * sin;
-            newPoint.z = point.z * cos - point.x * sin;
-            point.x = newPoint.x;
-            point.z = newPoint.z;
-        }
-
-        // rotate around Z
-        quotient = Math.toRadians(secondaryFace.getRotation().z);
-        if (!Double.isNaN(quotient)) {
-            double cos = Math.cos(quotient);
-            double sin = Math.sin(quotient);
-            newPoint.x = point.x * cos - point.y * sin;
-            newPoint.y = point.y * cos + point.x * sin;
-            point.x = newPoint.x;
-            point.y = newPoint.y;
-        }
-
-        // translate
-        point.x += secondaryFace.getTranslation().x;
-        point.y += secondaryFace.getTranslation().y;
-        point.z += secondaryFace.getTranslation().z;
-
-        // scale
-        point.x *= 1 + secondaryFace.getScale().x;
-        point.y *= 1 + secondaryFace.getScale().y;
-        point.z *= 1 + secondaryFace.getScale().z;
-    }
-    
-    /**
-     * Sets {@link #primaryFace} to {@link #DEFAULT_PRIMARY_COLOR} and
-     * {@link #secondaryFace} to {@link #DEFAULT_SECONDARY_COLOR}
-     */
-    public final void setDeafultColor() {
-        primaryFace.setColor(DEFAULT_PRIMARY_COLOR);
-        secondaryFace.setColor(DEFAULT_SECONDARY_COLOR);
-        canvas.renderScene();
-    } 
-    
-    /**
-     * Sets the color of {@link #primaryFace}
-     * @param color Color
-     */
-    public void setPrimaryColor(Color color) {
-        primaryFace.setColor(color);
-        canvas.renderScene();
-    }
-
-    /**
-     * Sets the color of {@link #secondaryFace}
-     * @param color Color
-     */
-    public void setSecondaryColor(Color color) {
-        secondaryFace.setColor(color);
-        canvas.renderScene();
-    }
-    
-    /**
-     * @return {@link Color} of {@link #primaryFace}
-     */
-    public Color getPrimaryColor() {
-        return primaryFace.getColor();
-    }
-
-    /**
-     * @return {@link Color} of {@link #secondaryFace}
-     */
-    public Color getSecondaryColor() {
-        return secondaryFace.getColor();
-    }
-    
-    /**
-     * Sets the transparency of {@link #primaryFace} or {@link #secondaryFace}
-     * based on the inputed value and {@link #TRANSPARENCY_RANGE}
-     * @param value Value
-     */
-    public void setTransparency(int value) {
-        
-        if (value == TRANSPARENCY_RANGE) {
-            setPrimaryTransparency(1);
-            setSecondaryTransparency(1);
-        }
-        if (value < TRANSPARENCY_RANGE) {
-            setPrimaryTransparency(value / 10f);
-            setSecondaryTransparency(1);
-        }
-        if (value > TRANSPARENCY_RANGE) {
-            setSecondaryTransparency((2 * TRANSPARENCY_RANGE - value) / 10f);
-            setPrimaryTransparency(1);
-        }
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets transparency of {@link #primaryFace}
-     * 
-     * @param transparency Transparency value
-     */
-    public void setPrimaryTransparency(float transparency) {
-        primaryFace.setTransparency(transparency);
-    }
-
-    /**
-     * Sets transparency of {@link #secondaryFace}
-     * 
-     */
-    public void setSecondaryTransparency(float transparency) {
-        secondaryFace.setTransparency(transparency);
-    }
-    
-    /**
-     * @return Transparency of {@link #primaryFace}
-     */
-    public double getPrimaryTransparency() {
-        return primaryFace.getTransparency();
-    }
-
-    /**
-     * @return Transparency of {@link #secondaryFace}
-     */
-    public double getSecondaryTransparency() {
-        return secondaryFace.getTransparency();
-    }
-    
-    /**
-     * Sets camera to show face from the front
-     */
-    public void setFrontFacing() {
-        canvas.getCamera().initLocation();
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets camera to show face from the side
-     */
-    public void setSideFacing() {
-        canvas.getCamera().initLocation();
-        canvas.getCamera().rotate(0, 90);
-        canvas.renderScene();
-    }
-    
-    /**
-     * Resets translation of {@link #secondaryFace}
-     */
-    public void resetTranslation() {
-        secondaryFace.setTranslation(new Vector3d(0, 0, 0));
-        calculateFeaturePoints();
-        canvas.renderScene();
-    }
-    
-    /**
-     * Resets rotation of {@link #secondaryFace}
-     */
-    public void resetRotation() {
-        secondaryFace.setRotation(new Vector3d(0, 0, 0));
-        calculateFeaturePoints();
-        canvas.renderScene();
-    }
-
-    /**
-     * Resets scale of {@link #secondaryFace}
-     */
-    public void resetScale() {
-        secondaryFace.setScale(new Vector3d(0, 0, 0));
-        calculateFeaturePoints();
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets translation of {@link #secondaryFace} on X-axis
-     * @param value Translation amount
-     */
-    public void setXTranslation(double value) {
-        secondaryFace.getTranslation().x = value * moveX;
-        calculateFeaturePoints();
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets translation of {@link #secondaryFace} on Y-axis
-     * @param value Translation amount
-     */
-    public void setYTranslation(double value) {
-        secondaryFace.getTranslation().y = value * moveY;
-        calculateFeaturePoints();
-        canvas.renderScene();
-    }
-        
-    /**
-     * Sets translation of {@link #secondaryFace} on Z-axis
-     * @param value Translation amount
-     */
-    public void setZTranslation(double value) {
-        secondaryFace.getTranslation().z = value * moveZ;
-        calculateFeaturePoints();
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets rotation of {@link #secondaryFace} around X-axis
-     * @param value Translation amount
-     */
-    public void setXRotation(double value) {
-        secondaryFace.getRotation().x = value * moveX;
-        calculateFeaturePoints();
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets rotation of {@link #secondaryFace} around Y-axis
-     * @param value Translation amount
-     */
-    public void setYRotation(double value) {
-        secondaryFace.getRotation().y = value * moveY;
-        calculateFeaturePoints();
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets rotation of {@link #secondaryFace} around Z-axis
-     * @param value Translation amount
-     */    
-    public void setZRotation(double value) {
-        secondaryFace.getRotation().z = value * moveZ;
-        calculateFeaturePoints();
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets scale of {@link #secondaryFace}
-     * @param value Translation amount
-     */
-    public void setScale(double value) {
-        secondaryFace.getScale().x = value * scaleXYZ;
-        secondaryFace.getScale().y = value * scaleXYZ;
-        secondaryFace.getScale().z = value * scaleXYZ;
-        calculateFeaturePoints();
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets color of {@link #primaryFace} highlights to white
-     */
-    public void setPrimaryHighlights() {
-        primaryFace.setHighlights(new Color(1, 1, 1));
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets color of {@link #secondaryFace} highlights to white
-     */
-    public void setSecondaryHighlights() {
-        secondaryFace.setHighlights(new Color(1, 1, 1));
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets color of {@link #primaryFace} highlights to black
-     */
-    public void removePrimaryHighlights() {
-        primaryFace.setHighlights(new Color(0, 0, 0));
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets color of {@link #secondaryFace} highlights to black
-     */
-    public void removeSecondaryHighlights() {
-        secondaryFace.setHighlights(new Color(0, 0, 0));
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets {@link #primaryFace} to be rendered as lines
-     */
-    public void setPrimaryLines() {
-        primaryFace.setRenderMode(GL2.GL_LINE);
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets {@link #secondaryFace} to be rendered as lines
-     */
-    public void setSecondaryLines() {
-        secondaryFace.setRenderMode(GL2.GL_LINE);
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets {@link #primaryFace} to be rendered as points
-     */
-    public void setPrimaryPoints() {
-        primaryFace.setRenderMode(GL2.GL_POINT);
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets {@link #secondaryFace} to be rendered as points
-     */
-    public void setSecondaryPoints() {
-        secondaryFace.setRenderMode(GL2.GL_POINT);
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets {@link #primaryFace} to be rendered solid
-     */
-    public void setPrimaryFill() {
-        primaryFace.setRenderMode(GL2.GL_FILL);
-        canvas.renderScene();
-    }
-    
-    /**
-     * Sets {@link #secondaryFace} to be rendered solid
-     */
-    public void setSecondaryFill() {
-        secondaryFace.setRenderMode(GL2.GL_FILL);
-        canvas.renderScene();
-    }
-    
-    /**
-     * @return {@code true} if feature points are being rendered
-     */
-    public boolean areFeaturePointsActive() {
-        return primaryFace.isRenderFeaturePoints();
-    }
-    
-    /**
-     * Sets feature points of {@link #primaryFace} and {@link #secondaryFace}
-     * to given state
-     * @param state State
-     */
-    public void setFeaturePointsActive(boolean state) {
-        primaryFace.setRenderFeaturePoints(state);
-        secondaryFace.setRenderFeaturePoints(state);
-        calculateFeaturePoints();
-        canvas.renderScene();
-    }
-
-    /**
-     * @return Value of {@link #featurePointsThreshold}
-     */
-    public double getFeaturePointsThreshold() {
-        return featurePointsThreshold;
-    }
-
-    /**
-     * Sets {@link #featurePointsThreshold} to given value
-     * @param featurePointsThreshold Threshold
-     */
-    public void setFeaturePointsThreshold(double featurePointsThreshold) {
-        this.featurePointsThreshold = featurePointsThreshold;
-        calculateFeaturePoints();
-        canvas.renderScene();
-    }
-
-    /**
-     * @return Value of {@link #moveModifier}
-     */
-    public double getMoveModifier() {
-        return moveModifier;
-    }
-
-    /**
-     * Sets {@link #moveModifier} to given value
-     * @param moveModifier Modifier
-     */
-    public void setMoveModifier(double moveModifier) {
-        this.moveModifier = moveModifier;
-    }
-
-    /**
-     * @return {@link #canvas}
-     */
-    public Canvas getCanvas() {
-        return canvas;
-    }
-    
-    /**
-     * @return {@code true} if back face is being shown
-     */
-    public boolean isShowBackfaceActive() {
-        return primaryFace.isShowBackface();
-    }
-    
-    /**
-     * Sets backface to be rendered or not based on the given state
-     * @param state State
-     */
-    public void setShowBackfaceActive(boolean state) {
-        primaryFace.setShowBackface(state);
-        secondaryFace.setShowBackface(state);
-        canvas.renderScene();
-    }
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationTestTC.form b/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationTestTC.form
deleted file mode 100644
index e0ca68451f5a157b4645b7e68075753bc4c5c206..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationTestTC.form
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-
-<Form version="1.4" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
-  <Properties>
-    <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-      <Dimension value="[405, 600]"/>
-    </Property>
-  </Properties>
-  <AuxValues>
-    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
-    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
-    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
-    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
-    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
-    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
-  </AuxValues>
-
-  <Layout>
-    <DimensionLayout dim="0">
-      <Group type="103" groupAlignment="0" attributes="0">
-          <Group type="102" alignment="1" attributes="0">
-              <Component id="canvas1" pref="309" max="32767" attributes="0"/>
-              <EmptySpace max="-2" attributes="0"/>
-              <Component id="postRegistrationCP1" min="-2" max="-2" attributes="0"/>
-          </Group>
-      </Group>
-    </DimensionLayout>
-    <DimensionLayout dim="1">
-      <Group type="103" groupAlignment="0" attributes="0">
-          <Component id="canvas1" pref="708" max="32767" attributes="0"/>
-          <Component id="postRegistrationCP1" alignment="0" max="32767" attributes="0"/>
-      </Group>
-    </DimensionLayout>
-  </Layout>
-  <SubComponents>
-    <Component class="cz.fidentis.analyst.gui.canvas.Canvas" name="canvas1">
-    </Component>
-    <Container class="cz.fidentis.analyst.registration.PostRegistrationCP" name="postRegistrationCP1">
-
-      <Layout>
-        <DimensionLayout dim="0">
-          <Group type="103" groupAlignment="0" attributes="0">
-              <EmptySpace min="0" pref="340" max="32767" attributes="0"/>
-          </Group>
-        </DimensionLayout>
-        <DimensionLayout dim="1">
-          <Group type="103" groupAlignment="0" attributes="0">
-              <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-          </Group>
-        </DimensionLayout>
-      </Layout>
-    </Container>
-  </SubComponents>
-</Form>
diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationTestTC.java b/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationTestTC.java
deleted file mode 100644
index 9b6baaec5ce90ae071c0e4ef1ece6d4e248f23fa..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationTestTC.java
+++ /dev/null
@@ -1,159 +0,0 @@
-package cz.fidentis.analyst.registration;
-
-import cz.fidentis.analyst.face.HumanFace;
-import cz.fidentis.analyst.face.HumanFaceFactory;
-import cz.fidentis.analyst.feature.FeaturePoint;
-import cz.fidentis.analyst.gui.ProjectTopComp;
-import cz.fidentis.analyst.gui.scene.DrawableMesh;
-import java.io.File;
-import java.util.ArrayList;
-import javax.swing.filechooser.FileNameExtensionFilter;
-import org.netbeans.api.settings.ConvertAsProperties;
-import org.openide.awt.ActionID;
-import org.openide.awt.ActionReference;
-import org.openide.filesystems.FileChooserBuilder;
-import org.openide.windows.TopComponent;
-import org.openide.util.NbBundle.Messages;
-
-/**
- * Top component used to test registration adjustment.
- * 
- * @author Richard Pajersky
- */
-@ConvertAsProperties(
-        dtd = "-//cz.fidentis.analyst.gui//RegistrationTest//EN",
-        autostore = false
-)
-@TopComponent.Description(
-        preferredID = "PostRegistrationTestTC",
-        //iconBase="SET/PATH/TO/ICON/HERE",
-        persistenceType = TopComponent.PERSISTENCE_ALWAYS
-)
-@TopComponent.Registration(mode = "properties", openAtStartup = false)
-@ActionID(category = "Window", id = "cz.fidentis.analyst.gui.PostRegistrationTestTC")
-@ActionReference(path = "Menu/Window" /*, position = 333 */)
-@TopComponent.OpenActionRegistration(
-        displayName = "#CTL_RegistrationTestAction",
-        preferredID = "PostRegistrationTestTC"
-)
-@Messages({
-    "CTL_RegistrationTestAction=RegistrationTest",
-    "CTL_RegistrationTestTopComponent=RegistrationTest Window",
-    "HINT_RegistrationTestTopComponent=This is a RegistrationTest window"
-})
-public final class PostRegistrationTestTC extends TopComponent {
-
-    /**
-     * Constructor
-     */
-    public PostRegistrationTestTC() {
-        initComponents();
-        setName(Bundle.CTL_RegistrationTestTopComponent());
-        setToolTipText(Bundle.HINT_RegistrationTestTopComponent());
-        
-        File file1 = new FileChooserBuilder(ProjectTopComp.class)
-                .setTitle("Open human face(s)")
-                .setDefaultWorkingDirectory(new File (System.getProperty("user.home")))
-                //.setApproveText("Add")
-                .setFileFilter(new FileNameExtensionFilter("obj files (*.obj)", "obj"))
-                .setAcceptAllFileFilterUsed(true)
-                .showOpenDialog();
-        
-        File file2 = new FileChooserBuilder(ProjectTopComp.class)
-                .setTitle("Open human face(s)")
-                .setDefaultWorkingDirectory(new File (System.getProperty("user.home")))
-                //.setApproveText("Add")
-                .setFileFilter(new FileNameExtensionFilter("obj files (*.obj)", "obj"))
-                .setAcceptAllFileFilterUsed(true)
-                .showOpenDialog();
-        
-        String primFaceId = HumanFaceFactory.instance().loadFace(file1);
-        String secFaceId = HumanFaceFactory.instance().loadFace(file2);
-        HumanFace primary = HumanFaceFactory.instance().getFace(primFaceId);
-        HumanFace secondary = HumanFaceFactory.instance().getFace(secFaceId);
-
-        canvas1.initScene(primary, secondary); // init canvas
-        
-        /* feature points test */
-        ArrayList<DrawableMesh> drawables = new ArrayList<>(canvas1.getScene().getDrawables());
-        DrawableMesh primaryFace = drawables.get(0);
-        DrawableMesh secondaryFace = drawables.get(1);
-        
-        ArrayList<FeaturePoint> primar = new ArrayList<>();
-        primar.add(new FeaturePoint(100, 0, 0, null));
-        primaryFace.setFeaturePoints(primar);
-        
-        ArrayList<FeaturePoint> secondar = new ArrayList<>();
-        secondar.add(new FeaturePoint(101, 0, 0, null));
-        secondaryFace.setFeaturePoints(secondar);
-        
-        postRegistrationCP1.initPostRegistrationCP(new PostRegistrationListener(canvas1));
-        
-    }
-
-    /**
-     * This method is called from within the constructor to initialize the form.
-     * WARNING: Do NOT modify this code. The content of this method is always
-     * regenerated by the Form Editor.
-     */
-    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
-    private void initComponents() {
-
-        canvas1 = new cz.fidentis.analyst.gui.canvas.Canvas();
-        postRegistrationCP1 = new cz.fidentis.analyst.registration.PostRegistrationCP();
-
-        setPreferredSize(new java.awt.Dimension(405, 600));
-
-        javax.swing.GroupLayout postRegistrationCP1Layout = new javax.swing.GroupLayout(postRegistrationCP1);
-        postRegistrationCP1.setLayout(postRegistrationCP1Layout);
-        postRegistrationCP1Layout.setHorizontalGroup(
-            postRegistrationCP1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 340, Short.MAX_VALUE)
-        );
-        postRegistrationCP1Layout.setVerticalGroup(
-            postRegistrationCP1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 0, Short.MAX_VALUE)
-        );
-
-        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
-        this.setLayout(layout);
-        layout.setHorizontalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
-                .addComponent(canvas1, javax.swing.GroupLayout.DEFAULT_SIZE, 309, Short.MAX_VALUE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(postRegistrationCP1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
-        );
-        layout.setVerticalGroup(
-            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(canvas1, javax.swing.GroupLayout.DEFAULT_SIZE, 708, Short.MAX_VALUE)
-            .addComponent(postRegistrationCP1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-        );
-    }// </editor-fold>//GEN-END:initComponents
-
-    // Variables declaration - do not modify//GEN-BEGIN:variables
-    private cz.fidentis.analyst.gui.canvas.Canvas canvas1;
-    private cz.fidentis.analyst.registration.PostRegistrationCP postRegistrationCP1;
-    // End of variables declaration//GEN-END:variables
-    @Override
-    public void componentOpened() {
-        // TODO add custom code on component opening
-    }
-
-    @Override
-    public void componentClosed() {
-        // TODO add custom code on component closing
-    }
-
-    void writeProperties(java.util.Properties p) {
-        // better to version settings since initial version as advocated at
-        // http://wiki.apidesign.org/wiki/PropertyFiles
-        p.setProperty("version", "1.0");
-        // TODO store your settings
-    }
-
-    void readProperties(java.util.Properties p) {
-        String version = p.getProperty("version");
-        // TODO read your settings according to their version
-    }
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationAction.java b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..e0ba6d2587eb554fcda1960e2fa6209112f3177c
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationAction.java
@@ -0,0 +1,385 @@
+package cz.fidentis.analyst.registration;
+
+import cz.fidentis.analyst.canvas.Canvas;
+import cz.fidentis.analyst.core.ControlPanelAction;
+import cz.fidentis.analyst.feature.FeaturePoint;
+import cz.fidentis.analyst.icp.IcpTransformer;
+import cz.fidentis.analyst.icp.NoUndersampling;
+import cz.fidentis.analyst.icp.RandomStrategy;
+import cz.fidentis.analyst.icp.UndersamplingStrategy;
+import cz.fidentis.analyst.mesh.core.MeshFacet;
+import cz.fidentis.analyst.mesh.core.MeshPoint;
+import cz.fidentis.analyst.scene.DrawableFeaturePoints;
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JFormattedTextField;
+import javax.swing.JSlider;
+import javax.swing.JTabbedPane;
+import javax.swing.JToggleButton;
+import javax.vecmath.Point3d;
+import javax.vecmath.Vector3d;
+
+/**
+ * Action listener for the curvature computation.
+ * 
+ * @author Richard Pajersky
+ * @author Radek Oslejsek
+ */
+public class RegistrationAction extends ControlPanelAction {
+    
+    /*
+     * Handled actions
+     */
+    public static final String ACTION_COMMAND_APPLY_ICP = "apply ICP";
+    public static final String ACTION_COMMAND_SHIFT_X = "shift x";
+    public static final String ACTION_COMMAND_SHIFT_Y = "shift y";
+    public static final String ACTION_COMMAND_SHIFT_Z = "shift z";
+    public static final String ACTION_COMMAND_ROTATE_X = "rotate x";
+    public static final String ACTION_COMMAND_ROTATE_Y = "rotate y";
+    public static final String ACTION_COMMAND_ROTATE_Z = "rotate z";
+    public static final String ACTION_COMMAND_SCALE = "scale";
+    public static final String ACTION_COMMAND_FRONT_VIEW = "front view";
+    public static final String ACTION_COMMAND_SIDE_VIEW = "side view";
+    public static final String ACTION_COMMAND_RESET_ALL = "reset all";
+    public static final String ACTION_COMMAND_RESET_ROTATION = "reset translation";
+    public static final String ACTION_COMMAND_RESET_TRANSLATION = "reset rotation";
+    public static final String ACTION_COMMAND_RESET_SCALE = "reset scale";
+    public static final String ACTION_COMMAND_APPLY_TRANSFORMATIONS = "apply transformations";
+    public static final String ACTION_COMMAND_TRANSPARENCY = "transparency";
+    public static final String ACTION_COMMAND_FP_CLOSENESS_THRESHOLD = "fp closeness treshold";
+    public static final String ACTION_COMMAND_ICP_SCALE = "ICP scale";
+    public static final String ACTION_COMMAND_ICP_MAX_ITERATIONS = "ICP iterations";
+    public static final String ACTION_COMMAND_ICP_ERROR = "ICP error";
+    public static final String ACTION_COMMAND_ICP_UNDERSAMPLING = "ICP undersampling";
+    
+    
+    /*
+     * Attributes handling the state
+     */
+    private boolean scale = true;
+    private int maxIterations = 10;
+    private double error = 0.3;
+    private UndersamplingStrategy undersampling = new RandomStrategy(200);
+    
+    
+    /**
+     * Range of transparency 
+     */
+    public static final int TRANSPARENCY_RANGE = 10;
+    
+    /**
+     * Threshold of feature points showing too far away
+     */
+    private double featurePointsThreshold = 5.0;
+
+    private final RegistrationPanel controlPanel;
+    
+    /**
+     * Constructor.
+     * 
+     * @param canvas OpenGL canvas
+     * @param topControlPanel Top component for placing control panels
+     */
+    public RegistrationAction(Canvas canvas, JTabbedPane topControlPanel) {
+        super(canvas, topControlPanel);
+        this.controlPanel = new RegistrationPanel(this);
+    }
+    
+    @Override
+    public void actionPerformed(ActionEvent ae) {
+        double value;
+        String action = ae.getActionCommand();
+        
+        switch (action) {
+            case ACTION_COMMAND_SHOW_HIDE_PANEL:
+                hideShowPanelActionPerformed(ae, this.controlPanel);
+                if (((JToggleButton) ae.getSource()).isSelected()) {
+                    calculateFeaturePoints(); // color points 
+                } else {
+                    for (int i = 0; i < getPrimaryFeaturePoints().getFeaturePoints().size(); i++) {
+                        getPrimaryFeaturePoints().setColor(i, DrawableFeaturePoints.DEFAULT_COLOR);
+                        getSecondaryFeaturePoints().setColor(i, DrawableFeaturePoints.DEFAULT_COLOR);
+                    }
+                }
+                break;
+            case ACTION_COMMAND_APPLY_ICP:
+                applyICP();
+                calculateFeaturePoints();
+                break;
+            case ACTION_COMMAND_SHIFT_X:
+                value = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue();
+                getSecondaryDrawableFace().getTranslation().x = value;
+                if (getSecondaryFeaturePoints() != null) {
+                    getSecondaryFeaturePoints().getTranslation().x = value;
+                }
+                calculateFeaturePoints();
+                break;
+            case ACTION_COMMAND_SHIFT_Y:
+                value = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue();
+                getSecondaryDrawableFace().getTranslation().y = value;
+                if (getSecondaryFeaturePoints() != null) {
+                    getSecondaryFeaturePoints().getTranslation().y = value;
+                }
+                calculateFeaturePoints();
+                break;
+            case ACTION_COMMAND_SHIFT_Z:
+                value = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue();
+                getSecondaryDrawableFace().getTranslation().z = value;
+                if (getSecondaryFeaturePoints() != null) {
+                    getSecondaryFeaturePoints().getTranslation().z = value;
+                }
+                calculateFeaturePoints();
+                break;
+            case ACTION_COMMAND_ROTATE_X:
+                value = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue();
+                getSecondaryDrawableFace().getRotation().x = value;
+                if (getSecondaryFeaturePoints() != null) {
+                    getSecondaryFeaturePoints().getRotation().x = value;
+                }
+                calculateFeaturePoints();
+                break;
+            case ACTION_COMMAND_ROTATE_Y:
+                value = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue();
+                getSecondaryDrawableFace().getRotation().y = value;
+                if (getSecondaryFeaturePoints() != null) {
+                    getSecondaryFeaturePoints().getRotation().y = value;
+                }
+                calculateFeaturePoints();
+                break;
+            case ACTION_COMMAND_ROTATE_Z:
+                value = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue();
+                getSecondaryDrawableFace().getRotation().z = value;
+                if (getSecondaryFeaturePoints() != null) {
+                    getSecondaryFeaturePoints().getRotation().z = value;
+                }
+                calculateFeaturePoints();
+                break;
+            case ACTION_COMMAND_SCALE:
+                value = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue();
+                getSecondaryDrawableFace().getScale().x = value;
+                getSecondaryDrawableFace().getScale().y = value;
+                getSecondaryDrawableFace().getScale().z = value;
+                if (getSecondaryFeaturePoints() != null) {
+                    getSecondaryFeaturePoints().getScale().x = value;
+                    getSecondaryFeaturePoints().getScale().y = value;
+                    getSecondaryFeaturePoints().getScale().z = value;
+                }
+                calculateFeaturePoints();
+                break;
+            case ACTION_COMMAND_FRONT_VIEW:
+                getCanvas().getCamera().initLocation();
+                break;
+            case ACTION_COMMAND_SIDE_VIEW:
+                getCanvas().getCamera().initLocation();
+                getCanvas().getCamera().rotate(0, 90);
+                break;
+            case ACTION_COMMAND_RESET_TRANSLATION:
+                getSecondaryDrawableFace().setTranslation(new Vector3d(0, 0, 0));
+                if (getSecondaryFeaturePoints() != null) {
+                    getSecondaryFeaturePoints().setTranslation(new Vector3d(0, 0, 0));
+                }
+                calculateFeaturePoints();
+                break;
+            case ACTION_COMMAND_RESET_ROTATION:
+                getSecondaryDrawableFace().setRotation(new Vector3d(0, 0, 0));
+                if (getSecondaryFeaturePoints() != null) {
+                    getSecondaryFeaturePoints().setRotation(new Vector3d(0, 0, 0));
+                }
+                calculateFeaturePoints();
+                break;
+            case ACTION_COMMAND_RESET_SCALE:
+                getSecondaryDrawableFace().setScale(new Vector3d(0, 0, 0));
+                if (getSecondaryFeaturePoints() != null) {
+                    getSecondaryFeaturePoints().setScale(new Vector3d(0, 0, 0));
+                }
+                calculateFeaturePoints();
+                break;
+            case ACTION_COMMAND_RESET_ALL:
+                getSecondaryDrawableFace().setTranslation(new Vector3d(0, 0, 0));
+                getSecondaryDrawableFace().setRotation(new Vector3d(0, 0, 0));
+                getSecondaryDrawableFace().setScale(new Vector3d(0, 0, 0));
+                calculateFeaturePoints();
+                break;
+            case ACTION_COMMAND_APPLY_TRANSFORMATIONS:
+                transformFace();
+                getSecondaryDrawableFace().setTranslation(new Vector3d(0, 0, 0));
+                getSecondaryDrawableFace().setRotation(new Vector3d(0, 0, 0));
+                getSecondaryDrawableFace().setScale(new Vector3d(0, 0, 0));
+                break;
+            case ACTION_COMMAND_TRANSPARENCY:
+                int transparency = ((JSlider) ae.getSource()).getValue();
+                setTransparency(transparency);
+                break;
+            case ACTION_COMMAND_FP_CLOSENESS_THRESHOLD:
+                featurePointsThreshold = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue();
+                calculateFeaturePoints();
+                break;
+            case ACTION_COMMAND_ICP_SCALE:
+                this.scale = ((JCheckBox) ae.getSource()).isSelected();
+                break;
+            case ACTION_COMMAND_ICP_MAX_ITERATIONS:
+                maxIterations = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).intValue();
+                break;
+            case ACTION_COMMAND_ICP_ERROR:
+                error = ((Number)(((JFormattedTextField) ae.getSource()).getValue())).doubleValue();
+                break;
+            case ACTION_COMMAND_ICP_UNDERSAMPLING:
+                String item = (String)((JComboBox) ae.getSource()).getSelectedItem();
+                switch (item) {
+                    case "None":
+                        this.undersampling = new NoUndersampling();
+                        break;
+                    case "Random 200":
+                        this.undersampling = new RandomStrategy(200);
+                        break;
+                    default:
+                        throw new UnsupportedOperationException(item);
+                }
+                break;
+            default:
+                throw new UnsupportedOperationException(action);
+        }
+        
+        renderScene();
+    }
+    
+    protected void applyICP() {
+        IcpTransformer visitor = new IcpTransformer(getPrimaryDrawableFace().getModel(), maxIterations, scale, error, undersampling);
+        getSecondaryDrawableFace().getModel().compute(visitor); // NOTE: the secondary face is physically transformed
+    }
+    
+    /**
+     * Sets the transparency of {@link #primaryFace} or {@link #secondaryFace}
+     * based on the inputed value and {@link #TRANSPARENCY_RANGE}
+     * @param value Value
+     */
+    private void setTransparency(int value) {
+        if (value == TRANSPARENCY_RANGE) {
+            getPrimaryDrawableFace().setTransparency(1);
+            getSecondaryDrawableFace().setTransparency(1);
+        }
+        if (value < TRANSPARENCY_RANGE) {
+            getPrimaryDrawableFace().setTransparency(value / 10f);
+            getSecondaryDrawableFace().setTransparency(1);
+        }
+        if (value > TRANSPARENCY_RANGE) {
+            getPrimaryDrawableFace().setTransparency(1);
+            getSecondaryDrawableFace().setTransparency((2 * TRANSPARENCY_RANGE - value) / 10f);
+        }
+    }
+    
+    /**
+     * Calculates feature points which are too far away
+     * and changes their color to red
+     * otherwise set color to default
+     */
+    private void calculateFeaturePoints() {
+        if (getPrimaryDrawableFace() == null) { // scene not yet initiated
+            return;
+        }
+        
+        if (getPrimaryFeaturePoints() == null || 
+                getSecondaryFeaturePoints() == null ||
+                getPrimaryFeaturePoints().getFeaturePoints().size() != getSecondaryFeaturePoints().getFeaturePoints().size()) {
+            return;
+        }
+                
+        for (int i = 0; i < getPrimaryFeaturePoints().getFeaturePoints().size(); i++) {
+            FeaturePoint primary = getPrimaryFeaturePoints().getFeaturePoints().get(i);
+            FeaturePoint secondary = getSecondaryFeaturePoints().getFeaturePoints().get(i);
+            Point3d transformed = new Point3d(secondary.getX(), secondary.getY(), secondary.getZ());
+            transformPoint(transformed);
+            double distance = Math.sqrt(
+                Math.pow(transformed.x - primary.getX(), 2) + 
+                Math.pow(transformed.y - primary.getY(), 2) + 
+                Math.pow(transformed.z - primary.getZ(), 2));
+            if (distance > featurePointsThreshold) {
+                getPrimaryFeaturePoints().setColor(i, Color.RED);
+                getSecondaryFeaturePoints().setColor(i, Color.RED);
+            } else {
+                getPrimaryFeaturePoints().setColor(i, DrawableFeaturePoints.DEFAULT_COLOR);
+                getSecondaryFeaturePoints().setColor(i, DrawableFeaturePoints.DEFAULT_COLOR);
+            }
+        }
+    }
+    
+    /**
+     * Applies carried out transformations
+     * first on {@link #secondaryFace}
+     * and then on {@link #secondaryFace} feature points
+     */
+    private void transformFace() {
+        for (MeshFacet transformedFacet : getSecondaryDrawableFace().getFacets()) {
+            for (MeshPoint comparedPoint : transformedFacet.getVertices()) {
+                transformPoint(comparedPoint.getPosition());
+            }
+        }
+        for (int i = 0; i < getSecondaryFeaturePoints().getFeaturePoints().size(); i++) {
+            FeaturePoint point = getSecondaryFeaturePoints().getFeaturePoints().get(i);
+            Point3d transformed = new Point3d(point.getX(), point.getY(), point.getZ());
+            transformPoint(transformed);
+            point = new FeaturePoint(transformed.x, transformed.y, transformed.z, point.getFeaturePointType());
+            getSecondaryFeaturePoints().getFeaturePoints().set(i, point);
+        }
+    }
+    
+    /**
+     * Transforms point based on transformation info from {@link #secondaryFace}
+     * 
+     * @param point Point to transform
+     */
+    private void transformPoint(Point3d point) {
+        if (point == null) {
+            throw new IllegalArgumentException("point is null");
+        }
+
+        Point3d newPoint = new Point3d(0, 0, 0);
+        double quotient;
+
+        // rotate around X
+        quotient = Math.toRadians(getSecondaryDrawableFace().getRotation().x);
+        if (!Double.isNaN(quotient)) {
+            double cos = Math.cos(quotient);
+            double sin = Math.sin(quotient);
+            newPoint.y = point.y * cos - point.z * sin;
+            newPoint.z = point.z * cos + point.y * sin;
+            point.y = newPoint.y;
+            point.z = newPoint.z;
+        }
+
+        // rotate around Y
+        quotient = Math.toRadians(getSecondaryDrawableFace().getRotation().y);
+        if (!Double.isNaN(quotient)) {
+            double cos = Math.cos(quotient);
+            double sin = Math.sin(quotient);
+            newPoint.x = point.x * cos + point.z * sin;
+            newPoint.z = point.z * cos - point.x * sin;
+            point.x = newPoint.x;
+            point.z = newPoint.z;
+        }
+
+        // rotate around Z
+        quotient = Math.toRadians(getSecondaryDrawableFace().getRotation().z);
+        if (!Double.isNaN(quotient)) {
+            double cos = Math.cos(quotient);
+            double sin = Math.sin(quotient);
+            newPoint.x = point.x * cos - point.y * sin;
+            newPoint.y = point.y * cos + point.x * sin;
+            point.x = newPoint.x;
+            point.y = newPoint.y;
+        }
+
+        // translate
+        point.x += getSecondaryDrawableFace().getTranslation().x;
+        point.y += getSecondaryDrawableFace().getTranslation().y;
+        point.z += getSecondaryDrawableFace().getTranslation().z;
+
+        // scale
+        point.x *= 1 + getSecondaryDrawableFace().getScale().x;
+        point.y *= 1 + getSecondaryDrawableFace().getScale().y;
+        point.z *= 1 + getSecondaryDrawableFace().getScale().z;
+    }
+    
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationCP.form b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.form
similarity index 57%
rename from GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationCP.form
rename to GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.form
index 88614d21dea949ee64eae4749194dcd8fb53792d..cbc5b362d528945d89615b0bd906ec75a544127c 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/registration/PostRegistrationCP.form
+++ b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.form
@@ -11,7 +11,7 @@
   </NonVisualComponents>
   <Properties>
     <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-      <Dimension value="[415, 700]"/>
+      <Dimension value="[600, 600]"/>
     </Property>
     <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
       <Dimension value="[415, 700]"/>
@@ -32,27 +32,70 @@
   <Layout>
     <DimensionLayout dim="0">
       <Group type="103" groupAlignment="0" attributes="0">
-          <Component id="jSeparator11" alignment="0" pref="415" max="32767" attributes="0"/>
-          <Group type="102" alignment="0" attributes="0">
+          <Component id="visualizationPanel" pref="1057" max="32767" attributes="0"/>
+          <Group type="102" attributes="0">
+              <Component id="transformationPanel" min="-2" pref="599" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
+              <Component id="jSeparator2" max="32767" attributes="0"/>
+              <EmptySpace min="-2" pref="450" max="-2" attributes="0"/>
+          </Group>
+          <Group type="102" alignment="0" attributes="0">
               <Component id="registrationAdjustmentLabel" min="-2" max="-2" attributes="0"/>
+              <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
           </Group>
-          <Component id="transformationPanel" alignment="0" min="-2" max="-2" attributes="0"/>
-          <Component id="visualizationPanel" alignment="0" min="-2" max="-2" attributes="0"/>
+          <Group type="102" alignment="0" attributes="0">
+              <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace min="-2" pref="29" max="-2" attributes="0"/>
+                      <Component id="jButton1" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jCheckBox1" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jFormattedTextField1" min="-2" pref="49" max="-2" attributes="0"/>
+                      <EmptySpace min="-2" pref="4" max="-2" attributes="0"/>
+                      <Component id="jLabel5" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace min="-2" pref="9" max="-2" attributes="0"/>
+                      <Component id="jFormattedTextField2" min="-2" pref="53" max="-2" attributes="0"/>
+                      <EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
+                      <Component id="jLabel6" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jComboBox1" min="-2" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
+              <EmptySpace max="32767" attributes="0"/>
+          </Group>
+          <Component id="jSeparator11" alignment="0" max="32767" attributes="0"/>
       </Group>
     </DimensionLayout>
     <DimensionLayout dim="1">
       <Group type="103" groupAlignment="0" attributes="0">
           <Group type="102" alignment="0" attributes="0">
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jLabel1" alignment="3" min="-2" pref="57" max="-2" attributes="0"/>
+                  <Component id="jCheckBox1" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jFormattedTextField1" alignment="3" min="-2" pref="22" max="-2" attributes="0"/>
+                  <Component id="jLabel5" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jFormattedTextField2" alignment="3" min="-2" pref="20" max="-2" attributes="0"/>
+                  <Component id="jLabel6" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jComboBox1" alignment="3" min="-2" pref="20" max="-2" attributes="0"/>
+              </Group>
               <EmptySpace max="-2" attributes="0"/>
-              <Component id="registrationAdjustmentLabel" min="-2" max="-2" attributes="0"/>
-              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jButton1" min="-2" max="-2" attributes="0"/>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
               <Component id="jSeparator11" min="-2" pref="10" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
-              <Component id="visualizationPanel" min="-2" pref="244" max="-2" attributes="0"/>
+              <Component id="registrationAdjustmentLabel" min="-2" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
-              <Component id="transformationPanel" min="-2" pref="333" max="-2" attributes="0"/>
-              <EmptySpace pref="67" max="32767" attributes="0"/>
+              <Component id="visualizationPanel" min="-2" pref="206" max="-2" attributes="0"/>
+              <EmptySpace min="-2" pref="22" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="transformationPanel" min="-2" pref="333" max="-2" attributes="0"/>
+                  <Component id="jSeparator2" min="-2" pref="10" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace max="32767" attributes="0"/>
           </Group>
       </Group>
     </DimensionLayout>
@@ -64,7 +107,7 @@
           <Font name="Tahoma" size="14" style="1"/>
         </Property>
         <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-          <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.registrationAdjustmentLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+          <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.registrationAdjustmentLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
         </Property>
       </Properties>
     </Component>
@@ -84,548 +127,61 @@
         <DimensionLayout dim="0">
           <Group type="103" groupAlignment="0" attributes="0">
               <Group type="102" attributes="0">
-                  <EmptySpace max="-2" attributes="0"/>
-                  <Group type="103" groupAlignment="0" max="-2" attributes="0">
-                      <Component id="jSeparator1" max="32767" attributes="0"/>
-                      <Component id="jSeparator4" alignment="0" max="32767" attributes="0"/>
-                      <Component id="jSeparator8" alignment="0" max="32767" attributes="0"/>
-                      <Component id="visualizationLabel" alignment="0" min="-2" max="-2" attributes="0"/>
-                      <Component id="modelPanel" alignment="0" min="-2" max="-2" attributes="0"/>
-                      <Component id="featurePointsPanel" alignment="0" min="-2" max="-2" attributes="0"/>
-                      <Component id="viewPanel" alignment="0" max="32767" attributes="0"/>
-                  </Group>
-                  <EmptySpace pref="12" max="32767" attributes="0"/>
-              </Group>
-              <Component id="jSeparator3" alignment="0" max="32767" attributes="0"/>
-          </Group>
-        </DimensionLayout>
-        <DimensionLayout dim="1">
-          <Group type="103" groupAlignment="0" attributes="0">
-              <Group type="102" alignment="1" attributes="0">
-                  <Component id="visualizationLabel" min="-2" max="-2" attributes="0"/>
-                  <EmptySpace max="32767" attributes="0"/>
-                  <Component id="jSeparator4" min="-2" pref="10" max="-2" attributes="0"/>
-                  <EmptySpace max="-2" attributes="0"/>
-                  <Component id="modelPanel" min="-2" max="-2" attributes="0"/>
-                  <EmptySpace max="-2" attributes="0"/>
-                  <Component id="jSeparator8" min="-2" pref="10" max="-2" attributes="0"/>
-                  <EmptySpace max="-2" attributes="0"/>
-                  <Component id="viewPanel" min="-2" max="-2" attributes="0"/>
-                  <EmptySpace max="-2" attributes="0"/>
-                  <Component id="jSeparator1" min="-2" pref="10" max="-2" attributes="0"/>
-                  <EmptySpace max="-2" attributes="0"/>
-                  <Component id="featurePointsPanel" min="-2" max="-2" attributes="0"/>
-                  <EmptySpace min="-2" pref="34" max="-2" attributes="0"/>
-                  <Component id="jSeparator3" min="-2" pref="10" max="-2" attributes="0"/>
-                  <EmptySpace min="-2" pref="19" max="-2" attributes="0"/>
-              </Group>
-          </Group>
-        </DimensionLayout>
-      </Layout>
-      <SubComponents>
-        <Component class="javax.swing.JSeparator" name="jSeparator8">
-        </Component>
-        <Component class="javax.swing.JSeparator" name="jSeparator4">
-        </Component>
-        <Component class="javax.swing.JLabel" name="visualizationLabel">
-          <Properties>
-            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-              <Font name="Tahoma" size="12" style="1"/>
-            </Property>
-            <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.visualizationLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-            </Property>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JSeparator" name="jSeparator1">
-        </Component>
-        <Container class="javax.swing.JPanel" name="modelPanel">
-
-          <Layout>
-            <DimensionLayout dim="0">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" alignment="0" attributes="0">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Component id="primaryLabel" alignment="0" min="-2" pref="58" max="-2" attributes="0"/>
-                          <Component id="modelLabel" alignment="0" min="-2" max="-2" attributes="0"/>
-                          <Component id="secondaryLabel" alignment="0" max="32767" attributes="0"/>
-                      </Group>
-                      <EmptySpace type="separate" max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" attributes="0">
-                              <Component id="colorButton" min="-2" pref="50" max="-2" attributes="0"/>
-                              <EmptySpace max="-2" attributes="0"/>
-                              <Component id="highlightsLabel" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace type="unrelated" max="-2" attributes="0"/>
-                              <Component id="renderModeLabel" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace type="unrelated" max="-2" attributes="0"/>
-                              <Component id="transparencyButton" pref="67" max="32767" attributes="0"/>
-                          </Group>
-                          <Group type="102" attributes="0">
-                              <Group type="103" groupAlignment="0" attributes="0">
-                                  <Group type="102" alignment="0" attributes="0">
-                                      <Component id="primaryColorPanel" min="-2" pref="50" max="-2" attributes="0"/>
-                                      <EmptySpace type="separate" max="-2" attributes="0"/>
-                                      <Component id="primaryHighlightsCB" min="-2" max="-2" attributes="0"/>
-                                      <EmptySpace min="-2" pref="28" max="-2" attributes="0"/>
-                                      <Group type="103" groupAlignment="0" attributes="0">
-                                          <Group type="102" alignment="0" attributes="0">
-                                              <Component id="primaryFillRB" min="-2" max="-2" attributes="0"/>
-                                              <EmptySpace type="separate" max="-2" attributes="0"/>
-                                              <Component id="primaryLinesRB" min="-2" max="-2" attributes="0"/>
-                                              <EmptySpace type="separate" max="-2" attributes="0"/>
-                                              <Component id="primaryPointsRB" min="-2" max="-2" attributes="0"/>
-                                          </Group>
-                                          <Group type="102" alignment="0" attributes="0">
-                                              <Component id="secondaryFillRB" min="-2" max="-2" attributes="0"/>
-                                              <EmptySpace type="separate" max="-2" attributes="0"/>
-                                              <Component id="secondaryLinesRB" min="-2" max="-2" attributes="0"/>
-                                              <EmptySpace type="separate" max="-2" attributes="0"/>
-                                              <Component id="secondaryPointsRB" min="-2" max="-2" attributes="0"/>
-                                          </Group>
-                                          <Group type="102" alignment="0" attributes="0">
-                                              <Component id="fillLabel" min="-2" max="-2" attributes="0"/>
-                                              <EmptySpace type="separate" max="-2" attributes="0"/>
-                                              <Component id="linesLabel" min="-2" max="-2" attributes="0"/>
-                                              <EmptySpace max="-2" attributes="0"/>
-                                              <Component id="pointsLabel" min="-2" max="-2" attributes="0"/>
-                                          </Group>
-                                      </Group>
-                                  </Group>
-                                  <Group type="102" alignment="0" attributes="0">
-                                      <Component id="secondaryColorPanel" min="-2" pref="50" max="-2" attributes="0"/>
-                                      <EmptySpace type="separate" max="-2" attributes="0"/>
-                                      <Component id="secondaryHighlightsCB" min="-2" max="-2" attributes="0"/>
-                                  </Group>
-                              </Group>
-                              <EmptySpace type="separate" max="-2" attributes="0"/>
-                              <Component id="transparencySlider" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-                          </Group>
-                      </Group>
-                      <EmptySpace max="32767" attributes="0"/>
-                  </Group>
-              </Group>
-            </DimensionLayout>
-            <DimensionLayout dim="1">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" alignment="0" attributes="0">
-                      <Group type="103" groupAlignment="3" attributes="0">
-                          <Component id="highlightsLabel" alignment="3" min="-2" max="-2" attributes="0"/>
-                          <Component id="renderModeLabel" alignment="3" min="-2" max="-2" attributes="0"/>
-                          <Component id="transparencyButton" alignment="3" max="-2" attributes="0"/>
-                          <Component id="colorButton" alignment="3" min="-2" max="-2" attributes="0"/>
-                      </Group>
-                      <EmptySpace min="4" pref="4" max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" attributes="0">
-                              <Group type="103" groupAlignment="3" attributes="0">
-                                  <Component id="fillLabel" alignment="3" min="-2" max="-2" attributes="0"/>
-                                  <Component id="pointsLabel" alignment="3" min="-2" max="-2" attributes="0"/>
-                                  <Component id="linesLabel" alignment="3" min="-2" max="-2" attributes="0"/>
-                              </Group>
-                              <EmptySpace max="-2" attributes="0"/>
-                              <Component id="primaryPointsRB" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-                          </Group>
-                          <Component id="transparencySlider" pref="0" max="32767" attributes="0"/>
-                      </Group>
-                  </Group>
-                  <Group type="102" alignment="0" attributes="0">
-                      <Group type="103" groupAlignment="1" attributes="0">
-                          <Component id="secondaryColorPanel" min="-2" max="-2" attributes="0"/>
-                          <Group type="102" attributes="0">
-                              <Component id="modelLabel" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace min="-2" pref="29" max="-2" attributes="0"/>
-                              <Group type="103" groupAlignment="0" attributes="0">
-                                  <Component id="primaryHighlightsCB" min="-2" max="-2" attributes="0"/>
-                                  <Group type="103" groupAlignment="1" attributes="0">
-                                      <Component id="primaryColorPanel" min="-2" max="-2" attributes="0"/>
-                                      <Component id="primaryLabel" min="-2" max="-2" attributes="0"/>
-                                  </Group>
-                                  <Component id="primaryFillRB" alignment="0" min="-2" max="-2" attributes="0"/>
-                                  <Component id="primaryLinesRB" alignment="0" min="-2" max="-2" attributes="0"/>
-                              </Group>
-                              <EmptySpace min="-2" pref="14" max="-2" attributes="0"/>
-                              <Group type="103" groupAlignment="1" attributes="0">
-                                  <Group type="103" groupAlignment="0" attributes="0">
-                                      <Component id="secondaryLabel" min="-2" max="-2" attributes="0"/>
-                                      <Component id="secondaryHighlightsCB" alignment="1" min="-2" max="-2" attributes="0"/>
-                                  </Group>
-                                  <Component id="secondaryFillRB" min="-2" max="-2" attributes="0"/>
-                                  <Component id="secondaryLinesRB" min="-2" max="-2" attributes="0"/>
-                                  <Component id="secondaryPointsRB" min="-2" max="-2" attributes="0"/>
-                              </Group>
-                          </Group>
-                      </Group>
-                      <EmptySpace max="32767" attributes="0"/>
-                  </Group>
-              </Group>
-            </DimensionLayout>
-          </Layout>
-          <SubComponents>
-            <Component class="javax.swing.JLabel" name="modelLabel">
-              <Properties>
-                <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-                  <Font name="Tahoma" size="11" style="3"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.modelLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JLabel" name="pointsLabel">
-              <Properties>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.pointsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JButton" name="transparencyButton">
-              <Properties>
-                <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-                  <Font name="Tahoma" size="11" style="1"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.transparencyButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.transparencyButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
-                    <TitledBorder>
-                      <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
-                        <EtchetBorder/>
-                      </Border>
-                    </TitledBorder>
-                  </Border>
-                </Property>
-                <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-                  <Color id="Default Cursor"/>
-                </Property>
-                <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-                  <Dimension value="[100, 19]"/>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="transparencyButtonActionPerformed"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JLabel" name="linesLabel">
-              <Properties>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.linesLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JButton" name="colorButton">
-              <Properties>
-                <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-                  <Font name="Tahoma" size="11" style="1"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.colorButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.colorButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
-                    <TitledBorder>
-                      <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
-                        <EtchetBorder/>
-                      </Border>
-                    </TitledBorder>
-                  </Border>
-                </Property>
-                <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-                  <Color id="Default Cursor"/>
-                </Property>
-                <Property name="horizontalTextPosition" type="int" value="0"/>
-                <Property name="iconTextGap" type="int" value="0"/>
-              </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="colorButtonActionPerformed"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JLabel" name="fillLabel">
-              <Properties>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.fillLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JLabel" name="renderModeLabel">
-              <Properties>
-                <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-                  <Font name="Tahoma" size="11" style="1"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.renderModeLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JCheckBox" name="secondaryHighlightsCB">
-              <Properties>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.secondaryHighlightsCB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
-                    <LineBorder/>
-                  </Border>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="secondaryHighlightsCBActionPerformed"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JCheckBox" name="primaryHighlightsCB">
-              <Properties>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.primaryHighlightsCB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
-                    <LineBorder/>
-                  </Border>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="primaryHighlightsCBActionPerformed"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JLabel" name="highlightsLabel">
-              <Properties>
-                <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-                  <Font name="Tahoma" size="11" style="1"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.highlightsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JLabel" name="primaryLabel">
-              <Properties>
-                <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-                  <Font name="Tahoma" size="11" style="1"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.primaryLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JLabel" name="secondaryLabel">
-              <Properties>
-                <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-                  <Font name="Tahoma" size="11" style="1"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.secondaryLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.secondaryLabel.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JSlider" name="transparencySlider">
-              <Properties>
-                <Property name="majorTickSpacing" type="int" value="5"/>
-                <Property name="maximum" type="int" value="20"/>
-                <Property name="minorTickSpacing" type="int" value="5"/>
-                <Property name="orientation" type="int" value="1"/>
-                <Property name="paintTicks" type="boolean" value="true"/>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.transparencySlider.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="value" type="int" value="10"/>
-                <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-                  <Color id="Hand Cursor"/>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="transparencySliderStateChanged"/>
-              </Events>
-            </Component>
-            <Container class="javax.swing.JPanel" name="secondaryColorPanel">
-              <Properties>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
-                    <LineBorder/>
-                  </Border>
-                </Property>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.secondaryColorPanel.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-                  <Color id="Hand Cursor"/>
-                </Property>
-                <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-                  <Dimension value="[70, 14]"/>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="secondaryColorPanelMouseClicked"/>
-              </Events>
-
-              <Layout>
-                <DimensionLayout dim="0">
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <EmptySpace min="0" pref="48" max="32767" attributes="0"/>
-                  </Group>
-                </DimensionLayout>
-                <DimensionLayout dim="1">
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <EmptySpace min="0" pref="12" max="32767" attributes="0"/>
-                  </Group>
-                </DimensionLayout>
-              </Layout>
-            </Container>
-            <Container class="javax.swing.JPanel" name="primaryColorPanel">
-              <Properties>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
-                    <LineBorder/>
-                  </Border>
-                </Property>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.primaryColorPanel.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
-                  <Color id="Hand Cursor"/>
-                </Property>
-                <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-                  <Dimension value="[72, 14]"/>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="primaryColorPanelMouseClicked"/>
-              </Events>
-
-              <Layout>
-                <DimensionLayout dim="0">
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <EmptySpace min="0" pref="48" max="32767" attributes="0"/>
-                  </Group>
-                </DimensionLayout>
-                <DimensionLayout dim="1">
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <EmptySpace min="0" pref="12" max="32767" attributes="0"/>
-                  </Group>
-                </DimensionLayout>
-              </Layout>
-            </Container>
-            <Component class="javax.swing.JRadioButton" name="primaryLinesRB">
-              <Properties>
-                <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
-                  <ComponentRef name="primaryRenderModeGroup"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.primaryLinesRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
-                    <LineBorder/>
-                  </Border>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="primaryLinesRBActionPerformed"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JRadioButton" name="secondaryFillRB">
-              <Properties>
-                <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
-                  <ComponentRef name="secondaryRenerModeGroup"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.secondaryFillRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
-                    <LineBorder/>
-                  </Border>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="secondaryFillRBActionPerformed"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JRadioButton" name="primaryPointsRB">
-              <Properties>
-                <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
-                  <ComponentRef name="primaryRenderModeGroup"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.primaryPointsRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
-                    <LineBorder/>
-                  </Border>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="primaryPointsRBActionPerformed"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JRadioButton" name="secondaryPointsRB">
-              <Properties>
-                <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
-                  <ComponentRef name="secondaryRenerModeGroup"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.secondaryPointsRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
-                    <LineBorder/>
-                  </Border>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="secondaryPointsRBActionPerformed"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JRadioButton" name="secondaryLinesRB">
-              <Properties>
-                <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
-                  <ComponentRef name="secondaryRenerModeGroup"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.secondaryLinesRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
-                    <LineBorder/>
-                  </Border>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="secondaryLinesRBActionPerformed"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JRadioButton" name="primaryFillRB">
-              <Properties>
-                <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
-                  <ComponentRef name="primaryRenderModeGroup"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.primaryFillRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
-                    <LineBorder/>
-                  </Border>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="primaryFillRBActionPerformed"/>
-              </Events>
-            </Component>
-          </SubComponents>
-        </Container>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Group type="103" alignment="0" groupAlignment="0" max="-2" attributes="0">
+                          <Component id="featurePointsPanel" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="viewPanel" alignment="0" max="32767" attributes="0"/>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="visualizationLabel" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="transparencySlider" min="-2" pref="281" max="-2" attributes="0"/>
+                          <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                          <Component id="transparencyButton" min="-2" pref="78" max="-2" attributes="0"/>
+                      </Group>
+                  </Group>
+                  <EmptySpace max="32767" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+        <DimensionLayout dim="1">
+          <Group type="103" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="1" attributes="0">
+                  <Group type="103" groupAlignment="1" attributes="0">
+                      <Group type="102" attributes="0">
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="transparencySlider" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <EmptySpace min="-2" pref="27" max="-2" attributes="0"/>
+                          <Component id="visualizationLabel" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <EmptySpace min="-2" pref="24" max="-2" attributes="0"/>
+                          <Component id="transparencyButton" min="-2" pref="30" max="-2" attributes="0"/>
+                      </Group>
+                  </Group>
+                  <EmptySpace min="-2" pref="34" max="-2" attributes="0"/>
+                  <Component id="viewPanel" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace min="-2" pref="22" max="-2" attributes="0"/>
+                  <Component id="featurePointsPanel" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace pref="25" max="32767" attributes="0"/>
+              </Group>
+          </Group>
+        </DimensionLayout>
+      </Layout>
+      <SubComponents>
+        <Component class="javax.swing.JLabel" name="visualizationLabel">
+          <Properties>
+            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+              <Font name="Tahoma" size="14" style="1"/>
+            </Property>
+            <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.visualizationLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+            </Property>
+          </Properties>
+        </Component>
         <Container class="javax.swing.JPanel" name="viewPanel">
 
           <Layout>
@@ -633,13 +189,11 @@
               <Group type="103" groupAlignment="0" attributes="0">
                   <Group type="102" alignment="0" attributes="0">
                       <Component id="viewLabel" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace type="separate" max="-2" attributes="0"/>
+                      <EmptySpace max="32767" attributes="0"/>
                       <Component id="frontButton" min="-2" pref="50" max="-2" attributes="0"/>
-                      <EmptySpace type="separate" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
                       <Component id="profileButton" min="-2" pref="50" max="-2" attributes="0"/>
-                      <EmptySpace type="separate" max="-2" attributes="0"/>
-                      <Component id="backfaceButton" max="32767" attributes="0"/>
-                      <EmptySpace max="32767" attributes="0"/>
+                      <EmptySpace min="-2" pref="216" max="-2" attributes="0"/>
                   </Group>
               </Group>
             </DimensionLayout>
@@ -649,7 +203,6 @@
                       <Component id="viewLabel" alignment="3" min="-2" max="-2" attributes="0"/>
                       <Component id="frontButton" alignment="3" min="-2" max="-2" attributes="0"/>
                       <Component id="profileButton" alignment="3" min="-2" max="-2" attributes="0"/>
-                      <Component id="backfaceButton" alignment="3" min="-2" max="-2" attributes="0"/>
                   </Group>
               </Group>
             </DimensionLayout>
@@ -658,10 +211,10 @@
             <Component class="javax.swing.JButton" name="profileButton">
               <Properties>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.profileButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.profileButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.profileButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.profileButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -676,17 +229,14 @@
                   <Color id="Default Cursor"/>
                 </Property>
               </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="profileButtonActionPerformed"/>
-              </Events>
             </Component>
             <Component class="javax.swing.JButton" name="frontButton">
               <Properties>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.frontButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.frontButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.frontButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.frontButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -701,38 +251,16 @@
                   <Color id="Default Cursor"/>
                 </Property>
               </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="frontButtonActionPerformed"/>
-              </Events>
             </Component>
             <Component class="javax.swing.JLabel" name="viewLabel">
               <Properties>
                 <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-                  <Font name="Tahoma" size="11" style="3"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.viewLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <Font name="Tahoma" size="14" style="3"/>
                 </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JToggleButton" name="backfaceButton">
-              <Properties>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.backfaceButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
-                    <TitledBorder>
-                      <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
-                        <EtchetBorder/>
-                      </Border>
-                    </TitledBorder>
-                  </Border>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.viewLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="backfaceButtonActionPerformed"/>
-              </Events>
             </Component>
           </SubComponents>
         </Container>
@@ -744,54 +272,39 @@
                   <Group type="102" alignment="0" attributes="0">
                       <Component id="featurePointsLabel" min="-2" max="-2" attributes="0"/>
                       <EmptySpace type="separate" max="-2" attributes="0"/>
-                      <Component id="featurePointsButton" pref="43" max="32767" attributes="0"/>
-                      <EmptySpace type="separate" max="-2" attributes="0"/>
-                      <Component id="thersholdButton" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace max="-2" attributes="0"/>
                       <Component id="thersholdFTF" min="-2" pref="70" max="-2" attributes="0"/>
                       <EmptySpace max="-2" attributes="0"/>
                       <Component id="thersholdUpButton" min="-2" max="-2" attributes="0"/>
                       <EmptySpace max="-2" attributes="0"/>
                       <Component id="thresholdDownButton" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace pref="192" max="32767" attributes="0"/>
                   </Group>
               </Group>
             </DimensionLayout>
             <DimensionLayout dim="1">
               <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="103" alignment="0" groupAlignment="3" attributes="0">
-                      <Component id="featurePointsLabel" alignment="3" min="-2" max="-2" attributes="0"/>
-                      <Component id="featurePointsButton" alignment="3" min="-2" max="-2" attributes="0"/>
-                      <Component id="thersholdButton" alignment="3" min="-2" max="-2" attributes="0"/>
-                      <Component id="thersholdFTF" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Group type="102" attributes="0">
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="featurePointsLabel" min="-2" max="-2" attributes="0"/>
+                          <Group type="103" alignment="0" groupAlignment="1" max="-2" attributes="0">
+                              <Component id="thersholdFTF" alignment="0" pref="0" max="32767" attributes="0"/>
+                              <Component id="thersholdUpButton" alignment="0" max="32767" attributes="0"/>
+                              <Component id="thresholdDownButton" alignment="0" max="32767" attributes="0"/>
+                          </Group>
+                      </Group>
+                      <EmptySpace min="0" pref="10" max="32767" attributes="0"/>
                   </Group>
-                  <Component id="thersholdUpButton" alignment="0" min="-2" max="-2" attributes="0"/>
-                  <Component id="thresholdDownButton" min="-2" max="-2" attributes="0"/>
               </Group>
             </DimensionLayout>
           </Layout>
           <SubComponents>
-            <Component class="javax.swing.JToggleButton" name="featurePointsButton">
-              <Properties>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.featurePointsButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
-                    <TitledBorder/>
-                  </Border>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="featurePointsButtonActionPerformed"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JButton" name="thresholdDownButton">
+            <Component class="javax.swing.JButton" name="thersholdUpButton">
               <Properties>
                 <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                  <Image iconType="3" name="/subtract-line.png"/>
+                  <Image iconType="3" name="/add-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.thresholdDownButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.thersholdUpButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -801,7 +314,6 @@
                 <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
                   <Color id="Default Cursor"/>
                 </Property>
-                <Property name="enabled" type="boolean" value="false"/>
                 <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
                   <Dimension value="[24, 24]"/>
                 </Property>
@@ -813,16 +325,33 @@
                 </Property>
               </Properties>
               <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="thresholdDownButtonActionPerformed"/>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="thersholdUpButtonActionPerformed"/>
               </Events>
             </Component>
-            <Component class="javax.swing.JButton" name="thersholdUpButton">
+            <Component class="javax.swing.JFormattedTextField" name="thersholdFTF">
+              <Properties>
+                <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor">
+                  <Format subtype="0" type="0"/>
+                </Property>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="featurePointsLabel">
+              <Properties>
+                <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+                  <Font name="Tahoma" size="14" style="3"/>
+                </Property>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.featurePointsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                </Property>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JButton" name="thresholdDownButton">
               <Properties>
                 <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                  <Image iconType="3" name="/add-line.png"/>
+                  <Image iconType="3" name="/subtract-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.thersholdUpButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.thresholdDownButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -832,7 +361,6 @@
                 <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
                   <Color id="Default Cursor"/>
                 </Property>
-                <Property name="enabled" type="boolean" value="false"/>
                 <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
                   <Dimension value="[24, 24]"/>
                 </Property>
@@ -844,52 +372,59 @@
                 </Property>
               </Properties>
               <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="thersholdUpButtonActionPerformed"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JButton" name="thersholdButton">
-              <Properties>
-                <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-                  <Font name="Tahoma" size="11" style="1"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.thersholdButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
-                  <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
-                    <TitledBorder/>
-                  </Border>
-                </Property>
-                <Property name="enabled" type="boolean" value="false"/>
-              </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="thersholdButtonActionPerformed"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JFormattedTextField" name="thersholdFTF">
-              <Properties>
-                <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor">
-                  <Format subtype="0" type="0"/>
-                </Property>
-                <Property name="enabled" type="boolean" value="false"/>
-              </Properties>
-              <Events>
-                <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="thersholdFTFPropertyChange"/>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="thresholdDownButtonActionPerformed"/>
               </Events>
             </Component>
-            <Component class="javax.swing.JLabel" name="featurePointsLabel">
-              <Properties>
-                <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-                  <Font name="Tahoma" size="11" style="3"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.featurePointsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
           </SubComponents>
         </Container>
-        <Component class="javax.swing.JSeparator" name="jSeparator3">
+        <Component class="javax.swing.JSlider" name="transparencySlider">
+          <Properties>
+            <Property name="majorTickSpacing" type="int" value="5"/>
+            <Property name="maximum" type="int" value="20"/>
+            <Property name="minorTickSpacing" type="int" value="5"/>
+            <Property name="paintTicks" type="boolean" value="true"/>
+            <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.transparencySlider.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+            </Property>
+            <Property name="value" type="int" value="10"/>
+            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
+              <Color id="Hand Cursor"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="transparencySliderStateChanged"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JButton" name="transparencyButton">
+          <Properties>
+            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+              <Font name="Tahoma" size="11" style="1"/>
+            </Property>
+            <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.transparencyButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+            </Property>
+            <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.transparencyButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+            </Property>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
+                <TitledBorder>
+                  <Border PropertyName="innerBorder" info="org.netbeans.modules.form.compat2.border.EtchedBorderInfo">
+                    <EtchetBorder/>
+                  </Border>
+                </TitledBorder>
+              </Border>
+            </Property>
+            <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
+              <Color id="Default Cursor"/>
+            </Property>
+            <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[100, 19]"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="transparencyButtonActionPerformed"/>
+          </Events>
         </Component>
       </SubComponents>
     </Container>
@@ -903,74 +438,89 @@
       <Layout>
         <DimensionLayout dim="0">
           <Group type="103" groupAlignment="0" attributes="0">
-              <Group type="102" attributes="0">
-                  <EmptySpace max="-2" attributes="0"/>
-                  <Group type="103" groupAlignment="0" attributes="0">
-                      <Component id="rotationPanel" alignment="0" max="32767" attributes="0"/>
+              <Component id="jSeparator5" alignment="1" max="32767" attributes="0"/>
+              <Group type="102" alignment="1" attributes="0">
+                  <Group type="103" groupAlignment="1" attributes="0">
+                      <Component id="translationPanel" max="32767" attributes="0"/>
                       <Group type="102" attributes="0">
+                          <EmptySpace max="-2" attributes="0"/>
                           <Group type="103" groupAlignment="0" attributes="0">
-                              <Group type="103" alignment="0" groupAlignment="0" max="-2" attributes="0">
-                                  <Component id="transformationLabel" alignment="0" min="-2" max="-2" attributes="0"/>
-                                  <Component id="jSeparator6" alignment="0" pref="371" max="32767" attributes="0"/>
-                                  <Component id="jSeparator2" alignment="0" max="32767" attributes="0"/>
-                              </Group>
-                              <Component id="translationPanel" alignment="0" min="-2" max="-2" attributes="0"/>
-                              <Component id="jSeparator7" alignment="0" min="-2" pref="371" max="-2" attributes="0"/>
-                              <Group type="102" alignment="0" attributes="0">
+                              <Component id="rotationPanel" alignment="0" max="32767" attributes="0"/>
+                              <Group type="102" attributes="0">
                                   <Component id="scalePanel" min="-2" max="-2" attributes="0"/>
                                   <EmptySpace max="-2" attributes="0"/>
                                   <Component id="jSeparator9" min="-2" pref="10" max="-2" attributes="0"/>
-                                  <EmptySpace type="separate" max="-2" attributes="0"/>
-                                  <Component id="shiftPanel" min="-2" max="-2" attributes="0"/>
-                                  <EmptySpace max="-2" attributes="0"/>
-                                  <Component id="jSeparator10" min="-2" pref="15" max="-2" attributes="0"/>
-                                  <EmptySpace max="-2" attributes="0"/>
                                   <Group type="103" groupAlignment="0" attributes="0">
-                                      <Component id="resetAllButton" max="32767" attributes="0"/>
-                                      <Component id="applyButton" max="32767" attributes="0"/>
+                                      <Group type="102" attributes="0">
+                                          <EmptySpace max="-2" attributes="0"/>
+                                          <Component id="shiftPanel" min="-2" max="-2" attributes="0"/>
+                                      </Group>
+                                      <Group type="102" attributes="0">
+                                          <Group type="103" groupAlignment="0" attributes="0">
+                                              <Group type="102" alignment="0" attributes="0">
+                                                  <EmptySpace min="-2" pref="24" max="-2" attributes="0"/>
+                                                  <Component id="shiftLabel" min="-2" max="-2" attributes="0"/>
+                                              </Group>
+                                              <Group type="102" alignment="0" attributes="0">
+                                                  <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                                                  <Group type="103" groupAlignment="0" attributes="0">
+                                                      <Component id="lowShiftRB" min="-2" max="-2" attributes="0"/>
+                                                      <Component id="highShiftRB" min="-2" max="-2" attributes="0"/>
+                                                  </Group>
+                                              </Group>
+                                          </Group>
+                                          <EmptySpace type="separate" max="-2" attributes="0"/>
+                                          <Component id="jSeparator10" min="-2" pref="15" max="-2" attributes="0"/>
+                                      </Group>
+                                  </Group>
+                                  <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                                  <Group type="103" groupAlignment="0" attributes="0">
+                                      <Component id="resetAllButton" min="-2" pref="128" max="-2" attributes="0"/>
+                                      <Component id="applyButton" min="-2" pref="128" max="-2" attributes="0"/>
                                   </Group>
+                                  <EmptySpace min="0" pref="93" max="32767" attributes="0"/>
                               </Group>
                           </Group>
-                          <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
                       </Group>
                   </Group>
                   <EmptySpace max="-2" attributes="0"/>
               </Group>
-              <Component id="jSeparator5" alignment="1" max="32767" attributes="0"/>
           </Group>
         </DimensionLayout>
         <DimensionLayout dim="1">
           <Group type="103" groupAlignment="0" attributes="0">
               <Group type="102" attributes="0">
-                  <Component id="transformationLabel" min="-2" max="-2" attributes="0"/>
-                  <EmptySpace min="-2" pref="13" max="-2" attributes="0"/>
-                  <Component id="jSeparator2" min="-2" pref="10" max="-2" attributes="0"/>
-                  <EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
                   <Component id="translationPanel" min="-2" max="-2" attributes="0"/>
-                  <EmptySpace max="-2" attributes="0"/>
-                  <Component id="jSeparator6" min="-2" pref="10" max="-2" attributes="0"/>
                   <EmptySpace max="32767" attributes="0"/>
                   <Component id="rotationPanel" min="-2" max="-2" attributes="0"/>
-                  <EmptySpace max="-2" attributes="0"/>
-                  <Component id="jSeparator7" min="-2" pref="10" max="-2" attributes="0"/>
-                  <EmptySpace max="-2" attributes="0"/>
+                  <EmptySpace min="-2" pref="22" max="-2" attributes="0"/>
                   <Group type="103" groupAlignment="0" attributes="0">
-                      <Group type="102" alignment="0" attributes="0">
-                          <Group type="103" groupAlignment="1" attributes="0">
-                              <Component id="applyButton" min="-2" pref="27" max="-2" attributes="0"/>
-                              <Component id="jSeparator10" min="-2" pref="62" max="-2" attributes="0"/>
-                          </Group>
+                      <Group type="102" attributes="0">
+                          <Component id="scalePanel" max="32767" attributes="0"/>
                           <EmptySpace max="32767" attributes="0"/>
                       </Group>
                       <Group type="102" attributes="0">
                           <Group type="103" groupAlignment="0" attributes="0">
-                              <Group type="102" attributes="0">
-                                  <Component id="scalePanel" max="32767" attributes="0"/>
-                                  <EmptySpace min="-2" pref="7" max="-2" attributes="0"/>
+                              <Group type="102" alignment="0" attributes="0">
+                                  <Component id="resetAllButton" min="-2" max="-2" attributes="0"/>
+                                  <EmptySpace max="-2" attributes="0"/>
+                                  <Component id="applyButton" min="-2" pref="27" max="-2" attributes="0"/>
                               </Group>
                               <Component id="jSeparator9" min="-2" pref="62" max="-2" attributes="0"/>
-                              <Component id="shiftPanel" min="-2" max="-2" attributes="0"/>
-                              <Component id="resetAllButton" alignment="0" min="-2" max="-2" attributes="0"/>
+                              <Group type="102" alignment="0" attributes="0">
+                                  <Group type="103" groupAlignment="0" attributes="0">
+                                      <Group type="102" attributes="0">
+                                          <Component id="shiftLabel" min="-2" max="-2" attributes="0"/>
+                                          <EmptySpace max="-2" attributes="0"/>
+                                          <Component id="lowShiftRB" min="-2" max="-2" attributes="0"/>
+                                          <EmptySpace min="-2" pref="3" max="-2" attributes="0"/>
+                                          <Component id="highShiftRB" min="-2" max="-2" attributes="0"/>
+                                      </Group>
+                                      <Component id="jSeparator10" min="-2" pref="62" max="-2" attributes="0"/>
+                                  </Group>
+                                  <EmptySpace type="separate" max="-2" attributes="0"/>
+                                  <Component id="shiftPanel" min="-2" max="-2" attributes="0"/>
+                              </Group>
                           </Group>
                           <EmptySpace max="32767" attributes="0"/>
                       </Group>
@@ -981,110 +531,93 @@
         </DimensionLayout>
       </Layout>
       <SubComponents>
-        <Component class="javax.swing.JLabel" name="transformationLabel">
-          <Properties>
-            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-              <Font name="Tahoma" size="12" style="1"/>
-            </Property>
-            <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.transformationLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-            </Property>
-          </Properties>
-        </Component>
-        <Component class="javax.swing.JSeparator" name="jSeparator2">
-        </Component>
-        <Component class="javax.swing.JSeparator" name="jSeparator6">
-        </Component>
         <Container class="javax.swing.JPanel" name="translationPanel">
 
           <Layout>
             <DimensionLayout dim="0">
               <Group type="103" groupAlignment="0" attributes="0">
                   <Group type="102" alignment="0" attributes="0">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" attributes="0">
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="1" attributes="0">
+                          <Group type="102" alignment="1" attributes="0">
                               <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace min="-2" pref="28" max="-2" attributes="0"/>
+                              <EmptySpace min="-2" pref="51" max="-2" attributes="0"/>
+                              <Component id="translXLabel" min="-2" max="-2" attributes="0"/>
                           </Group>
                           <Group type="102" alignment="1" attributes="0">
                               <Component id="translationButton" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace type="separate" max="-2" attributes="0"/>
-                          </Group>
-                      </Group>
-                      <Group type="103" groupAlignment="0" max="-2" attributes="0">
-                          <Component id="translXLabel" alignment="0" min="-2" max="-2" attributes="0"/>
-                          <Component id="translationXFTF" alignment="0" max="32767" attributes="0"/>
-                          <Group type="102" alignment="0" attributes="0">
-                              <Component id="leftTranslationXButton" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace max="-2" attributes="0"/>
-                              <Component id="rightTranslationXButton" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                              <Group type="103" groupAlignment="0" attributes="0">
+                                  <Component id="translationXFTF" alignment="0" min="-2" pref="54" max="-2" attributes="0"/>
+                                  <Group type="102" alignment="0" attributes="0">
+                                      <Component id="leftTranslationXButton" min="-2" max="-2" attributes="0"/>
+                                      <EmptySpace max="-2" attributes="0"/>
+                                      <Component id="rightTranslationXButton" min="-2" max="-2" attributes="0"/>
+                                  </Group>
+                              </Group>
                           </Group>
                       </Group>
                       <EmptySpace type="separate" max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="0" max="-2" attributes="0">
-                          <Group type="102" alignment="0" attributes="0">
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="translYLabel" min="-2" max="-2" attributes="0"/>
+                          <Group type="102" attributes="0">
                               <Component id="leftTranslationYButton" min="-2" max="-2" attributes="0"/>
                               <EmptySpace max="-2" attributes="0"/>
                               <Component id="rightTranslationYButton" min="-2" max="-2" attributes="0"/>
                           </Group>
-                          <Component id="translYLabel" min="-2" max="-2" attributes="0"/>
-                          <Component id="translationYFTF" alignment="0" min="-2" pref="54" max="-2" attributes="0"/>
+                          <Component id="translationYFTF" min="-2" pref="54" max="-2" attributes="0"/>
                       </Group>
                       <EmptySpace type="separate" max="-2" attributes="0"/>
                       <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="translZLabel" min="-2" max="-2" attributes="0"/>
                           <Group type="102" alignment="0" attributes="0">
                               <Component id="leftTranslationZButton" min="-2" max="-2" attributes="0"/>
                               <EmptySpace max="-2" attributes="0"/>
                               <Component id="rightTranslationZButton" min="-2" max="-2" attributes="0"/>
                           </Group>
-                          <Component id="translationZFTF" alignment="0" min="-2" pref="54" max="-2" attributes="0"/>
-                          <Component id="translZLabel" min="-2" max="-2" attributes="0"/>
+                          <Component id="translationZFTF" min="-2" pref="54" max="-2" attributes="0"/>
                       </Group>
-                      <EmptySpace pref="14" max="32767" attributes="0"/>
+                      <EmptySpace max="32767" attributes="0"/>
                   </Group>
               </Group>
-            </DimensionLayout>
-            <DimensionLayout dim="1">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" alignment="0" attributes="0">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="103" groupAlignment="3" attributes="0">
-                              <Component id="translXLabel" alignment="3" min="-2" max="-2" attributes="0"/>
-                              <Component id="translYLabel" alignment="3" min="-2" max="-2" attributes="0"/>
-                              <Component id="translZLabel" alignment="3" min="-2" max="-2" attributes="0"/>
-                          </Group>
-                          <Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/>
-                      </Group>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" attributes="0">
-                              <Component id="rightTranslationZButton" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
-                          </Group>
-                          <Group type="102" attributes="0">
-                              <Group type="103" groupAlignment="0" attributes="0">
-                                  <Component id="leftTranslationYButton" min="-2" max="-2" attributes="0"/>
-                                  <Component id="rightTranslationYButton" min="-2" max="-2" attributes="0"/>
-                                  <Group type="103" groupAlignment="1" attributes="0">
-                                      <Group type="102" alignment="1" attributes="0">
-                                          <Group type="103" groupAlignment="0" attributes="0">
-                                              <Component id="rightTranslationXButton" alignment="0" min="-2" max="-2" attributes="0"/>
-                                              <Component id="leftTranslationXButton" min="-2" max="-2" attributes="0"/>
-                                          </Group>
-                                          <EmptySpace max="-2" attributes="0"/>
-                                          <Group type="103" groupAlignment="3" attributes="0">
-                                              <Component id="translationXFTF" alignment="3" min="-2" max="-2" attributes="0"/>
-                                              <Component id="translationYFTF" alignment="3" min="-2" max="-2" attributes="0"/>
-                                              <Component id="translationZFTF" alignment="3" min="-2" max="-2" attributes="0"/>
-                                          </Group>
+            </DimensionLayout>
+            <DimensionLayout dim="1">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <Group type="103" groupAlignment="3" attributes="0">
+                          <Component id="translXLabel" alignment="3" min="-2" max="-2" attributes="0"/>
+                          <Component id="translYLabel" alignment="3" min="-2" max="-2" attributes="0"/>
+                          <Component id="translZLabel" alignment="3" min="-2" max="-2" attributes="0"/>
+                          <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace min="-2" pref="8" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="1" attributes="0">
+                          <Group type="102" alignment="1" attributes="0">
+                              <Group type="103" groupAlignment="1" attributes="0">
+                                  <Group type="102" attributes="0">
+                                      <Component id="rightTranslationZButton" min="-2" max="-2" attributes="0"/>
+                                      <EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
+                                  </Group>
+                                  <Group type="102" alignment="0" attributes="0">
+                                      <Group type="103" groupAlignment="1" attributes="0">
+                                          <Component id="leftTranslationZButton" alignment="0" min="-2" max="-2" attributes="0"/>
+                                          <Component id="rightTranslationYButton" alignment="0" min="-2" max="-2" attributes="0"/>
+                                          <Component id="leftTranslationYButton" alignment="0" min="-2" max="-2" attributes="0"/>
+                                          <Component id="rightTranslationXButton" alignment="0" min="-2" max="-2" attributes="0"/>
+                                          <Component id="leftTranslationXButton" alignment="0" min="-2" max="-2" attributes="0"/>
                                       </Group>
-                                      <Component id="translationButton" min="-2" max="-2" attributes="0"/>
+                                      <EmptySpace max="-2" attributes="0"/>
                                   </Group>
-                                  <Component id="leftTranslationZButton" min="-2" max="-2" attributes="0"/>
                               </Group>
-                              <EmptySpace max="32767" attributes="0"/>
+                              <Group type="103" groupAlignment="3" attributes="0">
+                                  <Component id="translationXFTF" alignment="3" min="-2" max="-2" attributes="0"/>
+                                  <Component id="translationYFTF" alignment="3" min="-2" max="-2" attributes="0"/>
+                                  <Component id="translationZFTF" alignment="3" min="-2" max="-2" attributes="0"/>
+                              </Group>
                           </Group>
+                          <Component id="translationButton" min="-2" max="-2" attributes="0"/>
                       </Group>
+                      <EmptySpace max="32767" attributes="0"/>
                   </Group>
               </Group>
             </DimensionLayout>
@@ -1096,10 +629,10 @@
                   <Image iconType="3" name="/restart-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.translationButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.translationButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.translationButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.translationButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1114,16 +647,16 @@
                 </Property>
               </Properties>
               <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="translationButtonActionPerformed"/>
+                <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="translationButtonMousePressed"/>
               </Events>
             </Component>
             <Component class="javax.swing.JLabel" name="jLabel2">
               <Properties>
                 <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-                  <Font name="Tahoma" size="11" style="3"/>
+                  <Font name="Tahoma" size="14" style="3"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.jLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
             </Component>
@@ -1133,7 +666,7 @@
                   <Image iconType="3" name="/arrow-right-s-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rightTranslationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rightTranslationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1167,15 +700,12 @@
                   <Format subtype="0" type="0"/>
                 </Property>
                 <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.translationXFTF.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.translationXFTF.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="cursor" type="java.awt.Cursor" editor="org.netbeans.modules.form.editors2.CursorEditor">
                   <Color id="Text Cursor"/>
                 </Property>
               </Properties>
-              <Events>
-                <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="translationXFTFPropertyChange"/>
-              </Events>
             </Component>
             <Component class="javax.swing.JButton" name="leftTranslationYButton">
               <Properties>
@@ -1183,7 +713,7 @@
                   <Image iconType="3" name="/arrow-left-s-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.leftTranslationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.leftTranslationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1211,9 +741,6 @@
                   <Format subtype="0" type="0"/>
                 </Property>
               </Properties>
-              <Events>
-                <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="translationYFTFPropertyChange"/>
-              </Events>
             </Component>
             <Component class="javax.swing.JButton" name="rightTranslationYButton">
               <Properties>
@@ -1221,7 +748,7 @@
                   <Image iconType="3" name="/arrow-right-s-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rightTranslationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rightTranslationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1249,7 +776,7 @@
                   <Font name="Tahoma" size="11" style="1"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.translXLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.translXLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
             </Component>
@@ -1259,9 +786,6 @@
                   <Format subtype="0" type="0"/>
                 </Property>
               </Properties>
-              <Events>
-                <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="translationZFTFPropertyChange"/>
-              </Events>
             </Component>
             <Component class="javax.swing.JLabel" name="translZLabel">
               <Properties>
@@ -1269,7 +793,7 @@
                   <Font name="Tahoma" size="11" style="1"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.translZLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.translZLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
             </Component>
@@ -1279,7 +803,7 @@
                   <Font name="Tahoma" size="11" style="1"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.translYLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.translYLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
             </Component>
@@ -1289,7 +813,7 @@
                   <Image iconType="3" name="/arrow-right-s-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rightTranslationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rightTranslationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1317,7 +841,7 @@
                   <Image iconType="3" name="/arrow-left-s-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.leftTranslationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.leftTranslationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1351,7 +875,7 @@
                   <Image iconType="3" name="/arrow-left-s-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.leftTranslationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.leftTranslationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1381,55 +905,49 @@
             <DimensionLayout dim="0">
               <Group type="103" groupAlignment="0" attributes="0">
                   <Group type="102" attributes="0">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" attributes="0">
-                              <EmptySpace min="-2" pref="48" max="-2" attributes="0"/>
-                              <Component id="rotationButton" min="-2" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="1" max="-2" attributes="0">
+                          <Group type="102" alignment="1" attributes="0">
+                              <Component id="jLabel3" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace min="-2" pref="142" max="-2" attributes="0"/>
                           </Group>
-                          <Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/>
-                      </Group>
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" alignment="0" attributes="0">
-                              <EmptySpace min="-2" pref="18" max="-2" attributes="0"/>
+                          <Group type="102" alignment="1" attributes="0">
+                              <Component id="rotationButton" min="-2" max="-2" attributes="0"/>
+                              <EmptySpace type="unrelated" max="-2" attributes="0"/>
                               <Group type="103" groupAlignment="0" attributes="0">
-                                  <Component id="rotatXLabel" alignment="0" min="-2" max="-2" attributes="0"/>
+                                  <Component id="rotationXFTF" alignment="0" min="-2" pref="60" max="-2" attributes="0"/>
                                   <Group type="102" alignment="0" attributes="0">
-                                      <Component id="leftRotationXButton" min="-2" max="-2" attributes="0"/>
+                                      <Group type="103" groupAlignment="1" attributes="0">
+                                          <Component id="rotatXLabel" min="-2" max="-2" attributes="0"/>
+                                          <Component id="leftRotationXButton" min="-2" max="-2" attributes="0"/>
+                                      </Group>
                                       <EmptySpace max="-2" attributes="0"/>
                                       <Component id="rightRotationXButton" min="-2" max="-2" attributes="0"/>
                                   </Group>
                               </Group>
                           </Group>
-                          <Group type="102" alignment="1" attributes="0">
-                              <EmptySpace max="-2" attributes="0"/>
-                              <Component id="rotationXFTF" min="-2" pref="54" max="-2" attributes="0"/>
-                          </Group>
                       </Group>
-                      <EmptySpace min="-2" pref="21" max="-2" attributes="0"/>
+                      <EmptySpace min="12" pref="12" max="-2" attributes="0"/>
                       <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="rotationYFTF" alignment="0" min="-2" pref="60" max="-2" attributes="0"/>
                           <Group type="102" alignment="0" attributes="0">
-                              <Component id="leftRotationYButton" min="-2" max="-2" attributes="0"/>
+                              <Group type="103" groupAlignment="1" attributes="0">
+                                  <Component id="rotatYLabel" min="-2" max="-2" attributes="0"/>
+                                  <Component id="leftRotationYButton" min="-2" max="-2" attributes="0"/>
+                              </Group>
                               <EmptySpace max="-2" attributes="0"/>
                               <Component id="rightRotationYButton" min="-2" max="-2" attributes="0"/>
                           </Group>
-                          <Component id="rotationYFTF" min="-2" pref="54" max="-2" attributes="0"/>
-                          <Component id="rotatYLabel" alignment="0" min="-2" max="-2" attributes="0"/>
                       </Group>
+                      <EmptySpace min="-2" pref="12" max="-2" attributes="0"/>
                       <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="rotationZFTF" min="-2" pref="60" max="-2" attributes="0"/>
                           <Group type="102" alignment="0" attributes="0">
-                              <EmptySpace min="-2" pref="22" max="-2" attributes="0"/>
-                              <Component id="rotatZLabel" min="-2" max="-2" attributes="0"/>
-                          </Group>
-                          <Group type="102" alignment="0" attributes="0">
-                              <EmptySpace type="separate" max="-2" attributes="0"/>
-                              <Group type="103" groupAlignment="0" attributes="0">
-                                  <Component id="rotationZFTF" min="-2" pref="54" max="-2" attributes="0"/>
-                                  <Group type="102" alignment="0" attributes="0">
-                                      <Component id="leftRotationZButton" min="-2" max="-2" attributes="0"/>
-                                      <EmptySpace max="-2" attributes="0"/>
-                                      <Component id="rightRotationZButton" min="-2" max="-2" attributes="0"/>
-                                  </Group>
+                              <Group type="103" groupAlignment="1" attributes="0">
+                                  <Component id="rotatZLabel" min="-2" max="-2" attributes="0"/>
+                                  <Component id="leftRotationZButton" min="-2" max="-2" attributes="0"/>
                               </Group>
+                              <EmptySpace max="-2" attributes="0"/>
+                              <Component id="rightRotationZButton" min="-2" max="-2" attributes="0"/>
                           </Group>
                       </Group>
                       <EmptySpace max="32767" attributes="0"/>
@@ -1440,14 +958,10 @@
               <Group type="103" groupAlignment="0" attributes="0">
                   <Group type="102" alignment="0" attributes="0">
                       <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="103" alignment="0" groupAlignment="3" attributes="0">
-                              <Component id="rotatXLabel" alignment="3" min="-2" max="-2" attributes="0"/>
-                              <Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/>
-                          </Group>
-                          <Group type="103" alignment="1" groupAlignment="3" attributes="0">
-                              <Component id="rotatYLabel" alignment="3" min="-2" max="-2" attributes="0"/>
-                              <Component id="rotatZLabel" alignment="3" min="-2" max="-2" attributes="0"/>
-                          </Group>
+                          <Component id="jLabel3" alignment="0" min="-2" max="-2" attributes="0"/>
+                          <Component id="rotatZLabel" alignment="1" min="-2" max="-2" attributes="0"/>
+                          <Component id="rotatYLabel" alignment="1" min="-2" max="-2" attributes="0"/>
+                          <Component id="rotatXLabel" alignment="1" min="-2" max="-2" attributes="0"/>
                       </Group>
                       <EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
                       <Group type="103" groupAlignment="1" attributes="0">
@@ -1463,8 +977,8 @@
                               </Group>
                               <EmptySpace max="-2" attributes="0"/>
                               <Group type="103" groupAlignment="3" attributes="0">
-                                  <Component id="rotationYFTF" alignment="3" min="-2" max="-2" attributes="0"/>
                                   <Component id="rotationXFTF" alignment="3" min="-2" max="-2" attributes="0"/>
+                                  <Component id="rotationYFTF" alignment="3" min="-2" max="-2" attributes="0"/>
                                   <Component id="rotationZFTF" alignment="3" min="-2" max="-2" attributes="0"/>
                               </Group>
                           </Group>
@@ -1481,7 +995,7 @@
                   <Image iconType="3" name="/arrow-left-s-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.leftRotationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.leftRotationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1515,7 +1029,7 @@
                   <Image iconType="3" name="/arrow-left-s-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.leftRotationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.leftRotationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1543,7 +1057,7 @@
                   <Font name="Tahoma" size="11" style="1"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rotatZLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rotatZLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
             </Component>
@@ -1553,7 +1067,7 @@
                   <Font name="Tahoma" size="11" style="1"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rotatYLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rotatYLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
             </Component>
@@ -1563,7 +1077,7 @@
                   <Font name="Tahoma" size="11" style="1"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rotatXLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rotatXLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
             </Component>
@@ -1573,10 +1087,10 @@
                   <Image iconType="3" name="/restart-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rotationButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rotationButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rotationButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rotationButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1591,7 +1105,7 @@
                 </Property>
               </Properties>
               <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="rotationButtonActionPerformed"/>
+                <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="rotationButtonMousePressed"/>
               </Events>
             </Component>
             <Component class="javax.swing.JFormattedTextField" name="rotationZFTF">
@@ -1600,9 +1114,6 @@
                   <Format subtype="0" type="0"/>
                 </Property>
               </Properties>
-              <Events>
-                <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="rotationZFTFPropertyChange"/>
-              </Events>
             </Component>
             <Component class="javax.swing.JFormattedTextField" name="rotationYFTF">
               <Properties>
@@ -1610,9 +1121,6 @@
                   <Format subtype="0" type="0"/>
                 </Property>
               </Properties>
-              <Events>
-                <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="rotationYFTFPropertyChange"/>
-              </Events>
             </Component>
             <Component class="javax.swing.JButton" name="rightRotationZButton">
               <Properties>
@@ -1620,7 +1128,7 @@
                   <Image iconType="3" name="/arrow-right-s-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rightRotationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rightRotationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1654,7 +1162,7 @@
                   <Image iconType="3" name="/arrow-right-s-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rightRotationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rightRotationYButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1688,7 +1196,7 @@
                   <Image iconType="3" name="/arrow-left-s-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.leftRotationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.leftRotationZButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1722,7 +1230,7 @@
                   <Image iconType="3" name="/arrow-right-s-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rightRotationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rightRotationXButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1756,20 +1264,17 @@
                   <Format subtype="0" type="0"/>
                 </Property>
                 <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.rotationXFTF.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.rotationXFTF.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
-              <Events>
-                <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="rotationXFTFPropertyChange"/>
-              </Events>
             </Component>
             <Component class="javax.swing.JLabel" name="jLabel3">
               <Properties>
                 <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-                  <Font name="Tahoma" size="11" style="3"/>
+                  <Font name="Tahoma" size="14" style="3"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.jLabel3.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel3.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
             </Component>
@@ -1784,21 +1289,24 @@
                       <Group type="103" groupAlignment="0" attributes="0">
                           <Group type="102" attributes="0">
                               <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
-                              <EmptySpace min="0" pref="42" max="32767" attributes="0"/>
+                              <EmptySpace min="0" pref="93" max="32767" attributes="0"/>
                           </Group>
                           <Group type="102" alignment="1" attributes="0">
                               <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
                               <Component id="scaleButton" min="-2" max="-2" attributes="0"/>
                           </Group>
                       </Group>
-                      <EmptySpace type="separate" max="-2" attributes="0"/>
                       <Group type="103" groupAlignment="0" attributes="0">
-                          <Group type="102" alignment="1" attributes="0">
+                          <Group type="102" attributes="0">
+                              <EmptySpace min="-2" pref="18" max="-2" attributes="0"/>
                               <Component id="scalePlusButton" min="-2" max="-2" attributes="0"/>
                               <EmptySpace max="-2" attributes="0"/>
                               <Component id="scaleMinusButton" min="-2" max="-2" attributes="0"/>
                           </Group>
-                          <Component id="scaleFTF" alignment="1" min="-2" pref="54" max="-2" attributes="0"/>
+                          <Group type="102" alignment="1" attributes="0">
+                              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+                              <Component id="scaleFTF" min="-2" pref="54" max="-2" attributes="0"/>
+                          </Group>
                       </Group>
                       <EmptySpace max="-2" attributes="0"/>
                   </Group>
@@ -1807,19 +1315,24 @@
             <DimensionLayout dim="1">
               <Group type="103" groupAlignment="0" attributes="0">
                   <Group type="102" attributes="0">
-                      <EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
-                      <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace max="32767" attributes="0"/>
-                      <Component id="scaleButton" min="-2" max="-2" attributes="0"/>
-                  </Group>
-                  <Group type="102" attributes="0">
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="1" attributes="0">
-                          <Component id="scaleMinusButton" min="-2" max="-2" attributes="0"/>
-                          <Component id="scalePlusButton" min="-2" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Group type="102" attributes="0">
+                              <EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
+                              <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
+                          </Group>
+                          <Group type="103" alignment="0" groupAlignment="1" attributes="0">
+                              <Component id="scaleButton" min="-2" max="-2" attributes="0"/>
+                              <Group type="102" attributes="0">
+                                  <Group type="103" groupAlignment="0" attributes="0">
+                                      <Component id="scalePlusButton" min="-2" max="-2" attributes="0"/>
+                                      <Component id="scaleMinusButton" min="-2" max="-2" attributes="0"/>
+                                  </Group>
+                                  <EmptySpace max="-2" attributes="0"/>
+                                  <Component id="scaleFTF" min="-2" max="-2" attributes="0"/>
+                              </Group>
+                          </Group>
                       </Group>
-                      <EmptySpace max="32767" attributes="0"/>
-                      <Component id="scaleFTF" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
                   </Group>
               </Group>
             </DimensionLayout>
@@ -1828,10 +1341,10 @@
             <Component class="javax.swing.JLabel" name="jLabel4">
               <Properties>
                 <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-                  <Font name="Tahoma" size="11" style="3"/>
+                  <Font name="Tahoma" size="14" style="3"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.jLabel4.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel4.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
               </Properties>
             </Component>
@@ -1841,7 +1354,7 @@
                   <Image iconType="3" name="/add-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.scalePlusButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.scalePlusButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1869,13 +1382,26 @@
                 <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="scalePlusButtonMouseReleased"/>
               </Events>
             </Component>
-            <Component class="javax.swing.JButton" name="scaleMinusButton">
+            <Component class="javax.swing.JFormattedTextField" name="scaleFTF">
+              <Properties>
+                <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor">
+                  <Format subtype="0" type="0"/>
+                </Property>
+                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.scaleFTF.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                </Property>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JButton" name="scaleButton">
               <Properties>
                 <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                  <Image iconType="3" name="/subtract-line.png"/>
+                  <Image iconType="3" name="/restart-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.scaleMinusButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.scaleButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                </Property>
+                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.scaleButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1888,44 +1414,18 @@
                 <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
                   <Insets value="[2, 2, 2, 2]"/>
                 </Property>
-                <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-                  <Dimension value="[24, 24]"/>
-                </Property>
-                <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-                  <Dimension value="[24, 24]"/>
-                </Property>
-                <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
-                  <Dimension value="[24, 24]"/>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="scaleMinusButtonMousePressed"/>
-                <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="scaleMinusButtonMouseReleased"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JFormattedTextField" name="scaleFTF">
-              <Properties>
-                <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor">
-                  <Format subtype="0" type="0"/>
-                </Property>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.scaleFTF.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
               </Properties>
               <Events>
-                <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="scaleFTFPropertyChange"/>
+                <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="scaleButtonMousePressed"/>
               </Events>
             </Component>
-            <Component class="javax.swing.JButton" name="scaleButton">
+            <Component class="javax.swing.JButton" name="scaleMinusButton">
               <Properties>
                 <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
-                  <Image iconType="3" name="/restart-line.png"/>
+                  <Image iconType="3" name="/subtract-line.png"/>
                 </Property>
                 <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.scaleButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.scaleButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.scaleMinusButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
                 </Property>
                 <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
                   <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1938,9 +1438,19 @@
                 <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
                   <Insets value="[2, 2, 2, 2]"/>
                 </Property>
+                <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+                  <Dimension value="[24, 24]"/>
+                </Property>
+                <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+                  <Dimension value="[24, 24]"/>
+                </Property>
+                <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+                  <Dimension value="[24, 24]"/>
+                </Property>
               </Properties>
               <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="scaleButtonActionPerformed"/>
+                <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="scaleMinusButtonMousePressed"/>
+                <EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="scaleMinusButtonMouseReleased"/>
               </Events>
             </Component>
           </SubComponents>
@@ -1951,10 +1461,10 @@
               <Image iconType="3" name="/refresh-line.png"/>
             </Property>
             <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.resetAllButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.resetAllButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
             </Property>
             <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.resetAllButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.resetAllButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
             </Property>
             <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
               <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -1963,11 +1473,9 @@
             </Property>
           </Properties>
           <Events>
-            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="resetAllButtonActionPerformed"/>
+            <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="resetAllButtonMousePressed"/>
           </Events>
         </Component>
-        <Component class="javax.swing.JSeparator" name="jSeparator7">
-        </Component>
         <Component class="javax.swing.JSeparator" name="jSeparator9">
           <Properties>
             <Property name="orientation" type="int" value="1"/>
@@ -1978,80 +1486,15 @@
           <Layout>
             <DimensionLayout dim="0">
               <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" attributes="0">
-                      <Group type="103" groupAlignment="0" attributes="0">
-                          <Component id="lowShiftRB" alignment="0" min="-2" max="-2" attributes="0"/>
-                          <Component id="highShiftRB" min="-2" max="-2" attributes="0"/>
-                      </Group>
-                      <EmptySpace min="0" pref="8" max="32767" attributes="0"/>
-                  </Group>
-                  <Group type="102" alignment="0" attributes="0">
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="shiftLabel" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace max="32767" attributes="0"/>
-                  </Group>
+                  <EmptySpace min="0" pref="21" max="32767" attributes="0"/>
               </Group>
             </DimensionLayout>
             <DimensionLayout dim="1">
               <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" alignment="0" attributes="0">
-                      <Component id="shiftLabel" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="lowShiftRB" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="highShiftRB" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace max="32767" attributes="0"/>
-                  </Group>
+                  <EmptySpace min="0" pref="84" max="32767" attributes="0"/>
               </Group>
             </DimensionLayout>
           </Layout>
-          <SubComponents>
-            <Component class="javax.swing.JLabel" name="shiftLabel">
-              <Properties>
-                <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
-                  <Font name="Tahoma" size="11" style="1"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.shiftLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.shiftLabel.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-            </Component>
-            <Component class="javax.swing.JRadioButton" name="lowShiftRB">
-              <Properties>
-                <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
-                  <ComponentRef name="precisionGroup"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.lowShiftRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.lowShiftRB.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="lowShiftRBActionPerformed"/>
-              </Events>
-            </Component>
-            <Component class="javax.swing.JRadioButton" name="highShiftRB">
-              <Properties>
-                <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
-                  <ComponentRef name="precisionGroup"/>
-                </Property>
-                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.highShiftRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-                <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                  <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.highShiftRB.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                </Property>
-              </Properties>
-              <Events>
-                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="highShiftRBActionPerformed"/>
-              </Events>
-            </Component>
-          </SubComponents>
         </Container>
         <Component class="javax.swing.JSeparator" name="jSeparator10">
           <Properties>
@@ -2061,10 +1504,10 @@
         <Component class="javax.swing.JButton" name="applyButton">
           <Properties>
             <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.applyButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.applyButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
             </Property>
             <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="PostRegistrationCP.applyButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.applyButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
             </Property>
             <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
               <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
@@ -2076,12 +1519,137 @@
             </Property>
           </Properties>
           <Events>
-            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="applyButtonActionPerformed"/>
+            <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="applyButtonMousePressed"/>
           </Events>
         </Component>
         <Component class="javax.swing.JSeparator" name="jSeparator5">
         </Component>
+        <Component class="javax.swing.JLabel" name="shiftLabel">
+          <Properties>
+            <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+              <Font name="Tahoma" size="11" style="1"/>
+            </Property>
+            <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.shiftLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+            </Property>
+            <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.shiftLabel.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+            </Property>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JRadioButton" name="lowShiftRB">
+          <Properties>
+            <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+              <ComponentRef name="precisionGroup"/>
+            </Property>
+            <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.lowShiftRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+            </Property>
+            <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.lowShiftRB.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="lowShiftRBActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JRadioButton" name="highShiftRB">
+          <Properties>
+            <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
+              <ComponentRef name="precisionGroup"/>
+            </Property>
+            <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.highShiftRB.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+            </Property>
+            <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+              <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.highShiftRB.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="highShiftRBActionPerformed"/>
+          </Events>
+        </Component>
       </SubComponents>
     </Container>
+    <Component class="javax.swing.JButton" name="jButton1">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator2">
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+          <Font name="Ubuntu" size="14" style="1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JCheckBox" name="jCheckBox1">
+      <Properties>
+        <Property name="selected" type="boolean" value="true"/>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jCheckBox1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBox1ActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JFormattedTextField" name="jFormattedTextField1">
+      <Properties>
+        <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor">
+          <Format subtype="0" type="0"/>
+        </Property>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jFormattedTextField1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel5">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel5.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JFormattedTextField" name="jFormattedTextField2">
+      <Properties>
+        <Property name="formatterFactory" type="javax.swing.JFormattedTextField$AbstractFormatterFactory" editor="org.netbeans.modules.form.editors.AbstractFormatterFactoryEditor">
+          <Format subtype="1" type="0"/>
+        </Property>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jFormattedTextField2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel6">
+      <Properties>
+        <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+          <ResourceString bundle="cz/fidentis/analyst/registration/Bundle.properties" key="RegistrationPanel.jLabel6.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="jComboBox1">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="2">
+            <StringItem index="0" value="None"/>
+            <StringItem index="1" value="Random 200"/>
+          </StringArray>
+        </Property>
+      </Properties>
+      <AuxValues>
+        <AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="&lt;String&gt;"/>
+      </AuxValues>
+    </Component>
   </SubComponents>
 </Form>
diff --git a/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.java b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.java
new file mode 100644
index 0000000000000000000000000000000000000000..217e073af1e8932479dc47b50e8547f2433e7bc5
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/registration/RegistrationPanel.java
@@ -0,0 +1,1416 @@
+package cz.fidentis.analyst.registration;
+
+import cz.fidentis.analyst.canvas.Direction;
+import cz.fidentis.analyst.core.ControlPanel;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.AbstractAction;
+import javax.swing.ImageIcon;
+import javax.swing.JFormattedTextField;
+
+/**
+ * Panel used to interactively visualize two face and adjust their registration.
+ * 
+ * @author Richard Pajersky
+ */
+public class RegistrationPanel extends ControlPanel {
+    
+    /*
+     * Mandatory design elements
+     */
+    public static final String ICON = "registration28x28.png";
+    public static final String NAME = "Registration";
+    
+    public static final double TRANSFORMATION_FINESS = 1.0;
+
+    /**
+     * Transformation shift is higher 
+     */
+    public static final double HIGH_SHIFT_QUOTIENT = 1.0;
+    
+    /**
+     * Transformation shift is lower 
+     */
+    public static final double LOW_SHIFT_QUOTIENT = 0.1;
+    
+
+    /**
+     * Listener which translates executed actions 
+     * into {@link cz.fidentis.analyst.gui.scene.DrawableMesh}
+     */
+    private RegistrationAction listener;
+    
+    /**
+     * Animator which animates transformations
+     */
+    private final ModelRotationAnimator animator = new ModelRotationAnimator();
+    
+    private double moveModifier = LOW_SHIFT_QUOTIENT;
+    
+    /**
+     * Constructor.
+     * @param action Action listener
+     */
+    public RegistrationPanel(RegistrationAction action) {
+        this.setName(NAME);
+        this.listener = action;
+        initComponents();
+        setDefaults();
+        
+        // connect GUI element with RegistrationAction listener:
+        jButton1.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_APPLY_ICP));
+        translationXFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_SHIFT_X));
+        translationYFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_SHIFT_Y));
+        translationZFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_SHIFT_Z));
+        rotationXFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_ROTATE_X));
+        rotationYFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_ROTATE_Y));
+        rotationZFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_ROTATE_Z));
+        scaleFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_SCALE));
+        frontButton.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_FRONT_VIEW));
+        profileButton.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_SIDE_VIEW));
+        translationButton.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_RESET_TRANSLATION));
+        rotationButton.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_RESET_ROTATION));
+        scaleButton.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_RESET_SCALE));
+        resetAllButton.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_RESET_TRANSLATION));
+        applyButton.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_APPLY_TRANSFORMATIONS));
+        thersholdFTF.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_FP_CLOSENESS_THRESHOLD));
+        jCheckBox1.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_ICP_SCALE));
+        jFormattedTextField1.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_ICP_ERROR));
+        jFormattedTextField2.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_ICP_MAX_ITERATIONS));
+        jComboBox1.addActionListener(createListener(action, RegistrationAction.ACTION_COMMAND_ICP_UNDERSAMPLING));
+    }
+    
+    private ActionListener createListener(RegistrationAction action, String command) {
+        return new AbstractAction() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                action.actionPerformed(new ActionEvent(
+                        e.getSource(), 
+                        ActionEvent.ACTION_PERFORMED, 
+                        command)
+                ); 
+            }  
+        };
+    }
+    
+    /**
+     * Additional initialization of panel
+     */
+    private void setDefaults() {
+        lowShiftRB.setSelected(true);
+        thersholdFTF.setValue(5.0);
+        //resetAllButtonActionPerformed(null);
+        
+        rotationXFTF.setValue(0.0);
+        rotationYFTF.setValue(0.0);
+        rotationZFTF.setValue(0.0);
+        translationXFTF.setValue(0.0);
+        translationYFTF.setValue(0.0);
+        translationZFTF.setValue(0.0);
+        scaleFTF.setValue(0.0);
+    }
+    
+    /**
+     * Alters transformation based on move amount specified in listener
+     * by updating specific formatted field
+     * 
+     * @param dir Transformation direction
+     * @throws UnsupportedOperationException if {@code dir} is invalid
+     */
+    public void transform(Direction dir) {
+        switch (dir) {
+            case TRANSLATE_LEFT:
+                decreaseInputField(translationXFTF);
+                break;
+            case TRANSLATE_RIGHT:
+                increaseInputField(translationXFTF);
+                break;
+            case TRANSLATE_UP:
+                decreaseInputField(translationYFTF);
+                break;
+            case TRANSLATE_DOWN:
+                increaseInputField(translationYFTF);
+                break;
+            case TRANSLATE_IN:
+                decreaseInputField(translationZFTF);
+                break;
+            case TRANSLATE_OUT:
+                increaseInputField(translationZFTF);
+                break;
+            case ROTATE_LEFT:
+                decreaseInputField(rotationXFTF);
+                break;
+            case ROTATE_RIGHT:
+                increaseInputField(rotationXFTF);
+                break;
+            case ROTATE_UP:
+                increaseInputField(rotationYFTF);
+                break;
+            case ROTATE_DOWN:
+                decreaseInputField(rotationYFTF);
+                break;
+            case ROTATE_IN:
+                decreaseInputField(rotationZFTF);
+                break;
+            case ROTATE_OUT:
+                decreaseInputField(rotationZFTF);
+                break;
+            case ZOOM_OUT:
+                increaseInputField(scaleFTF);
+                break;
+            case ZOOM_IN:
+                increaseInputField(scaleFTF);
+                break;
+            default:
+                throw new UnsupportedOperationException();
+        }
+    }
+    
+    private void increaseInputField(JFormattedTextField textField) {
+        double newValue = ((Number)textField.getValue()).doubleValue() + moveModifier;
+        newValue *= TRANSFORMATION_FINESS;
+        textField.setValue(newValue);
+        textField.postActionEvent();
+    }
+    
+    private void decreaseInputField(JFormattedTextField textField) {
+        double newValue = ((Number)textField.getValue()).doubleValue() - moveModifier;
+        newValue *= TRANSFORMATION_FINESS;
+        textField.setValue(newValue);
+        textField.postActionEvent();
+    }
+
+    @Override
+    public ImageIcon getIcon() {
+        return getStaticIcon();
+    }
+    
+    /**
+     * Static implementation of the {@link #getIcon()} method.
+     * 
+     * @return Control panel icon
+     */
+    public static ImageIcon getStaticIcon() {
+        return new ImageIcon(RegistrationPanel.class.getClassLoader().getResource("/" + ICON));
+    }
+
+    /**
+     * This method is called from within the constructor to initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is always
+     * regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        primaryRenderModeGroup = new javax.swing.ButtonGroup();
+        secondaryRenerModeGroup = new javax.swing.ButtonGroup();
+        precisionGroup = new javax.swing.ButtonGroup();
+        registrationAdjustmentLabel = new javax.swing.JLabel();
+        jSeparator11 = new javax.swing.JSeparator();
+        visualizationPanel = new javax.swing.JPanel();
+        visualizationLabel = new javax.swing.JLabel();
+        viewPanel = new javax.swing.JPanel();
+        profileButton = new javax.swing.JButton();
+        frontButton = new javax.swing.JButton();
+        viewLabel = new javax.swing.JLabel();
+        featurePointsPanel = new javax.swing.JPanel();
+        thersholdUpButton = new javax.swing.JButton();
+        thersholdFTF = new javax.swing.JFormattedTextField();
+        featurePointsLabel = new javax.swing.JLabel();
+        thresholdDownButton = new javax.swing.JButton();
+        transparencySlider = new javax.swing.JSlider();
+        transparencyButton = new javax.swing.JButton();
+        transformationPanel = new javax.swing.JPanel();
+        translationPanel = new javax.swing.JPanel();
+        translationButton = new javax.swing.JButton();
+        jLabel2 = new javax.swing.JLabel();
+        rightTranslationXButton = new javax.swing.JButton();
+        translationXFTF = new javax.swing.JFormattedTextField();
+        leftTranslationYButton = new javax.swing.JButton();
+        translationYFTF = new javax.swing.JFormattedTextField();
+        rightTranslationYButton = new javax.swing.JButton();
+        translXLabel = new javax.swing.JLabel();
+        translationZFTF = new javax.swing.JFormattedTextField();
+        translZLabel = new javax.swing.JLabel();
+        translYLabel = new javax.swing.JLabel();
+        rightTranslationZButton = new javax.swing.JButton();
+        leftTranslationXButton = new javax.swing.JButton();
+        leftTranslationZButton = new javax.swing.JButton();
+        rotationPanel = new javax.swing.JPanel();
+        leftRotationYButton = new javax.swing.JButton();
+        leftRotationXButton = new javax.swing.JButton();
+        rotatZLabel = new javax.swing.JLabel();
+        rotatYLabel = new javax.swing.JLabel();
+        rotatXLabel = new javax.swing.JLabel();
+        rotationButton = new javax.swing.JButton();
+        rotationZFTF = new javax.swing.JFormattedTextField();
+        rotationYFTF = new javax.swing.JFormattedTextField();
+        rightRotationZButton = new javax.swing.JButton();
+        rightRotationYButton = new javax.swing.JButton();
+        leftRotationZButton = new javax.swing.JButton();
+        rightRotationXButton = new javax.swing.JButton();
+        rotationXFTF = new javax.swing.JFormattedTextField();
+        jLabel3 = new javax.swing.JLabel();
+        scalePanel = new javax.swing.JPanel();
+        jLabel4 = new javax.swing.JLabel();
+        scalePlusButton = new javax.swing.JButton();
+        scaleFTF = new javax.swing.JFormattedTextField();
+        scaleButton = new javax.swing.JButton();
+        scaleMinusButton = new javax.swing.JButton();
+        resetAllButton = new javax.swing.JButton();
+        jSeparator9 = new javax.swing.JSeparator();
+        shiftPanel = new javax.swing.JPanel();
+        jSeparator10 = new javax.swing.JSeparator();
+        applyButton = new javax.swing.JButton();
+        jSeparator5 = new javax.swing.JSeparator();
+        shiftLabel = new javax.swing.JLabel();
+        lowShiftRB = new javax.swing.JRadioButton();
+        highShiftRB = new javax.swing.JRadioButton();
+        jButton1 = new javax.swing.JButton();
+        jSeparator2 = new javax.swing.JSeparator();
+        jLabel1 = new javax.swing.JLabel();
+        jCheckBox1 = new javax.swing.JCheckBox();
+        jFormattedTextField1 = new javax.swing.JFormattedTextField();
+        jLabel5 = new javax.swing.JLabel();
+        jFormattedTextField2 = new javax.swing.JFormattedTextField();
+        jLabel6 = new javax.swing.JLabel();
+        jComboBox1 = new javax.swing.JComboBox<>();
+
+        setMinimumSize(new java.awt.Dimension(600, 600));
+        setPreferredSize(new java.awt.Dimension(415, 700));
+
+        registrationAdjustmentLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(registrationAdjustmentLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.registrationAdjustmentLabel.text")); // NOI18N
+
+        visualizationPanel.setMinimumSize(new java.awt.Dimension(400, 0));
+        visualizationPanel.setPreferredSize(new java.awt.Dimension(400, 265));
+
+        visualizationLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(visualizationLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.visualizationLabel.text")); // NOI18N
+
+        org.openide.awt.Mnemonics.setLocalizedText(profileButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.profileButton.text")); // NOI18N
+        profileButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.profileButton.toolTipText")); // NOI18N
+        profileButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder()));
+        profileButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+
+        org.openide.awt.Mnemonics.setLocalizedText(frontButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.frontButton.text")); // NOI18N
+        frontButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.frontButton.toolTipText")); // NOI18N
+        frontButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder()));
+        frontButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+
+        viewLabel.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(viewLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.viewLabel.text")); // NOI18N
+
+        javax.swing.GroupLayout viewPanelLayout = new javax.swing.GroupLayout(viewPanel);
+        viewPanel.setLayout(viewPanelLayout);
+        viewPanelLayout.setHorizontalGroup(
+            viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(viewPanelLayout.createSequentialGroup()
+                .addComponent(viewLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(frontButton, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(profileButton, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(216, 216, 216))
+        );
+        viewPanelLayout.setVerticalGroup(
+            viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                .addComponent(viewLabel)
+                .addComponent(frontButton)
+                .addComponent(profileButton))
+        );
+
+        thersholdUpButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/add-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(thersholdUpButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.thersholdUpButton.text")); // NOI18N
+        thersholdUpButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        thersholdUpButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        thersholdUpButton.setMaximumSize(new java.awt.Dimension(24, 24));
+        thersholdUpButton.setMinimumSize(new java.awt.Dimension(24, 24));
+        thersholdUpButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        thersholdUpButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                thersholdUpButtonActionPerformed(evt);
+            }
+        });
+
+        thersholdFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
+
+        featurePointsLabel.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(featurePointsLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.featurePointsLabel.text")); // NOI18N
+
+        thresholdDownButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/subtract-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(thresholdDownButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.thresholdDownButton.text")); // NOI18N
+        thresholdDownButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        thresholdDownButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        thresholdDownButton.setMaximumSize(new java.awt.Dimension(24, 24));
+        thresholdDownButton.setMinimumSize(new java.awt.Dimension(24, 24));
+        thresholdDownButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        thresholdDownButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                thresholdDownButtonActionPerformed(evt);
+            }
+        });
+
+        javax.swing.GroupLayout featurePointsPanelLayout = new javax.swing.GroupLayout(featurePointsPanel);
+        featurePointsPanel.setLayout(featurePointsPanelLayout);
+        featurePointsPanelLayout.setHorizontalGroup(
+            featurePointsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(featurePointsPanelLayout.createSequentialGroup()
+                .addComponent(featurePointsLabel)
+                .addGap(18, 18, 18)
+                .addComponent(thersholdFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(thersholdUpButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(thresholdDownButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(192, Short.MAX_VALUE))
+        );
+        featurePointsPanelLayout.setVerticalGroup(
+            featurePointsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(featurePointsPanelLayout.createSequentialGroup()
+                .addGroup(featurePointsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(featurePointsLabel)
+                    .addGroup(featurePointsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                        .addComponent(thersholdFTF, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
+                        .addComponent(thersholdUpButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addComponent(thresholdDownButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+                .addGap(0, 10, Short.MAX_VALUE))
+        );
+
+        transparencySlider.setMajorTickSpacing(5);
+        transparencySlider.setMaximum(20);
+        transparencySlider.setMinorTickSpacing(5);
+        transparencySlider.setPaintTicks(true);
+        transparencySlider.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.transparencySlider.toolTipText")); // NOI18N
+        transparencySlider.setValue(10);
+        transparencySlider.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
+        transparencySlider.addChangeListener(new javax.swing.event.ChangeListener() {
+            public void stateChanged(javax.swing.event.ChangeEvent evt) {
+                transparencySliderStateChanged(evt);
+            }
+        });
+
+        transparencyButton.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(transparencyButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.transparencyButton.text")); // NOI18N
+        transparencyButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.transparencyButton.toolTipText")); // NOI18N
+        transparencyButton.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder()));
+        transparencyButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        transparencyButton.setPreferredSize(new java.awt.Dimension(100, 19));
+        transparencyButton.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                transparencyButtonActionPerformed(evt);
+            }
+        });
+
+        javax.swing.GroupLayout visualizationPanelLayout = new javax.swing.GroupLayout(visualizationPanel);
+        visualizationPanel.setLayout(visualizationPanelLayout);
+        visualizationPanelLayout.setHorizontalGroup(
+            visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(visualizationPanelLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                        .addComponent(featurePointsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addComponent(viewPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                    .addGroup(visualizationPanelLayout.createSequentialGroup()
+                        .addComponent(visualizationLabel)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(transparencySlider, javax.swing.GroupLayout.PREFERRED_SIZE, 281, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addComponent(transparencyButton, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        visualizationPanelLayout.setVerticalGroup(
+            visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, visualizationPanelLayout.createSequentialGroup()
+                .addGroup(visualizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addGroup(visualizationPanelLayout.createSequentialGroup()
+                        .addContainerGap()
+                        .addComponent(transparencySlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, visualizationPanelLayout.createSequentialGroup()
+                        .addGap(27, 27, 27)
+                        .addComponent(visualizationLabel))
+                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, visualizationPanelLayout.createSequentialGroup()
+                        .addGap(24, 24, 24)
+                        .addComponent(transparencyButton, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addGap(34, 34, 34)
+                .addComponent(viewPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(22, 22, 22)
+                .addComponent(featurePointsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap(25, Short.MAX_VALUE))
+        );
+
+        transformationPanel.setPreferredSize(new java.awt.Dimension(400, 400));
+
+        translationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/restart-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(translationButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.translationButton.text")); // NOI18N
+        translationButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.translationButton.toolTipText")); // NOI18N
+        translationButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        translationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        translationButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        translationButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                translationButtonMousePressed(evt);
+            }
+        });
+
+        jLabel2.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel2.text")); // NOI18N
+
+        rightTranslationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(rightTranslationXButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rightTranslationXButton.text")); // NOI18N
+        rightTranslationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        rightTranslationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        rightTranslationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        rightTranslationXButton.setMaximumSize(new java.awt.Dimension(24, 24));
+        rightTranslationXButton.setMinimumSize(new java.awt.Dimension(24, 24));
+        rightTranslationXButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        rightTranslationXButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                rightTranslationXButtonMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                rightTranslationXButtonMouseReleased(evt);
+            }
+        });
+
+        translationXFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
+        translationXFTF.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.translationXFTF.toolTipText")); // NOI18N
+        translationXFTF.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR));
+
+        leftTranslationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(leftTranslationYButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.leftTranslationYButton.text")); // NOI18N
+        leftTranslationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        leftTranslationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        leftTranslationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        leftTranslationYButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        leftTranslationYButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                leftTranslationYButtonMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                leftTranslationYButtonMouseReleased(evt);
+            }
+        });
+
+        translationYFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
+
+        rightTranslationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(rightTranslationYButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rightTranslationYButton.text")); // NOI18N
+        rightTranslationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        rightTranslationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        rightTranslationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        rightTranslationYButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        rightTranslationYButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                rightTranslationYButtonMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                rightTranslationYButtonMouseReleased(evt);
+            }
+        });
+
+        translXLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(translXLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.translXLabel.text")); // NOI18N
+
+        translationZFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
+
+        translZLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(translZLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.translZLabel.text")); // NOI18N
+
+        translYLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(translYLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.translYLabel.text")); // NOI18N
+
+        rightTranslationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(rightTranslationZButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rightTranslationZButton.text")); // NOI18N
+        rightTranslationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        rightTranslationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        rightTranslationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        rightTranslationZButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        rightTranslationZButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                rightTranslationZButtonMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                rightTranslationZButtonMouseReleased(evt);
+            }
+        });
+
+        leftTranslationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(leftTranslationXButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.leftTranslationXButton.text")); // NOI18N
+        leftTranslationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        leftTranslationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        leftTranslationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        leftTranslationXButton.setMaximumSize(new java.awt.Dimension(24, 24));
+        leftTranslationXButton.setMinimumSize(new java.awt.Dimension(24, 24));
+        leftTranslationXButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        leftTranslationXButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                leftTranslationXButtonMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                leftTranslationXButtonMouseReleased(evt);
+            }
+        });
+
+        leftTranslationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(leftTranslationZButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.leftTranslationZButton.text")); // NOI18N
+        leftTranslationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        leftTranslationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        leftTranslationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        leftTranslationZButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        leftTranslationZButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                leftTranslationZButtonMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                leftTranslationZButtonMouseReleased(evt);
+            }
+        });
+
+        javax.swing.GroupLayout translationPanelLayout = new javax.swing.GroupLayout(translationPanel);
+        translationPanel.setLayout(translationPanelLayout);
+        translationPanelLayout.setHorizontalGroup(
+            translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(translationPanelLayout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addGroup(translationPanelLayout.createSequentialGroup()
+                        .addComponent(jLabel2)
+                        .addGap(51, 51, 51)
+                        .addComponent(translXLabel))
+                    .addGroup(translationPanelLayout.createSequentialGroup()
+                        .addComponent(translationButton)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(translationXFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addGroup(translationPanelLayout.createSequentialGroup()
+                                .addComponent(leftTranslationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(rightTranslationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))))
+                .addGap(18, 18, 18)
+                .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(translYLabel)
+                    .addGroup(translationPanelLayout.createSequentialGroup()
+                        .addComponent(leftTranslationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(rightTranslationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addComponent(translationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(18, 18, 18)
+                .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(translZLabel)
+                    .addGroup(translationPanelLayout.createSequentialGroup()
+                        .addComponent(leftTranslationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(rightTranslationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addComponent(translationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        translationPanelLayout.setVerticalGroup(
+            translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(translationPanelLayout.createSequentialGroup()
+                .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(translXLabel)
+                    .addComponent(translYLabel)
+                    .addComponent(translZLabel)
+                    .addComponent(jLabel2))
+                .addGap(8, 8, 8)
+                .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addGroup(translationPanelLayout.createSequentialGroup()
+                        .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                            .addGroup(translationPanelLayout.createSequentialGroup()
+                                .addComponent(rightTranslationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGap(6, 6, 6))
+                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, translationPanelLayout.createSequentialGroup()
+                                .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                                    .addComponent(leftTranslationZButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                    .addComponent(rightTranslationYButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                    .addComponent(leftTranslationYButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                    .addComponent(rightTranslationXButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                    .addComponent(leftTranslationXButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
+                        .addGroup(translationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(translationXFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(translationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(translationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                    .addComponent(translationButton))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        leftRotationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(leftRotationYButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.leftRotationYButton.text")); // NOI18N
+        leftRotationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        leftRotationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        leftRotationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        leftRotationYButton.setMaximumSize(new java.awt.Dimension(24, 24));
+        leftRotationYButton.setMinimumSize(new java.awt.Dimension(24, 24));
+        leftRotationYButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        leftRotationYButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                leftRotationYButtonMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                leftRotationYButtonMouseReleased(evt);
+            }
+        });
+
+        leftRotationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(leftRotationXButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.leftRotationXButton.text")); // NOI18N
+        leftRotationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        leftRotationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        leftRotationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        leftRotationXButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        leftRotationXButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                leftRotationXButtonMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                leftRotationXButtonMouseReleased(evt);
+            }
+        });
+
+        rotatZLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(rotatZLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rotatZLabel.text")); // NOI18N
+
+        rotatYLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(rotatYLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rotatYLabel.text")); // NOI18N
+
+        rotatXLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(rotatXLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rotatXLabel.text")); // NOI18N
+
+        rotationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/restart-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(rotationButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rotationButton.text")); // NOI18N
+        rotationButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rotationButton.toolTipText")); // NOI18N
+        rotationButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        rotationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        rotationButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        rotationButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                rotationButtonMousePressed(evt);
+            }
+        });
+
+        rotationZFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
+
+        rotationYFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
+
+        rightRotationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(rightRotationZButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rightRotationZButton.text")); // NOI18N
+        rightRotationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        rightRotationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        rightRotationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        rightRotationZButton.setMaximumSize(new java.awt.Dimension(24, 24));
+        rightRotationZButton.setMinimumSize(new java.awt.Dimension(24, 24));
+        rightRotationZButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        rightRotationZButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                rightRotationZButtonMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                rightRotationZButtonMouseReleased(evt);
+            }
+        });
+
+        rightRotationYButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(rightRotationYButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rightRotationYButton.text")); // NOI18N
+        rightRotationYButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        rightRotationYButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        rightRotationYButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        rightRotationYButton.setMaximumSize(new java.awt.Dimension(24, 24));
+        rightRotationYButton.setMinimumSize(new java.awt.Dimension(24, 24));
+        rightRotationYButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        rightRotationYButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                rightRotationYButtonMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                rightRotationYButtonMouseReleased(evt);
+            }
+        });
+
+        leftRotationZButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-left-s-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(leftRotationZButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.leftRotationZButton.text")); // NOI18N
+        leftRotationZButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        leftRotationZButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        leftRotationZButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        leftRotationZButton.setMaximumSize(new java.awt.Dimension(24, 24));
+        leftRotationZButton.setMinimumSize(new java.awt.Dimension(24, 24));
+        leftRotationZButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        leftRotationZButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                leftRotationZButtonMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                leftRotationZButtonMouseReleased(evt);
+            }
+        });
+
+        rightRotationXButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/arrow-right-s-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(rightRotationXButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rightRotationXButton.text")); // NOI18N
+        rightRotationXButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        rightRotationXButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        rightRotationXButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        rightRotationXButton.setMaximumSize(new java.awt.Dimension(24, 24));
+        rightRotationXButton.setMinimumSize(new java.awt.Dimension(24, 24));
+        rightRotationXButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        rightRotationXButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                rightRotationXButtonMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                rightRotationXButtonMouseReleased(evt);
+            }
+        });
+
+        rotationXFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
+        rotationXFTF.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.rotationXFTF.toolTipText")); // NOI18N
+
+        jLabel3.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel3.text")); // NOI18N
+
+        javax.swing.GroupLayout rotationPanelLayout = new javax.swing.GroupLayout(rotationPanel);
+        rotationPanel.setLayout(rotationPanelLayout);
+        rotationPanelLayout.setHorizontalGroup(
+            rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(rotationPanelLayout.createSequentialGroup()
+                .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                    .addGroup(rotationPanelLayout.createSequentialGroup()
+                        .addComponent(jLabel3)
+                        .addGap(142, 142, 142))
+                    .addGroup(rotationPanelLayout.createSequentialGroup()
+                        .addComponent(rotationButton)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(rotationXFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addGroup(rotationPanelLayout.createSequentialGroup()
+                                .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                                    .addComponent(rotatXLabel)
+                                    .addComponent(leftRotationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(rightRotationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))))
+                .addGap(12, 12, 12)
+                .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(rotationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addGroup(rotationPanelLayout.createSequentialGroup()
+                        .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                            .addComponent(rotatYLabel)
+                            .addComponent(leftRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(rightRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addGap(12, 12, 12)
+                .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(rotationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addGroup(rotationPanelLayout.createSequentialGroup()
+                        .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                            .addComponent(rotatZLabel)
+                            .addComponent(leftRotationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(rightRotationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        rotationPanelLayout.setVerticalGroup(
+            rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(rotationPanelLayout.createSequentialGroup()
+                .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jLabel3)
+                    .addComponent(rotatZLabel, javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(rotatYLabel, javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(rotatXLabel, javax.swing.GroupLayout.Alignment.TRAILING))
+                .addGap(6, 6, 6)
+                .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(rotationButton)
+                    .addGroup(rotationPanelLayout.createSequentialGroup()
+                        .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(rightRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(leftRotationYButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(leftRotationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(rightRotationXButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(leftRotationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(rightRotationZButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(rotationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(rotationXFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(rotationYFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(rotationZFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
+        jLabel4.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel4.text")); // NOI18N
+
+        scalePlusButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/add-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(scalePlusButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.scalePlusButton.text")); // NOI18N
+        scalePlusButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        scalePlusButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        scalePlusButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        scalePlusButton.setMaximumSize(new java.awt.Dimension(24, 24));
+        scalePlusButton.setMinimumSize(new java.awt.Dimension(24, 24));
+        scalePlusButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        scalePlusButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                scalePlusButtonMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                scalePlusButtonMouseReleased(evt);
+            }
+        });
+
+        scaleFTF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
+        scaleFTF.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.scaleFTF.toolTipText")); // NOI18N
+
+        scaleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/restart-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(scaleButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.scaleButton.text")); // NOI18N
+        scaleButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.scaleButton.toolTipText")); // NOI18N
+        scaleButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        scaleButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        scaleButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        scaleButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                scaleButtonMousePressed(evt);
+            }
+        });
+
+        scaleMinusButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/subtract-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(scaleMinusButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.scaleMinusButton.text")); // NOI18N
+        scaleMinusButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        scaleMinusButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+        scaleMinusButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+        scaleMinusButton.setMaximumSize(new java.awt.Dimension(24, 24));
+        scaleMinusButton.setMinimumSize(new java.awt.Dimension(24, 24));
+        scaleMinusButton.setPreferredSize(new java.awt.Dimension(24, 24));
+        scaleMinusButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                scaleMinusButtonMousePressed(evt);
+            }
+            public void mouseReleased(java.awt.event.MouseEvent evt) {
+                scaleMinusButtonMouseReleased(evt);
+            }
+        });
+
+        javax.swing.GroupLayout scalePanelLayout = new javax.swing.GroupLayout(scalePanel);
+        scalePanel.setLayout(scalePanelLayout);
+        scalePanelLayout.setHorizontalGroup(
+            scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, scalePanelLayout.createSequentialGroup()
+                .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(scalePanelLayout.createSequentialGroup()
+                        .addComponent(jLabel4)
+                        .addGap(0, 93, Short.MAX_VALUE))
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, scalePanelLayout.createSequentialGroup()
+                        .addGap(0, 0, Short.MAX_VALUE)
+                        .addComponent(scaleButton)))
+                .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(scalePanelLayout.createSequentialGroup()
+                        .addGap(18, 18, 18)
+                        .addComponent(scalePlusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(scaleMinusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, scalePanelLayout.createSequentialGroup()
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                        .addComponent(scaleFTF, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap())
+        );
+        scalePanelLayout.setVerticalGroup(
+            scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(scalePanelLayout.createSequentialGroup()
+                .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(scalePanelLayout.createSequentialGroup()
+                        .addGap(1, 1, 1)
+                        .addComponent(jLabel4))
+                    .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                        .addComponent(scaleButton)
+                        .addGroup(scalePanelLayout.createSequentialGroup()
+                            .addGroup(scalePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                .addComponent(scalePlusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addComponent(scaleMinusButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                            .addComponent(scaleFTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
+                .addGap(0, 0, Short.MAX_VALUE))
+        );
+
+        resetAllButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/refresh-line.png"))); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(resetAllButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.resetAllButton.text")); // NOI18N
+        resetAllButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.resetAllButton.toolTipText")); // NOI18N
+        resetAllButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        resetAllButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                resetAllButtonMousePressed(evt);
+            }
+        });
+
+        jSeparator9.setOrientation(javax.swing.SwingConstants.VERTICAL);
+
+        javax.swing.GroupLayout shiftPanelLayout = new javax.swing.GroupLayout(shiftPanel);
+        shiftPanel.setLayout(shiftPanelLayout);
+        shiftPanelLayout.setHorizontalGroup(
+            shiftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 21, Short.MAX_VALUE)
+        );
+        shiftPanelLayout.setVerticalGroup(
+            shiftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGap(0, 84, Short.MAX_VALUE)
+        );
+
+        jSeparator10.setOrientation(javax.swing.SwingConstants.VERTICAL);
+
+        org.openide.awt.Mnemonics.setLocalizedText(applyButton, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.applyButton.text")); // NOI18N
+        applyButton.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.applyButton.toolTipText")); // NOI18N
+        applyButton.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
+        applyButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
+        applyButton.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mousePressed(java.awt.event.MouseEvent evt) {
+                applyButtonMousePressed(evt);
+            }
+        });
+
+        shiftLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(shiftLabel, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.shiftLabel.text")); // NOI18N
+        shiftLabel.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.shiftLabel.toolTipText")); // NOI18N
+
+        precisionGroup.add(lowShiftRB);
+        org.openide.awt.Mnemonics.setLocalizedText(lowShiftRB, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.lowShiftRB.text")); // NOI18N
+        lowShiftRB.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.lowShiftRB.toolTipText")); // NOI18N
+        lowShiftRB.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                lowShiftRBActionPerformed(evt);
+            }
+        });
+
+        precisionGroup.add(highShiftRB);
+        org.openide.awt.Mnemonics.setLocalizedText(highShiftRB, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.highShiftRB.text")); // NOI18N
+        highShiftRB.setToolTipText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.highShiftRB.toolTipText")); // NOI18N
+        highShiftRB.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                highShiftRBActionPerformed(evt);
+            }
+        });
+
+        javax.swing.GroupLayout transformationPanelLayout = new javax.swing.GroupLayout(transformationPanel);
+        transformationPanel.setLayout(transformationPanelLayout);
+        transformationPanelLayout.setHorizontalGroup(
+            transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(jSeparator5, javax.swing.GroupLayout.Alignment.TRAILING)
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, transformationPanelLayout.createSequentialGroup()
+                .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addComponent(translationPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addGroup(transformationPanelLayout.createSequentialGroup()
+                        .addContainerGap()
+                        .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(rotationPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                            .addGroup(transformationPanelLayout.createSequentialGroup()
+                                .addComponent(scalePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(jSeparator9, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                    .addGroup(transformationPanelLayout.createSequentialGroup()
+                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                        .addComponent(shiftPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                                    .addGroup(transformationPanelLayout.createSequentialGroup()
+                                        .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                            .addGroup(transformationPanelLayout.createSequentialGroup()
+                                                .addGap(24, 24, 24)
+                                                .addComponent(shiftLabel))
+                                            .addGroup(transformationPanelLayout.createSequentialGroup()
+                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                                                .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                                    .addComponent(lowShiftRB)
+                                                    .addComponent(highShiftRB))))
+                                        .addGap(18, 18, 18)
+                                        .addComponent(jSeparator10, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                                .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                    .addComponent(resetAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                    .addComponent(applyButton, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE))
+                                .addGap(0, 93, Short.MAX_VALUE)))))
+                .addContainerGap())
+        );
+        transformationPanelLayout.setVerticalGroup(
+            transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(transformationPanelLayout.createSequentialGroup()
+                .addComponent(translationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                .addComponent(rotationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(22, 22, 22)
+                .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(transformationPanelLayout.createSequentialGroup()
+                        .addComponent(scalePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                    .addGroup(transformationPanelLayout.createSequentialGroup()
+                        .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addGroup(transformationPanelLayout.createSequentialGroup()
+                                .addComponent(resetAllButton)
+                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                .addComponent(applyButton, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE))
+                            .addComponent(jSeparator9, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addGroup(transformationPanelLayout.createSequentialGroup()
+                                .addGroup(transformationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                    .addGroup(transformationPanelLayout.createSequentialGroup()
+                                        .addComponent(shiftLabel)
+                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                        .addComponent(lowShiftRB)
+                                        .addGap(3, 3, 3)
+                                        .addComponent(highShiftRB))
+                                    .addComponent(jSeparator10, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE))
+                                .addGap(18, 18, 18)
+                                .addComponent(shiftPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+                .addComponent(jSeparator5, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE))
+        );
+
+        org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jButton1.text")); // NOI18N
+        jButton1.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jButton1ActionPerformed(evt);
+            }
+        });
+
+        jLabel1.setFont(new java.awt.Font("Ubuntu", 1, 14)); // NOI18N
+        org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel1.text")); // NOI18N
+
+        jCheckBox1.setSelected(true);
+        org.openide.awt.Mnemonics.setLocalizedText(jCheckBox1, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jCheckBox1.text")); // NOI18N
+        jCheckBox1.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jCheckBox1ActionPerformed(evt);
+            }
+        });
+
+        jFormattedTextField1.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
+        jFormattedTextField1.setText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jFormattedTextField1.text")); // NOI18N
+
+        org.openide.awt.Mnemonics.setLocalizedText(jLabel5, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel5.text")); // NOI18N
+
+        jFormattedTextField2.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(java.text.NumberFormat.getIntegerInstance())));
+        jFormattedTextField2.setText(org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jFormattedTextField2.text")); // NOI18N
+
+        org.openide.awt.Mnemonics.setLocalizedText(jLabel6, org.openide.util.NbBundle.getMessage(RegistrationPanel.class, "RegistrationPanel.jLabel6.text")); // NOI18N
+
+        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "None", "Random 200" }));
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addComponent(visualizationPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 1057, Short.MAX_VALUE)
+            .addGroup(layout.createSequentialGroup()
+                .addComponent(transformationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 599, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jSeparator2)
+                .addGap(450, 450, 450))
+            .addGroup(layout.createSequentialGroup()
+                .addComponent(registrationAdjustmentLabel)
+                .addGap(0, 0, Short.MAX_VALUE))
+            .addGroup(layout.createSequentialGroup()
+                .addComponent(jLabel1)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGap(29, 29, 29)
+                        .addComponent(jButton1))
+                    .addGroup(layout.createSequentialGroup()
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(jCheckBox1)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(jFormattedTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(4, 4, 4)
+                        .addComponent(jLabel5)
+                        .addGap(9, 9, 9)
+                        .addComponent(jFormattedTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addGap(1, 1, 1)
+                        .addComponent(jLabel6)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+            .addComponent(jSeparator11)
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jCheckBox1)
+                    .addComponent(jFormattedTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jLabel5)
+                    .addComponent(jFormattedTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jLabel6)
+                    .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jButton1)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(jSeparator11, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(registrationAdjustmentLabel)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(visualizationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 206, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addGap(22, 22, 22)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(transformationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 333, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+   
+    /**
+     * Resets transparency slider to default position
+     * @param evt 
+     */
+    private void transparencyButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_transparencyButtonActionPerformed
+        transparencySlider.setValue(RegistrationAction.TRANSPARENCY_RANGE);
+        transparencySlider.repaint();
+        //listener.setTransparency(PostRegistrationListener.TRANSPARENCY_RANGE);
+    }//GEN-LAST:event_transparencyButtonActionPerformed
+
+    private void transparencySliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_transparencySliderStateChanged
+        listener.actionPerformed(
+                new ActionEvent(
+                        evt.getSource(),
+                        ActionEvent.ACTION_PERFORMED, 
+                        RegistrationAction.ACTION_COMMAND_TRANSPARENCY)
+                );       
+    }//GEN-LAST:event_transparencySliderStateChanged
+
+    private void leftTranslationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationXButtonMousePressed
+        animator.startModelAnimation(Direction.TRANSLATE_LEFT, this);
+    }//GEN-LAST:event_leftTranslationXButtonMousePressed
+
+    private void leftTranslationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationXButtonMouseReleased
+        animator.stopModelAnimation(this);
+    }//GEN-LAST:event_leftTranslationXButtonMouseReleased
+
+    private void rightTranslationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationXButtonMousePressed
+        animator.startModelAnimation(Direction.TRANSLATE_RIGHT, this);
+    }//GEN-LAST:event_rightTranslationXButtonMousePressed
+
+    private void rightTranslationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationXButtonMouseReleased
+        animator.stopModelAnimation(this);
+    }//GEN-LAST:event_rightTranslationXButtonMouseReleased
+    
+    private void leftTranslationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationYButtonMousePressed
+        animator.startModelAnimation(Direction.TRANSLATE_UP, this);
+    }//GEN-LAST:event_leftTranslationYButtonMousePressed
+
+    private void leftTranslationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationYButtonMouseReleased
+        animator.stopModelAnimation(this);
+    }//GEN-LAST:event_leftTranslationYButtonMouseReleased
+
+    private void rightTranslationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationYButtonMousePressed
+        animator.startModelAnimation(Direction.TRANSLATE_DOWN, this);
+    }//GEN-LAST:event_rightTranslationYButtonMousePressed
+
+    private void rightTranslationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationYButtonMouseReleased
+        animator.stopModelAnimation(this);
+    }//GEN-LAST:event_rightTranslationYButtonMouseReleased
+
+    private void leftTranslationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationZButtonMousePressed
+        animator.startModelAnimation(Direction.TRANSLATE_IN, this);
+    }//GEN-LAST:event_leftTranslationZButtonMousePressed
+
+    private void leftTranslationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftTranslationZButtonMouseReleased
+        animator.stopModelAnimation(this);
+    }//GEN-LAST:event_leftTranslationZButtonMouseReleased
+
+    private void rightTranslationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationZButtonMousePressed
+        animator.startModelAnimation(Direction.TRANSLATE_OUT, this);
+    }//GEN-LAST:event_rightTranslationZButtonMousePressed
+
+    private void rightTranslationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightTranslationZButtonMouseReleased
+        animator.stopModelAnimation(this);
+    }//GEN-LAST:event_rightTranslationZButtonMouseReleased
+
+    private void leftRotationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationXButtonMousePressed
+        animator.startModelAnimation(Direction.ROTATE_LEFT, this);
+    }//GEN-LAST:event_leftRotationXButtonMousePressed
+
+    private void leftRotationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationXButtonMouseReleased
+        animator.stopModelAnimation(this);
+    }//GEN-LAST:event_leftRotationXButtonMouseReleased
+
+    private void rightRotationXButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationXButtonMousePressed
+        animator.startModelAnimation(Direction.ROTATE_RIGHT, this);
+    }//GEN-LAST:event_rightRotationXButtonMousePressed
+
+    private void rightRotationXButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationXButtonMouseReleased
+        animator.stopModelAnimation(this);
+    }//GEN-LAST:event_rightRotationXButtonMouseReleased
+
+    private void leftRotationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationYButtonMousePressed
+        animator.startModelAnimation(Direction.ROTATE_UP, this);
+    }//GEN-LAST:event_leftRotationYButtonMousePressed
+
+    private void leftRotationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationYButtonMouseReleased
+        animator.stopModelAnimation(this);
+    }//GEN-LAST:event_leftRotationYButtonMouseReleased
+
+    private void rightRotationYButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationYButtonMousePressed
+        animator.startModelAnimation(Direction.ROTATE_DOWN, this);
+    }//GEN-LAST:event_rightRotationYButtonMousePressed
+
+    private void rightRotationYButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationYButtonMouseReleased
+        animator.stopModelAnimation(this);
+    }//GEN-LAST:event_rightRotationYButtonMouseReleased
+
+    private void leftRotationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationZButtonMousePressed
+        animator.startModelAnimation(Direction.ROTATE_IN, this);
+    }//GEN-LAST:event_leftRotationZButtonMousePressed
+
+    private void leftRotationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftRotationZButtonMouseReleased
+        animator.stopModelAnimation(this);
+    }//GEN-LAST:event_leftRotationZButtonMouseReleased
+
+    private void rightRotationZButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationZButtonMousePressed
+        animator.startModelAnimation(Direction.ROTATE_OUT, this);
+    }//GEN-LAST:event_rightRotationZButtonMousePressed
+
+    private void rightRotationZButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightRotationZButtonMouseReleased
+        animator.stopModelAnimation(this);
+    }//GEN-LAST:event_rightRotationZButtonMouseReleased
+
+    private void scaleMinusButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scaleMinusButtonMousePressed
+        animator.startModelAnimation(Direction.ZOOM_OUT, this);
+    }//GEN-LAST:event_scaleMinusButtonMousePressed
+
+    private void scaleMinusButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scaleMinusButtonMouseReleased
+        animator.stopModelAnimation(this);
+    }//GEN-LAST:event_scaleMinusButtonMouseReleased
+
+    private void scalePlusButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scalePlusButtonMousePressed
+        animator.startModelAnimation(Direction.ZOOM_IN, this);
+    }//GEN-LAST:event_scalePlusButtonMousePressed
+
+    private void scalePlusButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scalePlusButtonMouseReleased
+        animator.stopModelAnimation(this);
+    }//GEN-LAST:event_scalePlusButtonMouseReleased
+
+    private void thresholdDownButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_thresholdDownButtonActionPerformed
+        double newValue = ((Number)thersholdFTF.getValue()).doubleValue() - 0.1;
+        thersholdFTF.setValue(newValue);
+        thersholdFTF.postActionEvent();
+    }//GEN-LAST:event_thresholdDownButtonActionPerformed
+
+    private void thersholdUpButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_thersholdUpButtonActionPerformed
+        double newValue = ((Number)thersholdFTF.getValue()).doubleValue() + 0.1;
+        thersholdFTF.setValue(newValue);
+        thersholdFTF.postActionEvent();
+    }//GEN-LAST:event_thersholdUpButtonActionPerformed
+
+    private void lowShiftRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lowShiftRBActionPerformed
+        this.moveModifier = LOW_SHIFT_QUOTIENT;
+    }//GEN-LAST:event_lowShiftRBActionPerformed
+
+    private void highShiftRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_highShiftRBActionPerformed
+        this.moveModifier = HIGH_SHIFT_QUOTIENT;
+    }//GEN-LAST:event_highShiftRBActionPerformed
+
+    private void translationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_translationButtonMousePressed
+        translationXFTF.setValue(0.0);
+        translationYFTF.setValue(0.0);
+        translationZFTF.setValue(0.0);
+    }//GEN-LAST:event_translationButtonMousePressed
+
+    private void rotationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rotationButtonMousePressed
+        rotationXFTF.setValue(0.0);
+        rotationYFTF.setValue(0.0);
+        rotationZFTF.setValue(0.0);
+    }//GEN-LAST:event_rotationButtonMousePressed
+
+    private void scaleButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_scaleButtonMousePressed
+        scaleFTF.setValue(0.0);
+    }//GEN-LAST:event_scaleButtonMousePressed
+
+    private void resetAllButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_resetAllButtonMousePressed
+        translationButtonMousePressed(evt);
+        rotationButtonMousePressed(evt);
+        scaleButtonMousePressed(evt);
+    }//GEN-LAST:event_resetAllButtonMousePressed
+
+    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
+        resetAllButtonMousePressed(null);
+    }//GEN-LAST:event_jButton1ActionPerformed
+
+    private void applyButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_applyButtonMousePressed
+        resetAllButtonMousePressed(evt);
+    }//GEN-LAST:event_applyButtonMousePressed
+
+    private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox1ActionPerformed
+        // TODO add your handling code here:
+    }//GEN-LAST:event_jCheckBox1ActionPerformed
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton applyButton;
+    private javax.swing.JLabel featurePointsLabel;
+    private javax.swing.JPanel featurePointsPanel;
+    private javax.swing.JButton frontButton;
+    private javax.swing.JRadioButton highShiftRB;
+    private javax.swing.JButton jButton1;
+    private javax.swing.JCheckBox jCheckBox1;
+    private javax.swing.JComboBox<String> jComboBox1;
+    private javax.swing.JFormattedTextField jFormattedTextField1;
+    private javax.swing.JFormattedTextField jFormattedTextField2;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JLabel jLabel4;
+    private javax.swing.JLabel jLabel5;
+    private javax.swing.JLabel jLabel6;
+    private javax.swing.JSeparator jSeparator10;
+    private javax.swing.JSeparator jSeparator11;
+    private javax.swing.JSeparator jSeparator2;
+    private javax.swing.JSeparator jSeparator5;
+    private javax.swing.JSeparator jSeparator9;
+    private javax.swing.JButton leftRotationXButton;
+    private javax.swing.JButton leftRotationYButton;
+    private javax.swing.JButton leftRotationZButton;
+    private javax.swing.JButton leftTranslationXButton;
+    private javax.swing.JButton leftTranslationYButton;
+    private javax.swing.JButton leftTranslationZButton;
+    private javax.swing.JRadioButton lowShiftRB;
+    private javax.swing.ButtonGroup precisionGroup;
+    private javax.swing.ButtonGroup primaryRenderModeGroup;
+    private javax.swing.JButton profileButton;
+    private javax.swing.JLabel registrationAdjustmentLabel;
+    private javax.swing.JButton resetAllButton;
+    private javax.swing.JButton rightRotationXButton;
+    private javax.swing.JButton rightRotationYButton;
+    private javax.swing.JButton rightRotationZButton;
+    private javax.swing.JButton rightTranslationXButton;
+    private javax.swing.JButton rightTranslationYButton;
+    private javax.swing.JButton rightTranslationZButton;
+    private javax.swing.JLabel rotatXLabel;
+    private javax.swing.JLabel rotatYLabel;
+    private javax.swing.JLabel rotatZLabel;
+    private javax.swing.JButton rotationButton;
+    private javax.swing.JPanel rotationPanel;
+    private javax.swing.JFormattedTextField rotationXFTF;
+    private javax.swing.JFormattedTextField rotationYFTF;
+    private javax.swing.JFormattedTextField rotationZFTF;
+    private javax.swing.JButton scaleButton;
+    private javax.swing.JFormattedTextField scaleFTF;
+    private javax.swing.JButton scaleMinusButton;
+    private javax.swing.JPanel scalePanel;
+    private javax.swing.JButton scalePlusButton;
+    private javax.swing.ButtonGroup secondaryRenerModeGroup;
+    private javax.swing.JLabel shiftLabel;
+    private javax.swing.JPanel shiftPanel;
+    private javax.swing.JFormattedTextField thersholdFTF;
+    private javax.swing.JButton thersholdUpButton;
+    private javax.swing.JButton thresholdDownButton;
+    private javax.swing.JPanel transformationPanel;
+    private javax.swing.JLabel translXLabel;
+    private javax.swing.JLabel translYLabel;
+    private javax.swing.JLabel translZLabel;
+    private javax.swing.JButton translationButton;
+    private javax.swing.JPanel translationPanel;
+    private javax.swing.JFormattedTextField translationXFTF;
+    private javax.swing.JFormattedTextField translationYFTF;
+    private javax.swing.JFormattedTextField translationZFTF;
+    private javax.swing.JButton transparencyButton;
+    private javax.swing.JSlider transparencySlider;
+    private javax.swing.JLabel viewLabel;
+    private javax.swing.JPanel viewPanel;
+    private javax.swing.JLabel visualizationLabel;
+    private javax.swing.JPanel visualizationPanel;
+    // End of variables declaration//GEN-END:variables
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/Camera.java b/GUI/src/main/java/cz/fidentis/analyst/scene/Camera.java
similarity index 99%
rename from GUI/src/main/java/cz/fidentis/analyst/gui/scene/Camera.java
rename to GUI/src/main/java/cz/fidentis/analyst/scene/Camera.java
index 782da9040d3fd8a0fb276aaf4cee0e4f00d917fe..b89b9c1e53c09a011d194af69220e072afe23ebf 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/Camera.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/scene/Camera.java
@@ -1,4 +1,4 @@
-package cz.fidentis.analyst.gui.scene;
+package cz.fidentis.analyst.scene;
 
 import javax.vecmath.Vector3d;
 
diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/Drawable.java b/GUI/src/main/java/cz/fidentis/analyst/scene/Drawable.java
new file mode 100644
index 0000000000000000000000000000000000000000..d011aa7b305d3848e8c1539f6ae6d19cbc5eb784
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/scene/Drawable.java
@@ -0,0 +1,209 @@
+package cz.fidentis.analyst.scene;
+
+import com.jogamp.opengl.GL;
+import com.jogamp.opengl.GL2;
+import java.awt.Color;
+import javax.vecmath.Vector3d;
+
+/**
+ * A drawable object, i.e., an object with drawing state and capable to 
+ * render itself into an OpenGL context.
+ * 
+ * @author Radek Oslejsek
+ * @author Richard Pajersky
+ */
+public abstract class Drawable {
+    
+    private boolean display = true;
+    
+    /* material info */
+    private Color color = Color.LIGHT_GRAY;
+    private float transparency = 1; // 0 = off, 1 = max
+    private Color highlights = new Color(0, 0, 0, 1);
+    
+    /* transformation */
+    private Vector3d translation = new Vector3d(0, 0, 0);
+    private Vector3d rotation = new Vector3d(0, 0, 0);
+    private Vector3d scale = new Vector3d(0, 0, 0);
+    
+    /* rendering mode */
+    /**
+     * Render mode to use, one from {@code GL_FILL}, {@code GL_LINE}, {@code GL_POINT}
+     */
+    private int renderMode = GL2.GL_FILL; // GL_FILL, GL_LINE, or GL_POINT
+    
+    /**
+     * Renders the scene.
+     * @param gl OpenGL context
+     */
+    public void render(GL2 gl) {
+        initRendering(gl);
+        
+        gl.glPushMatrix(); 
+        
+        // rotate
+        gl.glRotated(getRotation().x, 1, 0, 0);
+        gl.glRotated(getRotation().y, 0, 1, 0);
+        gl.glRotated(getRotation().z, 0, 0, 1);
+        // move
+        gl.glTranslated(getTranslation().x, getTranslation().y, getTranslation().z);
+        // scale
+        gl.glScaled(1 + getScale().x, 1 + getScale().y, 1 + getScale().z);
+        
+        renderObject(gl);
+
+        gl.glPopMatrix();
+        
+        finishRendering(gl);
+    }
+    
+    protected void initRendering(GL2 gl) {
+        gl.glShadeModel(GL2.GL_SMOOTH);
+        gl.glPolygonMode(GL.GL_FRONT_AND_BACK, getRenderMode());
+        
+        // set color
+        float[] rgba = {color.getRed() / 255f, color.getGreen() / 255f, 
+            color.getBlue() / 255f , getTransparency()};
+        gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, rgba, 0);
+
+    }
+    
+    protected abstract void renderObject(GL2 gl);
+
+    protected void finishRendering(GL2 gl) {    
+    }
+        
+    /**
+     * This drawable mesh is included in the rendered scene.
+     */
+    public void show() {
+        display = true;
+    }
+    
+    /**
+     * This drawable mesh is excluded from the rendered scene (skipped).
+     */
+    public void hide() {
+        display = false;
+    }
+    
+    /**
+     * 
+     * @return {@code true} if the object is included (rendered) in the scene.
+     */
+    public boolean isShown() {
+        return display;
+    }
+    
+    /**
+     * Sets color
+     * @param color Color
+     */
+    public void setColor(Color color) {
+        this.color = color;
+    }
+
+    /**
+     * @return {@link Color}
+     */
+    public Color getColor() {
+        return color;
+    }
+    
+    /**
+     * @return Current value of transparency
+     */
+    public float getTransparency() {
+        return transparency;
+    }
+
+    /**
+     * Sets transparency
+     * @param transparency Transparency
+     */
+    public void setTransparency(float transparency) {
+        this.transparency = transparency;
+    }
+    
+    /**
+     * @return {@link Color} of highlights
+     */
+    public Color getHighlights() {
+        return highlights;
+    }
+
+    /**
+     * Sets {@link Color} of highlights
+     * @param highlights 
+     */
+    public void setHighlights(Color highlights) {
+        this.highlights = highlights;
+    }
+    
+    /**
+     * @return Current translation
+     */
+    public Vector3d getTranslation() {
+        return translation;
+    }
+
+    /**
+     * Sets tranlation
+     * @param translation Translation
+     */
+    public void setTranslation(Vector3d translation) {
+        this.translation = translation;
+    }
+
+    /**
+     * @return Current rotation
+     */
+    public Vector3d getRotation() {
+        return rotation;
+    }
+
+    /**
+     * Sets rotation
+     * @param rotation 
+     */
+    public void setRotation(Vector3d rotation) {
+        this.rotation = rotation;
+    }
+
+    /**
+     * @return Current scale
+     */
+    public Vector3d getScale() {
+        return scale;
+    }
+
+    /**
+     * Sets scale
+     * @param scale Scale
+     */
+    public void setScale(Vector3d scale) {
+        this.scale = scale;
+    }
+    
+    /**
+     * @return Value of {@link #renderMode}
+     */
+    public int getRenderMode() {
+        return renderMode;
+    }
+
+    /**
+     * Sets render mode
+     * @param renderMode Render mode
+     * @throws IllegalArgumentException if renderMode isn't {@code GL_FILL}, {@code GL_LINE} or {@coed GL_POINT}
+     */
+    public void setRenderMode(int renderMode) {
+        if (renderMode != GL2.GL_FILL && 
+                renderMode != GL2.GL_LINE &&
+                renderMode != GL2.GL_POINT) {
+            throw new IllegalArgumentException("invalid mode");
+        }
+        this.renderMode = renderMode;
+    }
+
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableFace.java b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableFace.java
new file mode 100644
index 0000000000000000000000000000000000000000..9b7d6f1198e8aa0ab9e9f486856b76ab1e6bb46f
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableFace.java
@@ -0,0 +1,82 @@
+package cz.fidentis.analyst.scene;
+
+import com.jogamp.opengl.GL2;
+import cz.fidentis.analyst.mesh.core.MeshFacet;
+import cz.fidentis.analyst.mesh.core.MeshModel;
+import java.awt.Color;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Drawable human face.
+ * 
+ * @author Radek Oslejsek
+ */
+public class DrawableFace extends DrawableMesh {
+    
+    public static final Color SKIN_COLOR_PRIMARY = new Color(224, 172, 105);
+    public static final Color SKIN_COLOR_SECONDARY = new Color(236, 188, 180);
+    
+    /* feature points */
+    //private List<FeaturePoint> featurePoints = new ArrayList<>();
+    //private List<Color> featurePointsColor = new ArrayList<>();
+    //private boolean renderFeaturePoints = false;
+    private boolean renderHeatMap = false;
+    
+    /**
+     * Values at mesh vertices that are to be transferred to colors.
+     */
+    private Map<MeshFacet, List<Double>> heatmap = new HashMap<>();
+    
+    /**
+     * Constructor. 
+     * 
+     * @param model Drawable mesh model of the face
+     * @throws IllegalArgumentException if the model is {@code null}
+     */
+    public DrawableFace(MeshModel model) {
+        super(model);
+        setColor(SKIN_COLOR_PRIMARY);
+    }
+    
+    /**
+     * Sets new heatmap.
+     * 
+     * @param heatmap New heatmap
+     */
+    public void setHeatMap(Map<MeshFacet, List<Double>> heatmap) {
+        this.heatmap = heatmap;
+    }
+    
+    public Map<MeshFacet, List<Double>> getHeatMap() {
+        return Collections.unmodifiableMap(heatmap);
+    }
+    
+    /**
+     * Sets if the heatmap should be rendered or not.
+     * @param render The switch
+     */
+    public void setRenderHeatmap(boolean render) {
+        this.renderHeatMap = render;
+    }
+    
+    /**
+     * Determines whether the heatmap is set to be rendered.
+     * @return id the heatmap will be rendered
+     */
+    public boolean isHeatmapRendered() {
+        return this.renderHeatMap;
+    }
+    
+    @Override
+    protected void renderObject(GL2 gl) {
+        if (isHeatmapRendered()) {
+            new HeatmapRenderer().drawMeshModel(gl, getModel(), heatmap);
+        } else {
+            super.renderObject(gl);
+        }
+    }
+    
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableFeaturePoints.java b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableFeaturePoints.java
new file mode 100644
index 0000000000000000000000000000000000000000..9b110b99405a6347c94f479fc2a523347143be82
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableFeaturePoints.java
@@ -0,0 +1,132 @@
+package cz.fidentis.analyst.scene;
+
+import com.jogamp.opengl.GL2;
+import com.jogamp.opengl.glu.GLU;
+import com.jogamp.opengl.glu.GLUquadric;
+import cz.fidentis.analyst.feature.FeaturePoint;
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Drawable feature points.
+ * 
+ * @author Radek Oslejsek
+ */
+public class DrawableFeaturePoints extends Drawable {
+    
+    public static final Color DEFAULT_COLOR = Color.GREEN;
+    
+    private static final GLU GLU_CONTEXT = new GLU();
+    
+    /* feature points */
+    private final List<FeaturePoint> featurePoints;
+    
+    /**
+     * feature points with color different from the default color
+     */
+    private Map<Integer, Color> specialColors = new HashMap<>();
+    
+    /**
+     * Constructor.
+     * @param featurePoints Feature points
+     */
+    public DrawableFeaturePoints(List<FeaturePoint> featurePoints) {
+        this.featurePoints = new ArrayList<>(featurePoints);
+        setColor(DEFAULT_COLOR);
+    }
+    
+    /**
+     * Returns color of given feature point
+     * @param index Index of the feature point
+     * @return the color or {@code null}
+     */
+    public Color getColor(int index) {
+        if (index < 0 || index >= featurePoints.size()) {
+            return null;
+        }
+        if (specialColors.containsKey(index)) {
+            return specialColors.get(index);
+        } else {
+            return DEFAULT_COLOR;
+        }
+    }
+    
+    /**
+     * Sets color of the feature point. 
+     * @param index Index of the feature point
+     * @param color Color
+     */
+    public void setColor(int index, Color color) {
+        if (index < 0 || index >= featurePoints.size() || color == null) {
+            return;
+        }
+        if (color.equals(DEFAULT_COLOR)) {
+            specialColors.remove(index);
+        } else {
+            specialColors.put(index, color);
+        }
+    }
+
+    @Override
+    protected void renderObject(GL2 gl) {
+        float[] rgba = {
+            getColor().getRed() / 255f, 
+            getColor().getGreen() / 255f, 
+            getColor().getBlue() / 255f, 
+            getTransparency()
+        };
+        gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, rgba, 0); // set default color
+        
+        for (int i = 0; i < featurePoints.size(); i++) {
+            FeaturePoint fp = featurePoints.get(i);
+            Color specialColor = specialColors.get(i);
+            if (specialColor != null) {
+                float[] tmpRGB = {specialColor.getRed() / 255f, specialColor.getGreen() / 255f, specialColor.getBlue() / 255f, getTransparency()};
+                gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, tmpRGB, 0);
+            }
+            
+            gl.glPushMatrix(); 
+            gl.glTranslated(fp.getX(), fp.getY(), fp.getZ());
+            GLUquadric center = GLU_CONTEXT.gluNewQuadric();
+            GLU_CONTEXT.gluQuadricDrawStyle(center, GLU.GLU_FILL);
+            GLU_CONTEXT.gluQuadricNormals(center, GLU.GLU_FLAT);
+            GLU_CONTEXT.gluQuadricOrientation(center, GLU.GLU_OUTSIDE);
+            GLU_CONTEXT.gluSphere(center, 3f, 16, 16);
+            GLU_CONTEXT.gluDeleteQuadric(center);
+            gl.glPopMatrix();
+    
+            if (specialColor != null) {
+                gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, rgba, 0); // set default color
+            }
+        }
+    }
+    
+    
+       
+    /**
+     * @return {@link List} of {@link FeaturePoint}
+     */
+    public List<FeaturePoint> getFeaturePoints() {
+        return Collections.unmodifiableList(featurePoints);
+    }
+
+    /**
+     * Sets feature points
+     * @param featurePoints Feature points
+     */
+    /*
+    public void setFeaturePoints(List<FeaturePoint> featurePoints) {
+        this.featurePoints = featurePoints;
+        List<Color> colors = new ArrayList<>();
+        featurePoints.forEach((_item) -> {
+            colors.add(getColor());
+        });
+        this.setFeaturePointsColor(colors);
+    } 
+    */
+    
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableMesh.java b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableMesh.java
new file mode 100644
index 0000000000000000000000000000000000000000..ae19a418ae4061685480fca7802081415fef8a3f
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawableMesh.java
@@ -0,0 +1,107 @@
+package cz.fidentis.analyst.scene;
+
+import com.jogamp.opengl.GL2;
+import cz.fidentis.analyst.mesh.core.MeshFacet;
+import cz.fidentis.analyst.mesh.core.MeshModel;
+import java.awt.Color;
+import java.util.List;
+import javax.vecmath.Point3d;
+import javax.vecmath.Vector3d;
+
+/**
+ * A drawable triangular mesh, i.e., a mesh model with drawing information like 
+ * material, transparency, color, relative transformations in the scene etc. 
+ * This class encapsulates rendering state and parameters,
+ * 
+ * @author Radek Oslejsek
+ * @author Richard Pajersky
+ */
+public class DrawableMesh extends Drawable {
+    
+    private final MeshModel model;
+    
+    /**
+     * Constructor. 
+     * 
+     * @param model Drawable mesh model
+     * @throws IllegalArgumentException if the model is {@code null}
+     */
+    public DrawableMesh(MeshModel model) {
+        if (model == null) {
+            throw new IllegalArgumentException("model is null");
+        }
+        this.model = model;
+    }
+    
+    /**
+     * Constructor. 
+     * 
+     * @param facet Mesh facet
+     * @throws IllegalArgumentException if the model is {@code null}
+     */
+    public DrawableMesh(MeshFacet facet) {
+        if (facet == null) {
+            throw new IllegalArgumentException("facet is null");
+        }
+        this.model = new MeshModel();
+        this.model.addFacet(facet);
+    }
+    
+    @Override
+    protected void initRendering(GL2 gl) {
+        super.initRendering(gl);
+        
+        // showBackface
+        //float[] pos = {0f, 0f, -1f, 0f};
+        //gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_POSITION, pos, 0);
+        //if (isShowBackface()) {
+        //    gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_DIFFUSE, Color.white.getComponents(null), 0);
+        //} else {
+        //    gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_DIFFUSE, Color.black.getComponents(null), 0);
+        //}
+    
+        // set color of highlights
+        Color col = getHighlights();
+        float[] highlights = {col.getRed(), col.getGreen(), col.getBlue(), 1};
+        gl.glMaterialf(GL2.GL_FRONT_AND_BACK, GL2.GL_SHININESS, 50);  
+        gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_SPECULAR, highlights, 0);
+    }
+    
+    @Override
+    protected void renderObject(GL2 gl) {
+        for (MeshFacet facet: getFacets()) {
+            gl.glBegin(GL2.GL_TRIANGLES); //vertices are rendered as triangles
+        
+            // get the normal and tex coords indicies for face i  
+            for (int v = 0; v < facet.getCornerTable().getSize(); v++) {            
+                // render the normals
+                Vector3d norm = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getNormal(); 
+                if(norm != null) {
+                    gl.glNormal3d(norm.x, norm.y, norm.z);
+                }
+                // render the vertices
+                Point3d vert = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getPosition();
+                gl.glVertex3d(vert.x, vert.y, vert.z);
+            }
+        
+            gl.glEnd();
+        }
+    }
+    
+    /**
+     * Returns list of individual facets.
+     * 
+     * @return list of individual facets.
+     */
+    public List<MeshFacet> getFacets() {
+        return model.getFacets();
+    }
+    
+    /**
+     * @return {@link MeshModel}
+     */
+    public MeshModel getModel() {
+        return this.model;
+    }
+
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/DrawablePlane.java b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawablePlane.java
new file mode 100644
index 0000000000000000000000000000000000000000..795bddc0c7d9bec925588f81aca244f363ade894
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/scene/DrawablePlane.java
@@ -0,0 +1,41 @@
+package cz.fidentis.analyst.scene;
+
+import cz.fidentis.analyst.mesh.core.MeshFacet;
+import cz.fidentis.analyst.mesh.core.MeshModel;
+import cz.fidentis.analyst.symmetry.Plane;
+
+/**
+ * A cutting plane.
+ * 
+ * @author Radek Oslejsek
+ */
+public class DrawablePlane extends DrawableMesh {
+    
+    private final Plane plane;
+    
+    /**
+     * Constructor.
+     * @param model Mesh model of the plane
+     * @param plane The plane
+     */
+    public DrawablePlane(MeshModel model, Plane plane) {
+        super(model);
+        if (plane == null) {
+            throw new IllegalArgumentException("plane");
+        }
+        this.plane = plane;
+    }
+    
+    /**
+     * Constructor.
+     * @param facet Mesh facet of the plane
+     * @param plane The plane
+     */
+    public DrawablePlane(MeshFacet facet, Plane plane) {
+        super(facet);
+        if (plane == null) {
+            throw new IllegalArgumentException("plane");
+        }
+        this.plane = plane;
+    }
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/HeatmapRenderer.java b/GUI/src/main/java/cz/fidentis/analyst/scene/HeatmapRenderer.java
new file mode 100644
index 0000000000000000000000000000000000000000..1a2802259edaaf062fc29620ce04b75ed64c22ae
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/scene/HeatmapRenderer.java
@@ -0,0 +1,130 @@
+package cz.fidentis.analyst.scene;
+
+import com.jogamp.opengl.GL2;
+import cz.fidentis.analyst.mesh.core.MeshFacet;
+import cz.fidentis.analyst.mesh.core.MeshModel;
+import java.awt.Color;
+import java.util.List;
+import java.util.Map;
+import javax.vecmath.Point3d;
+import javax.vecmath.Vector3d;
+
+/**
+ * Heatmap rendering.
+ * 
+ * @author Daniel Sokol
+ */
+public class HeatmapRenderer {
+    
+    private Color minColor = Color.RED;
+    private Color maxColor = Color.BLUE;
+
+    public void setMinColor(Color color) {
+        minColor = color;
+    }
+    
+    public void setMaxColor(Color color) {
+        maxColor = color;
+    }
+    
+    /**
+     * Maps distances of mesh model vertices to colors and renders the taken heatmap.
+     * @param gl OpenGL context
+     * @param model Mesh model to be rendered
+     * @param distances Distances in mesh model vertices
+     */
+    public void drawMeshModel(GL2 gl, MeshModel model, Map<MeshFacet, List<Double>> distances) {
+        Double minDistance = Double.POSITIVE_INFINITY;
+        Double maxDistance = Double.NEGATIVE_INFINITY;
+        
+        for (MeshFacet f: model.getFacets()) {
+            List<Double> distanceList = distances.get(f);
+            if (distanceList != null) {
+                minDistance = Math.min(minDistance, distanceList.parallelStream().mapToDouble(Double::doubleValue).min().getAsDouble());
+                maxDistance = Math.max(maxDistance, distanceList.parallelStream().mapToDouble(Double::doubleValue).max().getAsDouble());
+            }
+        }
+        
+        for (MeshFacet f: model.getFacets()) {
+            if (distances.containsKey(f)) {
+                renderMeshFacet(gl, f, distances.get(f), minDistance, maxDistance);
+            }
+        }
+    }
+    
+    /**
+     * Maps distances of mesh facet to colors and renders the taken heatmap.
+     * @param gl OpenGL context
+     * @param facet Mesh facet
+     * @param distancesList Distances in the mesh facet vertices
+     * @param minDistance Minimal distance threshold (smaller distances are cut-off)
+     * @param maxDistance Maxim distance threshold (bigger distances are cut-off)
+     */
+    public void renderMeshFacet(GL2 gl, MeshFacet facet, List<Double> distancesList, Double minDistance, Double maxDistance) {
+        gl.glBegin(GL2.GL_TRIANGLES); //vertices are rendered as triangles
+
+        // get the normal and tex coords indicies for face i
+        for (int v = 0; v < facet.getCornerTable().getSize(); v++) {
+            // render the normals
+            Vector3d norm = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getNormal();
+            if (norm != null) {
+                gl.glNormal3d(norm.x, norm.y, norm.z);
+            }
+            // render the vertices
+            Point3d vert = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getPosition();
+            //get color of vertex
+            Color c = getColor(distancesList.get(facet.getCornerTable().getRow(v).getVertexIndex()), minDistance, maxDistance);
+            gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, c.getComponents(null), 0);
+
+            gl.glVertex3d(vert.x, vert.y, vert.z);
+        }
+        gl.glEnd();
+        gl.glPopAttrib();
+    }
+    
+    private Color getColor(Double currentDistance, Double minDistance, Double maxDistance) {
+        double currentParameter = ((currentDistance - minDistance) / (maxDistance - minDistance));
+
+        float[] hsb1 = Color.RGBtoHSB(minColor.getRed(), minColor.getGreen(), minColor.getBlue(), null);
+        float h1 = hsb1[0];
+        float s1 = hsb1[1];
+        float b1 = hsb1[2];
+
+        float[] hsb2 = Color.RGBtoHSB(maxColor.getRed(), maxColor.getGreen(), maxColor.getBlue(), null);
+        float h2 = hsb2[0];
+        float s2 = hsb2[1];
+        float b2 = hsb2[2];
+
+        // determine clockwise and counter-clockwise distance between hues
+        float distCCW;
+        float distCW;
+
+        if (h1 >= h2) {
+            distCCW = h1 - h2;
+            distCW = 1 + h2 - h1;
+        } else {
+            distCCW = 1 + h1 - h2;
+            distCW = h2 - h1;
+        }
+
+        float hue;
+
+        if (distCW >= distCCW) {
+            hue = (float) (h1 + (distCW * currentParameter));
+        } else {
+            hue = (float) (h1 - (distCCW * currentParameter));
+        }
+
+        if (hue < 0) {
+            hue = 1 + hue;
+        }
+        if (hue > 1) {
+            hue = hue - 1;
+        }
+
+        float saturation = (float) ((1 - currentParameter) * s1 + currentParameter * s2);
+        float brightness = (float) ((1 - currentParameter) * b1 + currentParameter * b2);
+
+        return Color.getHSBColor(hue, saturation, brightness);
+    }
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/scene/Scene.java b/GUI/src/main/java/cz/fidentis/analyst/scene/Scene.java
new file mode 100644
index 0000000000000000000000000000000000000000..98174da8ef3f693d5a22f4dd20fa345e6d3d6d53
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/scene/Scene.java
@@ -0,0 +1,141 @@
+package cz.fidentis.analyst.scene;
+
+import cz.fidentis.analyst.face.HumanFace;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Abstract class for ...
+ * 
+ * @author Radek Oslejsek
+ */
+public class Scene {
+    
+    private final List<HumanFace> faces = new ArrayList<>();
+    private final List<DrawableFace> drawableFaces = new ArrayList<>();
+    private final List<DrawableFeaturePoints> drawableFeaturePoints = new ArrayList<>();
+    private final List<DrawablePlane> drawableSymmetryPlanes = new ArrayList<>();
+    
+    /**
+     * Constructor for single face analysis.
+     * 
+     * @param face Human face to be analyzed
+     * @throws IllegalArgumentException if the {@code face} is {@code null}
+     */
+    public Scene(HumanFace face) {
+        if (face == null) {
+            throw new IllegalArgumentException("face");
+        }
+
+        faces.add(face);
+        drawableFaces.add(new DrawableFace(face.getMeshModel()));
+        if (face.getFeaturePoints() != null) {
+            drawableFeaturePoints.add(new DrawableFeaturePoints(face.getFeaturePoints()));
+        } else {
+            drawableFeaturePoints.add(null);
+        }
+        drawableSymmetryPlanes.add(null);
+    }
+    
+    /**
+     * Constructor for one-to-one analysis.
+     * 
+     * @param primary Primary face to be analyzed
+     * @param primary Secondary face to be analyzed
+     * @throws IllegalArgumentException if some face is {@code null}
+     */
+    public Scene(HumanFace primary, HumanFace secondary) {
+        if (primary == null) {
+            throw new IllegalArgumentException("primary");
+        }
+        if (secondary == null) {
+            throw new IllegalArgumentException("secondary");
+        }
+        
+        faces.add(primary);
+        faces.add(secondary);
+        
+        drawableFaces.add(new DrawableFace(primary.getMeshModel()));
+        drawableFaces.add(new DrawableFace(secondary.getMeshModel()));
+        
+        if (primary.getFeaturePoints() != null) {
+            drawableFeaturePoints.add(new DrawableFeaturePoints(primary.getFeaturePoints()));
+        } else {
+            drawableFeaturePoints.add(null);
+        }
+        if (secondary.getFeaturePoints() != null) {
+            drawableFeaturePoints.add(new DrawableFeaturePoints(secondary.getFeaturePoints()));
+        } else {
+            drawableFeaturePoints.add(null);
+        }
+
+        drawableSymmetryPlanes.add(null);
+        drawableSymmetryPlanes.add(null);
+
+        drawableFaces.get(1).setColor(DrawableFace.SKIN_COLOR_SECONDARY); 
+    }
+    
+    /**
+     * Returns number of faces in the scene.
+     * @return number of faces in the scene
+     */
+    public int getNumFaces() {
+        return faces.size();
+    }
+    
+    /**
+     * Returns drawable face.
+     * 
+     * @param index Index of the face
+     * @return drawable face or {@code null}
+     */
+    public DrawableFace getDrawableFace(int index) {
+        return (index >= 0 && index < getNumFaces()) ? drawableFaces.get(index) : null;
+    }
+    
+    /**
+     * Returns drawable feature points.
+     * 
+     * @param index Index of the face
+     * @return drawable face or {@code null}
+     */
+    public DrawableFeaturePoints getDrawableFeaturePoints(int index) {
+        return (index >= 0 && index < getNumFaces()) ? drawableFeaturePoints.get(index) : null;
+    }
+    
+    /**
+     * Returns drawable symmetry plane.
+     * 
+     * @param index Index of the face
+     * @return drawable face or {@code null}
+     */
+    public DrawablePlane getDrawableSymmetryPlane(int index) {
+        return (index >= 0 && index < getNumFaces()) ? drawableSymmetryPlanes.get(index) : null;
+    }
+    
+    /**
+     * Sets the drawable symmetry plane.
+     * 
+     * @param index Index of the face
+     * @param sPlane New symmetry plane
+     */
+    public void setDrawableSymmetryPlane(int index, DrawablePlane sPlane) {
+        if (index >= 0 && index < getNumFaces() && sPlane != null) {
+            this.drawableSymmetryPlanes.set(index, sPlane);
+        }
+    }
+    
+    /**
+     * Returns all drawable objects.
+     * 
+     * @return all drawable objects.
+     */
+    public List<Drawable> getAllDrawables() {
+        List<Drawable> ret = new ArrayList<>();
+        ret.addAll(this.drawableFaces);
+        ret.addAll(this.drawableFeaturePoints);
+        ret.addAll(this.drawableSymmetryPlanes);
+        while (ret.remove(null)) {}
+        return ret;
+    }
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/SceneRenderer.java b/GUI/src/main/java/cz/fidentis/analyst/scene/SceneRenderer.java
similarity index 68%
rename from GUI/src/main/java/cz/fidentis/analyst/gui/scene/SceneRenderer.java
rename to GUI/src/main/java/cz/fidentis/analyst/scene/SceneRenderer.java
index e334a1dbc8fdc0b3e5d75b039dba21ffdac4ae7b..bb3f0b10ae80531042537fdef2e62c147295ffe9 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/gui/scene/SceneRenderer.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/scene/SceneRenderer.java
@@ -1,15 +1,14 @@
-package cz.fidentis.analyst.gui.scene;
+package cz.fidentis.analyst.scene;
 
 import com.jogamp.opengl.GL;
 import com.jogamp.opengl.GL2;
 import com.jogamp.opengl.glu.GLU;
-import com.jogamp.opengl.glu.GLUquadric;
-import cz.fidentis.analyst.feature.FeaturePoint;
 import cz.fidentis.analyst.mesh.core.MeshFacet;
 import java.awt.Color;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 import javax.vecmath.Point3d;
 import javax.vecmath.Point4f;
 import javax.vecmath.Vector3d;
@@ -109,45 +108,32 @@ public class SceneRenderer {
     /**
      * Renders drawable objects.
      */
-    public void renderScene(Camera camera, Collection<DrawableMesh> drawables) {
+    public void renderScene(Camera camera, Collection<Drawable> drawables) {
         clearScene();
-        showBackface((DrawableMesh)drawables.toArray()[0]);
-        setPosition(camera);
-        setMeshOrder(drawables);
         
-        gl.glShadeModel(GL2.GL_SMOOTH);
+        // light backface
+        gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_POSITION, new float[] {0f, 0f, -1f, 0f}, 0);
+        gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_DIFFUSE, Color.white.getComponents(null), 0);
+        
+        setPosition(camera);
+        List<DrawableFace> faces = getOrderedFaces(drawables);
         
-        for (DrawableMesh obj: drawables) {
-            gl.glPolygonMode(GL.GL_FRONT_AND_BACK, obj.getRenderMode());
-            setMaterial(obj);
-            gl.glPushMatrix();
-            setTransformation(obj);
-            for (MeshFacet facet: obj.getFacets()) {
-                renderFacet(facet);
+        for (Drawable obj: drawables) {
+            if (!(obj instanceof DrawableFace) && obj.isShown()) {
+                obj.render(gl);
             }
-            if (obj.isRenderFeaturePoints()) {
-                renderFeaturePoints(obj);
+        }
+        
+        for (DrawableFace obj: faces) {
+            if (obj.isShown()) {
+                //showBackface(obj);
+                obj.render(gl);
             }
-            gl.glPopMatrix();
         }
+        
         gl.glFlush();
     }
     
-    /**
-     * Adds backlight to show/hide backface based on info from DrawableMesh
-     * 
-     * @param face Face
-     */
-    private void showBackface(DrawableMesh face) {
-        float[] pos = {0f, 0f, -1f, 0f};
-        gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_POSITION, pos, 0);
-        if (face.isShowBackface()) {
-            gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_DIFFUSE, Color.white.getComponents(null), 0);
-        } else {
-            gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_DIFFUSE, Color.black.getComponents(null), 0);
-        }
-    }
-    
     /**
      * Sets model to proper position
      * 
@@ -168,44 +154,17 @@ public class SceneRenderer {
      * 
      * @param drawables List of meshes
      */
-    private void setMeshOrder(Collection<DrawableMesh> drawables) {
-        if (((DrawableMesh)drawables.toArray()[0]).getTransparency() != 1) {
-            Collections.reverse((ArrayList)drawables);
+    private List<DrawableFace> getOrderedFaces(Collection<Drawable> drawables) {
+        List<DrawableFace> faces = new ArrayList<>();
+        for (Drawable obj: drawables) {
+            if (obj instanceof DrawableFace) {
+                faces.add((DrawableFace) obj);
+            }
         }
-    }
-    
-    /**
-     * Sets up material
-     * 
-     * @param obj Model used to get material info
-     */
-    private void setMaterial(DrawableMesh obj) {
-        // set color
-        Color color = obj.getColor();
-        float[] rgba = {color.getRed() / 255f, color.getGreen() / 255f, 
-            color.getBlue() / 255f , obj.getTransparency()};
-        gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, rgba, 0);
-        // set color of highlights
-        color = obj.getHighlights();
-        float[] highlights = {color.getRed(), color.getGreen(), color.getBlue(), 1};
-        gl.glMaterialf(GL2.GL_FRONT_AND_BACK, GL2.GL_SHININESS, 50);  
-        gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_SPECULAR, highlights, 0);
-    }
-    
-    /**
-     * Sets up object transformation
-     * 
-     * @param obj Model used to get transformation info
-     */
-    private void setTransformation(DrawableMesh obj) {
-        // rotate
-        gl.glRotated(obj.getRotation().x, 1, 0, 0);
-        gl.glRotated(obj.getRotation().y, 0, 1, 0);
-        gl.glRotated(obj.getRotation().z, 0, 0, 1);
-        // move
-        gl.glTranslated(obj.getTranslation().x, obj.getTranslation().y, obj.getTranslation().z);
-        // scale
-        gl.glScaled(1 + obj.getScale().x, 1 + obj.getScale().y, 1 + obj.getScale().z);
+        if (faces.get(0).getTransparency() != 1) {
+            Collections.reverse(faces);
+        }
+        return faces;
     }
     
     /**
@@ -213,7 +172,8 @@ public class SceneRenderer {
      * 
      * @param obj Model used to get his feature points
      */
-    private void renderFeaturePoints(DrawableMesh obj) {
+    /*
+    private void renderFeaturePoints(DrawableFace obj) {
             for (int i = 0; i < obj.getFeaturePoints().size(); i++) {
                 Color color = obj.getFeaturePointsColor().get(i);
                 FeaturePoint point = obj.getFeaturePoints().get(i);
@@ -231,6 +191,7 @@ public class SceneRenderer {
                 gl.glPopMatrix();
             }
     }
+    */
     
     /**
      * Clears the scene and prepares it for the re-drawing.
diff --git a/GUI/src/main/java/cz/fidentis/analyst/symmetry/SymmetryAction.java b/GUI/src/main/java/cz/fidentis/analyst/symmetry/SymmetryAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..9bbcecc89fc9a1a4a09b92af9d7f42fc68540b11
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/symmetry/SymmetryAction.java
@@ -0,0 +1,72 @@
+package cz.fidentis.analyst.symmetry;
+
+import cz.fidentis.analyst.canvas.Canvas;
+import cz.fidentis.analyst.core.ControlPanelAction;
+import cz.fidentis.analyst.scene.DrawablePlane;
+import java.awt.event.ActionEvent;
+import javax.swing.JTabbedPane;
+import javax.swing.JToggleButton;
+
+/**
+ * Action listener for the manipulation with the symmetry plane.
+ * 
+ * @author Radek Oslejsek
+ */
+public class SymmetryAction extends ControlPanelAction {
+
+    /*
+     * Handled actions
+     */
+    public static final String ACTION_COMMAND_SHOW_HIDE_PLANE = "show-hide symmetry plane";
+    public static final String ACTION_COMMAND_RECOMPUTE = "recompute";
+    
+    private final SymmetryPanel controlPanel;
+
+    /**
+     * Constructor.
+     * 
+     * @param canvas OpenGL canvas
+     * @param topControlPanel Top component for placing control panels
+     */
+    public SymmetryAction(Canvas canvas, JTabbedPane topControlPanel) {
+        super(canvas, topControlPanel);
+        this.controlPanel = new SymmetryPanel(this);
+    }
+    
+    @Override
+    public void actionPerformed(ActionEvent ae) {
+        String action = ae.getActionCommand();
+        DrawablePlane plane;
+        
+        switch (action) {
+            case ACTION_COMMAND_SHOW_HIDE_PANEL:
+                hideShowPanelActionPerformed(ae, this.controlPanel);   
+                break;
+            case ACTION_COMMAND_SHOW_HIDE_PLANE:
+                plane = getCanvas().getScene().getDrawableSymmetryPlane(0);
+                if (plane == null) { // no plane compute so far
+                    break;
+                }
+                if (((JToggleButton) ae.getSource()).isSelected()) {
+                    plane.show();
+                } else {
+                    plane.hide();
+                }
+                break;
+            case ACTION_COMMAND_RECOMPUTE: 
+                recomputeSymmetryPlane();
+                break;  
+            default:
+                throw new UnsupportedOperationException(action);
+        }
+        renderScene();
+    }
+    
+    private void recomputeSymmetryPlane() {
+        SymmetryEstimator se = new SymmetryEstimator(controlPanel.getSymmetryConfig());
+        getPrimaryDrawableFace().getModel().compute(se);
+        DrawablePlane plane = new DrawablePlane(se.getSymmetryPlaneMesh(), se.getSymmetryPlane());
+        getCanvas().getScene().setDrawableSymmetryPlane(0, plane);
+    }
+    
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/symmetry/SymmetryPanel.java b/GUI/src/main/java/cz/fidentis/analyst/symmetry/SymmetryPanel.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c4331a1da8dc57f8956e0e95a5f1d1c2b116417
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/symmetry/SymmetryPanel.java
@@ -0,0 +1,290 @@
+package cz.fidentis.analyst.symmetry;
+
+import cz.fidentis.analyst.core.ControlPanel;
+import cz.fidentis.analyst.core.ControlPanelBuilder;
+import java.awt.event.ActionEvent;
+import java.util.List;
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JOptionPane;
+import javax.swing.JTextField;
+import javax.swing.JToggleButton;
+import org.openide.windows.WindowManager;
+
+/**
+ * Control panel for symmetry plane.
+ *
+ * @author Natalia Bebjakova
+ * @author Radek Oslejsek
+ */
+public final class SymmetryPanel extends ControlPanel {
+    
+    /*
+     * Mandatory design elements
+     */
+    public static final String ICON = "symmetry28x28.png";
+    public static final String NAME = "Symmetry";
+    
+    /*
+     * Configuration of panel-specific GUI elements
+     */
+    public static final int MAX_SIGNIFICANT_POINTS = 500;
+    
+    /*
+     * Computational state
+     */
+    private final SymmetryConfig config = new SymmetryConfig();
+    private final SymmetryConfig tempConfig = new SymmetryConfig();
+    
+    /*
+     * GUI primitives holding the configuration state:
+     */
+    private JTextField signPointsTF = null;
+    private JTextField minCurvatureTF = null;
+    private JTextField minAngleCosTF = null;
+    private JTextField minNormAngleCosTF = null;
+    private JTextField maxRelDistTF = null;
+    private final JCheckBox averaging;
+    private final JCheckBox showSymmetryPlane;
+    
+    /**    
+     * Constructor.
+     * 
+     * @param action Action listener
+     */
+    public SymmetryPanel(SymmetryAction action) {
+        this.setName(NAME);
+        
+        ControlPanelBuilder builder = new ControlPanelBuilder(this);
+        
+        builder.addCaptionLine("Computation options:");
+        builder.addLine();
+        
+        signPointsTF = builder.addSliderOptionLine(
+                (ActionEvent e) -> { 
+                    showSignPointsHelp(); 
+                }, 
+                "Significant points", 
+                MAX_SIGNIFICANT_POINTS, 
+                (ActionEvent e) -> { 
+                    tempConfig.setSignificantPointCount(ControlPanelBuilder.parseLocaleInt(signPointsTF)); 
+                }
+        );
+        builder.addLine();
+        
+        minCurvatureTF = builder.addSliderOptionLine(
+                (ActionEvent e) -> { 
+                    showMinCurvHelp();     
+                }, 
+                "Min. curvature ratio", 
+                -1, 
+                (ActionEvent e) -> { 
+                    tempConfig.setMinCurvRatio(ControlPanelBuilder.parseLocaleDouble(minCurvatureTF));
+                });
+        builder.addLine();
+        
+        minAngleCosTF = builder.addSliderOptionLine(
+                (ActionEvent e) -> { 
+                    showMinAngleCosHelp();
+                }, 
+                "Min. angle cosine", 
+                -1, 
+                (ActionEvent e) -> { 
+                    tempConfig.setMinAngleCos(ControlPanelBuilder.parseLocaleDouble(minAngleCosTF));
+                });
+        builder.addLine();
+        
+        minNormAngleCosTF = builder.addSliderOptionLine(
+                (ActionEvent e) -> { 
+                    showNormalAngleHelp();     
+                }, 
+                "Normal angle", 
+                -1, 
+                (ActionEvent e) -> { 
+                    tempConfig.setMinNormAngleCos(ControlPanelBuilder.parseLocaleDouble(minNormAngleCosTF));
+                });
+        builder.addLine();
+        
+        maxRelDistTF = builder.addSliderOptionLine(
+                (ActionEvent e) -> { 
+                    showRelDistHelp();     
+                }, 
+                "Relative distance", 
+                -1, 
+                (ActionEvent e) -> { 
+                    tempConfig.setMaxRelDistance(ControlPanelBuilder.parseLocaleDouble(maxRelDistTF));
+                });
+        builder.addLine();
+        
+        averaging = builder.addCheckBoxOptionLine(
+                (ActionEvent e) -> { 
+                    showAveragingHelp(); 
+                }, 
+                "Averaging", 
+                config.isAveraging(), 
+                (ActionEvent e) -> { 
+                    tempConfig.setAveraging(((JToggleButton) e.getSource()).isSelected());
+                });
+        builder.addLine();
+        
+        builder.addCaptionLine("Visualization options:");
+        builder.addLine();
+        
+        showSymmetryPlane = builder.addCheckBoxOptionLine(null, "Show symmetry plane", true, 
+                (ActionEvent e) -> {
+                    action.actionPerformed(new ActionEvent(
+                            e.getSource(), 
+                            ActionEvent.ACTION_PERFORMED, 
+                            SymmetryAction.ACTION_COMMAND_SHOW_HIDE_PLANE)
+                    ); 
+                });
+        builder.addLine();
+        
+        builder.addButtons(
+                List.of("Reset changes", 
+                        "Reset to defaults", 
+                        "(Re)compute"), 
+                List.of(
+                        (ActionEvent e) -> {
+                            setTempConfig(config);
+                        },
+                        (ActionEvent e) -> {
+                            setTempConfig(new SymmetryConfig());
+                        },
+                        (ActionEvent e) -> {
+                            config.copy(tempConfig); // confirm changes
+                            action.actionPerformed(new ActionEvent( // recompute
+                                    e.getSource(), 
+                                    ActionEvent.ACTION_PERFORMED, 
+                                    SymmetryAction.ACTION_COMMAND_RECOMPUTE)
+                            ); 
+                            action.actionPerformed(new ActionEvent( // and show or keep hidden
+                                    showSymmetryPlane,
+                                    ActionEvent.ACTION_PERFORMED,
+                                    SymmetryAction.ACTION_COMMAND_SHOW_HIDE_PLANE)
+                            );
+                        }
+                )
+        );
+        
+        setTempConfig(new SymmetryConfig()); // intialize values;
+    }
+    
+    /**
+     * Returns symmetry plane configuration
+     * @return symmetry plane configuration
+     */
+    public SymmetryConfig getSymmetryConfig() {
+        return this.config;
+    }
+    
+    @Override
+    public ImageIcon getIcon() {
+        return getStaticIcon();
+    }
+    
+    /**
+     * Static implementation of the {@link #getIcon()} method.
+     * 
+     * @return Control panel icon
+     */
+    public static ImageIcon getStaticIcon() {
+        return new ImageIcon(SymmetryPanel.class.getClassLoader().getResource("/" + ICON));
+    }
+    
+    private void setTempConfig(SymmetryConfig config) {
+        // update input fields
+        this.signPointsTF.setText(ControlPanelBuilder.intToStringLocale(config.getSignificantPointCount()));
+        this.minCurvatureTF.setText(ControlPanelBuilder.doubleToStringLocale(config.getMinCurvRatio()));
+        this.minAngleCosTF.setText(ControlPanelBuilder.doubleToStringLocale(config.getMinAngleCos()));
+        this.minNormAngleCosTF.setText(ControlPanelBuilder.doubleToStringLocale(config.getMinNormAngleCos()));
+        this.maxRelDistTF.setText(ControlPanelBuilder.doubleToStringLocale(config.getMaxRelDistance()));
+        this.averaging.setSelected(config.isAveraging());
+        
+        // fire changes (update sliders)
+        this.signPointsTF.postActionEvent();
+        this.minCurvatureTF.postActionEvent();
+        this.minAngleCosTF.postActionEvent();
+        this.minNormAngleCosTF.postActionEvent();
+        this.maxRelDistTF.postActionEvent();
+        
+        // update config
+        tempConfig.copy(config);
+    }
+    
+    private void showSignPointsHelp() {
+        JOptionPane.showMessageDialog(WindowManager.getDefault().findTopComponent("SingleFaceTab"),
+                "Entered number represents amount of points of the mesh that are taken into account" + System.lineSeparator()
+                        + "while counting the plane of approximate symmetry." + System.lineSeparator() 
+                        + System.lineSeparator()
+                        + "Higher number → longer calculation, possibly more accurate result." + System.lineSeparator()
+                        + "Lower number → shorter calculation, possibly less accurate result.", 
+                "Significant points",
+                0, 
+                new ImageIcon(getClass().getResource("/points.png"))
+        );
+                
+    }
+     
+    private void showMinAngleCosHelp() {
+        JOptionPane.showMessageDialog(WindowManager.getDefault().findTopComponent("SingleFaceTab"),
+                "Entered number represents how large the angle between normal vector of candidate plane and the vector" + System.lineSeparator()
+                        + "of two vertices can be to take into account these vertices while counting the approximate symmetry."  + System.lineSeparator()
+                        + System.lineSeparator()
+                        + "Higher number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result." + System.lineSeparator()
+                        + "Lower number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result.",
+                "Minimum angle",
+                0, 
+                new ImageIcon(getClass().getResource("/angle.png"))
+        );
+    }
+    
+    private void showNormalAngleHelp() {                                             
+        JOptionPane.showMessageDialog(WindowManager.getDefault().findTopComponent("SingleFaceTab"),
+                "Entered number represents how large the angle between normal vector of candidate plane and vector" + System.lineSeparator()
+                        + "from subtraction of normal vectors of two vertices can be to take into account these vertices while counting the approximate symmetry." + System.lineSeparator()
+                         + System.lineSeparator()
+                        + "Higher number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result." + System.lineSeparator()
+                        + "Lower number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result.",
+                "Minimum normal angle",
+                0, 
+                new ImageIcon(getClass().getResource("/angle.png"))
+        );
+    }   
+    
+    private void showMinCurvHelp() {                                         
+        JOptionPane.showMessageDialog(WindowManager.getDefault().findTopComponent("SingleFaceTab"),
+                "Entered number represents how similar the curvature in two vertices must be" + System.lineSeparator()
+                        + "to take into account these vertices while counting the plane of approximate symmetry." + System.lineSeparator()
+                        + "The higher the number is the more similar they must be." + System.lineSeparator()
+                        + System.lineSeparator()
+                        + "Higher number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result." + System.lineSeparator()
+                        + "Lower number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result.",
+                "Minimum curvature ratio",
+                0, 
+                new ImageIcon(getClass().getResource("/curvature.png"))
+        );
+    }                                        
+
+    private void showRelDistHelp() {
+        JOptionPane.showMessageDialog(WindowManager.getDefault().findTopComponent("SingleFaceTab"),
+                "Entered number represents how far middle point of two vertices can be from candidate plane of symmetry" + System.lineSeparator()
+                        + "to give this plane vote. Plane with highest number of votes is plane of approximate symmetry." + System.lineSeparator()
+                        + System.lineSeparator()
+                        + "Higher number → more pairs of vertices satisfy the criterion → longer calculation, possibly more accurate result." + System.lineSeparator()
+                        + "Lower number → fewer pairs of vertices satisfy the criterion → shorter calculation, possibly less accurate result.",
+                "Maximum relative distance from plane",
+                0, 
+                new ImageIcon(getClass().getResource("/distance.png"))
+        );
+    }
+    
+    private void showAveragingHelp() {
+        JOptionPane.showMessageDialog(WindowManager.getDefault().findTopComponent("SingleFaceTab"),
+                "TO DO",
+                "TO DO",
+                0, 
+                new ImageIcon(getClass().getResource("/distance.png"))
+        );
+    }
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/tests/BatchTests.java b/GUI/src/main/java/cz/fidentis/analyst/tests/BatchTests.java
index a8d4651ba229ce5127759e78e24efdc8d095e47c..f3d8f05dbcab2b02ca5a76ea90f5a8b95f7837dc 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/tests/BatchTests.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/tests/BatchTests.java
@@ -3,6 +3,7 @@ package cz.fidentis.analyst.tests;
 import cz.fidentis.analyst.BatchProcessor;
 import cz.fidentis.analyst.face.HumanFace;
 import cz.fidentis.analyst.face.HumanFaceFactory;
+import cz.fidentis.analyst.icp.NoUndersampling;
 import cz.fidentis.analyst.icp.RandomStrategy;
 import cz.fidentis.analyst.icp.UndersamplingStrategy;
 import cz.fidentis.analyst.kdtree.KdTree;
@@ -23,6 +24,7 @@ public class BatchTests {
     private static final String primaryFacePath = dataDir + "/average-boy-17-20/average_boy_17-20.obj";
     //private static final String primaryFacePath = dataDir + "/average-girl-17-20/average_girl_17-20.obj";
     //private static final String primaryFacePath = "../../analyst-data/basic-models/02.obj";
+    //private static final String primaryFacePath = dataDir + "/07/00007_01_ECA.obj";
     private static final String templateFacePath = dataDir + "template.obj";
     
     /**
@@ -59,8 +61,8 @@ public class BatchTests {
         printTimes(startTime, endTime, faceIDs.size());
         
         //////////////////////////////////////////////
-        //UndersamplingStrategy strategy = new NoUndersampling();
-        UndersamplingStrategy strategy = new RandomStrategy(0.5);
+        UndersamplingStrategy strategy = new NoUndersampling();
+        //UndersamplingStrategy strategy = new RandomStrategy(0.5);
         System.out.println();
         System.out.println("ICP registration with " + strategy + ":");
         startTime = System.currentTimeMillis();
diff --git a/GUI/src/main/java/cz/fidentis/analyst/tests/EfficiencyTests.java b/GUI/src/main/java/cz/fidentis/analyst/tests/EfficiencyTests.java
index e1c4e1a5c48fed5ab54f91b31f9291cbd7423e5b..a82edc684ce82a235f6d65c6bc444f66ca3addc1 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/tests/EfficiencyTests.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/tests/EfficiencyTests.java
@@ -3,6 +3,7 @@ package cz.fidentis.analyst.tests;
 import cz.fidentis.analyst.face.HumanFace;
 import cz.fidentis.analyst.kdtree.KdTree;
 import cz.fidentis.analyst.mesh.core.MeshFacet;
+import cz.fidentis.analyst.symmetry.CurvatureAlg;
 import cz.fidentis.analyst.symmetry.SymmetryConfig;
 import cz.fidentis.analyst.symmetry.Plane;
 import cz.fidentis.analyst.symmetry.SignificantPoints;
@@ -53,10 +54,10 @@ public class EfficiencyTests {
         //face1.getMeshModel().compute(new GaussianCurvature()); // initialize everything, then measure
         
         System.out.println("Symmetry plane calculation:");
-        printSymmetryPlane(face1, true, SignificantPoints.CurvatureAlg.MEAN);
-        printSymmetryPlane(face1, true, SignificantPoints.CurvatureAlg.GAUSSIAN);
-        printSymmetryPlane(face1, false, SignificantPoints.CurvatureAlg.MEAN);
-        printSymmetryPlane(face1, false, SignificantPoints.CurvatureAlg.GAUSSIAN);
+        //printSymmetryPlane(face1, true, CurvatureAlg.MEAN);
+        //printSymmetryPlane(face1, true, CurvatureAlg.GAUSSIAN);
+        //printSymmetryPlane(face1, false, CurvatureAlg.MEAN);
+        //printSymmetryPlane(face1, false, CurvatureAlg.GAUSSIAN);
         
         System.out.println();
         System.out.println(measureKdTreeCreation(face1) + "\tmsec:\tKd-tree creation of first face");
@@ -103,9 +104,9 @@ public class EfficiencyTests {
         return System.currentTimeMillis() - startTime;
     }
     
-    private static void printSymmetryPlane(HumanFace face, boolean concurrently, SignificantPoints.CurvatureAlg curvatureAlg) {
+    private static void printSymmetryPlane(HumanFace face, boolean concurrently) {
         long startTime = System.currentTimeMillis();
-        SymmetryEstimator est = new SymmetryEstimator(new SymmetryConfig(), curvatureAlg);
+        SymmetryEstimator est = new SymmetryEstimator(new SymmetryConfig());
         face.getMeshModel().compute(est, false);
         Plane plane = est.getSymmetryPlane(concurrently);
         long endTime =  System.currentTimeMillis();
@@ -114,7 +115,7 @@ public class EfficiencyTests {
                 (endTime-startTime) + 
                 "\tmsec: " + 
                 "\t" + (concurrently ? "concurrently" : "sequentially") +
-                "\t" + curvatureAlg + " curvature    " +
+//                "\t" + curvatureAlg + " curvature    " +
                 "\t" + plane.getNormal() + ", " + plane.getDistance()
         );
     }
diff --git a/GUI/src/main/java/cz/fidentis/analyst/tests/HeatMapsTestApp.java b/GUI/src/main/java/cz/fidentis/analyst/tests/HeatMapsTestApp.java
deleted file mode 100644
index f185a9102ebaa4c6ed83439f0b6c71b3aa71449b..0000000000000000000000000000000000000000
--- a/GUI/src/main/java/cz/fidentis/analyst/tests/HeatMapsTestApp.java
+++ /dev/null
@@ -1,386 +0,0 @@
-package cz.fidentis.analyst.tests;
-
-import com.jogamp.opengl.GL;
-import com.jogamp.opengl.GL2;
-import com.jogamp.opengl.GLAutoDrawable;
-import cz.fidentis.analyst.face.HumanFace;
-import cz.fidentis.analyst.gui.Canvas;
-import cz.fidentis.analyst.gui.GeneralGLEventListener;
-import cz.fidentis.analyst.gui.HistogramComponent;
-import cz.fidentis.analyst.mesh.core.MeshFacet;
-import cz.fidentis.analyst.mesh.core.MeshModel;
-import cz.fidentis.analyst.mesh.core.MeshPoint;
-import cz.fidentis.analyst.visitors.mesh.Curvature;
-import cz.fidentis.analyst.visitors.mesh.HausdorffDistance;
-import cz.fidentis.analyst.visitors.mesh.HausdorffDistance.Strategy;
-import org.openide.util.Exceptions;
-
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.vecmath.Point3d;
-import javax.vecmath.Vector3d;
-import java.awt.Color;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.io.File;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static com.jogamp.opengl.GL.GL_FRONT_AND_BACK;
-import static com.jogamp.opengl.GL.GL_VIEWPORT;
-import static com.jogamp.opengl.GL2GL3.GL_FILL;
-import static com.jogamp.opengl.GL2GL3.GL_LINE;
-import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_MODELVIEW_MATRIX;
-import static com.jogamp.opengl.fixedfunc.GLMatrixFunc.GL_PROJECTION_MATRIX;
-
-/**
- * Testing application displaying different heat maps in 3D.
- *
- * @author Daniel Sokol
- * @author Radek Oslejsek
- */
-public class HeatMapsTestApp extends GeneralGLEventListener {
-
-    private static final JFrame TEST_FRAME = new JFrame();
-    public final HistogramComponent histogram = new HistogramComponent();
-
-    private Map<MeshFacet, List<Double>> values;
-    private final Color minColor = Color.BLUE;
-    private final Color maxColor = Color.RED;
-
-
-    /**
-     * Constructor.
-     * @param canvas Canvas
-     */
-    public HeatMapsTestApp(Canvas canvas) {
-        super(canvas);
-    }
-
-    /**
-     * Main method
-     * @param args Input arguments
-     * @throws IOException on IO error
-     */
-    public static void main(String[] args) {
-        //Declaration
-        JButton gaussButton = new JButton("Show Gaussian curvature");
-        JButton meanButton = new JButton("Show mean curvature");
-        JButton maxButton = new JButton("Show maximum principal curvature");
-        JButton minButton = new JButton("Show minimum principal curvature");
-        JButton hdButton1 = new JButton("Show Hausdorff distance to average boy - p2p abosult");
-        JButton hdButton2 = new JButton("Show Hausdorff distance to average boy - p2p relative");
-
-        Canvas testCanvas = new Canvas();
-        HeatMapsTestApp colorListener = new HeatMapsTestApp(testCanvas);
-        testCanvas.setListener(colorListener);
-
-        gaussButton.addActionListener(e -> colorListener.computeGaussian());
-        meanButton.addActionListener(e -> colorListener.computeMean());
-        maxButton.addActionListener(e -> colorListener.computeMaxPrincipal());
-        minButton.addActionListener(e -> colorListener.computeMinPrincipal());
-        hdButton1.addActionListener(e -> colorListener.computeHausdorffDistanceP2pAbs());
-        hdButton2.addActionListener(e -> colorListener.computeHausdorffDistanceP2pRel());
-
-        TEST_FRAME.setLayout(new GridBagLayout());
-        TEST_FRAME.setVisible(true);
-        //TEST_FRAME.setSize(1920, 1080);
-        TEST_FRAME.setExtendedState(JFrame.MAXIMIZED_BOTH);
-
-        // Adding
-        GridBagConstraints c = new GridBagConstraints();
-        c.fill = GridBagConstraints.BOTH;
-        c.gridx = 0;
-        c.gridy = 0;
-        c.weighty = 1;
-        c.weightx = 1;
-
-        c.gridheight = 8;
-        c.gridwidth = 4;
-        c.weightx = 4;
-        TEST_FRAME.add(testCanvas, c);
-        c.gridheight = 1;
-        c.gridwidth = 2;
-        c.gridx = 4;
-        c.weightx = 2;
-        c.gridy = 1;
-        TEST_FRAME.add(colorListener.histogram,c);
-        c.weightx = 1;
-        c.gridwidth = 1;
-        c.gridy++;
-        TEST_FRAME.add(gaussButton, c);
-        c.gridx++;
-        TEST_FRAME.add(meanButton, c);
-        c.gridy++;
-        c.gridx--;
-        TEST_FRAME.add(maxButton, c);
-        c.gridx++;
-        TEST_FRAME.add(minButton, c);
-        c.gridy++;
-        c.gridx--;
-        TEST_FRAME.add(hdButton1, c);
-        c.gridx++;
-        TEST_FRAME.add(hdButton2, c);
-
-    }
-
-    @Override
-    public void setModel(MeshModel model) {
-        super.setModel(model);
-
-        System.err.println();
-        System.err.println("MODEL: " + getModel());
-
-        Set<Point3d> unique = new HashSet<>();
-        for (MeshPoint p: getModel().getFacets().get(0).getVertices()) {
-            unique.add(p.getPosition());
-        }
-        System.out.println("UNIQUE VERTICES: " + unique.size());
-        /*
-        for (Vector3d v: unique2) {
-            for (MeshPoint p: uniqueVerts) {
-                if (v.equals(p.getPosition())) {
-                    System.out.println(p);
-                }
-            }
-            System.out.println("----------------");
-        }
-        */
-    }
-
-    /**
-     * Computes curvature
-     */
-    public void computeGaussian() {
-        if (this.getModel() == null) {
-            return;
-        }
-
-        long startTime = System.currentTimeMillis();
-        Curvature vis = new Curvature();
-        this.getModel().compute(vis);
-        values = vis.getGaussianCurvatures();
-        long duration =  System.currentTimeMillis() - startTime;
-        System.err.println(duration + "\tmsec: Gaussian curvature");
-
-        histogram.setValues(values);
-    }
-
-    /**
-     * Computes curvature
-     */
-    public void computeMean() {
-        if (this.getModel() == null) {
-            return;
-        }
-
-        long startTime = System.currentTimeMillis();
-        Curvature vis = new Curvature();
-        this.getModel().compute(vis);
-        values = vis.getMeanCurvatures();
-        long duration =  System.currentTimeMillis() - startTime;
-        System.err.println(duration + "\tmsec: Mean curvature");
-
-        histogram.setValues(values);
-    }
-
-    /**
-     * Computes curvature
-     */
-    public void computeMinPrincipal() {
-        if (this.getModel() == null) {
-            return;
-        }
-
-        long startTime = System.currentTimeMillis();
-        Curvature vis = new Curvature();
-        this.getModel().compute(vis);
-        values = vis.getMinPrincipalCurvatures();
-        long duration =  System.currentTimeMillis() - startTime;
-        System.err.println(duration + "\tmsec: Minimum principal curvature");
-
-        histogram.setValues(values);
-    }
-
-    /**
-     * Computes curvature
-     */
-    public void computeMaxPrincipal() {
-        if (this.getModel() == null) {
-            return;
-        }
-
-        long startTime = System.currentTimeMillis();
-        Curvature vis = new Curvature();
-        this.getModel().compute(vis);
-        values = vis.getMaxPrincipalCurvatures();
-        long duration =  System.currentTimeMillis() - startTime;
-        System.err.println(duration + "\tmsec: Maximum principal curvature");
-        histogram.setValues(values);
-    }
-
-    /**
-     * Computes absolute HD
-     */
-    public void computeHausdorffDistanceP2pAbs() {
-        if (this.getModel() == null) {
-            return;
-        }
-        try {
-            HumanFace boy = new HumanFace(new File("src/test/resources/cz/fidentis/analyst/average_boy_17-20.obj"));
-            long startTime = System.currentTimeMillis();
-            HausdorffDistance vis = new HausdorffDistance(boy.getMeshModel(), Strategy.POINT_TO_POINT, false, true);
-            this.getModel().compute(vis);
-            values = vis.getDistances();
-            long duration =  System.currentTimeMillis() - startTime;
-            System.err.println(duration + "\tmsec: Hausdorff distance " + vis.getStrategy() + " " + (vis.relativeDistance() ? "RELATIVE" : "ABSOLUTE"));
-        } catch (IOException ex) {
-            Exceptions.printStackTrace(ex);
-        }
-        histogram.setValues(values);
-    }
-
-    /**
-     * Computes relative HD
-     */
-    public void computeHausdorffDistanceP2pRel() {
-        if (this.getModel() == null) {
-            return;
-        }
-        try {
-            HumanFace boy = new HumanFace(new File("src/test/resources/cz/fidentis/analyst/average_boy_17-20.obj"));
-            long startTime = System.currentTimeMillis();
-            HausdorffDistance vis = new HausdorffDistance(boy.getMeshModel(), Strategy.POINT_TO_POINT, true, true);
-            this.getModel().compute(vis);
-            values = vis.getDistances();
-            long duration =  System.currentTimeMillis() - startTime;
-            System.err.println(duration + "\tmsec: Hausdorff distance " + vis.getStrategy() + " " + (vis.relativeDistance() ? "RELATIVE" : "ABSOLUTE"));
-        } catch (IOException ex) {
-            Exceptions.printStackTrace(ex);
-        }
-        List<Double> distanceList = values.get(getModel().getFacets().get(0));
-        histogram.setValues(values);
-    }
-
-    @Override
-    public void display(GLAutoDrawable glad) {
-        wireModel = glCanvas.getDrawWired(); // is wire-frame or not
-
-        if (whiteBackround) {
-            gl.glClearColor(0.9f, 0.9f, 0.9f, 0);
-        } else {
-            gl.glClearColor(0.25f, 0.25f, 0.25f, 0);
-        }
-        // background for GLCanvas
-        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
-        gl.glLoadIdentity();
-
-        // sets model to proper position
-        glu.gluLookAt(xCameraPosition, yCameraPosition, zCameraPosition, xCenter, yCenter, zCenter, xUpPosition, yUpPosition, zUpPosition);
-
-        gl.glShadeModel(GL2.GL_SMOOTH);
-        gl.glGetIntegerv(GL_VIEWPORT, viewport, 0);
-        gl.glGetFloatv(GL_MODELVIEW_MATRIX, modelViewMatrix, 0);
-        gl.glGetFloatv(GL_PROJECTION_MATRIX, projectionMatrix, 0);
-
-        //if there is any model, draw
-        if (values != null) {
-            drawHeatmap(this.getModel());
-        } else if (getModel() != null) {
-            if (wireModel) {
-                gl.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); //drawn as wire-frame
-            } else {
-                gl.glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // drawn as full traingles
-            }
-
-            drawWithoutTextures(getModel());
-        }
-
-        gl.glFlush();
-    }
-
-    protected void drawHeatmap(MeshModel model) {
-        for (int i = 0; i < model.getFacets().size(); i++) {
-            renderFaceWithHeatmap(model.getFacets().get(i), histogram.getValues().get(model.getFacets().get(i)), histogram.getMinValue(), histogram.getMaxValue());
-        }
-    }
-
-    protected void renderFaceWithHeatmap(MeshFacet facet, List<Double> distancesList, Double minDistance, Double maxDistance) {
-        gl.glBegin(GL2.GL_TRIANGLES); //vertices are rendered as triangles
-
-        // get the normal and tex coords indicies for face i
-        for (int v = 0; v < facet.getCornerTable().getSize(); v++) {
-            // render the normals
-            Vector3d norm = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getNormal();
-            if (norm != null) {
-                gl.glNormal3d(norm.x, norm.y, norm.z);
-            }
-            // render the vertices
-            Point3d vert = facet.getVertices().get(facet.getCornerTable().getRow(v).getVertexIndex()).getPosition();
-            //get color of vertex
-            Color c = getColor(distancesList.get(facet.getCornerTable().getRow(v).getVertexIndex()), minDistance, maxDistance);
-            gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, c.getComponents(null), 0);
-
-            gl.glVertex3d(vert.x, vert.y, vert.z);
-        }
-        gl.glEnd();
-        gl.glPopAttrib();
-    }
-
-    protected Color getColor(Double currentDistance, Double minDistance, Double maxDistance) {
-        double currentParameter = ((currentDistance - minDistance) / (maxDistance - minDistance));
-
-        if (currentDistance > maxDistance) {
-            currentParameter = 1.0;
-        } else if (currentDistance < minDistance || (maxDistance - minDistance) == 0) {
-            currentParameter = 0.0;
-        }
-
-        float[] hsb1 = Color.RGBtoHSB(minColor.getRed(), minColor.getGreen(), minColor.getBlue(), null);
-        double h1 = hsb1[0];
-        double s1 = hsb1[1];
-        double b1 = hsb1[2];
-
-        float[] hsb2 = Color.RGBtoHSB(maxColor.getRed(), maxColor.getGreen(), maxColor.getBlue(), null);
-        double h2 = hsb2[0];
-        double s2 = hsb2[1];
-        double b2 = hsb2[2];
-
-        // determine clockwise and counter-clockwise distance between hues
-        double distCCW;
-        double distCW;
-
-        if (h1 >= h2) {
-            distCCW = h1 - h2;
-            distCW = 1 + h2 - h1;
-        } else {
-            distCCW = 1 + h1 - h2;
-            distCW = h2 - h1;
-        }
-
-        double hue;
-
-        if (distCW >= distCCW) {
-            hue = h1 + (distCW * currentParameter);
-        } else {
-            hue = h1 - (distCCW * currentParameter);
-        }
-
-        if (hue < 0) {
-            hue = 1 + hue;
-        }
-        if (hue > 1) {
-            hue = hue - 1;
-        }
-
-        double saturation = (1 - currentParameter) * s1 + currentParameter * s2;
-        double brightness = (1 - currentParameter) * b1 + currentParameter * b2;
-
-        //System.out.println("AAA " + hue);
-
-        return Color.getHSBColor((float)hue, (float)saturation, (float)brightness);
-    }
-}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/tests/ICPTest.java b/GUI/src/main/java/cz/fidentis/analyst/tests/ICPTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..794fee3c67a4369aa090c9d7e0b7cc30fc323edc
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/tests/ICPTest.java
@@ -0,0 +1,76 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package cz.fidentis.analyst.tests;
+
+import cz.fidentis.analyst.face.HumanFace;
+import cz.fidentis.analyst.icp.IcpTransformer;
+import cz.fidentis.analyst.icp.NoUndersampling;
+import cz.fidentis.analyst.kdtree.KdTree;
+import cz.fidentis.analyst.mesh.core.MeshFacet;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author oslejsek
+ */
+public class ICPTest {
+    
+    private static final String dataDir = "../../analyst-data/multi-scan-models-anonymized-fixed/";
+    
+    private static String[] faceFiles = new String[] {
+        dataDir + "02/00002_01_ECA.obj",
+        dataDir + "04/00004_01_ECA.obj",
+        dataDir + "06/00006_01_ECA.obj",
+        dataDir + "07/00007_01_ECA.obj",
+        dataDir + "10/00010_01_ECA.obj"
+    };
+    
+    private static int tests = 0;
+    private static int iters = 0;
+    
+    public static void main(String[] args) throws IOException {
+        long time = 0;
+        for (int i = 0; i < faceFiles.length; i++) {
+            time += test(i);
+        }
+        System.out.println("tests: " + tests);
+        System.out.println("iters: " + iters);
+        System.out.println("time: " + time + " ms");
+        System.out.println("AVG iters: " + ((double)iters/tests));
+        System.out.println("AVG time: " + ((double)time/tests) + " ms");
+    }
+    
+    public static long test(int index) throws IOException {
+        List<HumanFace> faces = new ArrayList<>();
+        for (int i = 0; i < faceFiles.length; i++) {
+            faces.add(new HumanFace(new File(faceFiles[i])));
+        }
+        HumanFace prim = faces.remove(index);
+        KdTree primKdTree = prim.computeKdTree(true);
+        
+        
+        System.out.println();
+        System.out.println(prim.getId());            
+        long startTime = System.currentTimeMillis();
+        for (HumanFace sec: faces) {
+            tests++;
+            IcpTransformer icpTransformer = new IcpTransformer(primKdTree, 10, false, 0.05, new NoUndersampling());
+            System.out.println(sec.getId());
+            sec.getMeshModel().compute(icpTransformer);
+            
+            for (MeshFacet f: icpTransformer.getTransformations().keySet()) {
+                //System.out.println("AAA"+icpTransformer.getTransformations().get(f).size());
+                iters += icpTransformer.getTransformations().get(f).size();
+            }
+        }
+        long endTime = System.currentTimeMillis();
+        
+        return endTime - startTime;
+    }
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/toolbar/FaceToFaceToolBar.java b/GUI/src/main/java/cz/fidentis/analyst/toolbar/FaceToFaceToolBar.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb743d5d00cc4651c24915c4091256b350a7c0f9
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/toolbar/FaceToFaceToolBar.java
@@ -0,0 +1,51 @@
+package cz.fidentis.analyst.toolbar;
+
+import cz.fidentis.analyst.canvas.Canvas;
+import cz.fidentis.analyst.distance.DistanceAction;
+import cz.fidentis.analyst.distance.DistancePanel;
+import cz.fidentis.analyst.registration.RegistrationAction;
+import cz.fidentis.analyst.registration.RegistrationPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.JToggleButton;
+import org.openide.util.NbBundle;
+
+/**
+ * A toolbar extension for the analysis of two faces.
+ * 
+ * @author Radek Oslejsek
+ */
+public class FaceToFaceToolBar extends RenderingToolBar {
+    
+    /**
+     * Constructor.
+     * 
+     * @param canvas Rendering canvas
+     * @param controlPanel The top component control panels
+     */
+    public FaceToFaceToolBar(Canvas canvas, JTabbedPane controlPanel) {
+        super(canvas);
+        addPrimaryFaceButton();
+        addSecondaryFaceButton();
+        addSeparator();
+        addDistanceButton(controlPanel);
+        addRegistrationButton(controlPanel);
+    }
+    
+    private void addDistanceButton(JTabbedPane controlPanel) {
+        JToggleButton button = new JToggleButton();
+        button.addActionListener(new DistanceAction(getCanvas(), controlPanel));
+        button.setActionCommand(DistanceAction.ACTION_COMMAND_SHOW_HIDE_PANEL);
+        button.setIcon(DistancePanel.getStaticIcon());
+        button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "FaceToFaceToolBar.distance.text"));
+        add(button);
+    }
+    
+    private void addRegistrationButton(JTabbedPane controlPanel) {
+        JToggleButton button = new JToggleButton();
+        button.addActionListener(new RegistrationAction(getCanvas(), controlPanel));
+        button.setActionCommand(RegistrationAction.ACTION_COMMAND_SHOW_HIDE_PANEL);
+        button.setIcon(RegistrationPanel.getStaticIcon());
+        button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "FaceToFaceToolBar.registration.text"));
+        add(button);
+    }
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/toolbar/RenderingModeAction.java b/GUI/src/main/java/cz/fidentis/analyst/toolbar/RenderingModeAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..755636f4f9ce7829de421164809cc96e767dec01
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/toolbar/RenderingModeAction.java
@@ -0,0 +1,116 @@
+package cz.fidentis.analyst.toolbar;
+
+import com.jogamp.opengl.GL2;
+import cz.fidentis.analyst.canvas.Canvas;
+import static cz.fidentis.analyst.toolbar.RenderingToolBar.REFLECTIONS_COLOR;
+import cz.fidentis.analyst.scene.Drawable;
+import cz.fidentis.analyst.scene.DrawableFeaturePoints;
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import javax.swing.AbstractAction;
+import javax.swing.JToggleButton;
+
+/**
+ * Action listener for changing OpenGL canvas rendering modes.
+ * 
+ * @author Radek Oslejsek
+ */
+public class RenderingModeAction extends AbstractAction {
+    
+    public static final String ACTION_COMMAND_SMOOTH_MODE = "smooth";
+    public static final String ACTION_COMMAND_WIREFRAME_MODE = "wireframe";
+    public static final String ACTION_COMMAND_POINT_CLOUD_MODE = "point cloud";
+    public static final String ACTION_COMMAND_BACKGROUND_CHANGE = "background";
+    public static final String ACTION_COMMAND_REFLECTIONS_ON_OFF = "reflections";
+    public static final String ACTION_COMMAND_SHOW_HIDE_PRIMARY_FACE = "primary face";
+    public static final String ACTION_COMMAND_SHOW_HIDE_SECONDARY_FACES = "secondary faces";
+    public static final String ACTION_COMMAND_SHOW_HIDE_FEATURE_POINTS = "feature points";
+    
+    
+    private final Canvas canvas;
+    private boolean showFPs = true;
+    
+    /**
+     * Constructor.
+     * @param canvas OpenGL canvas
+     */
+    public RenderingModeAction(Canvas canvas) {
+        this.canvas = canvas;
+    }
+    
+    @Override
+    public void actionPerformed(ActionEvent ae) {
+        String action = ae.getActionCommand();
+        switch (action) {
+            case ACTION_COMMAND_SMOOTH_MODE:
+                for (int i = 0; i < canvas.getScene().getNumFaces(); i++){
+                   canvas.getScene().getDrawableFace(i).setRenderMode(GL2.GL_FILL);
+                }
+                break;
+            case ACTION_COMMAND_WIREFRAME_MODE:
+                for (int i = 0; i < canvas.getScene().getNumFaces(); i++){
+                   canvas.getScene().getDrawableFace(i).setRenderMode(GL2.GL_LINE);
+                }
+                break;
+            case ACTION_COMMAND_POINT_CLOUD_MODE:
+                for (int i = 0; i < canvas.getScene().getNumFaces(); i++){
+                   canvas.getScene().getDrawableFace(i).setRenderMode(GL2.GL_POINT);
+                }
+                break;
+            case ACTION_COMMAND_BACKGROUND_CHANGE:
+                if (((JToggleButton) ae.getSource()).isSelected()) {
+                    canvas.getSceneRenderer().setBrightBackground();
+                } else {
+                    canvas.getSceneRenderer().setDarkBackground();
+                }
+                break;
+            case ACTION_COMMAND_REFLECTIONS_ON_OFF:
+                for (Drawable dm: canvas.getScene().getAllDrawables()) {
+                    if (((JToggleButton) ae.getSource()).isSelected()) {
+                        dm.setHighlights(REFLECTIONS_COLOR);
+                    } else {
+                        dm.setHighlights(Color.BLACK);
+                    }
+                }
+                break;
+            case ACTION_COMMAND_SHOW_HIDE_PRIMARY_FACE:
+                showHideFace(0, ((JToggleButton) ae.getSource()).isSelected());
+                break;
+            case ACTION_COMMAND_SHOW_HIDE_SECONDARY_FACES:
+                for (int i = 1; i < canvas.getScene().getNumFaces(); i++) {
+                    showHideFace(i, ((JToggleButton) ae.getSource()).isSelected());
+                }
+                break;
+            case ACTION_COMMAND_SHOW_HIDE_FEATURE_POINTS:
+                for (int i = 0; i < canvas.getScene().getNumFaces(); i++) {
+                    DrawableFeaturePoints fp = canvas.getScene().getDrawableFeaturePoints(i);
+                    if (((JToggleButton) ae.getSource()).isSelected()) { // show
+                        if (canvas.getScene().getDrawableFace(i).isShown() && fp != null) {
+                            fp.show();
+                        }
+                    } else if (fp != null) { // hide
+                        fp.hide();
+                    }
+                }
+                break;
+            default:
+                throw new UnsupportedOperationException(action);
+        }
+        canvas.renderScene();
+    }
+    
+    private void showHideFace(int i, boolean show) {
+        DrawableFeaturePoints fp = canvas.getScene().getDrawableFeaturePoints(i);
+        if (show) {
+            canvas.getScene().getDrawableFace(i).show();
+            if (showFPs) {
+                fp.show();
+            }
+        } else { //hide
+            canvas.getScene().getDrawableFace(i).hide();
+            if (fp != null) {
+                fp.hide();
+            }
+        }
+    }
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/toolbar/RenderingToolBar.java b/GUI/src/main/java/cz/fidentis/analyst/toolbar/RenderingToolBar.java
new file mode 100644
index 0000000000000000000000000000000000000000..3d8464133ce5bc2d9472f960efecf3462fca2d9a
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/toolbar/RenderingToolBar.java
@@ -0,0 +1,159 @@
+package cz.fidentis.analyst.toolbar;
+
+import cz.fidentis.analyst.canvas.Canvas;
+import java.awt.Color;
+import java.awt.GridLayout;
+import java.awt.image.BufferedImage;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.JToggleButton;
+import javax.swing.JToolBar;
+import org.openide.awt.DropDownButtonFactory;
+import org.openide.util.NbBundle;
+
+/**
+ * Generic rendering toolbar with common tools.
+ * 
+ * @author Radek Oslejsek
+ */
+public class RenderingToolBar extends JToolBar {
+    
+    public static final int WIDTH = 58;
+    public static final Color REFLECTIONS_COLOR = Color.DARK_GRAY;
+    
+    public static final String RENDERING_MODE_BUTTON_ICON = "wireframe28x28.png";
+    public static final String BACKGROUND_BUTTON_ICON = "background28x28.png";
+    public static final String REFLECTIONS_BUTTON_ICON = "reflections28x28.png";
+    public static final String SMOOT_BUTTON_ICON = "smooth-tri28x28.png";
+    public static final String WIREFRAME_BUTTON_ICON = "wireframe-tri28x28.png";
+    public static final String POINTS_BUTTON_ICON = "points-tri28x28.png";
+    public static final String PRIMARY_FACE_BUTTON_ICON = "primaryFace28x28.png";
+    public static final String SECONDARY_FACE_BUTTON_ICON = "secondaryFace28x28.png";
+    public static final String FEATURE_POINTS_BUTTON_ICON = "fps28x28.png";
+        
+    private final Canvas canvas;
+    
+    /**
+     * Constructor.
+     * @param canvas Rendering canvas
+     */
+    public RenderingToolBar(Canvas canvas) {
+        this.canvas = canvas;
+        initToolBar();
+        addRenderingModeButton();
+        addBackgroundButton();
+        addReflectionsButton();
+        addFeaturePointsButton();
+    }
+    
+    protected Canvas getCanvas() {
+        return canvas;
+    }
+    
+    private void initToolBar() {
+        setOrientation(javax.swing.SwingConstants.VERTICAL);
+        setRollover(true);
+        setFloatable(false);
+    }
+    
+    private void addRenderingModeButton() {
+        JPopupMenu popup = new JPopupMenu();
+        
+        JMenuItem menuItem1 = new JMenuItem(new RenderingModeAction(canvas));
+        JMenuItem menuItem2 = new JMenuItem(new RenderingModeAction(canvas));
+        JMenuItem menuItem3 = new JMenuItem(new RenderingModeAction(canvas));
+        
+        menuItem1.setActionCommand(RenderingModeAction.ACTION_COMMAND_SMOOTH_MODE);
+        menuItem2.setActionCommand(RenderingModeAction.ACTION_COMMAND_WIREFRAME_MODE);
+        menuItem3.setActionCommand(RenderingModeAction.ACTION_COMMAND_POINT_CLOUD_MODE);
+        
+        menuItem1.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.SMOOT_BUTTON_ICON)));
+        menuItem2.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.WIREFRAME_BUTTON_ICON)));
+        menuItem3.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.POINTS_BUTTON_ICON)));
+
+        menuItem1.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.smooth.text"));
+        menuItem2.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.wireframe.text"));
+        menuItem3.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.pointcloud.text"));
+        
+        popup.add(menuItem1);
+        popup.add(menuItem2);
+        popup.add(menuItem3);
+        
+        popup.setLayout(new GridLayout(1,0));
+
+        // The button that will display the default action and the
+        // dropdown arrow
+        JButton button = DropDownButtonFactory.createDropDownButton(
+                new ImageIcon(new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB)), 
+                popup);
+        
+        button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.RENDERING_MODE_BUTTON_ICON)));
+        
+        //Mnemonics.setLocalizedText(button, NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.renderingmode.text"));
+        button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.renderingmode.text"));
+        button.setFocusable(false);
+        //button.setText(null);
+        add(button);
+    }
+    
+    private void addBackgroundButton() {
+        JToggleButton button = new JToggleButton();
+        button.addActionListener(new RenderingModeAction(canvas));
+        button.setActionCommand(RenderingModeAction.ACTION_COMMAND_BACKGROUND_CHANGE);
+        //button.setAction(new BackgroundAction(canvas));
+        button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.BACKGROUND_BUTTON_ICON)));
+        //Mnemonics.setLocalizedText(button, NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.background.text"));
+        button.setFocusable(false);
+       // button.setText(null);
+        button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.background.text"));
+        add(button);
+    }
+    
+    private void addReflectionsButton() {
+        JToggleButton button = new JToggleButton();
+        button.addActionListener(new RenderingModeAction(canvas));
+        button.setActionCommand(RenderingModeAction.ACTION_COMMAND_REFLECTIONS_ON_OFF);
+        button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.REFLECTIONS_BUTTON_ICON)));
+        button.setFocusable(false);
+        button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.reflections.text"));
+        add(button);
+    }
+ 
+    protected void addPrimaryFaceButton() {
+        JToggleButton button = new JToggleButton();
+        button.addActionListener(new RenderingModeAction(canvas));
+        button.setActionCommand(RenderingModeAction.ACTION_COMMAND_SHOW_HIDE_PRIMARY_FACE);
+        button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.PRIMARY_FACE_BUTTON_ICON)));
+        button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.primaryface.text"));
+        //button.setText("P");
+        button.setSelected(true);
+        button.setFocusable(false);
+        add(button);
+    }
+
+    protected void addSecondaryFaceButton() {
+        JToggleButton button = new JToggleButton();
+        button.addActionListener(new RenderingModeAction(canvas));
+        button.setActionCommand(RenderingModeAction.ACTION_COMMAND_SHOW_HIDE_SECONDARY_FACES);
+        button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.SECONDARY_FACE_BUTTON_ICON)));
+        button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.secondaryfaces.text"));
+        //button.setText("S");
+        button.setSelected(true);
+        button.setFocusable(false);
+        add(button);
+    }
+    
+    protected void addFeaturePointsButton() {
+        JToggleButton button = new JToggleButton();
+        button.addActionListener(new RenderingModeAction(canvas));
+        button.setActionCommand(RenderingModeAction.ACTION_COMMAND_SHOW_HIDE_FEATURE_POINTS);
+        button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.FEATURE_POINTS_BUTTON_ICON)));
+        button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.featurepoints.text"));
+        //button.setText("FPs");
+        button.setSelected(true);
+        button.setFocusable(false);
+        add(button);
+    }
+}
diff --git a/GUI/src/main/java/cz/fidentis/analyst/toolbar/SingleFaceToolBar.java b/GUI/src/main/java/cz/fidentis/analyst/toolbar/SingleFaceToolBar.java
new file mode 100644
index 0000000000000000000000000000000000000000..aaa3436a1cf2fc21749c3f97a00314dd5c396d3a
--- /dev/null
+++ b/GUI/src/main/java/cz/fidentis/analyst/toolbar/SingleFaceToolBar.java
@@ -0,0 +1,50 @@
+package cz.fidentis.analyst.toolbar;
+
+import cz.fidentis.analyst.symmetry.SymmetryAction;
+import cz.fidentis.analyst.canvas.Canvas;
+import cz.fidentis.analyst.curvature.CurvatureAction;
+import cz.fidentis.analyst.curvature.CurvaturePanel;
+import cz.fidentis.analyst.symmetry.SymmetryPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.JToggleButton;
+import org.openide.util.NbBundle;
+
+/**
+ * A toolbar extension for a single face analysis.
+ * 
+ * @author Radek Oslejsek
+ */
+public class SingleFaceToolBar extends RenderingToolBar {
+    
+    /**
+     * Constructor.
+     * 
+     * @param canvas Rendering canvas
+     * @param controlPanel The top component control panels
+     */
+    public SingleFaceToolBar(Canvas canvas, JTabbedPane controlPanel) {
+        super(canvas);
+        addPrimaryFaceButton();
+        addSeparator();
+        addSymmetryPlaneButton(controlPanel);
+        addCurvatureButton(controlPanel);
+    }
+    
+    private void addSymmetryPlaneButton(JTabbedPane controlPanel) {
+        JToggleButton button = new JToggleButton();
+        button.addActionListener(new SymmetryAction(getCanvas(), controlPanel));
+        button.setActionCommand(SymmetryAction.ACTION_COMMAND_SHOW_HIDE_PANEL);
+        button.setIcon(SymmetryPanel.getStaticIcon());
+        button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "SingleFaceToolBar.symmetry.text"));
+        add(button);
+    }
+    
+    private void addCurvatureButton(JTabbedPane topControlPanel) {
+        JToggleButton button = new JToggleButton();
+        button.addActionListener(new CurvatureAction(getCanvas(), topControlPanel));
+        button.setActionCommand(CurvatureAction.ACTION_COMMAND_SHOW_HIDE_PANEL);
+        button.setIcon(CurvaturePanel.getStaticIcon());
+        button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "SingleFaceToolBar.curvature.text"));
+        add(button);
+    }
+}
diff --git a/GUI/src/main/nbm/manifest.mf b/GUI/src/main/nbm/manifest.mf
index 1ecced8c8ac2d3294d5d12c1f6e499b26ff49456..cc2b72af9a038822de616d30687f90023e9bf397 100644
--- a/GUI/src/main/nbm/manifest.mf
+++ b/GUI/src/main/nbm/manifest.mf
@@ -1,6 +1,6 @@
-Manifest-Version: 1.0
-OpenIDE-Module: cz.fidentis.analyst.gui
-OpenIDE-Module-Install: cz/fidentis/analyst/gui/Installer.class
-OpenIDE-Module-Localizing-Bundle: cz/fidentis/analyst/gui/Bundle.properties
-OpenIDE-Module-Requires: org.openide.windows.WindowManager
-OpenIDE-Module-Specification-Version: 1.0
+Manifest-Version: 1.0
+OpenIDE-Module: cz.fidentis.analyst.gui
+OpenIDE-Module-Install: cz/fidentis/analyst/gui/Installer.class
+OpenIDE-Module-Localizing-Bundle: cz/fidentis/analyst/gui/Bundle.properties
+OpenIDE-Module-Requires: org.openide.windows.WindowManager
+OpenIDE-Module-Specification-Version: 1.0
diff --git a/GUI/src/main/resources/background.png b/GUI/src/main/resources/background.png
new file mode 100644
index 0000000000000000000000000000000000000000..121165c953d3ad25ecd87f9da64fa47aa5f45fe2
Binary files /dev/null and b/GUI/src/main/resources/background.png differ
diff --git a/GUI/src/main/resources/background28x28.png b/GUI/src/main/resources/background28x28.png
new file mode 100644
index 0000000000000000000000000000000000000000..abbb76b9c4dcc8f1470e8bf733d8230add78f4e9
Binary files /dev/null and b/GUI/src/main/resources/background28x28.png differ
diff --git a/GUI/src/main/resources/curvature2.png b/GUI/src/main/resources/curvature2.png
new file mode 100644
index 0000000000000000000000000000000000000000..2dd071f0abf5f9c7d47f17c6f27d26dd8aa0ad5e
Binary files /dev/null and b/GUI/src/main/resources/curvature2.png differ
diff --git a/GUI/src/main/resources/curvature28x28.png b/GUI/src/main/resources/curvature28x28.png
new file mode 100644
index 0000000000000000000000000000000000000000..235784d198b3b5a302749cdf00f21d1ebee55a0e
Binary files /dev/null and b/GUI/src/main/resources/curvature28x28.png differ
diff --git a/GUI/src/main/resources/cz/fidentis/analyst/gui/tab/Bundle.properties b/GUI/src/main/resources/cz/fidentis/analyst/core/Bundle.properties
similarity index 52%
rename from GUI/src/main/resources/cz/fidentis/analyst/gui/tab/Bundle.properties
rename to GUI/src/main/resources/cz/fidentis/analyst/core/Bundle.properties
index 44efbbfa1ef21cbbfc0cd1690473136b9fe322f0..248ceb1c62ac4882bb2057412537d7c71dc542d3 100644
--- a/GUI/src/main/resources/cz/fidentis/analyst/gui/tab/Bundle.properties
+++ b/GUI/src/main/resources/cz/fidentis/analyst/core/Bundle.properties
@@ -8,3 +8,11 @@ PostRegistrationCP.scaleFTF.text=0
 PostRegistrationCP.rotationZFTF.text=0
 PostRegistrationCP.rotationYFTF.text=0
 PostRegistrationCP.jFormattedTextField1.text=jFormattedTextField1
+SingleFaceTab.jButton2.text=jButton2
+ProjectTopComp.addButton1.text=Add
+ProjectTopComp.analyzeButton1.text=Open 1:1
+ProjectTopComp.inflateButton1.text=Inflate
+ProjectTopComp.collapseButton1.text=Collapse
+ProjectTopComp.deselectAllButton1.text=Deselect all
+ProjectTopComp.selectAllButton1.text=Select all
+ProjectTopComp.removeButton1.text=Remove
diff --git a/GUI/src/main/resources/cz/fidentis/analyst/gui/Bundle.properties b/GUI/src/main/resources/cz/fidentis/analyst/gui/Bundle.properties
index 83937dcb7d98ca1199fc1bdb667b280b3fc81369..b10fefa922d775960e6d52bece6245fc074dfbe8 100644
--- a/GUI/src/main/resources/cz/fidentis/analyst/gui/Bundle.properties
+++ b/GUI/src/main/resources/cz/fidentis/analyst/gui/Bundle.properties
@@ -9,15 +9,91 @@ AligmentTopComponent.jLabel1.text=Registration
 AligmentTopComponent.jButton1.text=Register
 AligmentTopComponent.jLabel2.text=Primary color
 AligmentTopComponent.jLabel3.text=Secondary color
-ProjectTopComp.deselectAllButton1.text=Deselect all
-ProjectTopComp.selectAllButton1.text=Select all
-ProjectTopComp.removeButton1.text=Remove
-ProjectTopComp.addButton1.text=Add
-ProjectTopComp.analyzeButton1.text=Open 1:1
-ProjectTopComp.inflateButton1.text=Inflate
-ProjectTopComp.collapseButton1.text=Collapse
 PreRegistrationPanel.titleLabel.text=Registration setup
 PreRegistrationPanel.methodLabel.text=Method:
 PreRegistrationPanel.jLabel1.text=jLabel1
 PreRegistrationPanel.jLabel2.text=jLabel2
 PreRegistrationPanel.registerButton.text=Register
+PostRegistrationCP.shiftLabel.text=shift
+PostRegistrationCP.visualizationLabel.text=Visualization
+PostRegistrationCP.registrationAdjustmentLabel.text=Registration adjustment
+PostRegistrationCP.transformationLabel.text=Transformation
+PostRegistrationCP.featurePointsLabel.text=Feature points:
+PostRegistrationCP.resetAllButton.toolTipText=reset all transformations
+PostRegistrationCP.resetAllButton.text=reset all
+PostRegistrationCP.thersholdButton.text=thershold
+PostRegistrationCP.scaleButton.toolTipText=reset scale
+PostRegistrationCP.scaleButton.text=
+PostRegistrationCP.thersholdUpButton.text=
+PostRegistrationCP.scaleFTF.toolTipText=
+PostRegistrationCP.thresholdDownButton.text=
+PostRegistrationCP.scaleMinusButton.text=
+PostRegistrationCP.scalePlusButton.text=
+PostRegistrationCP.jLabel4.text=Scale:
+PostRegistrationCP.featurePointsButton.text=show
+PostRegistrationCP.backfaceButton.text=hide backface
+PostRegistrationCP.viewLabel.text=View:
+PostRegistrationCP.jLabel3.text=Rotation:
+PostRegistrationCP.frontButton.toolTipText=model front view
+PostRegistrationCP.frontButton.text=front
+PostRegistrationCP.rotationXFTF.toolTipText=
+PostRegistrationCP.profileButton.toolTipText=model profile view
+PostRegistrationCP.profileButton.text=side
+# To change this license header, choose License Headers in Project Properties.
+# To change this template file, choose Tools | Templates
+# and open the template in the editor.
+PostRegistrationCP.rightRotationXButton.text=
+PostRegistrationCP.leftRotationZButton.text=
+PostRegistrationCP.primaryFillRB.text=
+PostRegistrationCP.rightRotationYButton.text=
+PostRegistrationCP.secondaryLinesRB.text=
+PostRegistrationCP.rightRotationZButton.text=
+PostRegistrationCP.secondaryPointsRB.text=
+PostRegistrationCP.rotationButton.toolTipText=reset rotation
+PostRegistrationCP.rotationButton.text=
+PostRegistrationCP.rotatXLabel.text=X
+PostRegistrationCP.primaryPointsRB.text=
+PostRegistrationCP.secondaryFillRB.text=
+PostRegistrationCP.primaryLinesRB.text=
+PostRegistrationCP.primaryColorPanel.toolTipText=sets color of primary model
+PostRegistrationCP.rotatYLabel.text=Y
+PostRegistrationCP.secondaryColorPanel.toolTipText=sets color of secondary model
+PostRegistrationCP.rotatZLabel.text=Z
+PostRegistrationCP.transparencySlider.toolTipText=sets model transparency
+PostRegistrationCP.leftRotationXButton.text=
+PostRegistrationCP.secondaryLabel.toolTipText=
+PostRegistrationCP.secondaryLabel.text=secondary
+PostRegistrationCP.leftRotationYButton.text=
+PostRegistrationCP.primaryLabel.text=primary
+PostRegistrationCP.highlightsLabel.text=highlights
+PostRegistrationCP.leftTranslationZButton.text=
+PostRegistrationCP.primaryHighlightsCB.text=
+PostRegistrationCP.leftTranslationXButton.text=
+PostRegistrationCP.rightTranslationZButton.text=
+PostRegistrationCP.translYLabel.text=vertical
+PostRegistrationCP.translZLabel.text=front-back
+PostRegistrationCP.secondaryHighlightsCB.text=
+PostRegistrationCP.renderModeLabel.text=render mode
+PostRegistrationCP.fillLabel.text=fill
+PostRegistrationCP.colorButton.toolTipText=reset colors
+PostRegistrationCP.colorButton.text=color
+PostRegistrationCP.linesLabel.text=lines
+PostRegistrationCP.translXLabel.text=horizontal
+PostRegistrationCP.transparencyButton.toolTipText=reset transparency
+PostRegistrationCP.transparencyButton.text=opacity
+PostRegistrationCP.rightTranslationYButton.text=
+PostRegistrationCP.pointsLabel.text=points
+PostRegistrationCP.modelLabel.text=Model:
+PostRegistrationCP.leftTranslationYButton.text=
+PostRegistrationCP.translationXFTF.toolTipText=
+PostRegistrationCP.rightTranslationXButton.text=
+PostRegistrationCP.jLabel2.text=Translation:
+PostRegistrationCP.translationButton.toolTipText=reset translation
+PostRegistrationCP.translationButton.text=
+PostRegistrationCP.applyButton.toolTipText=apply transformations
+PostRegistrationCP.applyButton.text=Apply changes
+PostRegistrationCP.highShiftRB.toolTipText=set high shifting amount
+PostRegistrationCP.highShiftRB.text=high
+PostRegistrationCP.lowShiftRB.toolTipText=set low shifting amount
+PostRegistrationCP.lowShiftRB.text=low
+PostRegistrationCP.shiftLabel.toolTipText=transformation amount
diff --git a/GUI/src/main/resources/cz/fidentis/analyst/newgui/Bundle.properties b/GUI/src/main/resources/cz/fidentis/analyst/newgui/Bundle.properties
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/GUI/src/main/resources/cz/fidentis/analyst/newgui/swing/Bundle.properties b/GUI/src/main/resources/cz/fidentis/analyst/newgui/swing/Bundle.properties
deleted file mode 100644
index 3b4ce9f121b8633cb7cf8321818cc146ce77b8ad..0000000000000000000000000000000000000000
--- a/GUI/src/main/resources/cz/fidentis/analyst/newgui/swing/Bundle.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-
-SingleFaceTab.jButton1.text=
diff --git a/GUI/src/main/resources/cz/fidentis/analyst/gui/options/Bundle.properties b/GUI/src/main/resources/cz/fidentis/analyst/options/Bundle.properties
similarity index 100%
rename from GUI/src/main/resources/cz/fidentis/analyst/gui/options/Bundle.properties
rename to GUI/src/main/resources/cz/fidentis/analyst/options/Bundle.properties
diff --git a/GUI/src/main/resources/cz/fidentis/analyst/registration/Bundle.properties b/GUI/src/main/resources/cz/fidentis/analyst/registration/Bundle.properties
index 6953b62b7fb16e67a398aad8372a4fb03f3960d4..eb1ca6c1ed30107b3dc2e011fc3299728f840e0f 100644
--- a/GUI/src/main/resources/cz/fidentis/analyst/registration/Bundle.properties
+++ b/GUI/src/main/resources/cz/fidentis/analyst/registration/Bundle.properties
@@ -1,84 +1,65 @@
+RegistrationPanel.rightRotationZButton.text=
+RegistrationPanel.rotationButton.toolTipText=reset rotation
+RegistrationPanel.rotationButton.text=
+RegistrationPanel.rotatXLabel.text=X
+RegistrationPanel.rotatYLabel.text=Y
+RegistrationPanel.rotatZLabel.text=Z
+RegistrationPanel.transparencySlider.toolTipText=sets model transparency
+RegistrationPanel.leftRotationXButton.text=
+RegistrationPanel.leftRotationYButton.text=
+RegistrationPanel.leftTranslationZButton.text=
+RegistrationPanel.leftTranslationXButton.text=
+RegistrationPanel.rightTranslationZButton.text=
+RegistrationPanel.translYLabel.text=vertical
+RegistrationPanel.translZLabel.text=front-back
+RegistrationPanel.translXLabel.text=horizontal
+RegistrationPanel.transparencyButton.toolTipText=reset transparency
+RegistrationPanel.transparencyButton.text=clear
+RegistrationPanel.rightTranslationYButton.text=
+RegistrationPanel.leftTranslationYButton.text=
+RegistrationPanel.translationXFTF.toolTipText=
+RegistrationPanel.applyButton.toolTipText=apply transformations
+RegistrationPanel.applyButton.text=Apply changes
+RegistrationPanel.rightTranslationXButton.text=
+RegistrationPanel.visualizationLabel.text=Transparency:
+RegistrationPanel.jLabel2.text=Translation:
+RegistrationPanel.translationButton.toolTipText=reset translation
+RegistrationPanel.translationButton.text=
+RegistrationPanel.highShiftRB.toolTipText=set high shifting amount
+RegistrationPanel.highShiftRB.text=high
+RegistrationPanel.registrationAdjustmentLabel.text=Registration adjustment
+RegistrationPanel.lowShiftRB.toolTipText=set low shifting amount
+RegistrationPanel.lowShiftRB.text=low
+RegistrationPanel.shiftLabel.toolTipText=transformation amount
+RegistrationPanel.shiftLabel.text=shift
+RegistrationPanel.featurePointsLabel.text=FP closeness treshold:
+RegistrationPanel.resetAllButton.toolTipText=reset all transformations
+RegistrationPanel.resetAllButton.text=reset all
+RegistrationPanel.scaleButton.toolTipText=reset scale
+RegistrationPanel.scaleButton.text=
+RegistrationPanel.scaleFTF.toolTipText=
+RegistrationPanel.thersholdUpButton.text=
+RegistrationPanel.thresholdDownButton.text=
+RegistrationPanel.scaleMinusButton.text=
+RegistrationPanel.scalePlusButton.text=
+RegistrationPanel.jLabel4.text=Scale:
+RegistrationPanel.viewLabel.text=View:
+RegistrationPanel.jLabel3.text=Rotation:
+RegistrationPanel.frontButton.toolTipText=model front view
+RegistrationPanel.frontButton.text=front
+RegistrationPanel.rotationXFTF.toolTipText=
+RegistrationPanel.profileButton.toolTipText=model profile view
+RegistrationPanel.profileButton.text=side
 # To change this license header, choose License Headers in Project Properties.
 # To change this template file, choose Tools | Templates
 # and open the template in the editor.
-
-PostRegistrationCP.rightRotationXButton.text=
-PostRegistrationCP.viewLabel.text=View:
-PostRegistrationCP.frontButton.toolTipText=model front view
-PostRegistrationCP.frontButton.text=front
-PostRegistrationCP.profileButton.toolTipText=model profile view
-PostRegistrationCP.profileButton.text=side
-PostRegistrationCP.leftRotationZButton.text=
-PostRegistrationCP.primaryFillRB.text=
-PostRegistrationCP.rightRotationYButton.text=
-PostRegistrationCP.secondaryLinesRB.text=
-PostRegistrationCP.rightRotationZButton.text=
-PostRegistrationCP.secondaryPointsRB.text=
-PostRegistrationCP.primaryPointsRB.text=
-PostRegistrationCP.secondaryFillRB.text=
-PostRegistrationCP.rotationButton.toolTipText=reset rotation
-PostRegistrationCP.rotationButton.text=
-PostRegistrationCP.primaryLinesRB.text=
-PostRegistrationCP.rotatXLabel.text=X
-PostRegistrationCP.rotatYLabel.text=Y
-PostRegistrationCP.rotatZLabel.text=Z
-PostRegistrationCP.leftRotationXButton.text=
-PostRegistrationCP.primaryColorPanel.toolTipText=sets color of primary model
-PostRegistrationCP.secondaryColorPanel.toolTipText=sets color of secondary model
-PostRegistrationCP.transparencySlider.toolTipText=sets model transparency
-PostRegistrationCP.secondaryLabel.toolTipText=
-PostRegistrationCP.secondaryLabel.text=secondary
-PostRegistrationCP.leftRotationYButton.text=
-PostRegistrationCP.primaryLabel.text=primary
-PostRegistrationCP.highlightsLabel.text=highlights
-PostRegistrationCP.leftTranslationZButton.text=
-PostRegistrationCP.primaryHighlightsCB.text=
-PostRegistrationCP.leftTranslationXButton.text=
-PostRegistrationCP.secondaryHighlightsCB.text=
-PostRegistrationCP.rightTranslationZButton.text=
-PostRegistrationCP.renderModeLabel.text=render mode
-PostRegistrationCP.translYLabel.text=vertical
-PostRegistrationCP.fillLabel.text=fill
-PostRegistrationCP.translZLabel.text=front-back
-PostRegistrationCP.translXLabel.text=horizontal
-PostRegistrationCP.rightTranslationYButton.text=
-PostRegistrationCP.applyButton.toolTipText=apply transformations
-PostRegistrationCP.applyButton.text=Apply changes
-PostRegistrationCP.colorButton.toolTipText=reset colors
-PostRegistrationCP.colorButton.text=color
-PostRegistrationCP.highShiftRB.toolTipText=set high shifting amount
-PostRegistrationCP.highShiftRB.text=high
-PostRegistrationCP.linesLabel.text=lines
-PostRegistrationCP.lowShiftRB.toolTipText=set low shifting amount
-PostRegistrationCP.lowShiftRB.text=low
-PostRegistrationCP.transparencyButton.toolTipText=reset transparency
-PostRegistrationCP.transparencyButton.text=opacity
-PostRegistrationCP.shiftLabel.toolTipText=transformation amount
-PostRegistrationCP.shiftLabel.text=shift
-PostRegistrationCP.pointsLabel.text=points
-PostRegistrationCP.modelLabel.text=Model:
-PostRegistrationCP.leftTranslationYButton.text=
-PostRegistrationCP.translationXFTF.toolTipText=
-PostRegistrationCP.rightTranslationXButton.text=
-PostRegistrationCP.visualizationLabel.text=Visualization
-PostRegistrationCP.jLabel2.text=Translation:
-PostRegistrationCP.translationButton.toolTipText=reset translation
-PostRegistrationCP.translationButton.text=
-PostRegistrationCP.transformationLabel.text=Transformation
-PostRegistrationCP.registrationAdjustmentLabel.text=Registration adjustment
-PostRegistrationCP.featurePointsLabel.text=Feature points:
-PostRegistrationCP.resetAllButton.toolTipText=reset all transformations
-PostRegistrationCP.resetAllButton.text=reset all
-PostRegistrationCP.thersholdButton.text=thershold
-PostRegistrationCP.scaleButton.toolTipText=reset scale
-PostRegistrationCP.scaleButton.text=
-PostRegistrationCP.thersholdUpButton.text=
-PostRegistrationCP.scaleFTF.toolTipText=
-PostRegistrationCP.thresholdDownButton.text=
-PostRegistrationCP.scaleMinusButton.text=
-PostRegistrationCP.featurePointsButton.text=show
-PostRegistrationCP.scalePlusButton.text=
-PostRegistrationCP.jLabel4.text=Scale:
-PostRegistrationCP.backfaceButton.text=hide backface
-PostRegistrationCP.jLabel3.text=Rotation:
-PostRegistrationCP.rotationXFTF.toolTipText=
+RegistrationPanel.rightRotationXButton.text=
+RegistrationPanel.leftRotationZButton.text=
+RegistrationPanel.rightRotationYButton.text=
+RegistrationPanel.jButton1.text=(Re)compute
+RegistrationPanel.jLabel1.text=ICP:
+RegistrationPanel.jCheckBox1.text=scale
+RegistrationPanel.jFormattedTextField1.text=0,3
+RegistrationPanel.jLabel5.text=error
+RegistrationPanel.jFormattedTextField2.text=10
+RegistrationPanel.jLabel6.text=max iters
diff --git a/GUI/src/main/resources/cz/fidentis/analyst/toolbar/Bundle.properties b/GUI/src/main/resources/cz/fidentis/analyst/toolbar/Bundle.properties
new file mode 100644
index 0000000000000000000000000000000000000000..41b6952bd0b6c1c0879cd4965227aa92e97ba4ef
--- /dev/null
+++ b/GUI/src/main/resources/cz/fidentis/analyst/toolbar/Bundle.properties
@@ -0,0 +1,14 @@
+RenderingToolBar.smooth.text=smooth rendering
+RenderingToolBar.wireframe.text=wireframe rendering
+RenderingToolBar.pointcloud.text=point cloud rendering
+RenderingToolBar.background.text=background
+RenderingToolBar.reflections.text=reflections
+RenderingToolBar.renderingmode.text=rendering mode
+SingleFaceToolBar.symmetry.text=symmetry plane
+SingleFaceToolBar.curvature.text=curvature
+FaceToFaceToolBar.distance.text=distance
+FaceToFaceToolBar.registration.text=registration
+RenderingToolBar.primaryface.text=show/hide the primary face
+RenderingToolBar.secondaryfaces.text=show/hide secondary faces
+RenderingToolBar.featurepoints.text=feature points
+
diff --git a/GUI/src/main/resources/distance-icon.png b/GUI/src/main/resources/distance-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..4cc71045c12faeb681107500bcc3cd555eb04ec6
Binary files /dev/null and b/GUI/src/main/resources/distance-icon.png differ
diff --git a/GUI/src/main/resources/distance28x28.png b/GUI/src/main/resources/distance28x28.png
new file mode 100644
index 0000000000000000000000000000000000000000..042373ad24be72aae7b881d22a0f686fb16af7dc
Binary files /dev/null and b/GUI/src/main/resources/distance28x28.png differ
diff --git a/GUI/src/main/resources/fps.png b/GUI/src/main/resources/fps.png
new file mode 100644
index 0000000000000000000000000000000000000000..eb7be7593d038a4c88b2eed57cfc15b92198815c
Binary files /dev/null and b/GUI/src/main/resources/fps.png differ
diff --git a/GUI/src/main/resources/fps28x28.png b/GUI/src/main/resources/fps28x28.png
new file mode 100644
index 0000000000000000000000000000000000000000..a75503f5c8dda6a0f70067ff6c01ae4bb5eec0c1
Binary files /dev/null and b/GUI/src/main/resources/fps28x28.png differ
diff --git a/GUI/src/main/resources/headPlack.png b/GUI/src/main/resources/headPlack.png
new file mode 100644
index 0000000000000000000000000000000000000000..d06dea15922db88624842e3b365707bedcd928eb
Binary files /dev/null and b/GUI/src/main/resources/headPlack.png differ
diff --git a/GUI/src/main/resources/points-tri28x28.png b/GUI/src/main/resources/points-tri28x28.png
new file mode 100644
index 0000000000000000000000000000000000000000..864d9be5c1f96e0161c5f8d6d729be11cf1c32bb
Binary files /dev/null and b/GUI/src/main/resources/points-tri28x28.png differ
diff --git a/GUI/src/main/resources/primaryFace.png b/GUI/src/main/resources/primaryFace.png
new file mode 100644
index 0000000000000000000000000000000000000000..64224bedec17457f52992e3a395ef15dac50c267
Binary files /dev/null and b/GUI/src/main/resources/primaryFace.png differ
diff --git a/GUI/src/main/resources/primaryFace28x28.png b/GUI/src/main/resources/primaryFace28x28.png
new file mode 100644
index 0000000000000000000000000000000000000000..f94e94b341ac3e910eb16040e5ed2c4de289a6ec
Binary files /dev/null and b/GUI/src/main/resources/primaryFace28x28.png differ
diff --git a/GUI/src/main/resources/reflections28x28.png b/GUI/src/main/resources/reflections28x28.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c9df1dbe596c358b6573df564ac39e164fefc28
Binary files /dev/null and b/GUI/src/main/resources/reflections28x28.png differ
diff --git a/GUI/src/main/resources/reflections64x64.png b/GUI/src/main/resources/reflections64x64.png
new file mode 100644
index 0000000000000000000000000000000000000000..12911616ab35713fabe816897e54f4d89c9b241c
Binary files /dev/null and b/GUI/src/main/resources/reflections64x64.png differ
diff --git a/GUI/src/main/resources/registration.png b/GUI/src/main/resources/registration.png
new file mode 100644
index 0000000000000000000000000000000000000000..61649fe0169af68ddba3862c00b3ccfc143af908
Binary files /dev/null and b/GUI/src/main/resources/registration.png differ
diff --git a/GUI/src/main/resources/registration28x28.png b/GUI/src/main/resources/registration28x28.png
new file mode 100644
index 0000000000000000000000000000000000000000..4d8ac9b98f06318849ef45a598ad3fcf71f0f01e
Binary files /dev/null and b/GUI/src/main/resources/registration28x28.png differ
diff --git a/GUI/src/main/resources/secondaryFace.png b/GUI/src/main/resources/secondaryFace.png
new file mode 100644
index 0000000000000000000000000000000000000000..1708d775fc9c4feaf85e12635f6406919fa3a58e
Binary files /dev/null and b/GUI/src/main/resources/secondaryFace.png differ
diff --git a/GUI/src/main/resources/secondaryFace28x28.png b/GUI/src/main/resources/secondaryFace28x28.png
new file mode 100644
index 0000000000000000000000000000000000000000..f55e763aa20b61ce58714e7d0f0eba16c640a691
Binary files /dev/null and b/GUI/src/main/resources/secondaryFace28x28.png differ
diff --git a/GUI/src/main/resources/smooth-tri28x28.png b/GUI/src/main/resources/smooth-tri28x28.png
new file mode 100644
index 0000000000000000000000000000000000000000..e6629fb424ebecbfd4cf6125a3e3e75a065e90f6
Binary files /dev/null and b/GUI/src/main/resources/smooth-tri28x28.png differ
diff --git a/GUI/src/main/resources/symmetry28x28.png b/GUI/src/main/resources/symmetry28x28.png
new file mode 100644
index 0000000000000000000000000000000000000000..cb96688e587ede5fb396295721af966f88b82b27
Binary files /dev/null and b/GUI/src/main/resources/symmetry28x28.png differ
diff --git a/GUI/src/main/resources/wireframe-tri28x28.png b/GUI/src/main/resources/wireframe-tri28x28.png
new file mode 100644
index 0000000000000000000000000000000000000000..2340dc47e70bb9a7999416c32853ca02fca89dc2
Binary files /dev/null and b/GUI/src/main/resources/wireframe-tri28x28.png differ
diff --git a/GUI/src/main/resources/wireframe28x28.png b/GUI/src/main/resources/wireframe28x28.png
new file mode 100644
index 0000000000000000000000000000000000000000..de9bca364cf46fcd25e7fdee88579bfda5973ddd
Binary files /dev/null and b/GUI/src/main/resources/wireframe28x28.png differ
diff --git a/GUI/src/main/resources/wireframe32x32.png b/GUI/src/main/resources/wireframe32x32.png
new file mode 100644
index 0000000000000000000000000000000000000000..de8952563fcea42ad69e55be37ac3343115311bc
Binary files /dev/null and b/GUI/src/main/resources/wireframe32x32.png differ
diff --git a/GUI/src/main/resources/wireframe36x36.png b/GUI/src/main/resources/wireframe36x36.png
new file mode 100644
index 0000000000000000000000000000000000000000..b459423fa3131a18f2e044397cfee107e4b5833a
Binary files /dev/null and b/GUI/src/main/resources/wireframe36x36.png differ
diff --git a/GUI/src/main/resources/wireframe46x46.png b/GUI/src/main/resources/wireframe46x46.png
new file mode 100644
index 0000000000000000000000000000000000000000..86f9343d4d157b984dde3a4b586680d67512b7a7
Binary files /dev/null and b/GUI/src/main/resources/wireframe46x46.png differ