use within_transaction so that state machine doesn't use transaction, if option is passed