public virtual object BuildOneInstance(AbstractObjectInfo objectInfo)
		{
			object o = null;
			if (objectInfo is NonNativeNullObjectInfo)
			{
				return null;
			}
			
			if (objectInfo.GetType() == typeof(NonNativeObjectInfo))
			{
				o = BuildOneInstance((NonNativeObjectInfo)objectInfo);
			}
			else
			{
				// instantiation cache is not used for native objects
				o = BuildOneInstance((NativeObjectInfo)objectInfo);
			}
			return o;
		}
		private bool ClassAreCompatible(AbstractObjectInfo
			 value1, AbstractObjectInfo value2)
		{
			System.Type clazz1 = value1.GetType();
			System.Type clazz2 = value2.GetType();
			if (clazz1 == clazz2)
			{
				return true;
			}
			if ((clazz1 == typeof(NonNativeObjectInfo)) 
				&& (clazz2 == typeof(NeoDatis.Odb.Core.Server.Layers.Layer2.Meta.ClientNonNativeObjectInfo
				)))
			{
				return true;
			}
			return false;
		}