updated mainloop