large update to how callbacks are executed
added some unit tests