more flexible registration api
more succinct interface and validates arguments
updates readme