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 <[email protected]>
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

Reply via email to