add timeout checking