      *  @private
      *  Watch for TAB keys.
      */
-    private function keyDownHandler(event:KeyboardEvent):void
-    {   
+    mx_internal function keyDownHandler(event:KeyboardEvent):void
+    {
         // trace("onKeyDown handled by " + this);
     	// trace("onKeyDown event = " + event);
 		// if the target is in a bridged application, let it handle the click.
 		var sm:ISystemManager = form.systemManager;
-   		if (sm.isDisplayObjectInABridgedApplication(DisplayObject(event.target)))
+
+		if (!dispatchEvent(new FocusEvent("keyDownFM", false, true, InteractiveObject(event.target))))
    			return;
 
         if (sm is SystemManager)

		// If we are about to wrap focus around, send focus back to the parent.
		if (!popup && focusInfo.wrapped)
		{
			if (getParentBridge())
			{
				moveFocusToParent(shiftKey);
				return;
			}
		}
		
		setFocusToComponent(focusInfo.displayObject, shiftKey);
	} 
	
    /**
     *  @inheritDoc

                    // trace("FM removed " + o);
                    o.removeEventListener("tabEnabledChange", tabEnabledChangeHandler);
                    o.removeEventListener("tabIndexChange", tabIndexChangeHandler);
                    focusableObjects.splice(i, 1);
                    focusableCandidates = [];
                    calculateCandidates = true;                 
                    break;
