add timeout function