diff --git a/src/mhtree/NodeToNodeDistance.java b/src/mhtree/NodeToNodeDistance.java
index 391d9a1778d4a065182111699d9f279bcbccdaf4..762f1c50765283a441c950819d14738b7735cdbf 100644
--- a/src/mhtree/NodeToNodeDistance.java
+++ b/src/mhtree/NodeToNodeDistance.java
@@ -1,6 +1,28 @@
 package mhtree;
 
+import messif.objects.LocalAbstractObject;
+
+import java.util.function.BiFunction;
+
 public enum NodeToNodeDistance {
-    NEAREST_HULL_OBJECTS,
-    FURTHEST_HULL_OBJECTS,
+    NEAREST_HULL_OBJECTS(Math::min, Float.MAX_VALUE),
+    FURTHEST_HULL_OBJECTS(Math::max, Float.MIN_VALUE);
+
+    private final BiFunction<Float, Float, Float> compareFunction;
+    private final float defaultValue;
+
+    NodeToNodeDistance(final BiFunction<Float, Float, Float> compareFunction, final float defaultValue) {
+        this.compareFunction = compareFunction;
+        this.defaultValue = defaultValue;
+    }
+
+    public float getDistance(Node node1, Node node2, BiFunction<LocalAbstractObject, LocalAbstractObject, Float> getDistance) {
+        float distance = defaultValue;
+
+        for (LocalAbstractObject firstHullObject : node1.getHullObjects())
+            for (LocalAbstractObject secondHullObject : node2.getHullObjects())
+                distance = compareFunction.apply(distance, getDistance.apply(firstHullObject, secondHullObject));
+
+        return distance;
+    }
 }