You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ha...@apache.org on 2020/07/12 14:39:42 UTC

[royale-asjs] branch develop updated: Cleaned up beads

This is an automated email from the ASF dual-hosted git repository.

harbs pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new ef427c6  Cleaned up beads
ef427c6 is described below

commit ef427c6ed0373c725501614bdacb79acba5cefd3
Author: Harbs <ha...@in-tools.com>
AuthorDate: Sun Jul 12 17:39:26 2020 +0300

    Cleaned up beads
---
 .../royale/html/accessories/AdaptiveToolTipBead.as |   3 +-
 .../html/accessories/NumericOnlyTextInputBead.as   |  65 ++++++-------
 .../royale/html/accessories/PasswordInputBead.as   |  19 ++--
 .../html/accessories/RestrictTextInputBead.as      | 107 ++++++++++-----------
 .../royale/html/accessories/TextPromptBead.as      |  15 ++-
 .../apache/royale/html/accessories/ToolTipBead.as  |  11 +--
 .../html/beads/AbsolutePositioningViewBeadBase.as  |  23 +----
 .../royale/html/beads/AccessibilityAltBead.as      |  22 +++--
 .../royale/html/beads/AccordionItemRendererView.as |   2 +-
 .../royale/html/beads/AlertMeasurementBead.as      |  18 +---
 .../royale/html/beads/CascadingMenuFactory.as      |  19 +---
 .../org/apache/royale/html/beads/CenterElement.as  |  22 ++++-
 .../CollectionChangeUpdateForArrayListData.as      |  12 +--
 .../html/beads/CollectionSelectedItemByField.as    |  74 +++++++-------
 .../apache/royale/html/beads/DataContainerView.as  |   1 -
 .../royale/html/beads/DataFieldProviderBead.as     |  22 +----
 .../html/beads/DataGridColumnChangePropagator.as   |  12 +--
 .../apache/royale/html/beads/DisableLoaderBead.as  |   8 +-
 .../apache/royale/html/beads/DisabledAlphaBead.as  | 105 ++++++++++----------
 .../royale/html/beads/DispatchInputFinishedBead.as |   6 +-
 .../royale/html/beads/DispatchKeyboardEventBead.as |  15 +--
 .../royale/html/beads/DividedContainerView.as      |  24 ++---
 ...cRemoveAllByNullItemRendererForArrayListData.as |  45 +++++----
 ...DynamicRemoveAllItemRendererForArrayListData.as |  19 ++--
 .../DynamicRemoveItemRendererForArrayListData.as   |  14 +--
 .../royale/html/beads/ItemRendererFactoryBase.as   |  19 +---
 .../org/apache/royale/html/beads/ListView.as       |  13 ---
 .../org/apache/royale/html/beads/MenuFactory.as    |  20 +---
 .../org/apache/royale/html/beads/MenuView.as       |  10 --
 .../html/beads/ShrinkableDisableLoaderBead.as      |  22 +++--
 .../royale/html/beads/SingleLineBorderBead.as      |  33 +++----
 .../SingleLineBorderWithChangeListenerBead.as      |   3 +-
 .../html/beads/SingleSelectionContainerBead.as     |  21 ++--
 .../org/apache/royale/html/beads/SliderView.as     |  17 ++--
 .../royale/html/beads/StyleInheritanceBead.as      |  14 ++-
 .../TextItemRendererFactoryForStringVectorData.as  |  12 +--
 .../org/apache/royale/html/beads/ThrottleBead.as   |  51 +++++-----
 .../royale/html/beads/TitleBarMeasurementBead.as   |  17 +---
 .../royale/html/beads/VerticalAlignChildren.as     |  31 ++----
 .../beads/VirtualDataItemRendererFactoryBase.as    |   9 +-
 .../html/beads/controllers/AlertController.as      |  16 ++-
 .../CascadingMenuSelectionMouseController.as       |  16 ---
 .../controllers/ColorSpectrumMouseController.as    |  52 +++++-----
 .../html/beads/controllers/ComboBoxController.as   |  10 +-
 .../HDividedContainerMouseController.as            |  35 ++++---
 .../ListMultiSelectionMouseController.as           |  11 +--
 .../controllers/MenuSelectionMouseController.as    |   2 -
 .../beads/controllers/SpinnerMouseController.as    |  57 ++++++-----
 .../TreeSingleSelectionMouseController.as          |  11 ---
 .../VDividedContainerMouseController.as            |  38 ++++----
 .../royale/html/beads/layouts/DataGridLayout.as    |  82 ++++++++--------
 .../html/beads/layouts/DataGridPercentageLayout.as |  23 ++---
 .../royale/html/beads/layouts/TreeGridLayout.as    |  38 +++-----
 .../html/beads/layouts/VDividedContainerLayout.as  |  11 ---
 .../apache/royale/html/beads/models/AlertModel.as  |  21 +---
 .../html/beads/models/ArrayListSelectionModel.as   |  20 +---
 .../html/beads/models/ArraySelectionModel.as       |  19 +---
 .../royale/html/beads/models/CascadingMenuModel.as |   9 +-
 .../html/beads/models/DataGridPresentationModel.as |  14 ---
 .../royale/html/beads/models/DataProviderModel.as  |  18 +---
 .../royale/html/beads/models/DateChooserModel.as   |  20 +---
 .../html/beads/models/DividedContainerModel.as     |  13 +--
 .../apache/royale/html/beads/models/ImageModel.as  |  20 +---
 .../html/beads/models/ListPresentationModel.as     |  19 +---
 .../apache/royale/html/beads/models/MenuModel.as   |   4 -
 .../models/MultiSelectionCollectionViewModel.as    |  18 +---
 .../apache/royale/html/beads/models/RangeModel.as  |  18 +---
 .../models/SingleSelectionCollectionViewModel.as   |  24 +----
 .../apache/royale/html/beads/models/TextModel.as   |  22 +----
 .../royale/html/beads/models/TitleBarModel.as      |  23 +----
 .../royale/html/beads/models/ToggleButtonModel.as  |  25 +----
 .../royale/html/beads/models/ViewportModel.as      |   9 +-
 .../royale/html/beads/models/WebBrowserModel.as    |  18 +---
 .../royale/html/beads/plugin/ModalDisplay.as       |  40 +-------
 .../royale/html/beads/plugin/ModalOverlay.as       |  41 +-------
 .../supportClasses/DataProviderNotifierBase.as     |   7 +-
 .../supportClasses/HDividedContainerGripper.as     |  15 ++-
 .../supportClasses/VDividedContainerGripper.as     |  18 ++--
 78 files changed, 653 insertions(+), 1179 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/AdaptiveToolTipBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/AdaptiveToolTipBead.as
index 3307452..096d2f4 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/AdaptiveToolTipBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/AdaptiveToolTipBead.as
@@ -72,8 +72,7 @@ package org.apache.royale.html.accessories
 		{
 			if (!toolTip || tt)
 				return;
-
-			(_strand as IEventDispatcher).addEventListener(MouseEvent.MOUSE_OUT, rollOutHandler, false);
+			listenOnStrand(MouseEvent.MOUSE_OUT, rollOutHandler);
 
 			var comp:IUIBase = _strand as IUIBase
 			host = UIUtils.findPopUpHost(comp);
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/NumericOnlyTextInputBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/NumericOnlyTextInputBead.as
index b81749e..c73b836 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/NumericOnlyTextInputBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/NumericOnlyTextInputBead.as
@@ -25,18 +25,16 @@ package org.apache.royale.html.accessories
 	COMPILE::SWF
 	{
 		import flash.events.TextEvent;
-		
 		import org.apache.royale.core.CSSTextField;			
+		import org.apache.royale.html.beads.ITextFieldView;			
 	}
 	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IStrand;
-    import org.apache.royale.core.UIBase;
+	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
-	COMPILE::SWF
-	{
-		import org.apache.royale.html.beads.ITextFieldView;			
-	}
+	import org.apache.royale.core.Bead;
+	import org.apache.royale.core.IRenderedObject;
 	
 	/**
 	 *  The NumericOnlyTextInputBead class is a specialty bead that can be used with
@@ -48,7 +46,7 @@ package org.apache.royale.html.accessories
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.8
 	 */
-	public class NumericOnlyTextInputBead implements IBead
+	public class NumericOnlyTextInputBead extends Bead
 	{
 		/**
 		 *  constructor.
@@ -61,9 +59,7 @@ package org.apache.royale.html.accessories
 		public function NumericOnlyTextInputBead()
 		{
 		}
-		
-		private var _strand:IStrand;
-		
+				
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
 		 *  
@@ -71,9 +67,9 @@ package org.apache.royale.html.accessories
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.8
-		 *  @royaleignorecoercion org.apache.royale.core.UIBase
+		 *  @royaleignorecoercion org.apache.royale.core.IRenderedObject
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			
@@ -83,8 +79,7 @@ package org.apache.royale.html.accessories
 			}
 			COMPILE::JS
 			{
-                var host:UIBase = _strand as UIBase;
-                host.element.addEventListener("keypress", validateInput, false);
+				(_strand as IRenderedObject).element.addEventListener("keypress", validateInput, false);
 			}
 		}
 		
@@ -109,28 +104,28 @@ package org.apache.royale.html.accessories
 			}
 		}
 		
-        private var _maxChars:int = 0;
-        
-        /**
-         *  The character used to separate the integer and fraction parts of numbers.
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.8
-         */
-        public function get maxChars():int
-        {
-            return _maxChars;
-        }
-        public function set maxChars(value:int):void
-        {
-            if (_maxChars != value) {
-                _maxChars = value;
-            }
-        }
+		private var _maxChars:int = 0;
+		
+		/**
+		 *  The character used to separate the integer and fraction parts of numbers.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.8
+		 */
+		public function get maxChars():int
+		{
+			return _maxChars;
+		}
+		public function set maxChars(value:int):void
+		{
+			if (_maxChars != value) {
+				_maxChars = value;
+			}
+		}
 
-        /**
+		/**
 		 * @private
 		 */
 		COMPILE::SWF
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/PasswordInputBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/PasswordInputBead.as
index 2996991..7638641 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/PasswordInputBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/PasswordInputBead.as
@@ -27,6 +27,8 @@ package org.apache.royale.html.accessories
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.core.Bead;
+	import org.apache.royale.core.IRenderedObject;
 	COMPILE::SWF
 	{
 		import org.apache.royale.html.beads.ITextFieldView;
@@ -42,7 +44,7 @@ package org.apache.royale.html.accessories
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class PasswordInputBead implements IBead
+	public class PasswordInputBead extends Bead
 	{
 		/**
 		 *  constructor.
@@ -55,20 +57,11 @@ package org.apache.royale.html.accessories
 		public function PasswordInputBead()
 		{
 		}
-		
-		protected var _strand:IStrand;
-		
 		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9
-		 *  @royaleignorecoercion org.apache.royale.core.UIBase
+		 *  @royaleignorecoercion org.apache.royale.core.IRenderedObject
 		 *  @royaleignorecoercion HTMLInputElement
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			
@@ -78,7 +71,7 @@ package org.apache.royale.html.accessories
 			}
 			COMPILE::JS
 			{
-				var host:UIBase = value as UIBase;
+				var host:IRenderedObject = value as IRenderedObject;
 				var e:HTMLInputElement = host.element as HTMLInputElement;
 				e.type = 'password';
 			}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/RestrictTextInputBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/RestrictTextInputBead.as
index b80b467..ab397f8 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/RestrictTextInputBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/RestrictTextInputBead.as
@@ -25,7 +25,7 @@ package org.apache.royale.html.accessories
 	COMPILE::SWF
 	{
 		import flash.events.TextEvent;
-		
+		import org.apache.royale.html.beads.ITextFieldView;			
 		import org.apache.royale.core.CSSTextField;			
 	}
 	import org.apache.royale.core.IBead;
@@ -33,10 +33,8 @@ package org.apache.royale.html.accessories
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
-	COMPILE::SWF
-	{
-		import org.apache.royale.html.beads.ITextFieldView;			
-	}
+	import org.apache.royale.core.Bead;
+	import org.apache.royale.core.IRenderedObject;
 	
 	/**
 	 *  The RestrictTextInputBead class is a specialty bead that can be used with
@@ -49,7 +47,7 @@ package org.apache.royale.html.accessories
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.8
 	 */
-	public class RestrictTextInputBead implements IBead
+	public class RestrictTextInputBead extends Bead
 	{
 		/**
 		 *  constructor.
@@ -63,8 +61,6 @@ package org.apache.royale.html.accessories
 		{
 		}
 		
-		private var _strand:IStrand;
-		
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
 		 *  
@@ -72,9 +68,9 @@ package org.apache.royale.html.accessories
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.8
-		 *  @royaleignorecoercion org.apache.royale.core.UIBase
+		 *  @royaleignorecoercion org.apache.royale.core.IRenderedObject
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			
@@ -84,9 +80,9 @@ package org.apache.royale.html.accessories
 			}
 			COMPILE::JS
 			{
-                var host:UIBase = _strand as UIBase;
-                host.element.addEventListener("keypress", validateKeypress, false);
-                host.element.addEventListener("input", validateInput, false);
+				var host:IRenderedObject = _strand as IRenderedObject;
+				host.element.addEventListener("keypress", validateKeypress, false);
+				host.element.addEventListener("input", validateInput, false);
 			}
 		}
 		
@@ -107,7 +103,7 @@ package org.apache.royale.html.accessories
 		public function set restrict(value:String):void
 		{
 			if (_restrict != value) {
-                _restrict = value;
+				_restrict = value;
 			}
 		}
 		
@@ -136,48 +132,49 @@ package org.apache.royale.html.accessories
 			
 			var key:String = String.fromCharCode(code);
 			
-            if (restrict)
-            {
-    			var regex:RegExp = new RegExp("[" + restrict + "]");
-    			if (!regex.test(key)) {
-    				event["returnValue"] = false;
-    				if (event.preventDefault) event.preventDefault();
-    				return;
-    			}
-            }
+			if (restrict)
+			{
+				var regex:RegExp = new RegExp("[" + restrict + "]");
+				if (!regex.test(key)) {
+					event["returnValue"] = false;
+					if (event.preventDefault) event.preventDefault();
+					return;
+				}
+			}
 		}
         
-        /**
-         *  @royaleignorecoercion HTMLInputElement 
-         */
-        COMPILE::JS
-        private function validateInput(event:BrowserEvent):void
-        {            
-            var host:UIBase = _strand as UIBase;
-            var data:String = (host.element as HTMLInputElement).value;
-            
-            if (restrict && data != null && data.length > 0)
-            {
-                var regex:RegExp = new RegExp("[" + restrict + "]");
-                var out:String = "";
-                var n:int = data.length;
-                var blocked:Boolean = false;
-                for (var i:int = 0; i < n; i++)
-                {
-                    var key:String = data.charAt(i);
-                    if (regex.test(key)) {
-                        out += key;
-                    }
-                    else
-                        blocked = true;
-                }
-                if (blocked) 
-                {
-                    event["returnValue"] = false;
-                    if (event.preventDefault) event.preventDefault();
-                    (host.element as HTMLInputElement).value = out;                    
-                }
-            }
-        }
+		/**
+		 *  @royaleignorecoercion HTMLInputElement 
+		 *  @royaleignorecoercion org.apache.royale.core.IRenderedObject
+		 */
+		COMPILE::JS
+		private function validateInput(event:BrowserEvent):void
+		{            
+			var host:IRenderedObject = _strand as IRenderedObject;
+			var data:String = (host.element as HTMLInputElement).value;
+			
+			if (restrict && data != null && data.length > 0)
+			{
+				var regex:RegExp = new RegExp("[" + restrict + "]");
+				var out:String = "";
+				var n:int = data.length;
+				var blocked:Boolean = false;
+				for (var i:int = 0; i < n; i++)
+				{
+					var key:String = data.charAt(i);
+					if (regex.test(key)) {
+						out += key;
+					}
+					else
+						blocked = true;
+				}
+				if (blocked) 
+				{
+					event["returnValue"] = false;
+					if (event.preventDefault) event.preventDefault();
+					(host.element as HTMLInputElement).value = out;                    
+				}
+			}
+		}
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/TextPromptBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/TextPromptBead.as
index 2865d37..cdbd53f 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/TextPromptBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/TextPromptBead.as
@@ -30,6 +30,7 @@ package org.apache.royale.html.accessories
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.core.Bead;
 	
 	/**
 	 *  The TextPromptBead class is a specialty bead that can be used with
@@ -41,7 +42,7 @@ package org.apache.royale.html.accessories
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class TextPromptBead implements IBead
+	public class TextPromptBead extends Bead
 	{
 		/**
 		 *  constructor.
@@ -74,8 +75,6 @@ package org.apache.royale.html.accessories
 			_prompt = value;
 		}
 		
-		private var _strand:IStrand;
-		
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
 		 *  
@@ -86,7 +85,7 @@ package org.apache.royale.html.accessories
 		 *  @royaleignorecoercion HTMLInputElement
 		 *  @royaleignorecoercion org.apache.royale.core.UIBase;
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			
@@ -142,10 +141,10 @@ package org.apache.royale.html.accessories
 				if (!promptAdded) UIBase(_strand).$sprite_addChild(promptField);
 				promptField.text = prompt;
 				promptAdded = true;
-                promptField.x = 2;
-                promptField.y = 2;
-                promptField.width = UIBase(_strand).width-5;
-                promptField.height = UIBase(_strand).height-4;
+				promptField.x = 2;
+				promptField.y = 2;
+				promptField.width = UIBase(_strand).width-5;
+				promptField.height = UIBase(_strand).height-4;
 
 			}
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/ToolTipBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/ToolTipBead.as
index 52cb0bf..261bd34 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/ToolTipBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/accessories/ToolTipBead.as
@@ -29,6 +29,7 @@ package org.apache.royale.html.accessories
 	import org.apache.royale.html.ToolTip;
 	import org.apache.royale.utils.PointUtils;
 	import org.apache.royale.utils.UIUtils;
+	import org.apache.royale.core.Bead;
 
 	/**
 	 *  The ToolTipBead class is a specialty bead that can be used with
@@ -40,7 +41,7 @@ package org.apache.royale.html.accessories
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class ToolTipBead implements IBead, IToolTipBead
+	public class ToolTipBead extends Bead implements IToolTipBead
 	{
 		/**
 		 *  constructor.
@@ -118,8 +119,6 @@ package org.apache.royale.html.accessories
 			return _yPos;
 		}
 
-		protected var _strand:IStrand;
-
 		/**                         	
 		 *  @copy org.apache.royale.core.IBead#strand
 		 *
@@ -127,13 +126,11 @@ package org.apache.royale.html.accessories
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
-
-			IEventDispatcher(_strand).addEventListener(MouseEvent.MOUSE_OVER, rollOverHandler, false);
+			listenOnStrand(MouseEvent.MOUSE_OVER, rollOverHandler);
 		}
 
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AbsolutePositioningViewBeadBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AbsolutePositioningViewBeadBase.as
index 0d04956..41dbe5e 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AbsolutePositioningViewBeadBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AbsolutePositioningViewBeadBase.as
@@ -23,6 +23,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IUIBase;
 	import org.apache.royale.core.ElementWrapper;
+	import org.apache.royale.core.BeadViewBase;
 
 	COMPILE::JS
 	{
@@ -46,7 +47,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.8
 	 */
-	public class AbsolutePositioningViewBeadBase implements IBeadView
+	public class AbsolutePositioningViewBeadBase extends BeadViewBase
 	{		
 		/**
 		 * Constructor.
@@ -60,22 +61,7 @@ package org.apache.royale.html.beads
 		{
 			super();
 		}
-		
-		protected var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBeaViewd#host
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.8
-		 */
-		public function get host():IUIBase
-		{
-			return IUIBase(_strand);
-		}
-		
+				
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
 		 *
@@ -85,7 +71,7 @@ package org.apache.royale.html.beads
 		 *  @productversion Royale 0.8
      * @royaleignorecoercion org.apache.royale.core.ElementWrapper
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			
@@ -106,6 +92,7 @@ package org.apache.royale.html.beads
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.8
      * @royaleignorecoercion org.apache.royale.core.ElementWrapper
+     * @royaleignorecoercion org.apache.royale.core.IUIBase
 		 */
 		public function setAbsolutePosition(child:IChild, x:Number, y:Number):void
 		{
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AccessibilityAltBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AccessibilityAltBead.as
index 9724129..b573446 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AccessibilityAltBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AccessibilityAltBead.as
@@ -19,16 +19,17 @@
 package org.apache.royale.html.beads
 {
 
-	import org.apache.royale.core.IBead;
+	COMPILE::SWF {
+		import org.apache.royale.html.accessories.ToolTipBead;
+	}
+
+	import org.apache.royale.core.Bead;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.events.ValueEvent;
 	import org.apache.royale.utils.sendEvent;
 	import org.apache.royale.utils.sendStrandEvent;
 
-	COMPILE::SWF {
-		import org.apache.royale.html.accessories.ToolTipBead;
-	}
 
 /**
 	 *  The AccessibilityAltBead class is a bead that can be used with
@@ -40,7 +41,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class AccessibilityAltBead implements IBead
+	public class AccessibilityAltBead extends Bead
 	{
 		/**
 		 *  constructor.
@@ -54,7 +55,6 @@ package org.apache.royale.html.beads
 		{
 		}
 		
-		private var _strand:IStrand;
 		private var _alt:String;
 		
 		/**
@@ -67,7 +67,7 @@ package org.apache.royale.html.beads
 		 *  @royaleignorecoercion HTMLInputElement
 		 *  @royaleignorecoercion org.apache.royale.core.UIBase;
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{	
 			_strand = value;
 			updateHost();
@@ -89,7 +89,9 @@ package org.apache.royale.html.beads
 				updateHost();
 			}
 		}
-
+		/**
+     * @royaleignorecoercion Object
+		 */
 		private function updateHost():void
 		{
 			if(!_strand)
@@ -105,8 +107,8 @@ package org.apache.royale.html.beads
 			}
 			
 			COMPILE::JS {
-                (_strand as Object).element.alt = _alt;
-            }
+				(_strand as Object).element.alt = _alt;
+			}
 
 			sendStrandEvent(_strand,new ValueEvent("altChange", alt));
 				
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AccordionItemRendererView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AccordionItemRendererView.as
index 9504559..a7115d6 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AccordionItemRendererView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AccordionItemRendererView.as
@@ -56,7 +56,7 @@ package org.apache.royale.html.beads
 		{
 			// don't do anything here.  No need to complete setup
 			// until after data is set.
-			(_strand as IEventDispatcher).addEventListener("dataChange", dataChangeHandler);
+			listenOnStrand("dataChange", dataChangeHandler);
 		}
 		
 		private function dataChangeHandler(event:Event):void
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AlertMeasurementBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AlertMeasurementBead.as
index 66721c1..c65fc4a 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AlertMeasurementBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/AlertMeasurementBead.as
@@ -19,7 +19,7 @@
 package org.apache.royale.html.beads
 {
 	import org.apache.royale.core.IMeasurementBead;
-	import org.apache.royale.core.IStrand;
+	import org.apache.royale.core.Bead;
 	
 	/**
 	 *  The AlertMeasureBead class provides boundary measurements for an 
@@ -30,7 +30,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class AlertMeasurementBead implements IMeasurementBead
+	public class AlertMeasurementBead extends Bead implements IMeasurementBead
 	{
 		/**
 		 *  constructor.
@@ -70,19 +70,5 @@ package org.apache.royale.html.beads
 			return 0;
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CascadingMenuFactory.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CascadingMenuFactory.as
index 147813a..a31d65c 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CascadingMenuFactory.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CascadingMenuFactory.as
@@ -18,10 +18,10 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IFactory;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.html.CascadingMenu;
+	import org.apache.royale.core.Bead;
 	
 	/**
 	 * This bead class generates instances of the CascadingMenu for use with MenuBar.
@@ -31,7 +31,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class CascadingMenuFactory implements IBead, IFactory
+	public class CascadingMenuFactory extends Bead implements IFactory
 	{
 		/**
 		 * Constructor.
@@ -45,21 +45,6 @@ package org.apache.royale.html.beads
 		{
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 * @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-		
 		/**
 		 * Returns a new instance of CascadingMenu.
 		 *  
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CenterElement.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CenterElement.as
index 7c2fbd9..bd932bc 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CenterElement.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CenterElement.as
@@ -26,6 +26,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.core.Bead;
 	
 	/**
 	 *  The CenterElement bead breaks the normal layout flow and forces
@@ -38,20 +39,24 @@ package org.apache.royale.html.beads
 	 *  @productversion Royale 0.0
 	 */
 	
-	public class CenterElement implements IBead
+	public class CenterElement extends Bead
 	{
-		private var _strand:IStrand;
 		public function CenterElement()
 		{
 		}
-		
-		public function set strand(value:IStrand):void
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.IChild
+		 */
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			var layoutParent:ILayoutParent = getLayoutParent((value as IChild).parent);
-			IEventDispatcher(layoutParent).addEventListener('layoutComplete', layoutCompleteHandler);
+			listenOnStrand('layoutComplete', layoutCompleteHandler);
 		}
 		
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.ILayoutChild
+		 */
 		private function layoutCompleteHandler(e:Event):void
 		{
 			var childWidth:Number = host.width;
@@ -62,11 +67,18 @@ package org.apache.royale.html.beads
 			host.y = (parentHeight - childHeight) / 2;
 		}
 		
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.ILayoutChild
+		 */
 		private function get host():ILayoutChild
 		{
 			return _strand as ILayoutChild;
 		}
 		
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.ILayoutParent
+		 * @royaleignorecoercion org.apache.royale.core.IChild
+		 */
 		private function getLayoutParent(value:IParent):ILayoutParent
 		{
 			while (value)
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CollectionChangeUpdateForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CollectionChangeUpdateForArrayListData.as
index 95b8e11..1c5ca92 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CollectionChangeUpdateForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CollectionChangeUpdateForArrayListData.as
@@ -18,13 +18,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.CollectionEvent;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.utils.sendBeadEvent;
+	import org.apache.royale.core.Bead;
 
 
     /**
@@ -36,7 +36,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.4
 	 */
-	public class CollectionChangeUpdateForArrayListData implements IBead
+	public class CollectionChangeUpdateForArrayListData extends Bead
 	{
 		/**
 		 *  Constructor
@@ -50,9 +50,7 @@ package org.apache.royale.html.beads
 		{
 		}
 
-		protected var _strand:IStrand;
-
-        protected var labelField:String;
+		protected var labelField:String;
 
 		/**
 		 *  @copy org.apache.royale.core.IStrand
@@ -63,10 +61,10 @@ package org.apache.royale.html.beads
 		 *  @productversion Royale 0.9.4
 		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			IEventDispatcher(value).addEventListener("initComplete", initComplete);
+			listenOnStrand("initComplete", initComplete);
 		}
 
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CollectionSelectedItemByField.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CollectionSelectedItemByField.as
index ea284fd..a2fe229 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CollectionSelectedItemByField.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CollectionSelectedItemByField.as
@@ -18,13 +18,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-  import org.apache.royale.core.IBead;
   import org.apache.royale.core.IStrand;
   import org.apache.royale.collections.CollectionUtils;
   import org.apache.royale.events.Event;
   import org.apache.royale.collections.ICollectionView;
   import org.apache.royale.core.ISelectionModel;
   import org.apache.royale.events.IEventDispatcher;
+  import org.apache.royale.core.Bead;
   
   /**
 	 *  The CollectionSelectedItemByField class is a specialty bead that can be used with
@@ -36,10 +36,9 @@ package org.apache.royale.html.beads
 	 *  @productversion Royale 0.9.8
 	 */
 
-  public class CollectionSelectedItemByField implements IBead{
+  public class CollectionSelectedItemByField extends Bead{
 
       protected var _model:ISelectionModel;
-	  protected var _strand:IStrand;
 
 	  
 		/**
@@ -61,12 +60,13 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.8
+		 *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
 		 */
-        public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			_model = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
-			(_strand as IEventDispatcher).addEventListener("selectionChanged", selectionChangedHandler);
+			listenOnStrand("selectionChanged", selectionChangedHandler);
 			updateHost();
 		}
 
@@ -79,17 +79,17 @@ package org.apache.royale.html.beads
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.8
 		 */
-        public function get valueField():String
-        {
-            return _valueField;
-        }
-        public function set valueField(value:String):void
-        {
-            _valueField = value;
+		public function get valueField():String
+		{
+			return _valueField;
+		}
+		public function set valueField(value:String):void
+		{
+				_valueField = value;
 			updateHost();
-        }
+		}
 
-        private var _selectedValue:*;
+		private var _selectedValue:*;
 		
 		/**
 		 *  Any kind of object to perform the comparison or select
@@ -100,29 +100,29 @@ package org.apache.royale.html.beads
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.8
 		 */
-        public function get selectedValue():*{
-            return _selectedValue;
-        }
+		public function get selectedValue():*{
+			return _selectedValue;
+		}
 
-        public function set selectedValue(value:*):void{
-            _selectedValue = value;
-            updateHost();
-        }
+		public function set selectedValue(value:*):void{
+			_selectedValue = value;
+			updateHost();
+		}
 		
 		/**
 		 *  This bead allows update the selected item of the component through the entered field 
 		 */
-        protected function updateHost():void
+		protected function updateHost():void
 		{
 			if(_model && valueField != "" && selectedValue != null){
-			    var aux:* = CollectionUtils.getItemByField(_model.dataProvider as ICollectionView,valueField,selectedValue);
-                if(aux == null){
-                    _model.selectedItem = null;
-                    _model.selectedIndex = -1;
-                } else if (aux!==_model.selectedItem){
-                    _model.selectedItem = aux;
-                }
-            }
+				var aux:* = CollectionUtils.getItemByField(_model.dataProvider as ICollectionView,valueField,selectedValue);
+					if(aux == null){
+						_model.selectedItem = null;
+						_model.selectedIndex = -1;
+					} else if (aux!==_model.selectedItem){
+						_model.selectedItem = aux;
+					}
+			}
 		}
 		
 		/**
@@ -130,13 +130,13 @@ package org.apache.royale.html.beads
 		 * 
 		 *  @param event 
 		 */
-        protected function selectionChangedHandler(event:Event):void{
-            if(valueField != "" && _model){
-                var selectedItem:Object = _model.selectedItem;
-                if(selectedItem != null && selectedValue !== selectedItem[valueField])
-                    selectedValue = selectedItem[valueField];
-            }
-        }
+		protected function selectionChangedHandler(event:Event):void{
+			if(valueField != "" && _model){
+				var selectedItem:Object = _model.selectedItem;
+				if(selectedItem != null && selectedValue !== selectedItem[valueField])
+					selectedValue = selectedItem[valueField];
+			}
+		}
 
   }   
 }
\ No newline at end of file
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as
index f320769..9c1cd8b 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataContainerView.as
@@ -72,7 +72,6 @@ package org.apache.royale.html.beads
 		 */
 		override public function set strand(value:IStrand):void
 		{
-			_strand = value;
 			super.strand = value;
 			
             // Even though super.addedToParent dispatched "beadsAdded", DataContainer still needs its data mapper
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataFieldProviderBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataFieldProviderBead.as
index 58149c7..dbfcea3 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataFieldProviderBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataFieldProviderBead.as
@@ -18,10 +18,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-	import org.apache.royale.core.IStrand;
-	import org.apache.royale.events.Event;
-	import org.apache.royale.events.EventDispatcher;
-    import org.apache.royale.core.IBead;
+    import org.apache.royale.core.Bead;
 
     /**
      *  The DataFieldProviderBead class is a model that holds dataField used mostly
@@ -32,7 +29,7 @@ package org.apache.royale.html.beads
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9
      */
-	public class DataFieldProviderBead implements IBead
+	public class DataFieldProviderBead extends Bead
 	{
         /**
          *  Constructor.
@@ -46,21 +43,6 @@ package org.apache.royale.html.beads
 		{
 		}
 
-		private var _strand:IStrand;
-		
-        /**
-         *  @copy org.apache.royale.core.IBead#strand
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9
-         */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-
 		private var _dataField:String = null;
 		
         /**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridColumnChangePropagator.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridColumnChangePropagator.as
index a7806cc..70a6849 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridColumnChangePropagator.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridColumnChangePropagator.as
@@ -31,6 +31,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.html.supportClasses.DataGridColumn;
 	import org.apache.royale.html.beads.IDataGridView;
 	import org.apache.royale.core.IStrand;
+	import org.apache.royale.core.Bead;
 	/**
 	 *  The DataGridColumnChangePropagator picks up the dataProviderChanged event
 	 *  and lets the data grid columns know about it.
@@ -41,22 +42,17 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class DataGridColumnChangePropagator implements IChangePropagator
+	public class DataGridColumnChangePropagator extends Bead implements IChangePropagator
 	{
 		
-		private var _strand:IStrand;
-		
 		public function DataGridColumnChangePropagator()
 		{
 		}
 		
-		/**
-		 * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			IEventDispatcher(_strand).addEventListener("beadsAdded", finishSetup);
+			listenOnStrand("beadsAdded", finishSetup);
 		}
 		
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DisableLoaderBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DisableLoaderBead.as
index 19ef75b..15b07ee 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DisableLoaderBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DisableLoaderBead.as
@@ -28,6 +28,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.utils.PointUtils;
 	import org.apache.royale.core.IPopUpHost;
 	import org.apache.royale.utils.UIUtils;
+	import org.apache.royale.core.Bead;
 
 	COMPILE::JS
 	{
@@ -42,7 +43,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.6
 	 */
-	public class DisableLoaderBead implements IBead
+	public class DisableLoaderBead extends Bead
 	{
 		/**
 		 *  constructor.
@@ -56,7 +57,6 @@ package org.apache.royale.html.beads
 		{
 		}
 		
-		protected var _strand:IStrand;
 		protected var _loader:IUIBase;
 
 		/**
@@ -67,12 +67,12 @@ package org.apache.royale.html.beads
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.6
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{	
 			COMPILE::JS
 			{
 				_strand = value;
-				host.addEventListener("disabledChange", disabledChangeHandler);
+				listenOnStrand("disabledChange", disabledChangeHandler);
 				updateHost(null);
 			}
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DisabledAlphaBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DisabledAlphaBead.as
index 8cda613..c253737 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DisabledAlphaBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DisabledAlphaBead.as
@@ -19,10 +19,15 @@
 package org.apache.royale.html.beads
 {
 	COMPILE::SWF
-    {
-	    import flash.display.InteractiveObject;
+	{
+		import flash.display.InteractiveObject;
 	}
-	
+
+	COMPILE::JS
+	{
+		import org.apache.royale.core.WrappedHTMLElement;
+	}
+
 	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IUIBase;
@@ -31,11 +36,8 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.events.ValueEvent;
 	import org.apache.royale.html.beads.DisableBead;
+	import org.apache.royale.core.Bead;
 
-	COMPILE::JS
-    {
-		import org.apache.royale.core.WrappedHTMLElement;
-	}
 	/**
 	 *  The DisabledAlphaBead class is a specialty bead that can be used with
 	 *  any UIBase control which has a DisableBead attached.
@@ -46,7 +48,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class DisabledAlphaBead implements IBead
+	public class DisabledAlphaBead extends Bead
 	{
 		/**
 		 *  constructor.
@@ -60,43 +62,42 @@ package org.apache.royale.html.beads
 		{
 		}
 		
-		private var _strand:IStrand;
 
-        private var _enabledAlpha:Number = 1.0;
-        /**
-         *  The alpha of the element when enabled. Defaults to 1.0;
+		private var _enabledAlpha:Number = 1.0;
+		/**
+		 *  The alpha of the element when enabled. Defaults to 1.0;
 		 *  @langversion 3.0
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9
-         */
-        public function get enabledAlpha():Number
-        {
-            return _enabledAlpha;
-        }
-        public function set enabledAlpha(value:Number):void
-        {
-            _enabledAlpha = value;
-        }
+			*/
+		public function get enabledAlpha():Number
+		{
+			return _enabledAlpha;
+		}
+		public function set enabledAlpha(value:Number):void
+		{
+			_enabledAlpha = value;
+		}
 
-        private var _disabledAlpha:Number = 0.5;
-        
-        /**
-         *  The alpha of the element when disabled. Defaults to 0.5;
+		private var _disabledAlpha:Number = 0.5;
+		
+		/**
+		 *  The alpha of the element when disabled. Defaults to 0.5;
 		 *  @langversion 3.0
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9
-         */
-        public function get disabledAlpha():Number
-        {
-            return _disabledAlpha;
-        }
-        public function set disabledAlpha(value:Number):void
-        {
-            _disabledAlpha = value;
-        }
-		
+			*/
+		public function get disabledAlpha():Number
+		{
+			return _disabledAlpha;
+		}
+		public function set disabledAlpha(value:Number):void
+		{
+			_disabledAlpha = value;
+		}
+
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
 		 *  
@@ -105,10 +106,10 @@ package org.apache.royale.html.beads
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{	
 			_strand = value;
-            host.addEventListener("disabledChange", disabledChangeHandler);
+			listenOnStrand("disabledChange", disabledChangeHandler);
 			updateHost(null);
 		}
 		
@@ -118,9 +119,9 @@ package org.apache.royale.html.beads
 			updateHost(e.value);
 		}
 		
-        /**
-         * @royaleignorecoercion org.apache.royale.core.IUIBase
-         */
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.IUIBase
+		 */
 		private function get host():IUIBase
 		{
 			return _strand as IUIBase;
@@ -132,18 +133,18 @@ package org.apache.royale.html.beads
 		{
 			if(!_strand)//bail out
 				return;
-            
-            var disabled:Boolean;
-            if(value == null)
-            {
-                var disableBead:DisableBead = _strand.getBeadByType(DisableBead) as DisableBead;
-                if(!disableBead)// The DisableBead was not added yet. We'll set this when the event is dispatched.
-                    return;
-                disabled = disableBead.disabled;
-            } else {
-                disabled = value;
-            }
-            host.alpha = disabled ? disabledAlpha : enabledAlpha;
+				
+				var disabled:Boolean;
+				if(value == null)
+				{
+					var disableBead:DisableBead = _strand.getBeadByType(DisableBead) as DisableBead;
+					if(!disableBead)// The DisableBead was not added yet. We'll set this when the event is dispatched.
+						return;
+					disabled = disableBead.disabled;
+				} else {
+					disabled = value;
+				}
+				host.alpha = disabled ? disabledAlpha : enabledAlpha;
 		}
 		
 	}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DispatchInputFinishedBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DispatchInputFinishedBead.as
index 2cddbf6..b4c6de3 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DispatchInputFinishedBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DispatchInputFinishedBead.as
@@ -24,6 +24,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.events.utils.WhitespaceKeys;
+	import org.apache.royale.utils.sendStrandEvent;
 	
 	COMPILE::JS
 		{
@@ -37,7 +38,6 @@ package org.apache.royale.html.beads
 			import flash.events.FocusEvent;
 			import flash.events.KeyboardEvent;
 			import org.apache.royale.html.beads.ITextFieldView;
-			import org.apache.royale.events.utils.WhitespaceKeys;
 		}
 		
 		/**
@@ -127,7 +127,7 @@ package org.apache.royale.html.beads
 			{
 				if (event.key == WhitespaceKeys.ENTER) //enter
 				{
-					(_strand as IEventDispatcher).dispatchEvent(new Event(INPUT_FINISHED));
+					sendStrandEvent(_strand,INPUT_FINISHED);
 				}
 			}
 
@@ -139,7 +139,7 @@ package org.apache.royale.html.beads
 			COMPILE::JS
 			private function focusoutHandler( event:Object ) : void
 			{
-				(_strand as IEventDispatcher).dispatchEvent(new Event(INPUT_FINISHED));
+					sendStrandEvent(_strand,INPUT_FINISHED);
 			}
 			
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DispatchKeyboardEventBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DispatchKeyboardEventBead.as
index 2559443..9dd19ed 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DispatchKeyboardEventBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DispatchKeyboardEventBead.as
@@ -25,6 +25,8 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.events.KeyboardEvent;
 	import org.apache.royale.events.utils.KeyboardEventConverter;
+	import org.apache.royale.utils.sendStrandEvent;
+	import org.apache.royale.core.Bead;
 	
 	COMPILE::JS
 	{
@@ -36,6 +38,7 @@ package org.apache.royale.html.beads
 	{
 		import flash.events.KeyboardEvent;
 		import org.apache.royale.html.beads.ITextFieldView;
+		import org.apache.royale.core.IRenderedObject;
 	}
 	
 	/**
@@ -46,7 +49,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class DispatchKeyboardEventBead implements IBead
+	public class DispatchKeyboardEventBead extends Bead
 	{
 		/**
 		 *  constructor.
@@ -60,7 +63,6 @@ package org.apache.royale.html.beads
 		{
 		}			
 		
-		private var _strand:IStrand;
 		
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
@@ -69,8 +71,9 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.0
+		 *  @royaleignorecoercion org.apache.royale.core.IRenderedObject
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			
@@ -83,8 +86,8 @@ package org.apache.royale.html.beads
 			}
 			COMPILE::JS
 			{
-				(_strand as Object).element.addEventListener('keydown', keyEventHandler);
-				(_strand as Object).element.addEventListener('keyup', keyEventHandler);
+				(_strand as IRenderedObject).element.addEventListener('keydown', keyEventHandler);
+				(_strand as IRenderedObject).element.addEventListener('keyup', keyEventHandler);
 			}
 		}
 		
@@ -136,7 +139,7 @@ package org.apache.royale.html.beads
 		{
 			event.stopImmediatePropagation();
 			var newEvent:org.apache.royale.events.KeyboardEvent = KeyboardEventConverter.convert(event);
-			(_strand as IEventDispatcher).dispatchEvent(newEvent);
+			sendStrandEvent(_strand,newEvent);
 			if(newEvent.defaultPrevented)
 			{
 				event.preventDefault();
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DividedContainerView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DividedContainerView.as
index 18acf2e..6a9d367 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DividedContainerView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DividedContainerView.as
@@ -30,6 +30,8 @@ package org.apache.royale.html.beads
 	import org.apache.royale.html.supportClasses.DividedContainerDivider;
 	import org.apache.royale.html.supportClasses.IDividedContainerDivider;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
+	import org.apache.royale.core.BeadViewBase;
+	import org.apache.royale.utils.sendStrandEvent;
 
 	/**
 	 * The DividedContainerView class is responsible for generating the
@@ -41,7 +43,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class DividedContainerView implements IBeadView
+	public class DividedContainerView extends BeadViewBase
 	{
 		/**
 		 * Constructor.
@@ -55,28 +57,19 @@ package org.apache.royale.html.beads
 		{
 		}
 
-		private var _strand:IStrand;
 
 		/**
 		 * @copy org.apache.royale.core.IStrand#strand
+		 *  @royaleignorecoercion org.apache.royale.core.UIBase
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
-
-			(_strand as IEventDispatcher).addEventListener("childrenAdded", handleChildrenAdded);
+			listenOnStrand("childrenAdded", handleChildrenAdded);
 			(_strand as UIBase).model.addEventListener("pairAdjustmentChanged", handlePairAdjustmentChanged);
 		}
 
 		/**
-		 * @private
-		 */
-		public function get host():IUIBase
-		{
-			return _strand as IUIBase;
-		}
-
-		/**
 		 * Handles the "childrenAdded" event and generates the separators between them
 		 * based on the direction of the box.
 		 *
@@ -105,8 +98,7 @@ package org.apache.royale.html.beads
 			}
 
 			((host as UIBase).model as DividedContainerModel).pairAdjustments = adjustments;
-
-			(_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
+			sendStrandEvent(_strand,"layoutNeeded");
 		}
 
 		/**
@@ -114,7 +106,7 @@ package org.apache.royale.html.beads
 		 */
 		private function handlePairAdjustmentChanged(event:Event):void
 		{
-			(_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
+			sendStrandEvent(_strand,"layoutNeeded");
 		}
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllByNullItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllByNullItemRendererForArrayListData.as
index ff24bab..3046ee7 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllByNullItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllByNullItemRendererForArrayListData.as
@@ -27,6 +27,8 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.html.beads.IListView;
+	import org.apache.royale.core.Bead;
+	import org.apache.royale.utils.sendStrandEvent;
 
 	/**
 	 * Handles the removal of all itemRenderers once data source is being set to null.
@@ -36,7 +38,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.0
 	 */
-	public class DynamicRemoveAllByNullItemRendererForArrayListData implements IBead
+	public class DynamicRemoveAllByNullItemRendererForArrayListData extends Bead
 	{
 		/**
 		 * Constructor
@@ -50,8 +52,6 @@ package org.apache.royale.html.beads
 		{
 		}
 
-		private var _strand:IStrand;
-
 		/**
 		 * @copy org.apache.royale.core.IStrand
 		 *
@@ -60,10 +60,10 @@ package org.apache.royale.html.beads
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.0
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			IEventDispatcher(value).addEventListener("initComplete", initComplete);
+			listenOnStrand("initComplete", initComplete);
 		}
 		
 		/**
@@ -73,10 +73,12 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.8
+		 *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
+     *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 */
 		protected function initComplete(event:Event):void
 		{
-			IEventDispatcher(_strand).removeEventListener("initComplete", initComplete);
+			(_strand as IEventDispatcher).removeEventListener("initComplete", initComplete);
 			
 			_dataProviderModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
 			dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);	
@@ -87,23 +89,25 @@ package org.apache.royale.html.beads
 		
 		/**
 		 * @private
+		 *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
+		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 */
 		protected function dataProviderChangeHandler(event:Event):void
 		{
 			var dp:IEventDispatcher = dataProviderModel.dataProvider as IEventDispatcher;
 
 			if (!dp)
-            {
-                if (dataProviderModel is ISelectionModel)
-                {
-                    var model:ISelectionModel = dataProviderModel as ISelectionModel;
-                    model.selectedIndex = -1;
-                    model.selectedItem = null;
-                }
+			{
+				if (dataProviderModel is ISelectionModel)
+				{
+					var model:ISelectionModel = dataProviderModel as ISelectionModel;
+					model.selectedIndex = -1;
+					model.selectedItem = null;
+				}
 
-                itemRendererOwnerView.removeAllItemRenderers();
-                (_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
-            }
+				itemRendererOwnerView.removeAllItemRenderers();
+				sendStrandEvent(_strand,"layoutNeeded");
+			}
 		}
 
 		private var _dataProviderModel: IDataProviderModel;
@@ -116,6 +120,7 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.0
+		 *  @royaleignorecoercion org.apache.royale.core.IDataProviderModel
 		 */
 		public function get dataProviderModel(): IDataProviderModel
 		{
@@ -135,14 +140,14 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.0
-         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
-         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
+		 *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+		 *  @royaleignorecoercion org.apache.royale.html.beads.IListView
 		 */
 		public function get itemRendererOwnerView():IItemRendererOwnerView
 		{
 			if (_itemRendererOwnerView == null) {
-                var view:IListView = (_strand as IStrandWithModelView).view as IListView;
-                _itemRendererOwnerView = view.dataGroup;
+				var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+				_itemRendererOwnerView = view.dataGroup;
 			}
 			return _itemRendererOwnerView;
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as
index ad2bd2b..4f6a069 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveAllItemRendererForArrayListData.as
@@ -18,7 +18,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IItemRendererOwnerView;
 	import org.apache.royale.core.ISelectionModel;
@@ -28,6 +27,8 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.html.beads.IListView;
+	import org.apache.royale.core.Bead;
+	import org.apache.royale.utils.sendStrandEvent;
 
 	/**
 	 *  Handles the removal of all itemRenderers once the all items has been removed
@@ -38,7 +39,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.0
 	 */
-	public class DynamicRemoveAllItemRendererForArrayListData implements IBead
+	public class DynamicRemoveAllItemRendererForArrayListData extends Bead
 	{
 		/**
 		 * Constructor
@@ -52,8 +53,6 @@ package org.apache.royale.html.beads
 		{
 		}
 
-		private var _strand:IStrand;
-
 		/**
 		 * @copy org.apache.royale.core.IStrand
 		 *
@@ -63,10 +62,10 @@ package org.apache.royale.html.beads
 		 *  @productversion Royale 0.9.0
 		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			(value as IEventDispatcher).addEventListener("initComplete", initComplete);
+			listenOnStrand("initComplete", initComplete);
 		}
 		
 		/**
@@ -81,7 +80,7 @@ package org.apache.royale.html.beads
 		 */
 		protected function initComplete(event:Event):void
 		{
-			IEventDispatcher(_strand).removeEventListener("initComplete", initComplete);
+			(_strand as IEventDispatcher).removeEventListener("initComplete", initComplete);
 			
 			_dataProviderModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
 			dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);	
@@ -129,7 +128,7 @@ package org.apache.royale.html.beads
 			}
 
 			itemRendererOwnerView.removeAllItemRenderers();
-			(_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
+			sendStrandEvent(_strand,"layoutNeeded");
 		}
 
 		private var _dataProviderModel: IDataProviderModel;
@@ -168,8 +167,8 @@ package org.apache.royale.html.beads
 		public function get itemRendererOwnerView():IItemRendererOwnerView
 		{
 			if (_itemRendererOwnerView == null) {
-                var view:IListView = (_strand as IStrandWithModelView).view as IListView;
-                _itemRendererOwnerView = view.dataGroup;
+				var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+				_itemRendererOwnerView = view.dataGroup;
 			}
 			return _itemRendererOwnerView;
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveItemRendererForArrayListData.as
index 3a87b31..61e80a4 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicRemoveItemRendererForArrayListData.as
@@ -25,6 +25,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.html.beads.IListView;
+	import org.apache.royale.utils.sendStrandEvent;
 
 	/**
 	 * Handles the removal of an itemRenderer once the corresponding datum has been removed
@@ -75,16 +76,16 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.0
-		 *  @royaleignorecoercion org.apache.royale.core.IParent
+		 *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
 		 *  @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+		 *  @royaleignorecoercion org.apache.royale.html.beads.IListView
 		 */
 		protected function handleItemRemoved(event:CollectionEvent):void
 		{
-            var view:IListView = (_strand as IStrandWithModelView).view as IListView;
-            var dataGroup:IItemRendererOwnerView = view.dataGroup;
+			var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+			var dataGroup:IItemRendererOwnerView = view.dataGroup;
 			var ir:IIndexedItemRenderer = dataGroup.getItemRendererForIndex(event.index) as IIndexedItemRenderer;
-            dataGroup.removeItemRenderer(ir);
+			dataGroup.removeItemRenderer(ir);
 			
 			// adjust the itemRenderers' index to adjust for the shift
 			var n:int = dataGroup.numItemRenderers;
@@ -93,8 +94,7 @@ package org.apache.royale.html.beads
 				ir = dataGroup.getItemRendererForIndex(i) as IIndexedItemRenderer;
 				ir.index = i;
 			}
-
-			(_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
+			sendStrandEvent(_strand,"layoutNeeded");
 		}
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as
index 6f77f4c..7a3f00d 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as
@@ -28,6 +28,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.EventDispatcher;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
+	import org.apache.royale.core.DispatcherBead;
 
     /**
      *  The DataItemRendererFactoryBase class is a base class
@@ -38,7 +39,7 @@ package org.apache.royale.html.beads
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.8
      */
-	public class ItemRendererFactoryBase extends EventDispatcher implements IBead
+	public class ItemRendererFactoryBase extends DispatcherBead
 	{
         /**
          *  Constructor.
@@ -56,8 +57,6 @@ package org.apache.royale.html.beads
 		protected var dataProviderModel:IDataProviderModel;
 		//protected var dataFieldProvider:DataFieldProviderBead;
 		
-		protected var _strand:IStrand;
-		
         /**
          *  @copy org.apache.royale.core.IBead#strand
          *  
@@ -67,10 +66,10 @@ package org.apache.royale.html.beads
          *  @productversion Royale 0.8
 		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
          */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value; 
-			(value as IEventDispatcher).addEventListener("initComplete", finishSetup);
+			listenOnStrand("initComplete", finishSetup);
 		}
 		
 		/**
@@ -158,16 +157,6 @@ package org.apache.royale.html.beads
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.8
-		 *  @royaleignorecoercion Array
-         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
-         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
-		 *  @royaleignorecoercion org.apache.royale.core.IListPresentationModel
-		 *  @royaleignorecoercion org.apache.royale.core.UIBase
-		 *  @royaleignorecoercion org.apache.royale.core.IItemRenderer
-		 *  @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer
-		 *  @royaleignorecoercion org.apache.royale.core.IIndexedItemRendererInitializer
-		 *  @royaleignorecoercion org.apache.royale.html.supportClasses.DataItemRenderer
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
          */		
 		protected function dataProviderChangeHandler(event:Event):void
 		{
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListView.as
index 505bedc..6547a8b 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListView.as
@@ -125,19 +125,6 @@ package org.apache.royale.html.beads
 
 		protected var listModel:ISelectionModel;
 
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9
-		 */
-		override public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			super.strand = value;
-		}
 
 		/**
 		 * @private
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MenuFactory.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MenuFactory.as
index c70c134..b4d569c 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MenuFactory.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MenuFactory.as
@@ -18,10 +18,9 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IFactory;
-	import org.apache.royale.core.IStrand;
 	import org.apache.royale.html.Menu;
+	import org.apache.royale.core.Bead;
 	
 	/**
 	 * This bead class generates instances of the Menu class for use with MenuBar.
@@ -31,7 +30,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class MenuFactory implements IBead, IFactory
+	public class MenuFactory extends Bead implements IFactory
 	{
 		/**
 		 * Constructor.
@@ -45,21 +44,6 @@ package org.apache.royale.html.beads
 		{
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 * @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-		
 		/**
 		 * Returns a new instance of the Menu class.
 		 *  
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MenuView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MenuView.as
index f0d3dc8..e460583 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MenuView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/MenuView.as
@@ -44,15 +44,5 @@ package org.apache.royale.html.beads
 			super();
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 * @private
-		 */
-		override public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			super.strand = value;
-		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ShrinkableDisableLoaderBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ShrinkableDisableLoaderBead.as
index d0f697b..8c03187 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ShrinkableDisableLoaderBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ShrinkableDisableLoaderBead.as
@@ -45,7 +45,7 @@ package org.apache.royale.html.beads
 		 */
 		public function ShrinkableDisableLoaderBead()
 		{
-            super();
+			super();
 		}
 
 		/**
@@ -57,16 +57,18 @@ package org.apache.royale.html.beads
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.6
 		 */
-        public function get resizeFactor():Number
-        {
-            return _resizeFactor;
-        }
+		public function get resizeFactor():Number
+		{
+			return _resizeFactor;
+		}
 
-        public function set resizeFactor(value:Number):void
-        {
-            _resizeFactor = value;
-        }
-		
+		public function set resizeFactor(value:Number):void
+		{
+			_resizeFactor = value;
+		}
+		/**
+		 *  @royaleignorecoercion org.apache.royale.core.IUIBase
+		 */
 		override protected function addLoadIndicator():void
 		{
 			var point:Point = PointUtils.localToGlobal(new Point(0, 0), _strand);
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SingleLineBorderBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SingleLineBorderBead.as
index 0cbf233..33986fc 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SingleLineBorderBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SingleLineBorderBead.as
@@ -30,6 +30,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.utils.CSSBorderUtils;
 	import org.apache.royale.html.beads.IBorderBead;
+	import org.apache.royale.core.Bead;
 
     /**
      *  The SingleLineBorderBead class draws a single line solid border.
@@ -40,7 +41,7 @@ package org.apache.royale.html.beads
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class SingleLineBorderBead implements IBead, IBorderBead, IGraphicsDrawing
+	public class SingleLineBorderBead extends Bead implements IBorderBead, IGraphicsDrawing
 	{
         /**
          *  Constructor.
@@ -54,8 +55,6 @@ package org.apache.royale.html.beads
 		{
 		}
 		
-		private var _strand:IStrand;
-		
         /**
          *  @copy org.apache.royale.core.IBead#strand
          *  
@@ -64,14 +63,14 @@ package org.apache.royale.html.beads
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
          */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
-            IEventDispatcher(value).addEventListener("heightChanged", changeHandler);
-            IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
-			IEventDispatcher(value).addEventListener("sizeChanged", changeHandler);
-			IEventDispatcher(value).addEventListener("initComplete", changeHandler);
-			IEventDispatcher(value).addEventListener("layoutComplete", changeHandler);
+			listenOnStrand("heightChanged", changeHandler);
+			listenOnStrand("widthChanged", changeHandler);
+			listenOnStrand("sizeChanged", changeHandler);
+			listenOnStrand("initComplete", changeHandler);
+			listenOnStrand("layoutComplete", changeHandler);
 			var ilc:ILayoutChild = value as ILayoutChild;
 			if (ilc)
 			{
@@ -84,18 +83,18 @@ package org.apache.royale.html.beads
 		        
 		protected function changeHandler(event:Event):void
 		{
-            var host:UIBase = UIBase(_strand);
-            var g:Graphics = host.graphics;
-            var w:Number = host.width;
-            var h:Number = host.height;
-            var state:String;
-            if (host is IStatesObject)
-                state = IStatesObject(host).currentState;
+			var host:UIBase = UIBase(_strand);
+			var g:Graphics = host.graphics;
+			var w:Number = host.width;
+			var h:Number = host.height;
+			var state:String;
+			if (host is IStatesObject)
+				state = IStatesObject(host).currentState;
 			
 			var gd:IGraphicsDrawing = _strand.getBeadByType(IGraphicsDrawing) as IGraphicsDrawing;
 			if( this == gd ) g.clear();
             
-            CSSBorderUtils.draw(g, w, h, host, state, false, false);
+			CSSBorderUtils.draw(g, w, h, host, state, false, false);
 		}
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SingleLineBorderWithChangeListenerBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SingleLineBorderWithChangeListenerBead.as
index c2da028..848a57d 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SingleLineBorderWithChangeListenerBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SingleLineBorderWithChangeListenerBead.as
@@ -48,7 +48,6 @@ package org.apache.royale.html.beads
 			super();
 		}
 		
-		private var _strand:IStrand;
 		
         /**
          *  @copy org.apache.royale.core.IBead#strand
@@ -62,7 +61,7 @@ package org.apache.royale.html.beads
 		{
 			super.strand = value;
 			_strand = value;
-			IEventDispatcher(value).addEventListener(StyleChangeEvent.STYLE_CHANGE, handleStyleChange);
+			listenOnStrand(StyleChangeEvent.STYLE_CHANGE, handleStyleChange);
 		}
 		
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SingleSelectionContainerBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SingleSelectionContainerBead.as
index 54c7076..a37f41d 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SingleSelectionContainerBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SingleSelectionContainerBead.as
@@ -30,6 +30,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.utils.array.rangeCheck;
 	import org.apache.royale.events.EventDispatcher;
 	import org.apache.royale.debugging.assert;
+	import org.apache.royale.core.DispatcherBead;
 
 	/**
 	 * The change event is dispatched whenever the selection changes.
@@ -52,7 +53,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class SingleSelectionContainerBead extends EventDispatcher implements IBead
+	public class SingleSelectionContainerBead extends DispatcherBead
 	{
 		/**
 		 * Constructor.
@@ -67,8 +68,9 @@ package org.apache.royale.html.beads
 			super();
 		}
 		
-		protected var _strand:IStrand;
-		
+		/**
+     * @royaleignorecoercion org.apache.royale.core.IParentIUIBase
+		 */
 		private function get host():IParentIUIBase
 		{
 			return _strand as IParentIUIBase;
@@ -83,15 +85,20 @@ package org.apache.royale.html.beads
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			_elements = [];
-			host.addEventListener("childrenAdded",handleItemAdded);
-			host.addEventListener("childrenRemoved",handleItemRemoved);
+			listenOnStrand("childrenAdded",handleItemAdded);
+			listenOnStrand("childrenRemoved",handleItemRemoved);
 			addListenersToChildren();
 		}
-
+		/**
+     * @royaleemitcoercion org.apache.royale.core.ISelectable
+		 * 
+     * @royaleignorecoercion org.apache.royale.core.IParent
+     * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+		 */
 		private function addListenersToChildren():void
 		{
 			var parent:IParent = _strand as IParent;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SliderView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SliderView.as
index 8b7c018..99e5b3d 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SliderView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SliderView.as
@@ -38,6 +38,7 @@ package org.apache.royale.html.beads
     import org.apache.royale.events.IEventDispatcher;
     import org.apache.royale.html.Button;
     import org.apache.royale.html.TextButton;
+    import org.apache.royale.utils.sendStrandEvent;
 	
 	/**
 	 *  The SliderView class creates the visual elements of the org.apache.royale.html.Slider 
@@ -49,7 +50,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class SliderView extends BeadViewBase implements ISliderView, IBeadView
+	public class SliderView extends BeadViewBase implements ISliderView
 	{
 		/**
 		 *  constructor.
@@ -72,9 +73,10 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.0
-         * 
-         *  @royaleignorecoercion org.apache.royale.core.IParent
-         * 
+		 * 
+		 *  @royaleignorecoercion org.apache.royale.core.IParent
+		 *  @royaleignorecoercion org.apache.royale.core.IRangeModel
+		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 */
 		override public function set strand(value:IStrand):void
 		{
@@ -111,7 +113,7 @@ package org.apache.royale.html.beads
 				_thumb.className = "SliderThumb";
 				_thumb.style = {"position" : "absolute", "padding" : 0};
 				_thumb.text = '\u29BF';
-                (host as IParent).addElement(_thumb);
+				(host as IParent).addElement(_thumb);
 			}
 			
 			rangeModel = _strand.getBeadByType(IBeadModel) as IRangeModel;
@@ -124,8 +126,7 @@ package org.apache.royale.html.beads
 			rm.addEventListener("maximumChange",modelChangeHandler);
 			rm.addEventListener("stepSizeChange",modelChangeHandler);
 			rm.addEventListener("snapIntervalChange",modelChangeHandler);
-			
-			(_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
+			sendStrandEvent(_strand,"layoutNeeded");
 		}
 		
 		private var _track:Button;
@@ -163,7 +164,7 @@ package org.apache.royale.html.beads
 		 */
 		private function modelChangeHandler( event:Event ) : void
 		{
-			(_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
+			sendStrandEvent(_strand,"layoutNeeded");
 		}
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/StyleInheritanceBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/StyleInheritanceBead.as
index bac1a94..d9c2f32 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/StyleInheritanceBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/StyleInheritanceBead.as
@@ -18,13 +18,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-	import org.apache.royale.core.IRenderedObject;
-	import org.apache.royale.core.IStrand;
-	import org.apache.royale.core.IBead;
 	COMPILE::JS {
 		import org.apache.royale.events.IEventDispatcher;
 		import org.apache.royale.core.WrappedHTMLElement;
 	}
+	import org.apache.royale.core.IRenderedObject;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.core.Bead;
 	
 	/**
 	 *  The StyleInheritanceBead class forces descendadants of an IStylableObject to inherit a style
@@ -34,7 +34,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 9.3
 	 */
-	public class StyleInheritanceBead implements IBead
+	public class StyleInheritanceBead extends Bead
 	{
 		/**
 		 *  constructor.
@@ -49,7 +49,6 @@ package org.apache.royale.html.beads
 		}
 		
 		private var _styleName:String;
-		private var _strand:IStrand;
 		
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
@@ -57,14 +56,13 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 9.3
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			COMPILE::JS 
 			{
-				(value as IEventDispatcher).addEventListener('initComplete', initCompleteHandler);
+				listenOnStrand('initComplete', initCompleteHandler);
 			}
 		}
 
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForStringVectorData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForStringVectorData.as
index 3808ef3..166b223 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForStringVectorData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForStringVectorData.as
@@ -19,7 +19,6 @@
 package org.apache.royale.html.beads
 {
     
-    import org.apache.royale.core.IBead;
     import org.apache.royale.core.IItemRendererClassFactory;
     import org.apache.royale.core.IItemRendererOwnerView;
     import org.apache.royale.core.ISelectionModel;
@@ -27,11 +26,11 @@ package org.apache.royale.html.beads
     import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.core.ValuesManager;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.EventDispatcher;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.events.ItemRendererEvent;
     import org.apache.royale.html.beads.IListView;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
+	import org.apache.royale.core.DispatcherBead;
 	
 	[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
 
@@ -48,7 +47,7 @@ package org.apache.royale.html.beads
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class TextItemRendererFactoryForStringVectorData extends EventDispatcher implements IBead
+	public class TextItemRendererFactoryForStringVectorData extends DispatcherBead
 	{
         /**
          *  Constructor.
@@ -65,8 +64,6 @@ package org.apache.royale.html.beads
 		
 		private var selectionModel:ISelectionModel;
 		
-		private var _strand:IStrand;
-		
         /**
          *  @copy org.apache.royale.core.IBead#strand
          *  
@@ -75,10 +72,10 @@ package org.apache.royale.html.beads
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
          */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			IEventDispatcher(value).addEventListener("initComplete",finishSetup);
+			listenOnStrand("initComplete",finishSetup);
 		}
 		
 		private function finishSetup(event:Event):void
@@ -135,6 +132,7 @@ package org.apache.royale.html.beads
         /**
          *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
          *  @royaleignorecoercion org.apache.royale.core.IListView
+         *  @royaleignorecoercion org.apache.royale.html.beads.ITextItemRenderer
          */
 		private function dataProviderChangeHandler(event:Event):void
 		{
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ThrottleBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ThrottleBead.as
index 078502e..944df0b 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ThrottleBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ThrottleBead.as
@@ -24,6 +24,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 	COMPILE::SWF {
 		import flash.utils.clearTimeout;	
 		import flash.utils.setTimeout;	
@@ -59,7 +60,7 @@ package org.apache.royale.html.beads
 	 *  @productversion Royale 0.9
 	 */
 
-	public class ThrottleBead extends EventDispatcher implements IBead
+	public class ThrottleBead extends DispatcherBead
 	{
 		/**
 		 *  constructor.
@@ -73,31 +74,29 @@ package org.apache.royale.html.beads
 		{
 		}
 		
-		private var _strand:IStrand;
-        
-        private var _event:String;
-        public function get event():String
-        {
-            return _event;
-        }
-        public function set event(value:String):void
-        {
-            _event = value;
-        }
+		private var _event:String;
+		public function get event():String
+		{
+			return _event;
+		}
+		public function set event(value:String):void
+		{
+			_event = value;
+		}
 
-        private var _interval:Number = 500;
-        public function get interval():Number
-        {
-            return _interval;
-        }
+		private var _interval:Number = 500;
+		public function get interval():Number
+		{
+			return _interval;
+		}
 
-				[Inspectable(category="General", defaultValue="500")]
-        public function set interval(value:Number):void
-        {
-            _interval = value;
-        }
-        
-        
+		[Inspectable(category="General", defaultValue="500")]
+		public function set interval(value:Number):void
+		{
+			_interval = value;
+		}
+		
+		
 		private var timeoutId:Number = NaN;
 		
 		/**
@@ -108,7 +107,7 @@ package org.apache.royale.html.beads
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{	
 			_strand = value;
 			host.addEventListener(event, originalEventDispatched);
@@ -130,7 +129,7 @@ package org.apache.royale.html.beads
 		/**
 		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 */
-		private function get host():IEventDispatcher
+		protected function get host():IEventDispatcher
 		{
 			return _strand as IEventDispatcher;
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TitleBarMeasurementBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TitleBarMeasurementBead.as
index 7cc77bd..697984b 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TitleBarMeasurementBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TitleBarMeasurementBead.as
@@ -22,6 +22,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.ValuesManager;
 	import org.apache.royale.html.TitleBar;
+	import org.apache.royale.core.Bead;
 	
 	/**
 	 *  The TitleBarMeasurementBead class measures the overall size of a 
@@ -32,7 +33,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class TitleBarMeasurementBead implements IMeasurementBead
+	public class TitleBarMeasurementBead extends Bead implements IMeasurementBead
 	{
 		/**
 		 *  constructor.
@@ -96,19 +97,5 @@ package org.apache.royale.html.beads
 			return mheight;
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VerticalAlignChildren.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VerticalAlignChildren.as
index c3cb5d7..8dd4f83 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VerticalAlignChildren.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VerticalAlignChildren.as
@@ -18,12 +18,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-    import org.apache.royale.events.IEventDispatcher;
     import org.apache.royale.events.ValueEvent;
     import org.apache.royale.core.IStrand;
     import org.apache.royale.core.IUIBase;
-    import org.apache.royale.core.IBead;
     import org.apache.royale.core.IParent;
+    import org.apache.royale.core.Bead;
 
 	/**
 	 *  @langversion 3.0
@@ -35,27 +34,16 @@ package org.apache.royale.html.beads
 	 * Alignment can be any of the valid css properties for vertical-align
 	 * see https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align
 	 */
-    public class VerticalAlignChildren implements IBead
+    public class VerticalAlignChildren extends Bead
     {
-        public function VerticalAlignChildren()
-        {
-            
-        }
-		private var _strand:IStrand;
-
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.3
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-		 */
-		public function set strand(value:IStrand):void
+		public function VerticalAlignChildren()
+		{
+				
+		}
+		override public function set strand(value:IStrand):void
 		{	
 			_strand = value;
-            (_strand as IEventDispatcher).addEventListener("childrenAdded",setAlignment);
+			listenOnStrand("childrenAdded",setAlignment);
 		}
 		private var _alignment:String;
 
@@ -68,7 +56,6 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.3
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 */
 		public function get alignment():String
 		{
@@ -105,5 +92,5 @@ package org.apache.royale.html.beads
 				}
 			}
 		}
-    }
+	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryBase.as
index 469e08d..d9d3508 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryBase.as
@@ -35,6 +35,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.html.beads.IListView;
 	import org.apache.royale.utils.loadBeadFromValuesManager;
 	import org.apache.royale.utils.sendStrandEvent;
+	import org.apache.royale.core.DispatcherBead;
 
     [Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
 	
@@ -50,7 +51,7 @@ package org.apache.royale.html.beads
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class VirtualDataItemRendererFactoryBase extends EventDispatcher implements IBead, IDataProviderVirtualItemRendererMapper
+	public class VirtualDataItemRendererFactoryBase extends DispatcherBead implements IDataProviderVirtualItemRendererMapper
 	{
         /**
          *  Constructor.
@@ -73,8 +74,6 @@ package org.apache.royale.html.beads
 
         protected var rendererMap:Object;
         
-		protected var _strand:IStrand;
-		
         /**
          *  @copy org.apache.royale.core.IBead#strand
          *  
@@ -83,10 +82,10 @@ package org.apache.royale.html.beads
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
          */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			IEventDispatcher(value).addEventListener("initComplete",finishSetup);
+			listenOnStrand("initComplete",finishSetup);
 		}
 		
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/AlertController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/AlertController.as
index 9be654c..a9cb2b8 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/AlertController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/AlertController.as
@@ -28,7 +28,7 @@ package org.apache.royale.html.beads.controllers
 	import org.apache.royale.core.IBeadController;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.CloseEvent;
-	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.core.Bead;
 
 	/**
 	 *  The AlertControler class bead handles the close event on the org.apache.royale.html.Alert 
@@ -39,7 +39,7 @@ package org.apache.royale.html.beads.controllers
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-    public class AlertController implements IBeadController
+    public class AlertController extends Bead implements IBeadController
 	{
 		/**
 		 *  constructor.
@@ -53,8 +53,6 @@ package org.apache.royale.html.beads.controllers
 		{
 		}
 		
-        private var _strand:IStrand;
-        
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
 		 *  
@@ -76,11 +74,11 @@ package org.apache.royale.html.beads.controllers
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.0
 		 */
-        public function set strand(value:IStrand):void
-        {
-            _strand = value;
-            IEventDispatcher(value).addEventListener("close", alertCloseHandler);
-        }
+		override public function set strand(value:IStrand):void
+		{
+			_strand = value;
+			listenOnStrand("close", alertCloseHandler);
+		}
         
 		/**
 		 * @private
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/CascadingMenuSelectionMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/CascadingMenuSelectionMouseController.as
index eaa15be..6fb7862 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/CascadingMenuSelectionMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/CascadingMenuSelectionMouseController.as
@@ -60,22 +60,6 @@ package org.apache.royale.html.beads.controllers
 		{
 			super();
 		}
-				
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9
-		 */
-		override public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			super.strand = value;
-		}
 		
 		/**
 		 * @private
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ColorSpectrumMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ColorSpectrumMouseController.as
index 1eeddde..948ac85 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ColorSpectrumMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ColorSpectrumMouseController.as
@@ -25,12 +25,13 @@ package org.apache.royale.html.beads.controllers
 	import org.apache.royale.core.IStrandWithModelView;
 	import org.apache.royale.core.IUIBase;
 	import org.apache.royale.events.Event;
-    import org.apache.royale.events.IEventDispatcher;
-    import org.apache.royale.events.MouseEvent;
+	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.events.MouseEvent;
 	import org.apache.royale.html.beads.ISliderView;
 	import org.apache.royale.utils.HSV;
 	import org.apache.royale.utils.hsvToHex;
 	import org.apache.royale.utils.rgbToHsv;
+	import org.apache.royale.utils.sendStrandEvent;
 
 	COMPILE::JS 
 	{
@@ -51,14 +52,14 @@ package org.apache.royale.html.beads.controllers
 	public class ColorSpectrumMouseController implements IBeadController
 	{
 		private var _strand:IStrand;
-        /**
-         *  Constructor.
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.6
-         */
+		/**
+		 *  Constructor.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.6
+		 */
 		public function ColorSpectrumMouseController()
 		{
 		}
@@ -70,25 +71,26 @@ package org.apache.royale.html.beads.controllers
 			sliderView.track.addEventListener(MouseEvent.CLICK, trackClickHandler);
 		}
 		
-        /**
+		/**
 		 * @royaleignorecoercion org.apache.royale.events.BrowserEvent
-         */
-        private function trackClickHandler(event:MouseEvent):void
-        {
+		 */
+		private function trackClickHandler(event:MouseEvent):void
+		{
 			if (event.target != sliderView.track)
 			{
 				return;
 			}
 			var modifiedColor:uint = getColorFromMousePosition(event);
 			model.hsvModifiedColor = modifiedColor;
-        }
+		}
 		
-        /**
+		/**
 		 * @royaleignorecoercion org.apache.royale.events.BrowserEvent
-         */
+		 * @royaleignorecoercion org.apache.royale.core.IUIBase
+		 */
 		private function getColorFromMousePosition(event:MouseEvent):uint
 		{
-            var host:IUIBase = _strand as IUIBase;
+			var host:IUIBase = _strand as IUIBase;
 			var yloc:Number;
 			var xloc:Number;
 			COMPILE::JS 
@@ -105,12 +107,18 @@ package org.apache.royale.html.beads.controllers
 			var hsvBaseColor:HSV = rgbToHsv(r, g, b);
 			return hsvToHex(hsvBaseColor.h, widthRatio * 100, heightRatio * 100);
 		}
-		
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
+		 * @royaleignorecoercion org.apache.royale.html.beads.ISliderView
+		 */
 		private function get sliderView():ISliderView
 		{
 			return (_strand as IStrandWithModelView).view as ISliderView;
 		}
-		
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.IStrandWithModel
+		 * @royaleignorecoercion org.apache.royale.core.IColorSpectrumModel
+		 */
 		private function get model():IColorSpectrumModel
 		{
 			return (_strand as IStrandWithModel).model as IColorSpectrumModel;
@@ -120,7 +128,7 @@ package org.apache.royale.html.beads.controllers
 		{
 			sliderView.track.addEventListener(MouseEvent.MOUSE_MOVE, thumbMoveHandler);
 			sliderView.track.addEventListener(MouseEvent.MOUSE_UP, thumbUpHandler);
-            (_strand as IEventDispatcher).dispatchEvent(new Event("thumbDown"));
+			sendStrandEvent(_strand,"thumbUp");
 		}
 		
 		private function thumbMoveHandler(event:MouseEvent):void
@@ -134,7 +142,7 @@ package org.apache.royale.html.beads.controllers
 		
 		private function thumbUpHandler(event:MouseEvent):void
 		{
-            (_strand as IEventDispatcher).dispatchEvent(new Event("thumbUp"));
+			sendStrandEvent(_strand,"thumbUp");
 			sliderView.track.removeEventListener(MouseEvent.MOUSE_MOVE, thumbMoveHandler);
 			sliderView.track.removeEventListener(MouseEvent.MOUSE_UP, thumbUpHandler);
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ComboBoxController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ComboBoxController.as
index 141ff67..a9c890d 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ComboBoxController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ComboBoxController.as
@@ -29,23 +29,21 @@ package org.apache.royale.html.beads.controllers
 	import org.apache.royale.html.List;
 	import org.apache.royale.html.beads.IComboBoxView;
 	import org.apache.royale.utils.sendStrandEvent;
+	import org.apache.royale.core.Bead;
 	
-	public class ComboBoxController implements IBeadController
+	public class ComboBoxController extends Bead implements IBeadController
 	{
 		public function ComboBoxController()
 		{
 		}
 		
-		private var _strand:IStrand;
-		
 		protected var viewBead:IComboBoxView;
 		
 		/**
 		 * @royaleignorecoercion org.apache.royale.html.beads.IComboBoxView
-		 * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 * 
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			
@@ -53,7 +51,7 @@ package org.apache.royale.html.beads.controllers
 			if (viewBead) {
 				finishSetup(null);
 			} else {
-				(_strand as IEventDispatcher).addEventListener("viewChanged", finishSetup);
+				listenOnStrand("viewChanged", finishSetup);
 			}
 		}
 		
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/HDividedContainerMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/HDividedContainerMouseController.as
index 69551db..cc98640 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/HDividedContainerMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/HDividedContainerMouseController.as
@@ -23,17 +23,17 @@ package org.apache.royale.html.beads.controllers
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IUIBase;
 	import org.apache.royale.core.UIBase;
-	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.events.MouseEvent;
 	import org.apache.royale.html.beads.models.DividedContainerModel;
 	import org.apache.royale.html.supportClasses.DividedContainerDivider;
+	import org.apache.royale.core.Bead;
 
 	/**
 	 * This is the mouse controller for the HDividedContainer. This bead class tracks the
 	 * mouse over a HDividedContainerDivider (its strand) causing the columns on either side
 	 * of the divider to grow and shrink.
 	 */
-	public class HDividedContainerMouseController implements IBead, IBeadController
+	public class HDividedContainerMouseController extends Bead implements IBeadController
 	{
 		/**
 		 * Constructor
@@ -47,15 +47,13 @@ package org.apache.royale.html.beads.controllers
 		{
 		}
 
-		private var _strand:IStrand;
-
 		/**
 		 * @copy org.apache.royale.core.IStrand#strand
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			(_strand as IEventDispatcher).addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);
+			listenOnStrand(MouseEvent.MOUSE_DOWN, handleMouseDown);
 		}
 
 		private var deltaMove:Number = 0;
@@ -63,6 +61,7 @@ package org.apache.royale.html.beads.controllers
 
 		/**
 		 * @private
+		 * @royaleignorecoercion org.apache.royale.core.IUIBase
 		 */
 		private function handleMouseDown(event:MouseEvent):void
 		{
@@ -74,21 +73,23 @@ package org.apache.royale.html.beads.controllers
 			deltaMove = 0;
 			//trace("* HDividedContainerMouseController: anchor at "+lastPosition);
 
-			IUIBase(_strand).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove);
-			IUIBase(_strand).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
+			(_strand as IUIBase).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove);
+			(_strand as IUIBase).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
 
 		}
 
 		/**
 		 * @private
+		 * @royaleignorecoercion org.apache.royale.html.supportClasses.DividedContainerDivider
+		 * @royaleignorecoercion org.apache.royale.html.beads.models.DividedContainerModel
 		 */
 		private function handleMouseMove(event:MouseEvent):void
 		{
 			//trace("--- mouse moving by "+(event.screenX - lastPosition));
 			deltaMove = event.screenX - lastPosition;
-
-			var model:DividedContainerModel = (_strand as UIBase).model as DividedContainerModel;
-			var pairIndex:int = (_strand as DividedContainerDivider).pairIndex;
+			var divider:DividedContainerDivider = _strand as DividedContainerDivider;
+			var model:DividedContainerModel = divider.model as DividedContainerModel;
+			var pairIndex:int = divider.pairIndex;
 
 			model.addPairAdjustment(deltaMove, pairIndex);
 
@@ -97,17 +98,21 @@ package org.apache.royale.html.beads.controllers
 
 		/**
 		 * @private
+		 * @royaleignorecoercion org.apache.royale.core.IUIBase
+		 * @royaleignorecoercion org.apache.royale.html.supportClasses.DividedContainerDivider
+		 * @royaleignorecoercion org.apache.royale.html.beads.models.DividedContainerModel
 		 */
 		private function handleMouseUp(event:MouseEvent):void
 		{
 			deltaMove = event.screenX - lastPosition;
 			//trace("* HDividedContainerMouseController: up at "+event.screenX+" delta of "+deltaMove);
 
-			IUIBase(_strand).topMostEventDispatcher.removeEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove);
-			IUIBase(_strand).topMostEventDispatcher.removeEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
+			(_strand as IUIBase).topMostEventDispatcher.removeEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove);
+			(_strand as IUIBase).topMostEventDispatcher.removeEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
 
-			var model:DividedContainerModel = (_strand as UIBase).model as DividedContainerModel;
-			var pairIndex:int = (_strand as DividedContainerDivider).pairIndex;
+			var divider:DividedContainerDivider = _strand as DividedContainerDivider;
+			var model:DividedContainerModel = divider.model as DividedContainerModel;
+			var pairIndex:int = divider.pairIndex;
 
 			model.addPairAdjustment(deltaMove, pairIndex);
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ListMultiSelectionMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ListMultiSelectionMouseController.as
index 196f153..9ec6ef4 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ListMultiSelectionMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ListMultiSelectionMouseController.as
@@ -33,6 +33,7 @@ package org.apache.royale.html.beads.controllers
 	import org.apache.royale.html.beads.IListView;
 	import org.apache.royale.utils.getSelectionRenderBead;
 	import org.apache.royale.utils.sendEvent;
+	import org.apache.royale.core.Bead;
 
 	/**
 	 *  The ListMultiSelectionMouseController class is a controller for
@@ -48,7 +49,7 @@ package org.apache.royale.html.beads.controllers
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.7
 	 */
-	public class ListMultiSelectionMouseController implements IBeadController
+	public class ListMultiSelectionMouseController extends Bead implements IBeadController
 	{
 		/**
 		 *  Constructor.
@@ -92,7 +93,6 @@ package org.apache.royale.html.beads.controllers
 		 */
 		protected var dataGroup:IItemRendererOwnerView;
 
-		private var _strand:IStrand;
 
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
@@ -102,16 +102,15 @@ package org.apache.royale.html.beads.controllers
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.7
 		 *  @royaleignorecoercion org.apache.royale.core.IMultiSelectionModel
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 *  @royaleignorecoercion org.apache.royale.html.beads.IListView
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			listModel = value.getBeadByType(IMultiSelectionModel) as IMultiSelectionModel;
 			listView = value.getBeadByType(IListView) as IListView;
-			IEventDispatcher(_strand).addEventListener("itemAdded", handleItemAdded);
-			IEventDispatcher(_strand).addEventListener("itemRemoved", handleItemRemoved);
+			listenOnStrand("itemAdded", handleItemAdded);
+			listenOnStrand("itemRemoved", handleItemRemoved);
 		}
 
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuSelectionMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuSelectionMouseController.as
index 654d6349..fb9aa37 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuSelectionMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuSelectionMouseController.as
@@ -61,8 +61,6 @@ package org.apache.royale.html.beads.controllers
 			super();
 		}
 				
-		private var _strand:IStrand;
-		
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
 		 *  
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/SpinnerMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/SpinnerMouseController.as
index f56c2cc..73baf2a 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/SpinnerMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/SpinnerMouseController.as
@@ -18,6 +18,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads.controllers
 {
+	COMPILE::JS
+	{
+		import org.apache.royale.html.Spinner;
+		import org.apache.royale.html.supportClasses.SpinnerButton;
+		import goog.events;
+		import goog.events.EventType;
+	}
 	import org.apache.royale.core.IBeadController;
 	import org.apache.royale.core.IRangeModel;
 	import org.apache.royale.core.IStrand;
@@ -29,13 +36,7 @@ package org.apache.royale.html.beads.controllers
 	import org.apache.royale.html.TextButton;
 	import org.apache.royale.html.beads.ISpinnerView;
   import org.apache.royale.utils.sendStrandEvent;
-    COMPILE::JS
-    {
-        import org.apache.royale.html.Spinner;
-        import org.apache.royale.html.supportClasses.SpinnerButton;
-        import goog.events;
-        import goog.events.EventType;
-    }
+	import org.apache.royale.core.Bead;
 
 	/**
 	 *  The SpinnerMouseController class bead handles mouse events on the
@@ -47,7 +48,7 @@ package org.apache.royale.html.beads.controllers
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class SpinnerMouseController implements IBeadController
+	public class SpinnerMouseController extends Bead implements IBeadController
 	{
 		/**
 		 *  constructor.
@@ -63,8 +64,6 @@ package org.apache.royale.html.beads.controllers
 
 		private var rangeModel:IRangeModel;
 
-		private var _strand:IStrand;
-
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
 		 *
@@ -77,35 +76,35 @@ package org.apache.royale.html.beads.controllers
 		 *  @royaleignorecoercion org.apache.royale.core.UIBase
 		 *  @royaleignorecoercion org.apache.royale.core.IRangeModel
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 
 			rangeModel = UIBase(value).model as IRangeModel;
 
-            COMPILE::SWF
-            {
-                var spinnerBead:ISpinnerView = value.getBeadByType(ISpinnerView) as ISpinnerView;
-                spinnerBead.decrement.addEventListener(MouseEvent.CLICK, decrementClickHandler);
-                spinnerBead.decrement.addEventListener("buttonRepeat", decrementClickHandler);
-                spinnerBead.increment.addEventListener(MouseEvent.CLICK, incrementClickHandler);
-                spinnerBead.increment.addEventListener("buttonRepeat", incrementClickHandler);
-            }
+			COMPILE::SWF
+			{
+				var spinnerBead:ISpinnerView = value.getBeadByType(ISpinnerView) as ISpinnerView;
+				spinnerBead.decrement.addEventListener(MouseEvent.CLICK, decrementClickHandler);
+				spinnerBead.decrement.addEventListener("buttonRepeat", decrementClickHandler);
+				spinnerBead.increment.addEventListener(MouseEvent.CLICK, incrementClickHandler);
+				spinnerBead.increment.addEventListener("buttonRepeat", incrementClickHandler);
+			}
 
-            COMPILE::JS
-            {
-            	var spinnerBead:ISpinnerView = value.getBeadByType(ISpinnerView) as ISpinnerView;
+			COMPILE::JS
+			{
+				var spinnerBead:ISpinnerView = value.getBeadByType(ISpinnerView) as ISpinnerView;
 
-                var incrementButton:SpinnerButton = spinnerBead.increment;
-                var decrementButton:SpinnerButton = spinnerBead.decrement;
+				var incrementButton:SpinnerButton = spinnerBead.increment;
+				var decrementButton:SpinnerButton = spinnerBead.decrement;
 
-                goog.events.listen(incrementButton.element, goog.events.EventType.CLICK,
-                    incrementClickHandler);
+				goog.events.listen(incrementButton.element, goog.events.EventType.CLICK,
+					incrementClickHandler);
 
-                goog.events.listen(decrementButton.element, goog.events.EventType.CLICK,
-                    decrementClickHandler);
+				goog.events.listen(decrementButton.element, goog.events.EventType.CLICK,
+					decrementClickHandler);
 
-            }
+			}
 		}
 
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/TreeSingleSelectionMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/TreeSingleSelectionMouseController.as
index a0cd0d0..d7b08a7 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/TreeSingleSelectionMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/TreeSingleSelectionMouseController.as
@@ -52,17 +52,6 @@ package org.apache.royale.html.beads.controllers
 			super();
 		}
 
-		private var _strand:IStrand;
-
-		/**
-		 * @private
-		 */
-		override public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			super.strand = value;
-		}
-
 		/**
 		 * @private
 		 */
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/VDividedContainerMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/VDividedContainerMouseController.as
index 83d66e6..54be8b1 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/VDividedContainerMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/VDividedContainerMouseController.as
@@ -23,10 +23,10 @@ package org.apache.royale.html.beads.controllers
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IUIBase;
 	import org.apache.royale.core.UIBase;
-	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.events.MouseEvent;
 	import org.apache.royale.html.beads.models.DividedContainerModel;
 	import org.apache.royale.html.supportClasses.DividedContainerDivider;
+	import org.apache.royale.core.Bead;
 
 	/**
 	 * This is the mouse controller for the VDividedContainer. This bead class tracks
@@ -38,7 +38,7 @@ package org.apache.royale.html.beads.controllers
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class VDividedContainerMouseController implements IBead, IBeadController
+	public class VDividedContainerMouseController extends Bead implements IBeadController
 	{
 		/**
 		 * Constructor.
@@ -52,15 +52,11 @@ package org.apache.royale.html.beads.controllers
 		{
 		}
 
-		private var _strand:IStrand;
 
-		/**
-		 * @copy org.apache.royale.core.IStrand#strand
-		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			(_strand as IEventDispatcher).addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);
+			listenOnStrand(MouseEvent.MOUSE_DOWN, handleMouseDown);
 		}
 
 		private var deltaMove:Number = 0;
@@ -68,6 +64,7 @@ package org.apache.royale.html.beads.controllers
 
 		/**
 		 * @private
+		 * @royaleignorecoercion org.apache.royale.core.IUIBase
 		 */
 		private function handleMouseDown(event:MouseEvent):void
 		{
@@ -79,20 +76,22 @@ package org.apache.royale.html.beads.controllers
 			deltaMove = 0;
 			//trace("* VDividedContainerMouseController: anchor at "+lastPosition);
 
-			IUIBase(_strand).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove);
-			IUIBase(_strand).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
+			(_strand as IUIBase).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove);
+			(_strand as IUIBase).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
 		}
 
 		/**
 		 * @private
+		 * @royaleignorecoercion org.apache.royale.html.supportClasses.DividedContainerDivider
+		 * @royaleignorecoercion org.apache.royale.html.beads.models.DividedContainerModel
 		 */
 		private function handleMouseMove(event:MouseEvent):void
 		{
 			//trace("--- mouse moving by "+(event.screenY - lastPosition));
 			deltaMove = event.screenY - lastPosition;
-
-			var model:DividedContainerModel = (_strand as UIBase).model as DividedContainerModel;
-			var pairIndex:int = (_strand as DividedContainerDivider).pairIndex;
+			var divider:DividedContainerDivider = _strand as DividedContainerDivider;
+			var model:DividedContainerModel = divider.model as DividedContainerModel;
+			var pairIndex:int = divider.pairIndex;
 
 			model.addPairAdjustment(deltaMove, pairIndex);
 
@@ -101,17 +100,20 @@ package org.apache.royale.html.beads.controllers
 
 		/**
 		 * @private
+		 * @royaleignorecoercion org.apache.royale.core.IUIBase
+		 * @royaleignorecoercion org.apache.royale.html.supportClasses.DividedContainerDivider
+		 * @royaleignorecoercion org.apache.royale.html.beads.models.DividedContainerModel
 		 */
 		private function handleMouseUp(event:MouseEvent):void
 		{
 			deltaMove = event.screenY - lastPosition;
 			//trace("* VDividedContainerMouseController: up at "+event.screenY+" delta of "+deltaMove);
 
-			IUIBase(_strand).topMostEventDispatcher.removeEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove);
-			IUIBase(_strand).topMostEventDispatcher.removeEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
-
-			var model:DividedContainerModel = (_strand as UIBase).model as DividedContainerModel;
-			var pairIndex:int = (_strand as DividedContainerDivider).pairIndex;
+			(_strand as IUIBase).topMostEventDispatcher.removeEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove);
+			(_strand as IUIBase).topMostEventDispatcher.removeEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
+			var divider:DividedContainerDivider = _strand as DividedContainerDivider;
+			var model:DividedContainerModel = divider.model as DividedContainerModel;
+			var pairIndex:int = divider.pairIndex;
 
 			model.addPairAdjustment(deltaMove, pairIndex);
 		}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as
index d5af909..b1922c7 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as
@@ -36,6 +36,7 @@ package org.apache.royale.html.beads.layouts
     import org.apache.royale.html.beads.IDataGridView;
     import org.apache.royale.html.beads.models.ButtonBarModel;
     import org.apache.royale.html.supportClasses.IDataGridColumn;
+    import org.apache.royale.core.Bead;
 	
 	/**
 	 * DataGridLayout is a class that handles the size and positioning of the
@@ -47,7 +48,7 @@ package org.apache.royale.html.beads.layouts
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class DataGridLayout implements IBeadLayout
+	public class DataGridLayout extends Bead implements IBeadLayout
 	{
 		/**
 		 *  constructor
@@ -61,25 +62,14 @@ package org.apache.royale.html.beads.layouts
 		{
 		}
 		
-		protected var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			
-			(_strand as IEventDispatcher).addEventListener("widthChanged", handleSizeChanges);
-			(_strand as IEventDispatcher).addEventListener("heightChanged", handleSizeChanges);
-			(_strand as IEventDispatcher).addEventListener("sizeChanged", handleSizeChanges);
-			(_strand as IEventDispatcher).addEventListener("layoutNeeded", handleLayoutNeeded);
+			listenOnStrand("widthChanged", handleSizeChanges);
+			listenOnStrand("heightChanged", handleSizeChanges);
+			listenOnStrand("sizeChanged", handleSizeChanges);
+			listenOnStrand("layoutNeeded", handleLayoutNeeded);
 		}
 		
 		/**
@@ -89,7 +79,9 @@ package org.apache.royale.html.beads.layouts
 		{
 			return _strand as UIBase;
 		}
-		
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.ILayoutHost
+		 */
 		private function handleSizeChanges(event:Event):void
 		{
 			var viewBead:ILayoutHost = uiHost.view as ILayoutHost;
@@ -103,33 +95,41 @@ package org.apache.royale.html.beads.layouts
 			if (viewBead.beforeLayout())
 				layout();
 		}
-		
-        protected function getColumnsForLayout():Array
-        {
-            var header:IUIBase = (uiHost.view as IDataGridView).header;
-            // fancier DG's will filter invisible columns and only put visible columns
-            // in the bbmodel, so do all layout based on the bbmodel, not the set
-            // of columns that may contain invisible columns
-            var bbmodel:ButtonBarModel = header.getBeadByType(ButtonBarModel) as ButtonBarModel;
-            return bbmodel.dataProvider as Array;
-        }
+		/**
+		 * @royaleignorecoercion org.apache.royale.html.beads.IDataGridView
+		 * @royaleignorecoercion org.apache.royale.html.beads.models.ButtonBarModel
+		 * @royaleignorecoercion Array
+		 */
+		protected function getColumnsForLayout():Array
+		{
+			var header:IUIBase = (uiHost.view as IDataGridView).header;
+			// fancier DG's will filter invisible columns and only put visible columns
+			// in the bbmodel, so do all layout based on the bbmodel, not the set
+			// of columns that may contain invisible columns
+			var bbmodel:ButtonBarModel = header.getBeadByType(ButtonBarModel) as ButtonBarModel;
+			return bbmodel.dataProvider as Array;
+		}
 
-        protected function setHeaderWidths(columnWidths:Array):void
-        {
-            var header:IUIBase = (uiHost.view as IDataGridView).header;
-            // fancier DG's will filter invisible columns and only put visible columns
-            // in the bbmodel, so do all layout based on the bbmodel, not the set
-            // of columns that may contain invisible columns
-            var bbmodel:ButtonBarModel = header.getBeadByType(ButtonBarModel) as ButtonBarModel;
-            bbmodel.buttonWidths = columnWidths;
-        }
+		/**
+		 * @royaleignorecoercion org.apache.royale.html.beads.IDataGridView
+		 * @royaleignorecoercion org.apache.royale.html.beads.models.ButtonBarModel
+		 */
+		protected function setHeaderWidths(columnWidths:Array):void
+		{
+			var header:IUIBase = (uiHost.view as IDataGridView).header;
+			// fancier DG's will filter invisible columns and only put visible columns
+			// in the bbmodel, so do all layout based on the bbmodel, not the set
+			// of columns that may contain invisible columns
+			var bbmodel:ButtonBarModel = header.getBeadByType(ButtonBarModel) as ButtonBarModel;
+			bbmodel.buttonWidths = columnWidths;
+		}
         
 		/**
 		 * @copy org.apache.royale.core.IBeadLayout#layout
-         * @royaleignorecoercion org.apache.royale.core.IBorderPaddingMarginValuesImpl
-         * @royaleignorecoercion org.apache.royale.core.IDataGridModel
-         * @royaleignorecoercion org.apache.royale.core.ILayoutHost
-         * @royaleignorecoercion org.apache.royale.core.IUIBase
+		 * @royaleignorecoercion org.apache.royale.core.IBorderPaddingMarginValuesImpl
+		 * @royaleignorecoercion org.apache.royale.core.IDataGridModel
+		 * @royaleignorecoercion org.apache.royale.core.ILayoutHost
+		 * @royaleignorecoercion org.apache.royale.core.IUIBase
 		 * @royaleignorecoercion org.apache.royale.core.UIBase
 		 * @royaleignorecoercion org.apache.royale.html.beads.IDataGridView
 		 * @royaleignorecoercion org.apache.royale.html.beads.models.ButtonBarModel
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridPercentageLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridPercentageLayout.as
index 8a83fce..58ddeff 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridPercentageLayout.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridPercentageLayout.as
@@ -54,25 +54,14 @@ package org.apache.royale.html.beads.layouts
 			super();
 		}
 		
-		private var _strand:IStrand;
-		
 		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
+		 * @copy org.apache.royale.core.IBeadLayout#layout
+     * @royaleignorecoercion org.apache.royale.core.UIBase
+     * @royaleignorecoercion org.apache.royale.core.IDataGridModel
+     * @royaleignorecoercion org.apache.royale.html.ButtonBar
+     * @royaleignorecoercion org.apache.royale.html.beads.IDataGridView
+     * @royaleignorecoercion org.apache.royale.html.supportClasses.IDataGridColumn
 		 */
-		override public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			super.strand = value;
-		}
-		
-        /**
-         * @copy org.apache.royale.core.IBeadLayout#layout
-         */
 		override public function layout():Boolean
 		{			
 			// call the super function to get the basics laid out even
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/TreeGridLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/TreeGridLayout.as
index d2a132f..4c38110 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/TreeGridLayout.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/TreeGridLayout.as
@@ -34,10 +34,8 @@ package org.apache.royale.html.beads.layouts
 	import org.apache.royale.html.beads.models.TreeGridModel;
 	import org.apache.royale.html.supportClasses.IDataGridColumn;
 	import org.apache.royale.html.supportClasses.TreeGridColumn;
-	COMPILE::JS 
-	{
-		import org.apache.royale.core.IRenderedObject;
-	}
+	import org.apache.royale.core.IRenderedObject;
+	import org.apache.royale.core.Bead;
 	
 	/**
 	 * The TreeGridLayout class provides the sizing and positioning for the sub-components
@@ -48,7 +46,7 @@ package org.apache.royale.html.beads.layouts
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class TreeGridLayout implements IBeadLayout
+	public class TreeGridLayout extends Bead implements IBeadLayout
 	{
 		/**
 		 * Constructor.
@@ -62,24 +60,14 @@ package org.apache.royale.html.beads.layouts
 		{
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 * @see org.apache.royale.core.IStrand
-		 * 
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9
-		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			
-			(_strand as IEventDispatcher).addEventListener("widthChanged", handleSizeChanges);
-			(_strand as IEventDispatcher).addEventListener("heightChanged", handleSizeChanges);
-			(_strand as IEventDispatcher).addEventListener("sizeChanged", handleSizeChanges);
-			(_strand as IEventDispatcher).addEventListener("layoutNeeded", handleLayoutNeeded);
+			listenOnStrand("widthChanged", handleSizeChanges);
+			listenOnStrand("heightChanged", handleSizeChanges);
+			listenOnStrand("sizeChanged", handleSizeChanges);
+			listenOnStrand("layoutNeeded", handleLayoutNeeded);
 		}
 		
 		private function get host():IUIBase
@@ -111,9 +99,13 @@ package org.apache.royale.html.beads.layouts
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9
-         *  @royaleignorecoercion org.apache.royale.core.IBorderPaddingMarginValuesImpl
-         *  @royaleignorecoercion org.apache.royale.core.IUIBase
-         *  @royaleignorecoercion org.apache.royale.core.IRenderedObject
+		 *  @royaleignorecoercion org.apache.royale.core.IBorderPaddingMarginValuesImpl
+		 *  @royaleignorecoercion org.apache.royale.core.IUIBase
+		 *  @royaleignorecoercion org.apache.royale.core.UIBase
+		 *  @royaleignorecoercion org.apache.royale.core.IRenderedObject
+		 *  @royaleignorecoercion org.apache.royale.html.beads.models.TreeGridModel
+		 *  @royaleignorecoercion org.apache.royale.html.beads.TreeGridView
+		 *  @royaleignorecoercion org.apache.royale.html.ButtonBar
 		 */
 		public function layout():Boolean
 		{
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VDividedContainerLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VDividedContainerLayout.as
index 7a27079..a3b7152 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VDividedContainerLayout.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/VDividedContainerLayout.as
@@ -61,17 +61,6 @@ package org.apache.royale.html.beads.layouts
 		{
 		}
 
-		private var _strand: IStrand;
-
-		/**
-		 * @copy org.apache.royale.core.IStrand#strand
-		 */
-		override public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			super.strand = value;
-		}
-
 		/**
 		 * @private
          *  @royaleignorecoercion org.apache.royale.core.IBorderPaddingMarginValuesImpl
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/AlertModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/AlertModel.as
index 3302fda..261c322 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/AlertModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/AlertModel.as
@@ -19,10 +19,8 @@
 package org.apache.royale.html.beads.models
 {
 	import org.apache.royale.core.IAlertModel;
-	import org.apache.royale.core.IBead;
-	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 	
 	/**
 	 *  The AlertModel class bead implements the org.apache.royale.core.IAlertModel and holds the properties
@@ -33,7 +31,7 @@ package org.apache.royale.html.beads.models
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class AlertModel extends EventDispatcher implements IAlertModel, IBead
+	public class AlertModel extends DispatcherBead implements IAlertModel
 	{
 		/**
 		 *  constructor.
@@ -48,21 +46,6 @@ package org.apache.royale.html.beads.models
 			super();
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-		
 		private var _title:String;
 		
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayListSelectionModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayListSelectionModel.as
index 19818f6..c351076 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayListSelectionModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayListSelectionModel.as
@@ -21,9 +21,8 @@ package org.apache.royale.html.beads.models
 	import org.apache.royale.collections.IArrayList;
 	import org.apache.royale.core.IRollOverModel;
 	import org.apache.royale.core.ISelectionModel;
-	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 
 	/**
 	 *  The ArrayListSelectionModel class is a selection model for
@@ -35,7 +34,7 @@ package org.apache.royale.html.beads.models
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class ArrayListSelectionModel extends EventDispatcher implements ISelectionModel, IRollOverModel
+	public class ArrayListSelectionModel extends DispatcherBead implements ISelectionModel, IRollOverModel
 	{
 		/**
 		 *  Constructor.
@@ -49,21 +48,6 @@ package org.apache.royale.html.beads.models
 		{
 		}
 
-		private var _strand:IStrand;
-
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-
 		private var _dataProvider:IArrayList;
 
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArraySelectionModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArraySelectionModel.as
index ad5a1f6..4cdfbfd 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArraySelectionModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArraySelectionModel.as
@@ -22,7 +22,7 @@ package org.apache.royale.html.beads.models
 	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 			
     /**
      *  The ArraySelectionModel class is a selection model for
@@ -36,7 +36,7 @@ package org.apache.royale.html.beads.models
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class ArraySelectionModel extends EventDispatcher implements ISelectionModel, IRollOverModel
+	public class ArraySelectionModel extends DispatcherBead implements ISelectionModel, IRollOverModel
 	{
         /**
          *  Constructor.
@@ -50,21 +50,6 @@ package org.apache.royale.html.beads.models
 		{
 		}
 
-		private var _strand:IStrand;
-		
-        /**
-         *  @copy org.apache.royale.core.IBead#strand
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-		
 		private var _dataProvider:Object;
         
         /**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/CascadingMenuModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/CascadingMenuModel.as
index 8f7fab8..097d2cb 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/CascadingMenuModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/CascadingMenuModel.as
@@ -28,14 +28,7 @@ package org.apache.royale.html.beads.models
 		{
 			super();
 		}
-		
-		private var _strand:IStrand;
-		override public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			super.strand = value;
-		}
-		
+				
 		private var _submenuField:String = "menu";
 		
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataGridPresentationModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataGridPresentationModel.as
index d4e2c69..2849e25 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataGridPresentationModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataGridPresentationModel.as
@@ -70,19 +70,5 @@ package org.apache.royale.html.beads.models
 			}
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		override public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataProviderModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataProviderModel.as
index b432d61..2fcd344 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataProviderModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DataProviderModel.as
@@ -22,6 +22,7 @@ package org.apache.royale.html.beads.models
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 			
     /**
      *  The DataProviderModel class is a model for
@@ -32,7 +33,7 @@ package org.apache.royale.html.beads.models
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class DataProviderModel extends EventDispatcher implements IDataProviderModel
+	public class DataProviderModel extends DispatcherBead implements IDataProviderModel
 	{
         /**
          *  Constructor.
@@ -46,21 +47,6 @@ package org.apache.royale.html.beads.models
 		{
 		}
 
-		private var _strand:IStrand;
-		
-        /**
-         *  @copy org.apache.royale.core.IBead#strand
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-		
 		private var _dataProvider:Object;
         
         /**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DateChooserModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DateChooserModel.as
index c442df4..9f67cc2 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DateChooserModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DateChooserModel.as
@@ -19,9 +19,8 @@
 package org.apache.royale.html.beads.models
 {	
 	import org.apache.royale.core.IDateChooserModelWithChangeCheck;
-	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 	
 	/**
 	 *  The DateChooserModel is a bead class that manages the data for a DataChooser. 
@@ -33,7 +32,7 @@ package org.apache.royale.html.beads.models
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class DateChooserModel extends EventDispatcher implements IDateChooserModelWithChangeCheck
+	public class DateChooserModel extends DispatcherBead implements IDateChooserModelWithChangeCheck
 	{
 		public function DateChooserModel()
 		{
@@ -43,21 +42,6 @@ package org.apache.royale.html.beads.models
 //			displayedMonth = today.getMonth();
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-		
 		private var _dayNames:Array   = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
 		private var _monthNames:Array = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
 		private var _days:Array;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DividedContainerModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DividedContainerModel.as
index 2ab11ab..b14d954 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DividedContainerModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/DividedContainerModel.as
@@ -22,6 +22,7 @@ package org.apache.royale.html.beads.models
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 
 	/**
 	 * The DividedContainerModel holds the information necessary for the DividedContainer
@@ -33,7 +34,7 @@ package org.apache.royale.html.beads.models
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class DividedContainerModel extends EventDispatcher implements IBeadModel
+	public class DividedContainerModel extends DispatcherBead implements IBeadModel
 	{
 		/**
 		 * Constructor.
@@ -47,16 +48,6 @@ package org.apache.royale.html.beads.models
 		{
 		}
 
-		private var _strand:IStrand;
-
-		/**
-		 * @copy org.apache.royale.core.IStrand#strand
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-
 		private var _pairAdjustments:Array = [0];
 
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ImageModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ImageModel.as
index da9d009..f5eac62 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ImageModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ImageModel.as
@@ -19,9 +19,8 @@
 package org.apache.royale.html.beads.models
 {
 	import org.apache.royale.core.IImageModel;
-	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 	
 	/**
 	 *  The ImageModel class bead defines the data associated with an org.apache.royale.html.Image
@@ -32,7 +31,7 @@ package org.apache.royale.html.beads.models
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class ImageModel extends EventDispatcher implements IImageModel
+	public class ImageModel extends DispatcherBead implements IImageModel
 	{
 		/**
 		 *  constructor.
@@ -47,21 +46,6 @@ package org.apache.royale.html.beads.models
 			super();
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-		
 		protected var _url:String;
 		
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ListPresentationModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ListPresentationModel.as
index 010a793..c792549 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ListPresentationModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ListPresentationModel.as
@@ -19,9 +19,8 @@
 package org.apache.royale.html.beads.models
 {
 	import org.apache.royale.html.IListPresentationModel;
-	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 	
 	/**
 	 *  The ListPresentationModel holds values used by list controls for presenting
@@ -32,7 +31,7 @@ package org.apache.royale.html.beads.models
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class ListPresentationModel extends EventDispatcher implements IListPresentationModel
+	public class ListPresentationModel extends DispatcherBead implements IListPresentationModel
 	{
 		/**
 		 *  constructor.
@@ -89,19 +88,5 @@ package org.apache.royale.html.beads.models
 			dispatchEvent(new Event("separatorThicknessChanged"));
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MenuModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MenuModel.as
index 843288c..d0215c2 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MenuModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MenuModel.as
@@ -44,8 +44,6 @@ package org.apache.royale.html.beads.models
 			super();
 		}
 		
-		private var _strand:IStrand;
-		
 		/**
 		 * @copy org.apache.royale.core.IBead#strand
 		 *  
@@ -57,8 +55,6 @@ package org.apache.royale.html.beads.models
 		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			super.strand = value;
-			
 			MenuModel.menuList.push(_strand);
 		}
 		
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MultiSelectionCollectionViewModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MultiSelectionCollectionViewModel.as
index c8465a5..448f26c 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MultiSelectionCollectionViewModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/MultiSelectionCollectionViewModel.as
@@ -24,6 +24,7 @@ package org.apache.royale.html.beads.models
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 
     /**
      *  The MultiSelectionCollectionViewModel class is a selection model for
@@ -35,7 +36,7 @@ package org.apache.royale.html.beads.models
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9
      */
-	public class MultiSelectionCollectionViewModel extends EventDispatcher implements IRollOverModel, IMultiSelectionModel
+	public class MultiSelectionCollectionViewModel extends DispatcherBead implements IRollOverModel, IMultiSelectionModel
 	{
         /**
          *  Constructor.
@@ -49,21 +50,6 @@ package org.apache.royale.html.beads.models
 		{
 		}
 
-		private var _strand:IStrand;
-
-        /**
-         *  @copy org.apache.royale.core.IBead#strand
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9
-         */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-
 		private var _dataProvider:ICollectionView;
 
 		[Bindable("dataProviderChanged")]
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/RangeModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/RangeModel.as
index 5c8cbf9..06bcecb 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/RangeModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/RangeModel.as
@@ -24,6 +24,7 @@ package org.apache.royale.html.beads.models
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
 	import org.apache.royale.events.ValueChangeEvent;
+	import org.apache.royale.core.DispatcherBead;
 			
 	/**
 	 *  The RangeModel class bead defines a set of for a numeric range of values
@@ -34,7 +35,7 @@ package org.apache.royale.html.beads.models
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class RangeModel extends EventDispatcher implements IBead, IRangeModel
+	public class RangeModel extends DispatcherBead implements IRangeModel
 	{
 		/**
 		 *  constructor.
@@ -48,21 +49,6 @@ package org.apache.royale.html.beads.models
 		{
 		}
 		
-		protected var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-
 		private var _maximum:Number = 100;
 		
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/SingleSelectionCollectionViewModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/SingleSelectionCollectionViewModel.as
index df1ba3d..ef76d0f 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/SingleSelectionCollectionViewModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/SingleSelectionCollectionViewModel.as
@@ -21,9 +21,8 @@ package org.apache.royale.html.beads.models
 	import org.apache.royale.collections.ICollectionView;
 	import org.apache.royale.core.IRollOverModel;
 	import org.apache.royale.core.ISelectionModel;
-	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 
     /**
      *  The SingleSelectionCollectionViewModel class is a selection model for
@@ -35,7 +34,7 @@ package org.apache.royale.html.beads.models
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9
      */
-	public class SingleSelectionCollectionViewModel extends EventDispatcher implements ISelectionModel, IRollOverModel
+	public class SingleSelectionCollectionViewModel extends DispatcherBead implements ISelectionModel, IRollOverModel
 	{
         /**
          *  Constructor.
@@ -49,21 +48,6 @@ package org.apache.royale.html.beads.models
 		{
 		}
 
-		private var _strand:IStrand;
-
-        /**
-         *  @copy org.apache.royale.core.IBead#strand
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9
-         */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-
 		private var _dataProvider:ICollectionView;
 
 		[Bindable("dataProviderChanged")]
@@ -86,9 +70,9 @@ package org.apache.royale.html.beads.models
          */
 		public function set dataProvider(value:Object):void
 		{
-            if (value == _dataProvider) return;
+			if (value == _dataProvider) return;
 
-            _dataProvider = value as ICollectionView;
+			_dataProvider = value as ICollectionView;
 			if(!_dataProvider || _selectedIndex >= _dataProvider.length)
 				_selectedIndex = -1;
             
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/TextModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/TextModel.as
index 02ab36b..c627d95 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/TextModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/TextModel.as
@@ -18,12 +18,9 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads.models
 {	
-	import org.apache.royale.core.IBead;
-	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.ITextModel;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.EventDispatcher;
-	import org.apache.royale.events.IEventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 		
     /**
      *  The TextModel class is most basic data model for a
@@ -37,7 +34,7 @@ package org.apache.royale.html.beads.models
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public class TextModel extends EventDispatcher implements IBead, ITextModel
+	public class TextModel extends DispatcherBead implements ITextModel
 	{
         /**
          *  Constructor.
@@ -51,21 +48,6 @@ package org.apache.royale.html.beads.models
 		{
 		}
 		
-		private var _strand:IStrand;
-		
-        /**
-         *  @copy org.apache.royale.core.IBead#strand
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-
 		private var _text:String;
 
         [Bindable("textChange")]
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/TitleBarModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/TitleBarModel.as
index 4929a39..46c7ef7 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/TitleBarModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/TitleBarModel.as
@@ -18,11 +18,9 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads.models
 {
-	import org.apache.royale.core.IBead;
-	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.ITitleBarModel;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 	
 	/**
 	 *  The TitleBarModel class bead holds the values for the org.apache.royale.html.TitleBar's 
@@ -33,31 +31,16 @@ package org.apache.royale.html.beads.models
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class TitleBarModel extends EventDispatcher implements IBead, ITitleBarModel
+	public class TitleBarModel extends DispatcherBead implements ITitleBarModel
 	{
 		public function TitleBarModel()
 		{
 			super();
 		}
 		
-		private var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-		
 		private var _title:String;
 		
-        [Bindable("titleChange")]
+		[Bindable("titleChange")]
 		/**
 		 *  The string title for the org.apache.royale.html.TitleBar.
 		 * 
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ToggleButtonModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ToggleButtonModel.as
index dde71b9..f2a74ca 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ToggleButtonModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ToggleButtonModel.as
@@ -18,12 +18,10 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads.models
 {
-	import org.apache.royale.core.IBead;
-	import org.apache.royale.core.IStrand;
-    import org.apache.royale.core.ITextModel;
+	import org.apache.royale.core.ITextModel;
 	import org.apache.royale.core.IToggleButtonModel;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 	
 	/**
 	 *  The ToggleButtonModel class bead holds values for org.apache.royale.html.Buttons 
@@ -34,7 +32,7 @@ package org.apache.royale.html.beads.models
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class ToggleButtonModel extends EventDispatcher implements IBead, IToggleButtonModel, ITextModel
+	public class ToggleButtonModel extends DispatcherBead implements IToggleButtonModel, ITextModel
 	{
 		/**
 		 *  constructor.
@@ -48,22 +46,7 @@ package org.apache.royale.html.beads.models
 		{
 			super();
 		}
-		
-		protected var _strand:IStrand;
-		
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-		
+
 		private var _text:String;
 		
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ViewportModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ViewportModel.as
index 8420fd9..8b17252 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ViewportModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ViewportModel.as
@@ -24,11 +24,12 @@ package org.apache.royale.html.beads.models
 	import org.apache.royale.core.layout.EdgeData;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 	
     /**
      * @copy org.apache.royale.core.IViewportModel
      */
-	public class ViewportModel extends EventDispatcher implements IViewportModel
+	public class ViewportModel extends DispatcherBead implements IViewportModel
 	{
 		public function ViewportModel()
 		{
@@ -38,8 +39,6 @@ package org.apache.royale.html.beads.models
         private var _borderMetrics:EdgeData;
 		private var _chromeMetrics:EdgeData;
 		
-		private var _strand:IStrand;
-		
         /**
          * @copy org.apache.royale.core.IViewportModel
          */
@@ -64,9 +63,5 @@ package org.apache.royale.html.beads.models
             _chromeMetrics = value;
         }
         
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/WebBrowserModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/WebBrowserModel.as
index 7309d99..7883a8b 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/WebBrowserModel.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/WebBrowserModel.as
@@ -22,6 +22,7 @@ package org.apache.royale.html.beads.models
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.EventDispatcher;
+	import org.apache.royale.core.DispatcherBead;
 
 	/**
 	 *  The WebBrowserModel class bead defines the data associated with an org.apache.royale.html.WebBrowser
@@ -32,7 +33,7 @@ package org.apache.royale.html.beads.models
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class WebBrowserModel extends EventDispatcher implements IBeadModel
+	public class WebBrowserModel extends DispatcherBead implements IBeadModel
 	{
 		/**
 		 *  constructor.
@@ -47,21 +48,6 @@ package org.apache.royale.html.beads.models
 			super();
 		}
 
-		private var _strand:IStrand;
-
-		/**
-		 *  @copy org.apache.royale.core.IBead#strand
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-		}
-
 		private var _url:String;
 
 		/**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/plugin/ModalDisplay.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/plugin/ModalDisplay.as
index ddbfc11..982dc43 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/plugin/ModalDisplay.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/plugin/ModalDisplay.as
@@ -26,50 +26,14 @@ package org.apache.royale.html.beads.plugin
   import org.apache.royale.events.Event;
   import org.apache.royale.utils.UIUtils;
   import org.apache.royale.events.IEventDispatcher;
+  import org.apache.royale.core.DispatcherBead;
 
-  public class ModalDisplay extends EventDispatcher implements IBead, IModalDisplay
+  public class ModalDisplay extends DispatcherBead implements IModalDisplay
   {
     public function ModalDisplay()
     {
       super();
     }
-    /**
-     *  The strand.  Do not modify except
-     *  via the strand setter.  For reading only.
-     * 
-     *  Because Object.defineProperties in JS
-     *  doesn't allow you to just override the setter
-     *  (you have to override the getter as well even
-     *  if it just calls the super getter) it is
-     *  more efficient to expose this variable than
-     *  have all of the layers of simple overrides.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.9.4
-     */
-    protected var _strand:IStrand;
-    
-    /**
-     *  Get the strand for this bead
-     * 
-     *  Override this for whatever else you need to do when
-     *  being hooked to the Strand
-     * 
-     *  @copy org.apache.royale.core.IBead#strand
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.9.4
-     * 
-     *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-     */
-    public function set strand(value:IStrand):void
-    {
-        _strand = value;
-    }
     
     /**
      *  The host component. 
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/plugin/ModalOverlay.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/plugin/ModalOverlay.as
index 62f04a8..d8197aa 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/plugin/ModalOverlay.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/plugin/ModalOverlay.as
@@ -31,56 +31,25 @@ package org.apache.royale.html.beads.plugin
   import org.apache.royale.core.UIBase;
   import org.apache.royale.utils.CSSUtils;
   import org.apache.royale.events.MouseEvent;
+  import org.apache.royale.core.DispatcherBead;
 
   COMPILE::SWF
   {
     import flash.display.Shape;
   }
 
-  public class ModalOverlay extends EventDispatcher implements IBead
+  public class ModalOverlay extends DispatcherBead
   {
     public function ModalOverlay()
     {
       super();
     }
-    /**
-     *  The strand.  Do not modify except
-     *  via the strand setter.  For reading only.
-     * 
-     *  Because Object.defineProperties in JS
-     *  doesn't allow you to just override the setter
-     *  (you have to override the getter as well even
-     *  if it just calls the super getter) it is
-     *  more efficient to expose this variable than
-     *  have all of the layers of simple overrides.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.9.4
-     */
-    protected var _strand:IStrand;
     
-    /**
-     *  Get the strand for this bead
-     * 
-     *  Override this for whatever else you need to do when
-     *  being hooked to the Strand
-     * 
-     *  @copy org.apache.royale.core.IBead#strand
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.9.4
-     * 
-     *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-     */
-    public function set strand(value:IStrand):void
+    override public function set strand(value:IStrand):void
     {
         _strand = value;
-        (_strand as IEventDispatcher).addEventListener("modalShown", handleShown);
-        (_strand as IEventDispatcher).addEventListener("modalHidden", handleHidden);
+        listenOnStrand("modalShown", handleShown);
+        listenOnStrand("modalHidden", handleHidden);
     }
     
     /**
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataProviderNotifierBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataProviderNotifierBase.as
index 6e71898..b377d2e 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataProviderNotifierBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataProviderNotifierBase.as
@@ -28,6 +28,7 @@ package org.apache.royale.html.supportClasses
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.collections.ArrayList;
+	import org.apache.royale.core.Bead;
 	
 	/**
 	 *  Base class for all data provider notifiers.
@@ -37,7 +38,7 @@ package org.apache.royale.html.supportClasses
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class DataProviderNotifierBase implements IBead, IDocument, IDataProviderNotifier
+	public class DataProviderNotifierBase extends Bead implements IDocument, IDataProviderNotifier
 	{
 		/**
 		 *  constructor.
@@ -53,8 +54,6 @@ package org.apache.royale.html.supportClasses
 		
 		protected var dataProvider:ArrayList;
 		
-		protected var _strand:IStrand;
-		
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
 		 *  
@@ -66,7 +65,7 @@ package org.apache.royale.html.supportClasses
 		 *  @royaleignorecoercion org.apache.royale.core.IBeadModel
 		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 			
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/HDividedContainerGripper.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/HDividedContainerGripper.as
index 0b734ab..1869971f 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/HDividedContainerGripper.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/HDividedContainerGripper.as
@@ -18,13 +18,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.supportClasses
 {
-	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.graphics.SolidColorStroke;
 	import org.apache.royale.svg.Path;
+	import org.apache.royale.core.Bead;
 
 	/**
 	 * The HDividedContainerGripper is a bead added to the HDividedContainerDivider to
@@ -35,7 +35,7 @@ package org.apache.royale.html.supportClasses
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class HDividedContainerGripper implements IBead, IDividedContainerGripper
+	public class HDividedContainerGripper extends Bead implements IDividedContainerGripper
 	{
 		/**
 		 * Constructor.
@@ -49,24 +49,22 @@ package org.apache.royale.html.supportClasses
 		{
 		}
 
-		private var _strand:IStrand;
 		private var path:Path;
 
 		/**
 		 * @copy org.apache.royale.core.IStrand#strand
 		 *
-		 * @royaleignorecoercion UIBase
+		 *  @royaleignorecoercion org.apache.royale.core.UIBase
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 
 			COMPILE::JS {
 				(_strand as UIBase).element.style.cursor = 'col-resize';
 			}
-
-			(_strand as IEventDispatcher).addEventListener("widthChanged", handleResize);
-			(_strand as IEventDispatcher).addEventListener("heightChanged", handleResize);
+			listenOnStrand("widthChanged", handleResize);
+			listenOnStrand("heightChanged", handleResize);
 
 			path = new Path();
 			path.stroke = new SolidColorStroke(0x555555,1);
@@ -76,6 +74,7 @@ package org.apache.royale.html.supportClasses
 
 		/**
 		 * @private
+		 *  @royaleignorecoercion org.apache.royale.core.UIBase
 		 */
 		private function handleResize(event:Event):void
 		{
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/VDividedContainerGripper.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/VDividedContainerGripper.as
index cba8810..a001f9e 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/VDividedContainerGripper.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/VDividedContainerGripper.as
@@ -18,12 +18,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.supportClasses
 {
-	import org.apache.royale.core.IBead;
+	import org.apache.royale.core.Bead;
 	import org.apache.royale.core.IStrand;
-	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.Event;
-	import org.apache.royale.events.IEventDispatcher;
 	import org.apache.royale.graphics.SolidColorStroke;
+	import org.apache.royale.core.UIBase;
 	import org.apache.royale.svg.Path;
 
 	/**
@@ -35,7 +34,7 @@ package org.apache.royale.html.supportClasses
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9
 	 */
-	public class VDividedContainerGripper implements IBead, IDividedContainerGripper
+	public class VDividedContainerGripper extends Bead implements IDividedContainerGripper
 	{
 		/**
 		 * Constructor.
@@ -49,24 +48,22 @@ package org.apache.royale.html.supportClasses
 		{
 		}
 
-		private var _strand:IStrand;
 		private var path:Path;
 
 		/**
 		 * @copy org.apache.royale.core.IStrand#strand
 		 *
-		 * @royaleignorecoercion UIBase
+		 *  @royaleignorecoercion org.apache.royale.core.UIBase
 		 */
-		public function set strand(value:IStrand):void
+		override public function set strand(value:IStrand):void
 		{
 			_strand = value;
 
 			COMPILE::JS {
 				(_strand as UIBase).element.style.cursor = 'row-resize';
 			}
-
-			(_strand as IEventDispatcher).addEventListener("widthChanged", handleResize);
-			(_strand as IEventDispatcher).addEventListener("heightChanged", handleResize);
+			listenOnStrand("widthChanged", handleResize);
+			listenOnStrand("heightChanged", handleResize);
 
 			path = new Path();
 			path.stroke = new SolidColorStroke(0x555555,1);
@@ -76,6 +73,7 @@ package org.apache.royale.html.supportClasses
 
 		/**
 		 * @private
+		 *  @royaleignorecoercion org.apache.royale.core.UIBase
 		 */
 		private function handleResize(event:Event):void
 		{