// todo fix event loop