diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java
index f49e9acb62dc1ace8da3c650851db2f85b829242..d5c3d08b1ae8df35867081fb07ef13c2b5134049 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java
@@ -234,25 +234,36 @@ public class ControlPanelBuilder {
         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);
+            JButton button = addButton(buttons.get(i), actions.get(i), c);
             retButtons.add(button);
         }
 
         return retButtons;
     }
     
+    public JButton addButtonSimple(String caption, ActionListener action) {
+        return addButton(caption, action, new GridBagConstraints());
+    }
+
+    private JButton addButton(String caption, ActionListener action, GridBagConstraints constraints) {
+        JButton button = new JButton();
+        button.setText(caption);
+        button.addActionListener(action);
+        
+        constraints.gridwidth = BUTTON_WIDTH;
+        constraints.gridy = row;
+        constraints.gridx = col;
+        col += BUTTON_WIDTH;
+        constraints.fill = GridBagConstraints.NONE;
+        controlPanel.add(button, constraints);
+        
+        return button;
+    }
+    
     /**
      * Adds a combo box
      * @param items Items
diff --git a/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java b/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java
index 6a03d82894abd97ce4c8871b658ffc04818732d2..bd573f0c39d6d5e7f18572d491f48dbccc2394b5 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistanceAction.java
@@ -20,6 +20,7 @@ import javax.swing.JToggleButton;
  * Action listener for the curvature computation.
  * 
  * @author Radek Oslejsek
+ * @author Daniel Schramm
  */
 public class DistanceAction extends ControlPanelAction {
     
@@ -76,6 +77,10 @@ public class DistanceAction extends ControlPanelAction {
             case DistancePanel.ACTION_COMMAND_FEATURE_POINT_RESIZE:
                 resizeFeaturePoint((LoadedActionEvent) ae);
                 break;
+            case DistancePanel.ACTION_COMMAND_WEIGHTED_DIST_RECOMPUTE:
+                this.visitor = null; // recompute
+                setHeatmap();
+                break;
             default:
                 // to nothing
         }
diff --git a/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java b/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java
index 9fdaa27641300472bca89bb083d1eb3ab272f2f7..3c3c5b9358b79e5558eac8f85b66c90406d54cdd 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/distance/DistancePanel.java
@@ -5,9 +5,12 @@ import cz.fidentis.analyst.core.ControlPanelBuilder;
 import cz.fidentis.analyst.feature.FeaturePoint;
 import cz.fidentis.analyst.scene.DrawableFeaturePoints;
 import cz.fidentis.analyst.symmetry.SymmetryPanel;
+import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.util.ArrayList;
 import java.util.List;
 import javax.swing.ImageIcon;
+import javax.swing.JButton;
 import javax.swing.JCheckBox;
 import javax.swing.JPanel;
 import javax.swing.JTextField;
@@ -34,6 +37,7 @@ public class DistancePanel extends ControlPanel {
     public static final String ACTION_COMMAND_RELATIVE_ABSOLUTE_DIST = "switch abosulte-relative distance";
     public static final String ACTION_COMMAND_FEATURE_POINT_HIGHLIGHT = "highlight feature point with color";
     public static final String ACTION_COMMAND_FEATURE_POINT_RESIZE = "set size of feature point";
+    public static final String ACTION_COMMAND_WEIGHTED_DIST_RECOMPUTE = "recompute weighted distance";
     
     /*
      * Configuration of panel-specific GUI elements
@@ -69,7 +73,7 @@ public class DistancePanel extends ControlPanel {
         builder.addGap();
         builder.addLine();
         
-        builder.addCheckBoxOptionLine(
+        final JCheckBox weightedDistChBx = builder.addCheckBoxOptionLine(
                 null,
                 "Weighted Hausdorff distance",
                 false,
@@ -79,6 +83,8 @@ public class DistancePanel extends ControlPanel {
         
         final JPanel featurePointsPanel = new JPanel();
         final ControlPanelBuilder fpBuilder = new ControlPanelBuilder(featurePointsPanel);
+        final List<JCheckBox> fpCheckBoxes = new ArrayList<>(featurePoints.size());
+        final List<JTextField> fpSliderInputs = new ArrayList<>(featurePoints.size());
         for (int i = 0; i < featurePoints.size(); i++) {
             final FeaturePoint featurePoint = featurePoints.get(i);
             
@@ -87,6 +93,7 @@ public class DistancePanel extends ControlPanel {
                     createListener(action, ACTION_COMMAND_FEATURE_POINT_HIGHLIGHT, i)
             );
             checkBox.setText(featurePoint.getFeaturePointType().getName());
+            fpCheckBoxes.add(checkBox);
 
             final JTextField sliderInput = fpBuilder.addSliderOptionLine(
                     null,
@@ -96,12 +103,40 @@ public class DistancePanel extends ControlPanel {
             );
             sliderInput.setText(ControlPanelBuilder.doubleToStringLocale(DrawableFeaturePoints.DEFAULT_SIZE));
             sliderInput.postActionEvent();
+            fpSliderInputs.add(sliderInput);
             
             fpBuilder.addLine();
         }
         builder.addScrollPane(featurePointsPanel);
         builder.addLine();
         
+        final JButton recomputeButton = builder.addButtonSimple(
+                "Recompute",
+                createListener(action, ACTION_COMMAND_WEIGHTED_DIST_RECOMPUTE)
+        );
+        recomputeButton.setEnabled(false);
+        recomputeButton.addActionListener((ActionEvent ae) -> {
+            recomputeButton.setEnabled(false);
+        });
+        weightedDistChBx.addActionListener((ActionEvent ae) -> {
+            if (!weightedDistChBx.isSelected()) {
+                recomputeButton.setEnabled(false);
+            }
+        });
+        for (final JCheckBox checkBox: fpCheckBoxes) {
+            checkBox.addActionListener((ActionEvent ae) -> {
+                recomputeButton.setEnabled(weightedDistChBx.isSelected());
+            });
+        }
+        for (int i = 0; i < fpSliderInputs.size(); i++) {
+            final JTextField sliderInput = fpSliderInputs.get(i);
+            final JCheckBox sliderCheckBox = fpCheckBoxes.get(i);
+            sliderInput.addActionListener((ActionEvent ae) -> {
+                recomputeButton.setEnabled(weightedDistChBx.isSelected() && sliderCheckBox.isSelected());
+            });
+        }
+        builder.addLine();
+        
         builder.addCaptionLine("Visualization options:");
         builder.addLine();
         builder.addCheckBoxOptionLine(