add main-loop function