- changing the syntax of the callbacks
- removing throwing an exception and instead returning an error object to the callbacks
- added more tests