diff --git a/src/mhtree/InternalNode.java b/src/mhtree/InternalNode.java
index b4c70d75333904ac77d4e9a4d994af5350fb1974..887500605c0e1d6c71df07a83d7d88e3fd54037c 100644
--- a/src/mhtree/InternalNode.java
+++ b/src/mhtree/InternalNode.java
@@ -1,9 +1,11 @@
 package mhtree;
 
+import messif.buckets.BucketStorageException;
 import messif.objects.LocalAbstractObject;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -38,6 +40,15 @@ public class InternalNode extends Node implements Serializable {
     }
 
     public void addObject(LocalAbstractObject object) {
+        if (isCovered(object)) return;
+
         rebuildHull(object);
     }
+
+    public List<LocalAbstractObject> getObjects() {
+        return children.stream()
+                .map(Node::getObjects)
+                .flatMap(Collection::stream)
+                .collect(Collectors.toList());
+    }
 }
diff --git a/src/mhtree/LeafNode.java b/src/mhtree/LeafNode.java
index 5e471973e27683a0772475ac903eb06b1d8d483b..796fd00d604725b61dc9db5f56a0bf97fbe35077 100644
--- a/src/mhtree/LeafNode.java
+++ b/src/mhtree/LeafNode.java
@@ -4,8 +4,10 @@ import cz.muni.fi.disa.similarityoperators.cover.AbstractRepresentation;
 import messif.buckets.BucketStorageException;
 import messif.buckets.LocalBucket;
 import messif.objects.LocalAbstractObject;
+import messif.objects.util.AbstractObjectIterator;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
 
 public class LeafNode extends Node implements Serializable {
@@ -34,4 +36,13 @@ public class LeafNode extends Node implements Serializable {
 
         rebuildHull(object);
     }
+
+    public List<LocalAbstractObject> getObjects() {
+        List<LocalAbstractObject> objects = new ArrayList<>();
+
+        for (AbstractObjectIterator<LocalAbstractObject> it = bucket.getAllObjects(); it.hasNext(); )
+            objects.add(it.next());
+
+        return objects;
+    }
 }
diff --git a/src/mhtree/MHTree.java b/src/mhtree/MHTree.java
index 038022534995e7175b93bee83ad239e56a761152..23865fca099a570f21ce514cb2ab505f901fecc9 100644
--- a/src/mhtree/MHTree.java
+++ b/src/mhtree/MHTree.java
@@ -75,8 +75,7 @@ public class MHTree extends Algorithm implements Serializable {
         Node currentNode = root;
 
         while (!currentNode.isLeaf()) {
-            if (!currentNode.isCovered(object))
-                currentNode.addObject(object);
+            currentNode.addObject(object);
 
             currentNode = ((InternalNode) currentNode).getNearestChild(object);
         }
diff --git a/src/mhtree/Node.java b/src/mhtree/Node.java
index 333055ffc3d1e829c2c554c5fe35e7c6d1befa1e..71eb2246104c08e2b5e109e08ec93f988ea08964 100644
--- a/src/mhtree/Node.java
+++ b/src/mhtree/Node.java
@@ -63,16 +63,13 @@ public abstract class Node implements Serializable {
         return hull.getHull();
     }
 
-    public List<LocalAbstractObject> getObjects() {
-        return hull.getObjects();
-    }
-
     @Override
     public String toString() {
         return "Node{hull=" + hull + '}';
     }
 
     public abstract void addObject(LocalAbstractObject object) throws BucketStorageException;
+    public abstract List<LocalAbstractObject> getObjects();
 
     protected void rebuildHull(LocalAbstractObject object) {
         List<LocalAbstractObject> objects = new ArrayList<>(getObjects());