 				}
 			}
 			dispatchEvent(new Event("selectedItemChanged"));			
+			dispatchEvent(new Event("selectedIndexChanged"));
+		}
+		
+		private var _selectedString:String;
+		
+		public function get selectedString():String
+		{
+			return String(_selectedItem);
+		}
+		public function set selectedString(value:String):void
+		{
+			_selectedString = value;
+			var n:int = _dataProvider.length;
+			for (var i:int = 0; i < n; i++)
+			{
+				if (String(_dataProvider[i]) == value)
+				{
+					_selectedIndex = i;
+					break;
+				}
+			}
+			dispatchEvent(new Event("selectedItemChanged"));			
 			dispatchEvent(new Event("selectedIndexChanged"));			
 		}
 	}

		public function set selectedIndex(value:int):void
		{
			_selectedIndex = value;
			_selectedString = (value == -1) ? null : (value < _dataProvider.length) ? _dataProvider[value] : null;
			dispatchEvent(new Event("selectedIndexChanged"));			
		}
		private var _selectedString:String;
		
		public function get selectedItem():Object
		{
			return _selectedString;
		}
		public function set selectedItem(value:Object):void
		{
			selectedString = String(value);	
		}
		public function get selectedString():String
		{
			return _selectedString;
		}
		public function set selectedString(value:String):void
		{
			_selectedString = value;
			var n:int = _dataProvider.length;
			for (var i:int = 0; i < n; i++)
			{

{
	import org.apache.flex.core.ISelectionModel;
	import org.apache.flex.core.IStrand;
	import org.apache.flex.events.Event;
	import org.apache.flex.events.EventDispatcher;
			
	public class ArraySelectionModel extends EventDispatcher implements ISelectionModel
