Use canPerform in perform.
Log transitions
Oh yeah and return result from perform