     //  Overridden Methods
     //
     //--------------------------------------------------------------------------
-    
+
+	private var requiresSelectionChanging:Boolean;
+
+    /**
+     *  @private
+     */
+    override public function set requiresSelection(value:Boolean):void
+	{
+		super.requiresSelection = value;
+		requiresSelectionChanging = true;
+	}
+
+	private var enabledChanging:Boolean;
+
+    /**
+     *  @private
+     */
+    override public function set enabled(value:Boolean):void
+	{
+		super.enabled = value;
+		enabledChanging = true;
+	}
+
+    /**
+     *  @private
+     */
+    override protected function commitProperties():void
+    {
+		super.commitProperties();
+
+        if (requiresSelectionChanging)
+		{
+			requiresSelectionChanging = false;
+			var n:int = dataProvider.length;
+			for (var i:int = 0; i < n; i++)
+			{
+				var renderer:ISelectableRenderer = 
+					dataGroup.getRendererForItemAt(i) as ISelectableRenderer;
+				if (renderer)
+					renderer.allowDeselection = !requiresSelection;
+			}
+		}
+    }
+
+    /**
+     *  @private
+     */
+    override protected function updateDisplayList(w:Number, h:Number):void
+    {
+		super.updateDisplayList(w, h);
+
+        if (enabledChanging)
+		{
+			enabledChanging = false;
+			if (dataProvider)
+			{
+				var n:int = dataProvider.length;
+				for (var i:int = 0; i < n; i++)
+				{
+					var renderer:ISelectableRenderer = 
+						dataGroup.getRendererForItemAt(i) as ISelectableRenderer;
+					if (renderer)
+						renderer.enabled = enabled;
+				}
+			}
+		}
+    }
+
+    /**
+     *  @private
+     */
+    override public function drawFocus(isFocused:Boolean):void
+    {
+        drawButtonFocus(focusedIndex, isFocused);
+    }
+
     /**
      *  @private
      */

    {
        var index:int = dataGroup.getItemIndexForRenderer(
                            event.currentTarget as IVisualElement);
		
		selectedIndex = index;
    }
    
    /**

	 *  Attempt to lift the focused button above the others
	 *  so that the focus ring can show.
     */
    private function adjustLayering(focusedIndex:int):void
    {
		var n:int = dataProvider.length;
		for (var i:int = 0; i < n; i++)
		{
			var renderer:IVisualElement = IVisualElement(dataGroup.getRendererForItemAt(i));
			if (i == focusedIndex)
				renderer.layer = 1;
			else
				renderer.layer = 0;
		}
	}

