private object ProcessArrayOrNewCollection(object collection, PersistentCollectionType collectionType)
		{
			if( collection == null )
			{
				return null;
			}

			ICollectionPersister persister = Session.GetCollectionPersister( collectionType.Role );

			if( collectionType.IsArrayType )
			{
				ArrayHolder ah = Session.GetArrayHolder( collection );
				if( ah == null )
				{
					ah = new ArrayHolder( Session, collection );
					Session.AddNewCollection( ah, persister );
					Session.AddArrayHolder( ah );
				}
				return null;
			}
			else
			{
				PersistentCollection persistentCollection = collectionType.Wrap( Session, collection );
				Session.AddNewCollection( persistentCollection, persister );

				if( log.IsDebugEnabled )
				{
					log.Debug( "Wrapped collection in role: " + collectionType.Role );
				}

				return persistentCollection; //Force a substitution!
			}
		}
		/// <summary>
		/// associate a holder with an array - called after loading an array
		/// </summary>
		/// <param name="holder"></param>
		public void AddArrayHolder( ArrayHolder holder )
		{
			//TODO:refactor + make this method private
			arrayHolders[ holder.Array ] = holder;
		}