make it so that callbacks can be cancelled by returning false, maybe look into activesupport callbacks?