Updated with callbacks