better and only catch timeout
implemented custom timeout, refactor