private void grow_leaves() {
        if (internal_node)
            return;

        compute_divisions();

        octant1 = new SpatialTree<E>(division_x, division_y, division_z, max_x, max_y, max_z, max_objects_per_leaf);
        octant2 = new SpatialTree<E>(min_x, division_y, division_z, division_x, max_y, max_z, max_objects_per_leaf);
        octant3 = new SpatialTree<E>(min_x, min_y, division_z, division_x, division_y, max_z, max_objects_per_leaf);
        octant4 = new SpatialTree<E>(division_x, min_y, division_z, max_x, division_y, max_z, max_objects_per_leaf);
        octant5 = new SpatialTree<E>(division_x, division_y, min_z, max_x, max_y, division_z, max_objects_per_leaf);
        octant6 = new SpatialTree<E>(min_x, division_y, min_z, division_x, max_y, division_z, max_objects_per_leaf);
        octant7 = new SpatialTree<E>(min_x, min_y, min_z, division_x, division_y, division_z, max_objects_per_leaf);
        octant8 = new SpatialTree<E>(division_x, min_y, min_z, max_x, division_y, division_z, max_objects_per_leaf);
        internal_node = true;

        // Push all our objects into our children
        for (E obj: objects)
            octant(obj.getPosition()).add(obj);

        objects = null;
    }