     override protected function eventHandler(event:Event):void
     {
         var textInput:TextInput;
-        if (event is IndexChangeEvent)
-        {
-            var tweaked_event:Event = event.clone();
-            IndexChangeEvent(tweaked_event).oldIndex += 1;
-            IndexChangeEvent(tweaked_event).newIndex += 1;
-            super.eventHandler(tweaked_event);
-        } 
                 
         switch (event.type)
         {
             case "open":
             {
                 Accessibility.sendEvent(master, 0, AccConst.EVENT_OBJECT_STATECHANGE);
+                
+                var sIndex:uint = ComboBox(master).selectedIndex;
+                if (sIndex >= 0)
+                {
+                    // when the combo box is opened, fire an event indicating
+                    // which item is selected/focused (focus and selection are the
+                    // same for the combo box
+                    Accessibility.sendEvent(master, sIndex + 2,
+                        AccConst.EVENT_OBJECT_FOCUS);
+                }
                 break;
             }
 
             case "focusIn":
             {
                 Accessibility.sendEvent(master, 0, AccConst.EVENT_OBJECT_FOCUS);
+                if (master.getFocus() == master && ComboBox(master).textInput)
+                {
+                    // when the component receives focus, focus the text input
+                    // field of the combobox
+                    ComboBox(master).textInput.setFocus();
+                }
                 break;
             }
 
             case "caretChange":
             {
                 var index:uint = IndexChangeEvent(event).newIndex;
-                var childID:uint = index + 2;
-                if (!ComboBox(master).isDropDownOpen) { 
-                    Accessibility.sendEvent(master, 0,
+                // childIDs are 1 based, a plus two offset is used because the 
+                // first child is an edit field and not a list item
+                var childID:uint = index + 2; 
+                
+                Accessibility.sendEvent(master, 0,
                         AccConst.EVENT_OBJECT_VALUECHANGE);
-                    Accessibility.sendEvent(master, 1,
+                Accessibility.sendEvent(master, 1,
                         AccConst.EVENT_OBJECT_VALUECHANGE);
-					Accessibility.sendEvent(master, childID,
-						AccConst.EVENT_OBJECT_FOCUS);   
+                // This event will fire for the opened and close combo box
+                // normally this only fires on open comboboxes but it is fired
+                // for closed comboboxes to support screen readers
+                if (ComboBox(master).isDropDownOpen && index >=0 && index < ComboBox(master).dataProvider.length) 
+                {
+                	Accessibility.sendEvent(master, childID,
+						AccConst.EVENT_OBJECT_FOCUS);
                 }
                 
                 break;
             }
-                
+            
+            case "change":
+            {
+                index = IndexChangeEvent(event).newIndex;
+
+                if (index >= 0 && ComboBox(master).isDropDownOpen)
+                {
+                    // childIDs are 1 based, a plus two offset is used because the 
+                    // first child is an edit field and not a list item
+                    childID = index + 2;
+                    Accessibility.sendEvent(master, childID,
+                                            AccConst.EVENT_OBJECT_SELECTION);
+                }
+                break;
+            }
+            
+            case "close":
+            {
+                if (master.getFocus() && master.owns(master.getFocus()) 
+                    && ComboBox(master).textInput)
+                {
+                    ComboBox(master).textInput.textDisplay.setFocus();
+                    // place the cursor at the beginning of the field, otherwise
+                    // text cannot be entered and characters can not be reviewed 
+                    // without tabbing in and out, or pressing up or down arrows 
+                    // changing the values
+                    ComboBox(master).textInput.selectRange(0,0);
+                    Accessibility.sendEvent(master, 1, AccConst.EVENT_OBJECT_FOCUS);
+                }
+
+                break;
+            }
+
             case SkinPartEvent.PART_ADDED:
             {
                 textInput = ComboBox(master).textInput;

    override public function getChildIDArray():Array
    {
        var childIDArray:Array = super.getChildIDArray();
        childIDArray[childIDArray.length] = childIDArray.length;
        return childIDArray;
    }
    

    override public function get_accFocus():uint
    {
        var index:uint = super.get_accFocus();
        if (ComboBox(master).isDropDownOpen)
            return index > 0 ? index + 1 : 0;
        else if (master.getFocus() && master.owns(master.getFocus()))
            return 1;  // return child edit field if it is focused
        
        return 0;      
    }
    
    /**
