clarify requirements, add timeout