use callbacks rather than events for asychronous open method