     @_assert(!@_transient, 'Cannot undo while transient action active.')
 
     --@stack_idx
-    @_run(@stack[@stack_idx], 'undo')
+    action = @stack[@stack_idx]
+    @_run(action, 'undo')
+
+    @trigger?('undo', action)
+    @onUndo?(action)
 
     return
 

    @stack.splice(@stack_idx, Infinity)
    @stack.push action
    @stack_idx = @stack.length
    return

  _assert: (val, message) ->


    @_assert(!@_transient, 'Cannot redo while transient action active.')

    action = @stack[@stack_idx]
    @_run(action, 'run')
    ++@stack_idx

    @trigger?('redo', action)
    @onRedo?(action)

    return

