It worries me that we run all the handling inside a callback function