diff --git a/src/mhtree/LeafNode.java b/src/mhtree/LeafNode.java
index 1415df492d950ff47f7de0e371cbbd7ac50ed2bc..ff267de7ef615dec7925616dd72e325876fe11d9 100644
--- a/src/mhtree/LeafNode.java
+++ b/src/mhtree/LeafNode.java
@@ -39,13 +39,8 @@ public class LeafNode extends Node implements Serializable {
      * @throws BucketStorageException addition of object into bucket exception
      */
     protected void addObject(LocalAbstractObject object) throws BucketStorageException {
-        addObject(object, null);
-    }
-
-    protected void addObject(LocalAbstractObject object, PrecomputedDistances distances) throws BucketStorageException {
         bucket.addObject(object);
-
-        addObjectIntoHull(object, distances);
+        addObjectIntoHull(object);
     }
 
     /**
diff --git a/src/mhtree/Node.java b/src/mhtree/Node.java
index 600e80fac16c21c1aff3ad30ff7fad22ae2793aa..95cf35c46da8fca00be52259eb35747b1a39eded 100644
--- a/src/mhtree/Node.java
+++ b/src/mhtree/Node.java
@@ -6,7 +6,6 @@ import messif.buckets.BucketStorageException;
 import messif.objects.LocalAbstractObject;
 
 import java.io.Serializable;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -94,18 +93,18 @@ public abstract class Node implements Serializable {
     }
 
     protected void addObjectIntoHull(LocalAbstractObject object) {
-        addObjectIntoHull(object, null);
-    }
-
-    protected void addObjectIntoHull(LocalAbstractObject object, PrecomputedDistances distances) {
-        if (isCovered(object, distances)) return;
-
-        if (insertType == InsertType.INCREMENTAL) {
-            hull.addHullObject(object);
-            return;
+        if (isCovered(object)) return;
+
+        switch (insertType) {
+            case GREEDY:
+                insertGreedy(object);
+                break;
+            case INCREMENTAL:
+                insertIncremental(object);
+                break;
+            default:
+                throw new IllegalStateException("Unexpected value: " + insertType);
         }
-
-        rebuildHull(object, distances);
     }
 
     protected abstract void addObject(LocalAbstractObject object) throws BucketStorageException;
@@ -118,24 +117,19 @@ public abstract class Node implements Serializable {
 
     protected abstract void gatherLeafNodes(List<LeafNode> leafNodes);
 
-    private void rebuildHull(LocalAbstractObject object, PrecomputedDistances distances) {
-        List<LocalAbstractObject> objects = new ArrayList<>(getObjects());
-        objects.add(object);
-
-        if (distances == null) {
-            hull = new HullOptimizedRepresentationV3(objects);
-        } else {
-            hull = new HullOptimizedRepresentationV3(distances.getSubset(objects));
-        }
+    private void insertGreedy(LocalAbstractObject object) {
+        List<LocalAbstractObject> objectsFromLeafNodes = getObjects();
+        objectsFromLeafNodes.add(object);
 
+        hull = new HullOptimizedRepresentationV3(objectsFromLeafNodes);
         hull.build();
     }
 
-    private boolean isCovered(LocalAbstractObject object, PrecomputedDistances distances) {
-        if (distances == null) {
-            return hull.isExternalCovered(object);
-        }
+    private void insertIncremental(LocalAbstractObject object) {
+        List<LocalAbstractObject> hullObjects = hull.getHull();
+        hullObjects.add(object);
 
-        return hull.isExternalCovered(object, distances);
+        hull = new HullOptimizedRepresentationV3(hullObjects);
+        hull.build();
     }
 }