added timeout ability