 		/**
 		 * This is an Array of public metadata field names that should be used to uniquely identify columns when querying the server.
 		 */
-		private const idFields:LinkableVariable = registerLinkableChild(this, new LinkableVariable(Array, verifyStringArray));
+		private const _idFields:LinkableVariable = registerLinkableChild(this, new LinkableVariable(Array, verifyStringArray));
+		
+		// for backwards compatibility to override server idFields setting
+		private var _overrideIdFields:LinkableVariable;
+		
+		/**
+		 * Provided for backwards compatibility - setting this will override the server setting.
+		 */
+		[Deprecated] public function get idFields():LinkableVariable
+		{
+			if (!_overrideIdFields)
+				_overrideIdFields = registerLinkableChild(_idFields, new LinkableVariable(Array, verifyStringArray), handleDeprecatedIdFields);
+			return _overrideIdFields;
+		}
+		private function handleDeprecatedIdFields():void
+		{
+			// if session state is set to some array, use it as an override for the server setting. otherwise, ignore it.
+			var state:Array = _overrideIdFields.getSessionState() as Array;
+			if (state)
+				_idFields.setSessionState(state);
+		}
 		
 		public function get entityCache():EntityCache
 		{

		
		private function setIdFields():void
		{
			var info:Object = _service.getServerInfo();
			idFields.setSessionState(info ? info['idFields'] as Array : null);
		}
		
		/**

			const SQLPARAMS:String = 'sqlParams';
			var params:Object = getMetadata(proxyColumn, [ENTITY_ID, ColumnMetadata.MIN, ColumnMetadata.MAX, SQLPARAMS], false);
			var query:AsyncToken;
			var idFieldsArray:Array = _idFields.getSessionState() as Array;
			
			if (idFieldsArray || params[ENTITY_ID])
			{
				var id:Object = idFieldsArray ? getMetadata(proxyColumn, idFieldsArray, true) : StandardLib.asNumber(params[ENTITY_ID]);
				var sqlParams:Array = WeaveAPI.CSVParser.parseCSVRow(params[SQLPARAMS]);
				query = _service.getColumn(id, params[ColumnMetadata.MIN], params[ColumnMetadata.MAX], sqlParams);
			}
