Why is clone a separate method here? Shouldn't it be a virtual method of the Voxel, extended by every subclass?