cleanup + loop