         ###
         changeState: (state) ->
             # Transition
-            tran = _.findWhere(@transitions, from: @state, to: state)
-            if tran and _.isFunction(@[tran.func]) then @[tran.func]()
+            tran = @calcTransition(@state, state)
+
+            if tran and _.isFunction(@[tran.func])
+                success = @[tran.func]()
+            else
+                success = true
+
+            if sucess is false then return false
             @root.trigger(@eventPrefix + 'transition', from: @state, to: state)
 
-            # Change
+            # Change state
             @priorState = @state
             @state = state
             if _.isFunction(@[@states[state]]) then @[@states[state]]()


        ###
        Ensure the classname is applied, then set the parent and children if any
        are passed in. Does the normal backbone constructor and then does the 
        first state change.
        ###
        constructor: (options) ->
            @children = []
            
            if options.el then @ensureClass(options.el, options.className)
            if options.parent then @setParent(options.parent)
            if options.children?.length then @addChildren()

            unless state is null
                if @[state + '_events']
                    events = _.extend(events, @[state + '_events'])

            return events
)