 		/**
 		 * This function gets called when dataType changes and sets _defaultDataType.
 		 */
-		private function handleDataTypeChange():void
+		private function cacheDefaultDataType():void
 		{
 			var _dataType:String = getMetadata(ColumnMetadata.DATA_TYPE);
 			if (ObjectUtil.stringCompare(_dataType, DataTypes.GEOMETRY, true) == 0) // treat values as geometries

		override public function getValueFromKey(key:IQualifiedKey, dataType:Class = null):*
		{
			// reset cached values if necessary
			if (_cacheTriggerCount != triggerCounter)
			{
				_cacheTriggerCount = triggerCounter;
				try
				{
					// check if the equation evaluates to a constant
					var compiledObject:ICompiledObject = compiler.compileToObject(equation.value);
					if (compiledObject is CompiledConstant)
					{
						// save the constant result of the function
						_equationIsConstant = true;
						_equationResultCache.dictionary = null; // we don't need a cache
						_constantResult = (compiledObject as CompiledConstant).value;
					}
					else
					{
						// compile into a function
						compiledEquation = compiler.compileObjectToFunction(compiledObject, _symbolTableProxy, errorHandler, false, ['key', 'dataType']);
						_equationIsConstant = false;
						_equationResultCache.dictionary = new Dictionary(); // create a new cache
						_constantResult = undefined;
					}
				}
				catch (e:Error)
				{
					// if compiling fails
					_equationIsConstant = true;
					_constantResult = undefined;
				}
			}
			
			var value:* = _constantResult;
			if (!_equationIsConstant)

					{
						value = compiledEquation.apply(this, arguments);
						if (debug)
							trace(debugId(this),getMetadata(ColumnMetadata.TITLE),key.keyType,key.localName,dataType,value);
					}
					catch (e:Error)
					{
						if (_lastError != e.message)
						{
							_lastError = e.message;
							reportError(e);
						}
						//value = e;
					}
					
					// save value in cache
					if (value !== undefined)
						_equationResultCache.set(key, dataType, value);
					//trace('('+equation.value+')@"'+key+'" = '+value);
				}
				else if (value === UNDEFINED)
				{
					value = undefined;
				}
				else if (debug)
					trace('>',debugId(this),getMetadata(ColumnMetadata.TITLE),key.keyType,key.localName,dataType,value);
			}
			
			if (dataType == IQualifiedKey)
			{
