Support callbacks for changes

Instead of having to poll for events you can
now register a callback interface that will be called