merged logic from AbstractVirtualWorld into VirtualWorld