incorporate drew's feedbacks:add check in listerner and simplify runall arg