uses add_timeout function