         ###
         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]]()

        hasChildren: -> @children.length
        getChildren: -> @children
        removeChild: (child) -> @children = _.without(@children, child)
        removeChildren: (children) -> 
            @children = _.difference(@children, children)

        ###

        ###
        Calls remove on all child views before removing itself
        ###
        remove: ->
            @invoke('remove')
            @children = []
            @parent = null
