improve mainLoop()