add async event system (process.Poller) -- and integrate it into the vm