         }
         if (cmdOrFn != null) {
             event.stopImmediatePropagation();
-            CommandEvent.dispatch(mx_internal::parentDisplayObject, cmdOrFn, arg)
+            CommandEvent.dispatch(_dispatcher == null ? mx_internal::parentDisplayObject :
+                                  _dispatcher, cmdOrFn, arg);
         }
         // else: no warning. There may be non-command menu items mixed in.
     }
 
     /**
-     * Get the specified property for the specified item, if any.
-     * Somewhat similar to bits in the DefaultDataDescriptor.
+     * Get the specified property for the specified item, if any.  Somewhat similar to bits in the
+     * DefaultDataDescriptor.
      */
     protected function getItemProp (item :Object, prop :String) :Object
     {

use namespace mx_internal;

/**
 * A pretty standard menu that can submit CommandEvents if menu items
 * have "command" and possibly "arg" properties. Commands are submitted to
 * controllers for processing. Alternatively, you may specify
 * "callback" properties that specify a function closure to call, with the
 * "arg" property containing either a single arg or an array of args.
 *
 * Example dataProvider array:
 * [ { label: "Go home", icon: homeIconClass,

        }
        return null;
    }

    protected var _dispatcher :IEventDispatcher;
}
}
