add #timeout support and tests
account for visibility and presence