diff --git a/Comparison/src/test/java/cz/fidentis/analyst/visitors/face/HausdorffDistancePrioritizedTest.java b/Comparison/src/test/java/cz/fidentis/analyst/visitors/face/HausdorffDistancePrioritizedTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..d13682c112a86f4eb6b1fb216848f9bdb535be1e
--- /dev/null
+++ b/Comparison/src/test/java/cz/fidentis/analyst/visitors/face/HausdorffDistancePrioritizedTest.java
@@ -0,0 +1,145 @@
+package cz.fidentis.analyst.visitors.face;
+
+import cz.fidentis.analyst.face.HumanFace;
+import cz.fidentis.analyst.feature.FeaturePoint;
+import cz.fidentis.analyst.feature.FeaturePointType;
+import cz.fidentis.analyst.mesh.core.MeshFacet;
+import cz.fidentis.analyst.mesh.core.MeshModel;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.vecmath.Point3d;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class HausdorffDistancePrioritizedTest {
+    
+    private static final double DELTA = 1e-11;
+    private static final File BOY = new File("src/test/resources/cz/fidentis/analyst/average_boy_17-20.obj");
+    
+    private static HumanFace getHumanFace(List<MeshFacet> facets,
+            List<Point3d> featurePoints,
+            List<FeaturePointType> featurePointTypes) throws IOException {
+        
+        assertEquals(featurePoints.size(), featurePointTypes.size());
+        
+        final HumanFace face = new HumanFace(BOY);
+        
+        final MeshModel model = new MeshModel();
+        for (final MeshFacet facet: facets) {
+            model.addFacet(facet);
+        }
+        face.setMeshModel(model);
+        
+        final List<FeaturePoint> featurePointsList = new ArrayList<>();
+        for (int i = 0; i < featurePoints.size(); i++) {
+            final Point3d fpCoordinates = featurePoints.get(i);
+            featurePointsList.add(new FeaturePoint(
+                    fpCoordinates.x,
+                    fpCoordinates.y,
+                    fpCoordinates.z,
+                    featurePointTypes.get(i)));
+        }
+        face.setFeaturePoints(featurePointsList);
+        
+        return face;
+    }
+    
+    protected void performTest(HumanFace face,
+            Map<FeaturePointType, Map<MeshFacet, List<Double>>> expectedPriorities,
+            Map<FeaturePointType, Map<MeshFacet, Double>> expectedFeaturePointWeights,
+            Map<MeshFacet, List<Double>> expectedMergedPriorities,
+            HausdorffDistancePrioritized visitor) {
+        
+        final Set<FeaturePointType> featurePointTypes = visitor.getFeaturePointTypes();
+        final List<FeaturePoint> faceFeaturePoints = face.getFeaturePoints();
+        featurePointTypes.forEach(fpType -> assertTrue(faceFeaturePoints.stream()
+                .anyMatch(fPoint -> fPoint.getFeaturePointType().equals(fpType))));
+                
+        face.accept(visitor);
+        
+        final List<MeshFacet> faceFacets = face.getMeshModel().getFacets();
+        
+        // ---------------------------------------------------------------------
+        // Test priorities
+        // ---------------------------------------------------------------------
+        final Map<HumanFace, Map<FeaturePointType, Map<MeshFacet, List<Double>>>> priorities =
+                visitor.getPriorities();
+        assertTrue(priorities.containsKey(face));
+        final Map<FeaturePointType, Map<MeshFacet, List<Double>>> facePriorities =
+                priorities.get(face);
+        assertEquals(featurePointTypes.size(), facePriorities.size());
+        
+        for (final FeaturePointType fpType: featurePointTypes) {
+            assertTrue(facePriorities.containsKey(fpType));
+            
+            final Map<MeshFacet, List<Double>> facePrioritiesMap = facePriorities.get(fpType);
+            final Map<MeshFacet, List<Double>> expectedPrioritiesMap = expectedPriorities.get(fpType);
+            assertEquals(faceFacets.size(), facePrioritiesMap.size());
+            
+            for (final MeshFacet facet: faceFacets) {
+                assertTrue(facePrioritiesMap.containsKey(facet));
+                
+                final List<Double> facePrioritiesList = facePrioritiesMap.get(facet);
+                final List<Double> expectedPrioritiesList = expectedPrioritiesMap.get(facet);
+                assertEquals(expectedPrioritiesList.size(), facePrioritiesList.size());
+                
+                for (int i = 0; i < expectedPrioritiesList.size(); i++) {
+                    assertEquals(expectedPrioritiesList.get(i), facePrioritiesList.get(i), DELTA);
+                }
+            }
+        }
+        
+        // ---------------------------------------------------------------------
+        // Test feature point weights
+        // ---------------------------------------------------------------------
+        final Map<HumanFace, Map<FeaturePointType, Map<MeshFacet, Double>>> featurePointWeights =
+                visitor.getFeaturePointWeights();
+        assertTrue(featurePointWeights.containsKey(face));
+        final Map<FeaturePointType, Map<MeshFacet, Double>> faceFeaturePointWeights =
+                featurePointWeights.get(face);
+        assertEquals(featurePointTypes.size(), faceFeaturePointWeights.size());
+        
+        for (final FeaturePointType fpType: featurePointTypes) {
+            assertTrue(faceFeaturePointWeights.containsKey(fpType));
+            
+            final Map<MeshFacet, Double> faceFPWeightsMap = faceFeaturePointWeights.get(fpType);
+            final Map<MeshFacet, Double> expectedFPWeightsMap = expectedFeaturePointWeights.get(fpType);
+            assertEquals(faceFacets.size(), faceFPWeightsMap.size());
+            
+            for (final MeshFacet facet: faceFacets) {
+                assertTrue(faceFPWeightsMap.containsKey(facet));
+                
+                final double expectedWeightedDistance = expectedFPWeightsMap.get(facet);
+                final double actualWeightedDistance = faceFPWeightsMap.get(facet);
+                assertEquals(expectedWeightedDistance, actualWeightedDistance, DELTA);
+            }
+        }
+        
+        // ---------------------------------------------------------------------
+        // Test merged priorities
+        // ---------------------------------------------------------------------
+        final Map<HumanFace, Map<MeshFacet, List<Double>>> mergedPriorities =
+                visitor.getMergedPriorities();
+        assertTrue(mergedPriorities.containsKey(face));
+        final Map<MeshFacet, List<Double>> faceMergedPriorities =
+                mergedPriorities.get(face);
+        assertEquals(faceFacets.size(), faceMergedPriorities.size());
+        
+        for (final MeshFacet facet: faceFacets) {
+            assertTrue(faceMergedPriorities.containsKey(facet));
+            
+            final List<Double> faceMergedPrioritiesList = faceMergedPriorities.get(facet);
+            final List<Double> expectedMergedPrioritiesList = expectedMergedPriorities.get(facet);
+            assertEquals(expectedMergedPrioritiesList.size(), faceMergedPrioritiesList.size());
+            
+            for (int i = 0; i < expectedMergedPrioritiesList.size(); i++) {
+                assertEquals(expectedMergedPrioritiesList.get(i), faceMergedPrioritiesList.get(i), DELTA);
+            }
+        }
+    }
+    
+}