Finally sort out logic of 'on_read' callback