diff --git a/src/mhtree/ObjectToNodeDistance.java b/src/mhtree/ObjectToNodeDistance.java
index f9430f273544340b388207b3d4a2258dd231d556..734a72c629801edf60a66b70a48e8978cfcbc210 100644
--- a/src/mhtree/ObjectToNodeDistance.java
+++ b/src/mhtree/ObjectToNodeDistance.java
@@ -1,7 +1,34 @@
 package mhtree;
 
+import messif.objects.LocalAbstractObject;
+
 public enum ObjectToNodeDistance {
-    NEAREST_HULL_OBJECT,
-    FURTHEST_HULL_OBJECT,
-    AVERAGE_DISTANCE,
+    NEAREST_HULL_OBJECT {
+        @Override
+        public double getDistance(LocalAbstractObject object, Node node) {
+            return node.getHullObjects().stream()
+                    .mapToDouble(object::getDistance)
+                    .min()
+                    .orElse(Double.MAX_VALUE);
+        }
+    },
+    FURTHEST_HULL_OBJECT {
+        @Override
+        public double getDistance(LocalAbstractObject object, Node node) {
+            return node.getHullObjects().stream()
+                    .mapToDouble(object::getDistance)
+                    .max()
+                    .orElse(Double.MIN_VALUE);
+        }
+    },
+    AVERAGE_DISTANCE {
+        @Override
+        public double getDistance(LocalAbstractObject object, Node node) {
+            return node.getHullObjects().stream()
+                    .mapToDouble(object::getDistance)
+                    .sum() / node.getHullObjects().size();
+        }
+    };
+
+    public abstract double getDistance(LocalAbstractObject object, Node node);
 }