Add on_change and on_select callbacks
Add some unit tests