You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2020/02/16 01:10:29 UTC

[royale-asjs] 11/14: drop itemRendererOwner as a requirement for IItemRenderer and get ListExample to work

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

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

commit 6c5488b63223830b91472b772070e3dd9f5ac828
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri Feb 7 23:16:39 2020 -0800

    drop itemRendererOwner as a requirement for IItemRenderer and get ListExample to work
---
 .../ListExample/src/main/royale/MyInitialView.mxml |   7 +-
 .../main/royale/simple/IRFactoryForArrayData.as    | 178 ---------------------
 .../projects/Basic/src/main/resources/defaults.css |  40 ++++-
 .../html/beads/DataItemRendererFactoryBase.as      | 134 +---------------
 .../beads/DataItemRendererFactoryForArrayList.as   |  14 +-
 .../DataItemRendererFactoryForCollectionView.as    |   4 +-
 .../DynamicAddItemRendererForArrayListData.as      |  10 +-
 .../DynamicItemsRendererFactoryForArrayListData.as |  16 +-
 .../DynamicRemoveItemRendererForArrayListData.as   |  98 ++----------
 .../DynamicUpdateItemRendererForArrayListData.as   | 107 ++-----------
 ...erFactoryBase.as => ItemRendererFactoryBase.as} |  38 +----
 .../html/beads/ListItemRendererInitializer.as      |  10 +-
 .../org/apache/royale/html/beads/ListView.as       |  77 ++++++---
 .../beads/TextItemRendererFactoryForArrayData.as   |   1 -
 .../html/beads/TreeItemRendererInitializer.as      |   4 +-
 .../VirtualDataItemRendererFactoryForArrayData.as  |   2 +-
 .../apache/royale/html/beads/VirtualListView.as    |  21 ++-
 .../html/supportClasses/TextButtonItemRenderer.as  | 125 ---------------
 .../html/supportClasses/UIItemRendererBase.as      |  11 --
 .../charts/beads/ChartItemRendererFactory.as       |   1 -
 .../beads/DataItemRendererFactoryForSeriesData.as  |   8 +-
 .../layouts/LineChartCategoryVsLinearLayout.as     |   1 -
 .../beads/layouts/LineChartLinearVsLinearLayout.as |   1 -
 .../org/apache/royale/collections/IArrayList.as    |   2 +-
 .../projects/Core/src/main/royale/CoreClasses.as   |   2 +
 .../royale/core/IIndexedItemRendererInitializer.as |   2 +-
 .../royale/org/apache/royale/core/IItemRenderer.as |  13 --
 .../apache/royale/core/IItemRendererInitializer.as |   2 +-
 .../apache/royale/core/ItemRendererClassFactory.as |   2 +-
 ...Initializer.as => ItemRendererOwnerViewBead.as} |  34 ++--
 .../core/SelectableItemRendererClassFactory.as     |  88 ++++++++++
 .../html/beads/SelectableItemRendererBeadBase.as   |   5 +-
 .../royale/html/beads/ButtonBarReorderBead.as      |   4 +-
 .../beads/DragDropListItemRendererInitializer.as}  |  64 +++-----
 .../html/beads/SingleSelectionDragSourceBead.as    |   4 +-
 .../html/beads/SingleSelectionDropTargetBead.as    |   4 +-
 ...actoryForICollectionViewAdvancedDataGridData.as |   2 +-
 ...ataItemRendererFactoryForICollectionViewData.as |   2 +-
 .../VirtualDataItemRendererFactoryForIListData.as  |   2 +-
 .../mdl/beads/TabsItemRendererInitializer.as       |   7 +-
 40 files changed, 337 insertions(+), 810 deletions(-)

diff --git a/examples/royale/ListExample/src/main/royale/MyInitialView.mxml b/examples/royale/ListExample/src/main/royale/MyInitialView.mxml
index 3f035cb..4dd9480 100644
--- a/examples/royale/ListExample/src/main/royale/MyInitialView.mxml
+++ b/examples/royale/ListExample/src/main/royale/MyInitialView.mxml
@@ -32,9 +32,9 @@ limitations under the License.
 			IBeadView: ClassReference("simple.GenericListView");
 			IBeadModel: ClassReference("org.apache.royale.html.beads.models.SingleSelectionCollectionViewModel");
 			IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
-			IDataProviderItemRendererMapper: ClassReference("simple.IRFactoryForArrayData");
-			IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+			IItemRendererClassFactory: ClassReference("org.apache.royale.core.SelectableItemRendererClassFactory");
 			IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer");		
+            ISelectableItemRenderer: ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");		
 			IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");	
 			IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
 			IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");		
@@ -116,6 +116,9 @@ limitations under the License.
 		<js:beads>
 			<js:ArrayListSelectionModel/>
 			<js:DataItemRendererFactoryForArrayList/>
+            <js:DynamicAddItemRendererForArrayListData/>
+            <js:DynamicRemoveItemRendererForArrayListData/>
+            <js:DynamicUpdateItemRendererForArrayListData/>
 			<js:ConstantBinding
 				sourceID="applicationModel"
 				sourcePropertyName="states"
diff --git a/examples/royale/ListExample/src/main/royale/simple/IRFactoryForArrayData.as b/examples/royale/ListExample/src/main/royale/simple/IRFactoryForArrayData.as
deleted file mode 100644
index f5418eb..0000000
--- a/examples/royale/ListExample/src/main/royale/simple/IRFactoryForArrayData.as
+++ /dev/null
@@ -1,178 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  Licensed to the Apache Software Foundation (ASF) under one or more
-//  contributor license agreements.  See the NOTICE file distributed with
-//  this work for additional information regarding copyright ownership.
-//  The ASF licenses this file to You under the Apache License, Version 2.0
-//  (the "License"); you may not use this file except in compliance with
-//  the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-package simple
-{
-	import org.apache.royale.core.IBead;
-	import org.apache.royale.core.IDataProviderItemRendererMapper;
-	import org.apache.royale.core.IItemRendererClassFactory;
-	import org.apache.royale.core.IItemRendererParent;
-	import org.apache.royale.core.IListPresentationModel;
-	import org.apache.royale.core.ISelectableItemRenderer;
-	import org.apache.royale.core.ISelectionModel;
-	import org.apache.royale.core.IStrand;
-	import org.apache.royale.core.IUIBase;
-	import org.apache.royale.core.SimpleCSSStyles;
-	import org.apache.royale.core.UIBase;
-	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;
-
-	[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
-
-    /**
-     *  The IRFactoryForArrayData class reads an
-     *  array of data and creates an item renderer for every
-     *  item in the array.  Other implementations of
-     *  IDataProviderItemRendererMapper map different data
-     *  structures or manage a virtual set of renderers.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.0
-     */
-	public class IRFactoryForArrayData extends EventDispatcher implements IBead, IDataProviderItemRendererMapper
-	{
-        /**
-         *  Constructor.
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-		public function IRFactoryForArrayData(target:Object=null)
-		{
-			super(target);
-		}
-
-		private var selectionModel:ISelectionModel;
-
-		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;
-			IEventDispatcher(value).addEventListener("beadsAdded",finishSetup);
-			IEventDispatcher(value).addEventListener("initComplete",finishSetup);
-		}
-
-		private function finishSetup(event:Event):void
-		{
-			selectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
-			var listView:IListView = _strand.getBeadByType(IListView) as IListView;
-			dataGroup = listView.dataGroup;
-			selectionModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
-
-			if (!itemRendererFactory)
-			{
-				_itemRendererFactory = new (ValuesManager.valuesImpl.getValue(_strand, "iItemRendererClassFactory")) as IItemRendererClassFactory;
-				_strand.addBead(_itemRendererFactory);
-			}
-
-			dataProviderChangeHandler(null);
-		}
-
-		private var _itemRendererFactory:IItemRendererClassFactory;
-
-        /**
-         *  The org.apache.royale.core.IItemRendererClassFactory used
-         *  to generate instances of item renderers.
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-		public function get itemRendererFactory():IItemRendererClassFactory
-		{
-			return _itemRendererFactory;
-		}
-
-        /**
-         *  @private
-         */
-		public function set itemRendererFactory(value:IItemRendererClassFactory):void
-		{
-			_itemRendererFactory = value;
-		}
-
-        /**
-         *  The org.apache.royale.core.IItemRendererParent that will
-         *  parent the item renderers.
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-		protected var dataGroup:IItemRendererParent;
-
-		private function dataProviderChangeHandler(event:Event):void
-		{
-			var dp:Array = selectionModel.dataProvider as Array;
-			if (!dp)
-				return;
-
-			dataGroup.removeAllItemRenderers();
-
-			var listView:IListView = _strand.getBeadByType(IListView) as IListView;
-			var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel;
-
-			// This needs to be re-thought. There should be a better way to move the
-			// properties from the component to the renderers. At least a new interface
-			// should be created.
-			var list:GenericList = _strand as GenericList;
-
-			var n:int = dp.length;
-			for (var i:int = 0; i < n; i++)
-			{
-				var ir:ISelectableItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as ISelectableItemRenderer;
-				dataGroup.addItemRenderer(ir, false);
-				ir.index = i;
-				ir.labelField = list.labelField;
-				if (presentationModel) {
-					var style:SimpleCSSStyles = new SimpleCSSStyles();
-					style.marginBottom = presentationModel.separatorThickness;
-					UIBase(ir).style = style;
-					UIBase(ir).height = presentationModel.rowHeight;
-					UIBase(ir).percentWidth = 100;
-				}
-				ir.data = dp[i];
-
-				var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED);
-				newEvent.itemRenderer = ir;
-				dispatchEvent(newEvent);
-			}
-
-			IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated"));
-		}
-	}
-}
diff --git a/frameworks/projects/Basic/src/main/resources/defaults.css b/frameworks/projects/Basic/src/main/resources/defaults.css
index ae835f4..13c5d50 100644
--- a/frameworks/projects/Basic/src/main/resources/defaults.css
+++ b/frameworks/projects/Basic/src/main/resources/defaults.css
@@ -55,6 +55,7 @@ ButtonBar
 	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.ButtonBarLayout");
 	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.TextItemRendererFactoryForArrayData");
 	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.ListItemRendererInitializer");
 	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.TextButtonItemRenderer");
 	
 	border-style: none;
@@ -83,8 +84,10 @@ ComboBoxList
 	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
 	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
 	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.TextItemRendererFactoryForArrayData");
-	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+	IItemRendererClassFactory: ClassReference("org.apache.royale.core.SelectableItemRendererClassFactory");
+	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.ListItemRendererInitializer");
 	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer");
+	ISelectableItemRenderer: ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");
 	IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
 	border-style: solid;
@@ -121,6 +124,7 @@ DataContainer
 	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
 	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData");
 	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.ListItemRendererInitializer");
 	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer");
 	IViewport: ClassReference("org.apache.royale.html.supportClasses.Viewport");
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
@@ -152,6 +156,7 @@ DataGridButtonBar
 	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
 	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.ButtonBarLayout");
 	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.TextItemRendererFactoryForArrayData");
+	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.ListItemRendererInitializer");
 	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
 	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.TextButtonItemRenderer");
 	
@@ -167,8 +172,10 @@ DataGridColumnList {
 	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
 	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
 	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData");
-	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+	IItemRendererClassFactory: ClassReference("org.apache.royale.core.SelectableItemRendererClassFactory");
+	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.ListItemRendererInitializer");
 	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer");
+	ISelectableItemRenderer: ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");
 	IViewport: ClassReference("org.apache.royale.html.supportClasses.Viewport");
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
 	border-style: none;
@@ -201,8 +208,10 @@ DynamicDataGridColumnList {
 	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
 	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
 	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView");
-	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+	IItemRendererClassFactory: ClassReference("org.apache.royale.core.SelectableItemRendererClassFactory");
+	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.ListItemRendererInitializer");
 	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer");
+	ISelectableItemRenderer: ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");
 	IViewport: ClassReference("org.apache.royale.html.supportClasses.Viewport");
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
 	border-style: none;
@@ -232,8 +241,10 @@ DateFieldDateChooser {
 
 DateChooserList {
 	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData");
-	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+	IItemRendererClassFactory: ClassReference("org.apache.royale.core.SelectableItemRendererClassFactory");
+	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.ListItemRendererInitializer");
 	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.DateItemRenderer");		
+	ISelectableItemRenderer: ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");
 	border-style: solid;
 	border-color: #000000;
 	border-width: 1px;
@@ -397,7 +408,9 @@ MultiSelectionList
 	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
 	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData");
 	IItemRendererClassFactory: ClassReference("org.apache.royale.html.beads.MultiSelectionItemRendererClassFactory");
+	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.ListItemRendererInitializer");
 	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer");
+	ISelectableItemRenderer: ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");
 	IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
 }
@@ -409,8 +422,10 @@ List
 	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
 	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
 	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData");
-	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+	IItemRendererClassFactory: ClassReference("org.apache.royale.core.SelectableItemRendererClassFactory");
+	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.ListItemRendererInitializer");
 	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer");
+	ISelectableItemRenderer: ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");
 	IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
 }
@@ -422,8 +437,10 @@ DynamicList
 	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
 	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
 	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForCollectionView");
-	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+	IItemRendererClassFactory: ClassReference("org.apache.royale.core.SelectableItemRendererClassFactory");
+	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.ListItemRendererInitializer");
 	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer");
+	ISelectableItemRenderer: ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");
 	IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
 	border-style: solid;
@@ -533,7 +550,9 @@ MultiSelectionTree
 	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
 	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForHierarchicalData");
 	IItemRendererClassFactory: ClassReference("org.apache.royale.html.beads.MultiSelectionItemRendererClassFactory");
+	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.TreeItemRendererInitializer");
 	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.TreeItemRenderer");
+	ISelectableItemRenderer: ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");
 	IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
 }
@@ -545,8 +564,10 @@ Tree
 	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.TreeSingleSelectionMouseController");
 	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
 	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForHierarchicalData");
-	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+	IItemRendererClassFactory: ClassReference("org.apache.royale.core.SelectableItemRendererClassFactory");
+	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.TreeItemRendererInitializer");
 	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.TreeItemRenderer");
+	ISelectableItemRenderer: ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");
 	IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
 	border: 1px solid #222222;
@@ -612,8 +633,10 @@ SimpleList
 	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
 	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
 	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.TextItemRendererFactoryForArrayData");
-	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+	IItemRendererClassFactory: ClassReference("org.apache.royale.core.SelectableItemRendererClassFactory");
+	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.ListItemRendererInitializer");
 	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer");
+	ISelectableItemRenderer: ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");
 	IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
 }
@@ -626,6 +649,7 @@ ColorPalette
 	IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.TileLayout");
 	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData");
 	IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory");
+	IItemRendererInitializer: ClassReference("org.apache.royale.html.beads.ListItemRendererInitializer");
 	IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.ColorItemRenderer");
 	IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
 	IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel");
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as
index 047c022..e556606 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as
@@ -22,11 +22,11 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IChild;
 	import org.apache.royale.core.IDataProviderItemRendererMapper;
 	import org.apache.royale.core.IDataProviderModel;
-    import org.apache.royale.core.IItemRendererInitializer;
-    import org.apache.royale.core.IIndexedItemRendererInitializer;
-    import org.apache.royale.core.IItemRenderer;
-    import org.apache.royale.core.IIndexedItemRenderer;
+	import org.apache.royale.core.IIndexedItemRenderer;
+	import org.apache.royale.core.IIndexedItemRendererInitializer;
+	import org.apache.royale.core.IItemRenderer;
 	import org.apache.royale.core.IItemRendererClassFactory;
+	import org.apache.royale.core.IItemRendererInitializer;
 	import org.apache.royale.core.IItemRendererOwnerView;
 	import org.apache.royale.core.ILayoutHost;
 	import org.apache.royale.core.IListPresentationModel;
@@ -57,7 +57,7 @@ package org.apache.royale.html.beads
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.8
      */
-	public class DataItemRendererFactoryBase extends EventDispatcher implements IBead, IDataProviderItemRendererMapper
+	public class DataItemRendererFactoryBase extends ItemRendererFactoryBase implements IDataProviderItemRendererMapper
 	{
         /**
          *  Constructor.
@@ -71,110 +71,7 @@ package org.apache.royale.html.beads
 		{
 			super(target);
 		}
-
-		protected var dataProviderModel:IDataProviderModel;
-		//protected var dataFieldProvider:DataFieldProviderBead;
-		
-		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.8
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-         */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			IEventDispatcher(value).addEventListener("initComplete", finishSetup);
-		}
-		
-		/**
-		 * @private
-		 * @royaleignorecoercion org.apache.royale.core.IDataProviderModel
-		 * @royaleignorecoercion org.apache.royale.core.IItemRendererClassFactory
-		 * @royaleignorecoercion org.apache.royale.html.beads.DataFieldProviderBead
-		 */
-		protected function finishSetup(event:Event):void
-		{			
-			dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
-			dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
-
-            /*
-            dataFieldProvider = _strand.getBeadByType(DataFieldProviderBead) as DataFieldProviderBead;
-			if (dataFieldProvider)
-            {
-                dataField = dataFieldProvider.dataField;
-            }
-            */
-            
-			// if the host component inherits from DataContainerBase, the itemRendererClassFactory will 
-			// already have been loaded by DataContainerBase.addedToParent function.
-			if(!_itemRendererFactory)
-    			_itemRendererFactory = loadBeadFromValuesManager(IItemRendererClassFactory, "iItemRendererClassFactory", _strand) as IItemRendererClassFactory;				
-			
-			dataProviderChangeHandler(null);
-		}
-		
-		private var _itemRendererFactory:IItemRendererClassFactory;
-		
-        /**
-         *  The org.apache.royale.core.IItemRendererClassFactory used 
-         *  to generate instances of item renderers.
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.8
-		 *  @royaleignorecoercion org.apache.royale.core.IItemRendererClassFactory
-         */
-		public function get itemRendererFactory():IItemRendererClassFactory
-		{
-			if(!_itemRendererFactory)
-    			_itemRendererFactory = loadBeadFromValuesManager(IItemRendererClassFactory, "iItemRendererClassFactory", _strand) as IItemRendererClassFactory;
-			
-			return _itemRendererFactory;
-		}
-		
-        /**
-         *  @private
-         */
-		public function set itemRendererFactory(value:IItemRendererClassFactory):void
-		{
-			_itemRendererFactory = value;
-		}
-		
-        private var _itemRendererInitializer:IItemRendererInitializer;
-        
-        /**
-         *  The org.apache.royale.core.IItemRendererInitializer used 
-         *  to initialize instances of item renderers.
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.8
-         *  @royaleignorecoercion org.apache.royale.core.IItemRendererInitializer
-         */
-        public function get itemRendererInitializer():IItemRendererInitializer
-        {
-            if(!_itemRendererInitializer)
-                _itemRendererInitializer = loadBeadFromValuesManager(IItemRendererInitializer, "iItemRendererInitializer", _strand) as IItemRendererInitializer;
-            
-            return _itemRendererInitializer;
-        }
-        
-        /**
-         *  @private
-         */
-        public function set itemRendererInitializer(value:IItemRendererInitializer):void
-        {
-            _itemRendererInitializer = value;
-        }
-                
+		                
         /**
          *  This Factory deletes all renderers, and generates a renderer
          *  for every data provider item.
@@ -194,7 +91,7 @@ package org.apache.royale.html.beads
 		 *  @royaleignorecoercion org.apache.royale.html.supportClasses.DataItemRenderer
 		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
          */		
-		protected function dataProviderChangeHandler(event:Event):void
+		override protected function dataProviderChangeHandler(event:Event):void
 		{
 			var dp:Object = dataProviderModel.dataProvider;
 			if (!dp)
@@ -213,27 +110,12 @@ package org.apache.royale.html.beads
 
 				dataGroup.addItemRenderer(ir, false);
                 var data:Object = getItemAt(i);
-                (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir as IIndexedItemRenderer, data, dataGroup, i);
+                (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir as IIndexedItemRenderer, data, i);
 				ir.data = data;				
 			}
 			
 			sendStrandEvent(_strand,"itemsCreated");
 		}
         
-        protected function removeAllItemRenderers(dataGroup:IItemRendererOwnerView):void
-        {
-            dataGroup.removeAllItemRenderers();            
-        }
-        
-        protected function get dataProviderLength():int
-        {
-            return 0;
-        }
-        
-        protected function getItemAt(i:int):Object
-        {
-            return null;
-        }
-
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as
index da74ec5..42a2632 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayList.as
@@ -68,6 +68,8 @@ package org.apache.royale.html.beads
 			super(target);
 		}
 		
+        private var dp:IArrayList;
+        
 		/**
 		 *  @private
          *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
@@ -75,11 +77,21 @@ package org.apache.royale.html.beads
 		 */
 		override protected function dataProviderChangeHandler(event:Event):void
 		{
-			var dp:IArrayList = dataProviderModel.dataProvider as IArrayList;
+			dp = dataProviderModel.dataProvider as IArrayList;
 			if (!dp)
 				return;
 			
             super.dataProviderChangeHandler(event);
 		}
+        
+        override protected function get dataProviderLength():int
+        {
+            return dp.length;
+        }
+        
+        override protected function getItemAt(i:int):Object
+        {
+            return dp.getItemAt(i);
+        }
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as
index 29d7d53..4e0d7b3 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForCollectionView.as
@@ -99,7 +99,7 @@ package org.apache.royale.html.beads
 			var ir:IIndexedItemRenderer = itemRendererFactory.createItemRenderer() as IIndexedItemRenderer;
 
             var data:Object = event.item;
-            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, dataGroup, event.index);
+            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, event.index);
             ir.data = data;				
 			
 			// update the index values in the itemRenderers to correspond to their shifted positions.
@@ -179,7 +179,7 @@ package org.apache.royale.html.beads
 			var ir:IIndexedItemRenderer = dataGroup.getItemRendererAt(event.index) as IIndexedItemRenderer;
 
             var data:Object = event.item;
-            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, dataGroup, event.index);
+            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, event.index);
             ir.data = data;				
 		}
 		
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicAddItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicAddItemRendererForArrayListData.as
index 8d5d1ad..3f5edcc 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicAddItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicAddItemRendererForArrayListData.as
@@ -18,6 +18,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
+    import org.apache.royale.collections.IArrayList;
 	import org.apache.royale.core.IBead;
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IIndexedItemRenderer;
@@ -46,7 +47,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.0
 	 */
-	public class DynamicAddItemRendererForArrayListData extends DataItemRendererFactoryBase
+	public class DynamicAddItemRendererForArrayListData extends ItemRendererFactoryBase
 	{
 		/**
 		 * Constructor
@@ -60,19 +61,20 @@ package org.apache.royale.html.beads
 		{
 		}
 
+        private var dp:IArrayList;
+        
 		/**
 		 *  @private
 		 *  @royaleemitcoercion org.apache.royale.events.IEventDispatcher
 		 */
 		override protected function dataProviderChangeHandler(event:Event):void
 		{
-			var dp:IEventDispatcher = dataProviderModel.dataProvider as IEventDispatcher;
+			dp = dataProviderModel.dataProvider as IArrayList;
 			if (!dp)
 				return;
 			
 			// listen for individual items being added in the future.
 			dp.addEventListener(CollectionEvent.ITEM_ADDED, handleItemAdded);
-            super.dataProviderChangeHandler(event);
 		}
 
 		/**
@@ -97,7 +99,7 @@ package org.apache.royale.html.beads
 			// update the index values in the itemRenderers to correspond to their shifted positions.
             dataGroup.addItemRenderer(ir, false);
             var data:Object = event.item;
-            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, dataGroup, event.index);
+            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, event.index);
             ir.data = data;
             
             // update the index values in the itemRenderers to correspond to their shifted positions.
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicItemsRendererFactoryForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicItemsRendererFactoryForArrayListData.as
index 4122876..c6bebbf 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicItemsRendererFactoryForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicItemsRendererFactoryForArrayListData.as
@@ -59,6 +59,8 @@ package org.apache.royale.html.beads
             super(target);
         }
 
+        private var dp:IArrayList;
+        
 		/**
 		 * @private
          * @royaleignorecoercion org.apache.royale.core.IListPresentationModel
@@ -66,7 +68,7 @@ package org.apache.royale.html.beads
 		 */
         override protected function dataProviderChangeHandler(event:Event):void
         {
-            var dp:IArrayList = dataProviderModel.dataProvider as IArrayList;
+            dp = dataProviderModel.dataProvider as IArrayList;
             if (!dp)
                 return;
 
@@ -93,7 +95,7 @@ package org.apache.royale.html.beads
             var ir:IIndexedItemRenderer = itemRendererFactory.createItemRenderer() as IIndexedItemRenderer;
             dataGroup.addItemRenderer(ir, false);
             var data:Object = event.item;
-            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, dataGroup, event.index);
+            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, event.index);
             ir.data = data;
             
 			// update the index values in the itemRenderers to correspond to their shifted positions.
@@ -107,5 +109,15 @@ package org.apache.royale.html.beads
 			sendStrandEvent(_strand,"itemsCreated");
 			sendStrandEvent(_strand,"layoutNeeded");
         }
+        
+        override protected function get dataProviderLength():int
+        {
+            return dp.length;
+        }
+        
+        override protected function getItemAt(i:int):Object
+        {
+            return dp.getItemAt(i);
+        }
     }
 }
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 5cce251..0ead9d1 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
@@ -20,8 +20,9 @@ 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.IIndexedItemRenderer;
+	import org.apache.royale.core.IItemRendererOwnerView;
+	import org.apache.royale.core.IParent;
 	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IStrandWithModelView;
@@ -29,7 +30,6 @@ 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.IParent;
 
 	/**
 	 * Handles the removal of an itemRenderer once the corresponding datum has been removed
@@ -40,7 +40,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.0
 	 */
-	public class DynamicRemoveItemRendererForArrayListData implements IBead
+	public class DynamicRemoveItemRendererForArrayListData extends ItemRendererFactoryBase
 	{
 		/**
 		 * Constructor
@@ -54,49 +54,12 @@ package org.apache.royale.html.beads
 		{
 		}
 
-		private var _strand:IStrand;
-
-		/**
-		 * @copy org.apache.royale.core.IStrand
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.0
-		 *  @royaleignorecoercion org.apache.royale.events.IEventDispatcher
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			IEventDispatcher(value).addEventListener("initComplete", initComplete);
-		}
-		
-		/**
-		 *  finish setup
-		 *
-		 *  @langversion 3.0
-		 *  @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);
-			
-			_dataProviderModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
-			dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);	
-			
-			// invoke now in case "dataProviderChanged" has already been dispatched.
-			dataProviderChangeHandler(null);
-		}
 		
 		/**
 		 * @private
 		 *  @royaleemitcoercion org.apache.royale.events.IEventDispatcher
 		 */
-		protected function dataProviderChangeHandler(event:Event):void
+		override protected function dataProviderChangeHandler(event:Event):void
 		{
 			var dp:IEventDispatcher = dataProviderModel.dataProvider as IEventDispatcher;
 			if (!dp)
@@ -119,61 +82,20 @@ package org.apache.royale.html.beads
 		 */
 		protected function handleItemRemoved(event:CollectionEvent):void
 		{
-			var parent:IParent = itemRendererOwnerView as IParent;
-			var ir:IIndexedItemRenderer = parent.getElementAt(event.index) as IIndexedItemRenderer;
-			itemRendererOwnerView.removeItemRenderer(ir);
+            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);
 			
 			// adjust the itemRenderers' index to adjust for the shift
-			var n:int = parent.numElements;
+			var n:int = dataGroup.numItemRenderers;
 			for (var i:int = event.index; i < n; i++)
 			{
-				ir = parent.getElementAt(i) as IIndexedItemRenderer;
+				ir = dataGroup.getItemRendererForIndex(i) as IIndexedItemRenderer;
 				ir.index = i;
 			}
 
 			(_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
 		}
-
-		private var _dataProviderModel: IDataProviderModel;
-
-		/**
-		 *  The org.apache.royale.core.IDataProviderModel that contains the
-		 *  data source.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.0
-		 *  @royaleignorecoercion org.apache.royale.core.IDataProviderModel
-		 */
-		public function get dataProviderModel(): IDataProviderModel
-		{
-			if (_dataProviderModel == null && _strand != null) {
-				_dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
-			}
-			return _dataProviderModel;
-		}
-
-		private var _itemRendererOwnerView: IItemRendererOwnerView;
-
-		/**
-		 *  The org.apache.royale.core.IItemRendererOwnerView used
-		 *  to generate instances of item renderers.
-		 *
-		 *  @langversion 3.0
-		 *  @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
-		 */
-		public function get itemRendererOwnerView():IItemRendererOwnerView
-		{
-			if (_itemRendererOwnerView == null) {
-                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/DynamicUpdateItemRendererForArrayListData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicUpdateItemRendererForArrayListData.as
index aae14ff..b8b3bac 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicUpdateItemRendererForArrayListData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DynamicUpdateItemRendererForArrayListData.as
@@ -20,8 +20,9 @@ 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.IIndexedItemRenderer;
+	import org.apache.royale.core.IIndexedItemRendererInitializer;
+	import org.apache.royale.core.IItemRendererOwnerView;
 	import org.apache.royale.core.ISelectionModel;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IStrandWithModelView;
@@ -39,7 +40,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.9.0
 	 */
-	public class DynamicUpdateItemRendererForArrayListData implements IBead
+	public class DynamicUpdateItemRendererForArrayListData extends ItemRendererFactoryBase
 	{
 		/**
 		 * Constructor
@@ -52,57 +53,18 @@ package org.apache.royale.html.beads
 		public function DynamicUpdateItemRendererForArrayListData()
 		{
 		}
-
-		protected var _strand:IStrand;
-
-        protected var labelField:String;
-
-		/**
-		 * @copy org.apache.royale.core.IStrand
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.0
-		 */
-		public function set strand(value:IStrand):void
-		{
-			_strand = value;
-			IEventDispatcher(value).addEventListener("initComplete", initComplete);
-		}
-		
-		/**
-		 *  finish setup
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.8
-		 */
-		protected function initComplete(event:Event):void
-		{
-			IEventDispatcher(_strand).removeEventListener("initComplete", initComplete);
-			
-			_dataProviderModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
-			labelField = _dataProviderModel.labelField;
-
-			dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);	
-
-			// invoke now in case "dataProviderChanged" has already been dispatched.
-			dataProviderChangeHandler(null);
-		}
 		
 		/**
 		 * @private
 		 */
-		protected function dataProviderChangeHandler(event:Event):void
+		override protected function dataProviderChangeHandler(event:Event):void
 		{
 			var dp:IEventDispatcher = dataProviderModel.dataProvider as IEventDispatcher;
 			if (!dp)
 				return;
 			
 			// listen for individual items being added in the future.
-			dp.addEventListener(CollectionEvent.ITEM_UPDATED, handleItemAdded);
+			dp.addEventListener(CollectionEvent.ITEM_UPDATED, handleItemUpdated);
 		}
 
 		/**
@@ -113,63 +75,18 @@ package org.apache.royale.html.beads
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.9.0
 		 */
-		protected function handleItemAdded(event:CollectionEvent):void
+		protected function handleItemUpdated(event:CollectionEvent):void
 		{
-            var ir:IIndexedItemRenderer = itemRendererOwnerView.getItemRendererForIndex(event.index) as IIndexedItemRenderer;
+            var view:IListView = (_strand as IStrandWithModelView).view as IListView;
+            var dataGroup:IItemRendererOwnerView = view.dataGroup;
+            var ir:IIndexedItemRenderer = dataGroup.getItemRendererForIndex(event.index) as IIndexedItemRenderer;
 
-            setData(ir, event.item, event.index);
+            var data:Object = event.item;
+            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, event.index);
+            ir.data = data;
 
 			(_strand as IEventDispatcher).dispatchEvent(new Event("layoutNeeded"));
 		}
 
-		private var _dataProviderModel: IDataProviderModel;
-
-		/**
-		 *  The org.apache.royale.core.IDataProviderModel that contains the
-		 *  data source.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9.0
-		 */
-		public function get dataProviderModel(): IDataProviderModel
-		{
-			if (_dataProviderModel == null && _strand != null) {
-				_dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
-			}
-			return _dataProviderModel;
-		}
-
-		private var _itemRendererOwnerView: IItemRendererOwnerView;
-
-		/**
-		 *  The org.apache.royale.core.IItemRendererOwnerView used
-		 *  to generate instances of item renderers.
-		 *
-		 *  @langversion 3.0
-		 *  @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
-		 */
-		public function get itemRendererOwnerView():IItemRendererOwnerView
-		{
-			if (_itemRendererOwnerView == null) {
-                var view:IListView = (_strand as IStrandWithModelView).view as IListView;
-                _itemRendererOwnerView = view.dataGroup;
-			}
-			return _itemRendererOwnerView;
-		}
-
-        /**
-         * @private
-         */
-        protected function setData(itemRenderer:IIndexedItemRenderer, data:Object, index:int):void
-        {
-            itemRenderer.index = index;
-            itemRenderer.data = data;
-        }
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as
similarity index 85%
copy from frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as
copy to frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as
index 047c022..ee4afd0 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ItemRendererFactoryBase.as
@@ -57,7 +57,7 @@ package org.apache.royale.html.beads
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.8
      */
-	public class DataItemRendererFactoryBase extends EventDispatcher implements IBead, IDataProviderItemRendererMapper
+	public class ItemRendererFactoryBase extends EventDispatcher implements IBead
 	{
         /**
          *  Constructor.
@@ -67,7 +67,7 @@ package org.apache.royale.html.beads
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.8
          */
-		public function DataItemRendererFactoryBase(target:Object=null)
+		public function ItemRendererFactoryBase(target:Object=null)
 		{
 			super(target);
 		}
@@ -103,20 +103,12 @@ package org.apache.royale.html.beads
 			dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
 			dataProviderModel.addEventListener("dataProviderChanged", dataProviderChangeHandler);
 
-            /*
-            dataFieldProvider = _strand.getBeadByType(DataFieldProviderBead) as DataFieldProviderBead;
-			if (dataFieldProvider)
-            {
-                dataField = dataFieldProvider.dataField;
-            }
-            */
-            
 			// if the host component inherits from DataContainerBase, the itemRendererClassFactory will 
 			// already have been loaded by DataContainerBase.addedToParent function.
 			if(!_itemRendererFactory)
     			_itemRendererFactory = loadBeadFromValuesManager(IItemRendererClassFactory, "iItemRendererClassFactory", _strand) as IItemRendererClassFactory;				
-			
-			dataProviderChangeHandler(null);
+
+            dataProviderChangeHandler(null);
 		}
 		
 		private var _itemRendererFactory:IItemRendererClassFactory;
@@ -196,28 +188,6 @@ package org.apache.royale.html.beads
          */		
 		protected function dataProviderChangeHandler(event:Event):void
 		{
-			var dp:Object = dataProviderModel.dataProvider;
-			if (!dp)
-				return;
-			            
-            var view:IListView = (_strand as IStrandWithModelView).view as IListView;
-			var dataGroup:IItemRendererOwnerView = view.dataGroup;
-			
-            removeAllItemRenderers(dataGroup);
-            
-			var n:int = dataProviderLength; 
-			for (var i:int = 0; i < n; i++)
-			{				
-				var ir:IItemRenderer = itemRendererFactory.createItemRenderer() as IItemRenderer;
-                //var dataItemRenderer:DataItemRenderer = ir as DataItemRenderer;
-
-				dataGroup.addItemRenderer(ir, false);
-                var data:Object = getItemAt(i);
-                (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir as IIndexedItemRenderer, data, dataGroup, i);
-				ir.data = data;				
-			}
-			
-			sendStrandEvent(_strand,"itemsCreated");
 		}
         
         protected function removeAllItemRenderers(dataGroup:IItemRendererOwnerView):void
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as
index 6b52366..409df36 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as
@@ -28,6 +28,7 @@ package org.apache.royale.html.beads
     import org.apache.royale.core.ILabelFieldItemRenderer;
     import org.apache.royale.core.IListPresentationModel;
 	import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IStrandWithPresentationModel;
 	import org.apache.royale.core.IUIBase;
     import org.apache.royale.core.SimpleCSSStyles;
 	import org.apache.royale.core.UIBase;
@@ -72,7 +73,7 @@ package org.apache.royale.html.beads
 		override public function set strand(value:IStrand):void
 		{	
 			_strand = value;
-            var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel;            
+            presentationModel = (_strand as IStrandWithPresentationModel).presentationModel as IListPresentationModel;            
             dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
             labelField = dataProviderModel.labelField;            
 		}
@@ -82,11 +83,10 @@ package org.apache.royale.html.beads
 		 *  @royaleignorecoercion org.apache.royale.core.HTMLElementWrapper
 		 *  @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer
 		 */
-		public function initializeItemRenderer(ir:IItemRenderer, data:Object, ownerView:IItemRendererOwnerView):void
+		public function initializeItemRenderer(ir:IItemRenderer, data:Object):void
 		{
             if (ir is ILabelFieldItemRenderer)
                 (ir as ILabelFieldItemRenderer).labelField = labelField;
-            ir.itemRendererOwnerView = ownerView;
             
             setupVisualsForItemRenderer(ir as IIndexedItemRenderer);
         }
@@ -95,10 +95,10 @@ package org.apache.royale.html.beads
          *  @private
          *  @royaleignorecoercion org.apache.royale.core.HTMLElementWrapper
          */
-        public function initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, ownerView:IItemRendererOwnerView, index:int):void
+        public function initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, index:int):void
         {
             ir.index = index;
-            initializeItemRenderer(ir, data, ownerView);
+            initializeItemRenderer(ir, data);
         }
         
         protected function setupVisualsForItemRenderer(ir:IIndexedItemRenderer):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 257e666..fdbae01 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
@@ -84,12 +84,20 @@ package org.apache.royale.html.beads
 		 */
 		protected function selectionChangeHandler(event:Event):void
 		{
-			var ir:ISelectableItemRenderer = dataGroup.getItemRendererForIndex(lastSelectedIndex) as ISelectableItemRenderer;
-			if(ir)
-				ir.selected = false;
-			ir = dataGroup.getItemRendererForIndex(listModel.selectedIndex) as ISelectableItemRenderer;
-			if(ir)
-				ir.selected = true;
+            var selectionBead:ISelectableItemRenderer;
+            var ir:IItemRenderer = dataGroup.getItemRendererForIndex(lastSelectedIndex) as IItemRenderer;
+			if (ir) 
+            {
+                selectionBead = (ir as IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
+                if (selectionBead)
+                    selectionBead.selected = false;
+            }
+			ir = dataGroup.getItemRendererForIndex(listModel.selectedIndex) as IItemRenderer;
+			if (ir) {
+                selectionBead = (ir as IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
+                if (selectionBead)
+                    selectionBead.selected = true;
+            }
 
 			lastSelectedIndex = listModel.selectedIndex;
 		}
@@ -103,12 +111,20 @@ package org.apache.royale.html.beads
 		 */
 		protected function rollOverIndexChangeHandler(event:Event):void
 		{
+            var selectionBead:ISelectableItemRenderer;
 			var ir:ISelectableItemRenderer = dataGroup.getItemRendererForIndex(lastRollOverIndex) as ISelectableItemRenderer;
-			if(ir)
-				ir.hovered = false;
+            if (ir) 
+            {
+                selectionBead = (ir as IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
+                if (selectionBead)
+                    selectionBead.hovered = false;
+            }
 			ir = dataGroup.getItemRendererForIndex((listModel as IRollOverModel).rollOverIndex) as ISelectableItemRenderer;
-			if(ir)
-				ir.hovered = true;
+            if (ir) {
+                selectionBead = (ir as IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
+                if (selectionBead)
+                    selectionBead.hovered = true;
+            }
 			lastRollOverIndex = (listModel as IRollOverModel).rollOverIndex;
 		}
 	}
@@ -156,12 +172,20 @@ package org.apache.royale.html.beads
 		 */
 		protected function selectionChangeHandler(event:Event):void
 		{
-			var ir:ISelectableItemRenderer = dataGroup.getItemRendererForIndex(lastSelectedIndex) as ISelectableItemRenderer;
-            if (ir)
-				ir.selected = false;
-			ir = dataGroup.getItemRendererForIndex(listModel.selectedIndex) as ISelectableItemRenderer;
-			if (ir)
-				ir.selected = true;
+            var selectionBead:ISelectableItemRenderer;
+            var ir:IItemRenderer = dataGroup.getItemRendererForIndex(lastSelectedIndex) as IItemRenderer;
+            if (ir) 
+            {
+                selectionBead = (ir as IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
+                if (selectionBead)
+                    selectionBead.selected = false;
+            }
+            ir = dataGroup.getItemRendererForIndex(listModel.selectedIndex) as IItemRenderer;
+            if (ir) {
+                selectionBead = (ir as IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
+                if (selectionBead)
+                    selectionBead.selected = true;
+            }
             lastSelectedIndex = listModel.selectedIndex;
 		}
 
@@ -172,13 +196,20 @@ package org.apache.royale.html.beads
 		 */
 		protected function rollOverIndexChangeHandler(event:Event):void
 		{
-			var ir:ISelectableItemRenderer = dataGroup.getItemRendererForIndex(lastRollOverIndex) as ISelectableItemRenderer;
-			if(ir)
-				ir.hovered = false;
-			ir = dataGroup.getItemRendererForIndex(IRollOverModel(listModel).rollOverIndex) as ISelectableItemRenderer;
-			if(ir)
-				ir.hovered = true;
-			
+            var selectionBead:ISelectableItemRenderer;
+            var ir:ISelectableItemRenderer = dataGroup.getItemRendererForIndex(lastRollOverIndex) as ISelectableItemRenderer;
+            if (ir) 
+            {
+                selectionBead = (ir as IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
+                if (selectionBead)
+                    selectionBead.hovered = false;
+            }
+            ir = dataGroup.getItemRendererForIndex((listModel as IRollOverModel).rollOverIndex) as ISelectableItemRenderer;
+            if (ir) {
+                selectionBead = (ir as IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
+                if (selectionBead)
+                    selectionBead.hovered = true;
+            }
 			lastRollOverIndex = IRollOverModel(listModel).rollOverIndex;
 		}
 	}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForArrayData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForArrayData.as
index e85e89f..c2af070 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForArrayData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TextItemRendererFactoryForArrayData.as
@@ -157,7 +157,6 @@ package org.apache.royale.html.beads
 			{
 				var tf:ITextItemRenderer = itemRendererFactory.createItemRenderer() as ITextItemRenderer;
 				tf.index = i;
-                tf.itemRendererOwnerView = dataGroup;
 				dataGroup.addItemRenderer(tf, false);
 				if (selectionModel.labelField) {
 					tf.labelField = selectionModel.labelField;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeItemRendererInitializer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeItemRendererInitializer.as
index 9cb81e0..4700f67 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeItemRendererInitializer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/TreeItemRendererInitializer.as
@@ -60,12 +60,12 @@ package org.apache.royale.html.beads
 		 *  @private
 		 *  @royaleignorecoercion org.apache.royale.core.HTMLElementWrapper
 		 */
-		override public function initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, ownerView:IItemRendererOwnerView, index:int):void
+		override public function initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, index:int):void
 		{
             if (!dataProviderModel)
                 return;
             
-            super.initializeItemRenderer(ir, data, ownerView, index);
+            super.initializeItemRenderer(ir, data, index);
             
             var treeData:TreeData = dataProviderModel.dataProvider as TreeData;
             var depth:int = treeData.getDepth(data);
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryForArrayData.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryForArrayData.as
index 07bfe2e..91a9057 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryForArrayData.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualDataItemRendererFactoryForArrayData.as
@@ -244,7 +244,7 @@ package org.apache.royale.html.beads
             var dataGroup:IItemRendererOwnerView = view.dataGroup;
 			dataGroup.addItemRendererAt(ir, elementIndex);
             var data:Object = getItemAt(index);
-            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir as IIndexedItemRenderer, data, dataGroup, index);
+            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir as IIndexedItemRenderer, data, index);
             rendererMap[index] = ir;
 			ir.data = data;
 				
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as
index 615326a..a9165dd 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as
@@ -24,7 +24,8 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IBeadLayout;
 	import org.apache.royale.core.IBeadModel;
 	import org.apache.royale.core.IBeadView;
-	import org.apache.royale.core.IIndexedItemRenderer;
+	import org.apache.royale.core.IDataProviderItemRendererMapper;
+    import org.apache.royale.core.IIndexedItemRenderer;
 	import org.apache.royale.core.IItemRenderer;
 	import org.apache.royale.core.IItemRendererOwnerView;
 	import org.apache.royale.core.IParent;
@@ -39,6 +40,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.ValuesManager;
 	import org.apache.royale.events.Event;
 	import org.apache.royale.events.IEventDispatcher;
+    import org.apache.royale.events.ItemRendererEvent;
 	import org.apache.royale.html.supportClasses.Border;
 	import org.apache.royale.html.supportClasses.DataGroup;
         
@@ -63,7 +65,7 @@ package org.apache.royale.html.beads
 		protected var listModel:ISelectionModel;
 
 		protected var lastSelectedIndex:int = -1;
-
+        
 		/**
 		 * @private
 		 */
@@ -72,10 +74,25 @@ package org.apache.royale.html.beads
 			listModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel;
 			listModel.addEventListener("selectedIndexChanged", selectionChangeHandler);
 			listModel.addEventListener("rollOverIndexChanged", rollOverIndexChangeHandler);
+            var mapper:IEventDispatcher = _strand.getBeadByType(IDataProviderItemRendererMapper) as IEventDispatcher;
+            mapper.addEventListener(ItemRendererEvent.CREATED, itemCreatedHandler);
 
 			super.handleInitComplete(event);
 		}
 
+        protected function itemCreatedHandler(event:ItemRendererEvent):void
+        {
+            var selectionBead:ISelectableItemRenderer;
+            var ir:IIndexedItemRenderer = event.itemRenderer as IIndexedItemRenderer;
+            if (ir.index == lastSelectedIndex)
+            {
+                selectionBead = ir.getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
+                if (selectionBead)
+                    selectionBead.selected = true;                
+            }
+            
+        }
+        
         protected var firstElementIndex:int = 1;
         
         override public function getItemRendererForIndex(index:int):IItemRenderer
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextButtonItemRenderer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextButtonItemRenderer.as
index e60600a..81df983 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextButtonItemRenderer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/TextButtonItemRenderer.as
@@ -108,28 +108,6 @@ package org.apache.royale.html.supportClasses
 		 * IItemRenderer, ISelectableItemRenderer
 		 */
 
-        private var _itemRendererOwnerView:IItemRendererOwnerView;
-        
-        /**
-         *  The view of the parent component of the itemRenderer. 
-         *  This is not always the container that directly parents the
-         *  itemRenderers.  A List may have an internal DataGroup that
-         *  parents the itemRenderers,
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-         */
-        public function get itemRendererOwnerView():IItemRendererOwnerView
-        {
-            return _itemRendererOwnerView;
-        }
-        public function set itemRendererOwnerView(value:IItemRendererOwnerView):void
-        {
-            _itemRendererOwnerView = value;
-        }
-
 		private var _labelField:String = null;
 
 		/**
@@ -191,108 +169,5 @@ package org.apache.royale.html.supportClasses
 		{
 			_index = value;
 		}
-
-		private var _selectable:Boolean = true;
-		/**
-         *  <code>true</code> if the item renderer is can be selected
-         *  false otherwise. Use to configure a renderer to be non 
-         *  selectable.
-         *  
-         *  Defaults to true
-         * 
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.3
-         */
-		public function get selectable():Boolean
-		{
-			return _selectable;
-		}
-
-		public function set selectable(value:Boolean):void
-		{
-			_selectable = value;	
-		}
-
-		private var _hoverable:Boolean = true;
-		/**
-         *  <code>true</code> if the item renderer is can be hovered
-         *  false otherwise. Use to configure a renderer to be non 
-         *  hoverable.
-         *  
-         *  Defaults to true
-         * 
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.3
-         */
-		public function get hoverable():Boolean
-		{
-			return _hoverable;
-		}
-
-		public function set hoverable(value:Boolean):void
-		{
-			_hoverable = value;	
-		}
-		
-		private var _hovered:Boolean;
-
-		/**
-		 *  Whether or not the itemRenderer is in a hovered state.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.8
-		 */
-		public function get hovered():Boolean
-		{
-			return _hovered;
-		}
-		public function set hovered(value:Boolean):void
-		{
-			_hovered = value;
-		}
-
-		private var _selected:Boolean;
-
-		/**
-		 *  Whether or not the itemRenderer is in a selected state.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.8
-		 */
-		public function get selected():Boolean
-		{
-			return _selected;
-		}
-		public function set selected(value:Boolean):void
-		{
-			_selected = value;
-		}
-
-		private var _down:Boolean;
-
-		/**
-		 *  Whether or not the itemRenderer is in a down (or pre-selected) state.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.8
-		 */
-		public function get down():Boolean
-		{
-			return _down;
-		}
-		public function set down(value:Boolean):void
-		{
-			_down = value;
-		}
 	}
 }
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/UIItemRendererBase.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/UIItemRendererBase.as
index f01473f..e7defb7 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/UIItemRendererBase.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/UIItemRendererBase.as
@@ -94,17 +94,6 @@ package org.apache.royale.html.supportClasses
 		public function set itemRendererOwnerView(value:IItemRendererOwnerView):void
 		{
 			_itemRendererOwnerView = value;
-            if (!getBeadByType(ISelectableItemRenderer))
-            {
-                // load ISelectableItemRenderer impl from the
-                // owner, not the item renderer so that item
-                // renderers aren't strongly coupled to a
-                // particular selection visual and the list
-                // can dictate the selection visual
-                var c:Class = ValuesManager.valuesImpl.getValue(value.host, "iSelectableItemRenderer");
-                if (c)
-                    addBead(new c() as IBead);                    
-            }
 		}
 		
         /**
diff --git a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/ChartItemRendererFactory.as b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/ChartItemRendererFactory.as
index c6b030e..b507b94 100644
--- a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/ChartItemRendererFactory.as
+++ b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/ChartItemRendererFactory.as
@@ -126,7 +126,6 @@ package org.apache.royale.charts.beads
 				{
 					var s:IChartSeries = series[i] as IChartSeries;
 					var k:IChartItemRenderer = s.itemRenderer.newInstance() as IChartItemRenderer;
-					k.itemRendererOwnerView = dataGroup;
 					k.xField = s.xField;
 					k.yField = s.yField;
 					//k.fillColor = s.fillColor;
diff --git a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesData.as b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesData.as
index 6f833a3..5772920 100644
--- a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesData.as
+++ b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/DataItemRendererFactoryForSeriesData.as
@@ -124,7 +124,6 @@ import org.apache.royale.core.IDataProviderModel;
 import org.apache.royale.core.UIBase;
 import org.apache.royale.charts.core.IChartItemRenderer;
 import org.apache.royale.core.Bead;
-import org.apache.royale.core.IItemRendererOwnerView;
 import org.apache.royale.core.IItemRenderer;
 import org.apache.royale.core.IIndexedItemRenderer;
 import org.apache.royale.core.IIndexedItemRendererInitializer;
@@ -179,19 +178,18 @@ class ChartItemRendererInitializer extends Bead implements IIndexedItemRendererI
      *  @private
      *  @royaleignorecoercion org.apache.royale.core.HTMLElementWrapper
      */
-    public function initializeItemRenderer(ir:IIndexedItemRenderer, data:Object, ownerView:IItemRendererOwnerView):void
+    public function initializeItemRenderer(ir:IIndexedItemRenderer, data:Object):void
     {
-        ir.itemRendererOwnerView = ownerView;
     }
     
     /**
      *  @private
      *  @royaleignorecoercion org.apache.royale.core.IChartItemRenderer
      */
-    public function initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, ownerView:IItemRendererOwnerView, index:int):void
+    public function initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, index:int):void
     {
         (ir as IChartItemRenderer).series = owner.chartSeries;
         ir.index = index;
-        initializeItemRenderer(ir, data, ownerView);
+        initializeItemRenderer(ir, data);
     }        
 }
\ No newline at end of file
diff --git a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/layouts/LineChartCategoryVsLinearLayout.as b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/layouts/LineChartCategoryVsLinearLayout.as
index 824fbd6..3327483 100644
--- a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/layouts/LineChartCategoryVsLinearLayout.as
+++ b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/layouts/LineChartCategoryVsLinearLayout.as
@@ -144,7 +144,6 @@ package org.apache.royale.charts.beads.layouts
 				{
 					var renderer:ILineSegmentItemRenderer = lcs.lineSegmentRenderer.newInstance() as ILineSegmentItemRenderer;
 					chartDataGroup.addItemRenderer(renderer, true);
-					renderer.itemRendererOwnerView = chartDataGroup;
 					renderer.data = lcs;
 					renderer.points = seriesPoints[s].points;
 				}
diff --git a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/layouts/LineChartLinearVsLinearLayout.as b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/layouts/LineChartLinearVsLinearLayout.as
index eb26888..c96d4fd 100644
--- a/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/layouts/LineChartLinearVsLinearLayout.as
+++ b/frameworks/projects/Charts/src/main/royale/org/apache/royale/charts/beads/layouts/LineChartLinearVsLinearLayout.as
@@ -158,7 +158,6 @@ package org.apache.royale.charts.beads.layouts
 				{
 					var renderer:ILineSegmentItemRenderer = lcs.lineSegmentRenderer.newInstance() as ILineSegmentItemRenderer;
 					chartDataGroup.addItemRenderer(renderer, true);
-					renderer.itemRendererOwnerView = chartDataGroup;
 					renderer.data = lcs;
 					renderer.points = seriesPoints[s].points;
 				}
diff --git a/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/IArrayList.as b/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/IArrayList.as
index 454d27f..53949d5 100644
--- a/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/IArrayList.as
+++ b/frameworks/projects/Collections/src/main/royale/org/apache/royale/collections/IArrayList.as
@@ -48,7 +48,7 @@ package org.apache.royale.collections
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public interface IArrayList
+	public interface IArrayList extends IEventDispatcher
 	{
         /**
          *  The array of raw data needing conversion.
diff --git a/frameworks/projects/Core/src/main/royale/CoreClasses.as b/frameworks/projects/Core/src/main/royale/CoreClasses.as
index 617b78d..7249311 100644
--- a/frameworks/projects/Core/src/main/royale/CoreClasses.as
+++ b/frameworks/projects/Core/src/main/royale/CoreClasses.as
@@ -75,6 +75,7 @@ internal class CoreClasses
 	}
 	import org.apache.royale.core.IBinaryImageLoader; IBinaryImageLoader;
     import org.apache.royale.core.ItemRendererClassFactory; ItemRendererClassFactory;
+    import org.apache.royale.core.SelectableItemRendererClassFactory; SelectableItemRendererClassFactory;
     import org.apache.royale.core.IChangePropagator; IChangePropagator;
     import org.apache.royale.core.IAlertModel; IAlertModel;
     import org.apache.royale.core.IBead; IBead;
@@ -266,6 +267,7 @@ internal class CoreClasses
     import org.apache.royale.core.IDataGridPresentationModel; IDataGridPresentationModel;
     import org.apache.royale.core.IDateChooserModel; IDateChooserModel;
 	import org.apache.royale.core.ParentDocumentBead; ParentDocumentBead;
+    import org.apache.royale.core.ItemRendererOwnerViewBead; ItemRendererOwnerViewBead;
 	import org.apache.royale.core.TransformBeadBase; TransformBeadBase;
 	import org.apache.royale.core.TransformModel; TransformModel;
 	import org.apache.royale.core.TransformCompoundModel; TransformCompoundModel;
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRendererInitializer.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRendererInitializer.as
index 0de54f3..655d662 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRendererInitializer.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRendererInitializer.as
@@ -48,6 +48,6 @@ package org.apache.royale.core
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
          */
-		function initializeIndexedItemRenderer(renderer:IIndexedItemRenderer, data:Object, ownerView:IItemRendererOwnerView, index:int):void;
+		function initializeIndexedItemRenderer(renderer:IIndexedItemRenderer, data:Object, index:int):void;
 	}
 }
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
index a7c8086..94ea36d 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRenderer.as
@@ -42,18 +42,5 @@ package org.apache.royale.core
 		function get data():Object;
 		function set data(value:Object):void;
 		
-		/**
-		 *  The view that controls where the item renderers are actually
-         *  parented.  This is usually the view of outer component, and not always
-         *  the container that parents
-		 *  all of the itemRenderers.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.0
-		 */
-		function get itemRendererOwnerView():IItemRendererOwnerView;
-		function set itemRendererOwnerView(value:IItemRendererOwnerView):void;
 	}
 }
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererInitializer.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererInitializer.as
index 0c056d9..7d0c3c6 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererInitializer.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IItemRendererInitializer.as
@@ -51,6 +51,6 @@ package org.apache.royale.core
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
          */
-		function initializeItemRenderer(renderer:IItemRenderer, data:Object, ownerView:IItemRendererOwnerView):void;
+		function initializeItemRenderer(renderer:IItemRenderer, data:Object):void;
 	}
 }
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as
index edfbd85..315fb92 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererClassFactory.as
@@ -55,7 +55,7 @@ package org.apache.royale.core
 			super();
 		}
 				
-        private var _strand:IStrand;
+        protected var _strand:IStrand;
         
         /**
          *  @copy org.apache.royale.core.IBead#strand
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRendererInitializer.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererOwnerViewBead.as
similarity index 60%
copy from frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRendererInitializer.as
copy to frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererOwnerViewBead.as
index 0de54f3..d21c6bd 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IIndexedItemRendererInitializer.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ItemRendererOwnerViewBead.as
@@ -18,36 +18,36 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.core
 {
+    import org.apache.royale.core.IBead;
     import org.apache.royale.core.IItemRendererOwnerView;
-
+    import org.apache.royale.core.IStrand;
+    
     /**
-     *  The IItemRendererInitializer interface is the basic interface for beads
-     *  that initialize properties on an IItemRenderer.  Simple implementations
-     *  only assign the data and itemRendererOwnerView property, but others will 
-     *  assign other properties if needed. 
+     *  The ItemRendererOwnerViewBead stores a reference
+     *  to the IItemRendererOwnerView for an IItemRenderer
      * 
      *  @langversion 3.0
      *  @playerversion Flash 10.2
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public interface IIndexedItemRendererInitializer extends IItemRendererInitializer
+	public class ItemRendererOwnerViewBead extends Bead
 	{
         /**
-         *  This method is called to generate another instance of an item renderer.
-         * 
-         *  @param renderer The renderer
-         *  @param data The data for the renderer
-         *  @param ownerView the view of the component that owns the renderers
-         *  @param index the index in the list of renderers
-         * 
-         *  @see org.apache.royale.core.IItemRenderer
-         * 
+         *  Constructor.
+         *  
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion Royale 0.0
          */
-		function initializeIndexedItemRenderer(renderer:IIndexedItemRenderer, data:Object, ownerView:IItemRendererOwnerView, index:int):void;
-	}
+		public function ItemRendererOwnerViewBead(ownerView:IItemRendererOwnerView)
+		{
+			super();
+            this.ownerView = ownerView;
+		}
+        
+        public var ownerView:IItemRendererOwnerView;
+        
+    }
 }
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/SelectableItemRendererClassFactory.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/SelectableItemRendererClassFactory.as
new file mode 100644
index 0000000..3488448
--- /dev/null
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/SelectableItemRendererClassFactory.as
@@ -0,0 +1,88 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.core
+{
+    
+    import org.apache.royale.core.ClassFactory;
+    import org.apache.royale.core.IFactory;
+    import org.apache.royale.core.IItemRendererProvider;
+    
+    import org.apache.royale.utils.MXMLDataInterpreter;
+
+	[DefaultProperty("mxmlContent")]
+    
+    /**
+     *  The SelectableItemRendererClassFactory class extends the default
+     *  ItemRendererClassFactory and adds an ISelectableItemRenderer Bead to
+     *  each renderer instance.  That allows renderers to be used
+     *  in lists with or without selection.
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.0
+     */
+	public class SelectableItemRendererClassFactory extends ItemRendererClassFactory
+	{
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+		public function SelectableItemRendererClassFactory()
+		{
+			super();
+		}
+
+        /**
+         *  @copy org.apache.royale.core.IBead#strand
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         *  @royaleignorecoercion Class
+         */
+        override public function set strand(value:IStrand):void
+        {
+            super.strand = value;
+            selectableBeadClass = ValuesManager.valuesImpl.getValue(value, "iSelectableItemRenderer") as Class;
+        }
+        
+        private var selectableBeadClass:Class;
+        
+        /**
+         *  @copy org.apache.royale.core.IItemRendererClassFactory#createItemRenderer()
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+        override public function createItemRenderer():IItemRenderer
+        {
+            var ir:IItemRenderer = super.createItemRenderer();
+            ir.addBead(new selectableBeadClass());
+            return ir;
+        }
+	}
+}
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/html/beads/SelectableItemRendererBeadBase.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/html/beads/SelectableItemRendererBeadBase.as
index 2ccbf7d..c718835 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/html/beads/SelectableItemRendererBeadBase.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/html/beads/SelectableItemRendererBeadBase.as
@@ -19,8 +19,9 @@
 package org.apache.royale.html.beads
 {
     import org.apache.royale.core.IBead;
-    import org.apache.royale.core.IUIBase;
+    import org.apache.royale.core.ISelectableItemRenderer;
     import org.apache.royale.core.IStrand;
+    import org.apache.royale.core.IUIBase;
     import org.apache.royale.events.Event;
     import org.apache.royale.events.IEventDispatcher;
 
@@ -32,7 +33,7 @@ package org.apache.royale.html.beads
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.8
 	 */
-	public class SelectableItemRendererBeadBase implements IBead
+	public class SelectableItemRendererBeadBase implements IBead, ISelectableItemRenderer
 	{
 		/**
 		 *  constructor.
diff --git a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/ButtonBarReorderBead.as b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/ButtonBarReorderBead.as
index d526d01..a8d1528 100644
--- a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/ButtonBarReorderBead.as
+++ b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/ButtonBarReorderBead.as
@@ -25,6 +25,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IDragInitiator;
 	import org.apache.royale.core.IItemRenderer;
 	import org.apache.royale.core.IItemRendererOwnerView;
+    import org.apache.royale.core.ItemRendererOwnerViewBead;
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.core.IParent;
 	import org.apache.royale.core.ILayoutHost;
@@ -255,7 +256,8 @@ package org.apache.royale.html.beads
 				var ir:IItemRenderer = startHere as IItemRenderer;
 				trace("-- dropping onto an existing object: "+ir.data.toString());
 
-				itemRendererOwnerView = (ir.itemRendererOwnerView as ILayoutHost).contentView as IParent;
+                var ownerViewBead:ItemRendererOwnerViewBead = ir.getBeadByType(ItemRendererOwnerViewBead) as ItemRendererOwnerViewBead;
+				itemRendererOwnerView = (ownerViewBead.ownerView as ILayoutHost).contentView as IParent;
 				targetIndex = itemRendererOwnerView.getElementIndex(ir);
 			}
 			else  {
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/DragDropListItemRendererInitializer.as
similarity index 50%
copy from frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as
copy to frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/DragDropListItemRendererInitializer.as
index 6b52366..d118cb1 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListItemRendererInitializer.as
+++ b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/DragDropListItemRendererInitializer.as
@@ -18,30 +18,29 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {	
-	import org.apache.royale.core.IItemRendererOwnerView;
-	
 	import org.apache.royale.core.Bead;
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IIndexedItemRenderer;
 	import org.apache.royale.core.IIndexedItemRendererInitializer;
 	import org.apache.royale.core.IItemRenderer;
-    import org.apache.royale.core.ILabelFieldItemRenderer;
-    import org.apache.royale.core.IListPresentationModel;
+	import org.apache.royale.core.IItemRendererOwnerView;
+	import org.apache.royale.core.ILabelFieldItemRenderer;
+	import org.apache.royale.core.IListPresentationModel;
 	import org.apache.royale.core.IStrand;
 	import org.apache.royale.core.IUIBase;
-    import org.apache.royale.core.SimpleCSSStyles;
+	import org.apache.royale.core.SimpleCSSStyles;
 	import org.apache.royale.core.UIBase;
 
 	/**
-	 *  The ListItemRendererInitializer class initializes item renderers
-     *  in list classes.
+	 *  The DragDropListItemRendererInitializer class initializes item renderers
+     *  with a reference to the owning List.
 	 *  
 	 *  @langversion 3.0
 	 *  @playerversion Flash 10.2
 	 *  @playerversion AIR 2.6
 	 *  @productversion Royale 0.0
 	 */
-	public class ListItemRendererInitializer extends Bead implements IIndexedItemRendererInitializer
+	public class DragDropListItemRendererInitializer extends ListItemRendererInitializer
 	{
 		/**
 		 *  constructor.
@@ -51,14 +50,10 @@ package org.apache.royale.html.beads
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.0
 		 */
-		public function ListItemRendererInitializer()
+		public function DragDropListItemRendererInitializer()
 		{
 		}
-		
-        protected var presentationModel:IListPresentationModel;
-        protected var dataProviderModel:IDataProviderModel;
-        protected var labelField:String;
-        
+		        
 		/**
 		 *  @copy org.apache.royale.core.IBead#strand
 		 *  
@@ -66,49 +61,26 @@ package org.apache.royale.html.beads
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
 		 *  @productversion Royale 0.0
-		 *  @royaleignorecoercion HTMLInputElement
-		 *  @royaleignorecoercion org.apache.royale.core.UIBase;
+		 *  @royaleignorecoercion org.apache.royale.core.IItemRendererOwnerView
+		 *  @royaleignorecoercion org.apache.royale.core.IUIBase
 		 */
 		override public function set strand(value:IStrand):void
 		{	
-			_strand = value;
-            var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel) as IListPresentationModel;            
-            dataProviderModel = _strand.getBeadByType(IDataProviderModel) as IDataProviderModel;
-            labelField = dataProviderModel.labelField;            
+            super.strand = value;
+            ownerView = (value as IUIBase).view as IItemRendererOwnerView;
 		}
 		
+        private var ownerView:IItemRendererOwnerView;
+        
 		/**
 		 *  @private
 		 *  @royaleignorecoercion org.apache.royale.core.HTMLElementWrapper
 		 *  @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer
 		 */
-		public function initializeItemRenderer(ir:IItemRenderer, data:Object, ownerView:IItemRendererOwnerView):void
+		override public function initializeItemRenderer(ir:IItemRenderer, data:Object):void
 		{
-            if (ir is ILabelFieldItemRenderer)
-                (ir as ILabelFieldItemRenderer).labelField = labelField;
-            ir.itemRendererOwnerView = ownerView;
-            
-            setupVisualsForItemRenderer(ir as IIndexedItemRenderer);
+            super.initializeItemRenderer(ir, data);
+            ir.addBead(new ItemRendererOwnerViewBead(ownerView));
         }
-        
-        /**
-         *  @private
-         *  @royaleignorecoercion org.apache.royale.core.HTMLElementWrapper
-         */
-        public function initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, ownerView:IItemRendererOwnerView, index:int):void
-        {
-            ir.index = index;
-            initializeItemRenderer(ir, data, ownerView);
-        }
-        
-        protected function setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void
-        {
-            var style:SimpleCSSStyles = new SimpleCSSStyles();
-            style.marginBottom = presentationModel.separatorThickness;
-            UIBase(ir).style = style;
-            UIBase(ir).height = presentationModel.rowHeight;
-            UIBase(ir).percentWidth = 100;
-		}
-
 	}
 }
diff --git a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDragSourceBead.as b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDragSourceBead.as
index 05efebb..a939466 100644
--- a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDragSourceBead.as
+++ b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDragSourceBead.as
@@ -24,6 +24,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IDragInitiator;
 	import org.apache.royale.core.IItemRenderer;
+    import org.apache.royale.core.ItemRendererOwnerViewBead;
 	import org.apache.royale.core.ILayoutHost;
 	import org.apache.royale.core.IParent;
 	import org.apache.royale.core.ISelectionModel;
@@ -189,7 +190,8 @@ package org.apache.royale.html.beads
 			var itemRenderer:IItemRenderer = getParentOrSelfByType(relatedObject as IChild, IItemRenderer) as IItemRenderer;
 
 			if (itemRenderer) {
-				var p:IParent = (itemRenderer.itemRendererOwnerView as ILayoutHost).contentView as IParent;
+                var ownerViewBead:ItemRendererOwnerViewBead = itemRenderer.getBeadByType(ItemRendererOwnerViewBead) as ItemRendererOwnerViewBead;
+				var p:IParent = (ownerViewBead.ownerView as ILayoutHost).contentView as IParent;
 				_dragSourceIndex = p.getElementIndex(itemRenderer as IChild);
 				DragEvent.dragSource = (itemRenderer as IItemRenderer).data;
 			}
diff --git a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDropTargetBead.as b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDropTargetBead.as
index bbec4de..07664c6 100644
--- a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDropTargetBead.as
+++ b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/SingleSelectionDropTargetBead.as
@@ -25,6 +25,7 @@ package org.apache.royale.html.beads
 	import org.apache.royale.core.IChild;
 	import org.apache.royale.core.IDataProviderModel;
 	import org.apache.royale.core.IItemRenderer;
+    import org.apache.royale.core.ItemRendererOwnerViewBead;
 	import org.apache.royale.core.IParent;
 	import org.apache.royale.core.ILayoutHost;
 	import org.apache.royale.core.ISelectionModel;
@@ -326,7 +327,8 @@ package org.apache.royale.html.beads
 				var ir:IItemRenderer = startHere as IItemRenderer;
 				//trace("-- dropping onto an existing object: "+ir.data.toString());
 
-				contentViewAsParent = (ir.itemRendererOwnerView as ILayoutHost).contentView as IParent;
+                var ownerViewBead:ItemRendererOwnerViewBead = ir.getBeadByType(ItemRendererOwnerViewBead) as ItemRendererOwnerViewBead;
+				contentViewAsParent = (ownerViewBead.ownerView as ILayoutHost).contentView as IParent;
 				targetIndex = contentViewAsParent.getElementIndex(ir);
 			}
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as
index aac193f..9c9b8b0 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/DataItemRendererFactoryForICollectionViewAdvancedDataGridData.as
@@ -195,7 +195,7 @@ package mx.controls.advancedDataGridClasses
             currentIndex = index;
             
             var data:Object = cursor.current;
-            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, dataGroup, index);
+            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, index);
             
             var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED);
             newEvent.itemRenderer = ir;
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualDataItemRendererFactoryForICollectionViewData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualDataItemRendererFactoryForICollectionViewData.as
index 40c8a70..955ac77 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualDataItemRendererFactoryForICollectionViewData.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualDataItemRendererFactoryForICollectionViewData.as
@@ -159,7 +159,7 @@ package mx.controls.listClasses
             var distance:int = index - currentIndex;
             cursor.seek(CursorBookmark.CURRENT, distance);
             currentIndex = index;
-            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, cursor.current, dataGroup, index);
+            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, cursor.current, index);
             ir.data = cursor.current;
             
             var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED);
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualDataItemRendererFactoryForIListData.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualDataItemRendererFactoryForIListData.as
index 02545d3..fc087b4 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualDataItemRendererFactoryForIListData.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/listClasses/VirtualDataItemRendererFactoryForIListData.as
@@ -147,7 +147,7 @@ package mx.controls.listClasses
             dataGroup.addItemRendererAt(ir, elementIndex);
             
             var data:Object = dp.getItemAt(index);
-            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, dataGroup, index);
+            (itemRendererInitializer as IIndexedItemRendererInitializer).initializeIndexedItemRenderer(ir, data, index);
             rendererMap[index] = ir;
                         
             var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED);
diff --git a/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/beads/TabsItemRendererInitializer.as b/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/beads/TabsItemRendererInitializer.as
index 11ca4a8..2a45164 100644
--- a/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/beads/TabsItemRendererInitializer.as
+++ b/frameworks/projects/MaterialDesignLite/src/main/royale/org/apache/royale/mdl/beads/TabsItemRendererInitializer.as
@@ -87,12 +87,11 @@ package org.apache.royale.mdl.beads
 		 *  @royaleignorecoercion org.apache.royale.core.HTMLElementWrapper
 		 *  @royaleignorecoercion org.apache.royale.core.IIndexedItemRenderer
 		 */
-		public function initializeItemRenderer(ir:IItemRenderer, data:Object, ownerView:IItemRendererOwnerView):void
+		public function initializeItemRenderer(ir:IItemRenderer, data:Object):void
 		{
             if (ir is ILabelFieldItemRenderer)
                 (ir as ILabelFieldItemRenderer).labelField = labelField;
             (ir as ITabItemRenderer).tabIdField = tabsIdField;
-            ir.itemRendererOwnerView = ownerView;
             
             setupVisualsForItemRenderer(ir as IIndexedItemRenderer);
         }
@@ -101,10 +100,10 @@ package org.apache.royale.mdl.beads
          *  @private
          *  @royaleignorecoercion org.apache.royale.core.HTMLElementWrapper
          */
-        public function initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, ownerView:IItemRendererOwnerView, index:int):void
+        public function initializeIndexedItemRenderer(ir:IIndexedItemRenderer, data:Object, index:int):void
         {
             ir.index = index;
-            initializeItemRenderer(ir, data, ownerView);
+            initializeItemRenderer(ir, data);
         }
         
         protected function setupVisualsForItemRenderer(ir:IIndexedItemRenderer):void