 		}
 		private const _childListCallbacks:ChildListCallbackInterface = newLinkableChild(this, ChildListCallbackInterface);
 		private const _orderedNames:Array = []; // an ordered list of names appearing in _nameToObjectMap
-		private const _nameToObjectMap:Object = new Object(); // maps an identifying name to an object
+		private const _nameToObjectMap:Object = {}; // maps an identifying name to an object
 		private const _objectToNameMap:Dictionary = new Dictionary(true); // maps an object to an identifying name
-		private const _nameIsLocked:Object = new Object(); // maps an identifying name to a value of true if that name is locked.
+		private const _nameIsLocked:Object = {}; // maps an identifying name to a value of true if that name is locked.
+		private const _previousNameMap:Object = {}; // the keys in this object are object names that were previously used.
 		private var _hashMapIsLocked:Boolean = false; // true if the LinkableHashMap is locked.
 		private var _typeRestriction:Class = null; // restricts the type of object that can be stored
-		private var _typeRestrictionClassName:String = null; // qualified class name of _typeRestriction
+		private var _typeRestrictionClassName:String = null; // qualified class name of _typeRestriction
+		
 		
 		/**
 		 * This is an interface for adding and removing callbacks that will get triggered immediately

		{
			var count:int = 1;
			var name:String = baseName;
			while (_nameToObjectMap[name] != undefined)
				name = baseName + (++count);
			return name;
		}

			var name:String;
			var i:int;
			var originalNameCount:int = _orderedNames.length; // remembers how many names existed before appending
			var haveSeen:Object = {}; // to remember which names have been seen in newOrder
			// append each name in newOrder to the end of _orderedNames
			for (i = 0; i < newOrder.length; i++)
			{
