I wonder if this could be turned inside out, so that the create method is run inside a block passed to a "depreciate_old_versions" function. This would remove a bit of duplication.