 			for (var i:int = 0; i < _cols.length; i++)
 			{
 				var column:IAttributeColumn = _cols[i];
-				var stats:IColumnStatistics = WeaveAPI.StatisticsCache.getColumnStatistics(column);
-				value = normArray ? normArray[i] : stats.getNorm(recordKey);
+				value = normArray ? normArray[i] : getNorm(column, recordKey);
 				if (isNaN(value))
 					continue;
 				

				for (i = 0; i < annCols.length; i++)
				{
					column = annCols[i];
					stats = WeaveAPI.StatisticsCache.getColumnStatistics(column);
					value = normArray ? normArray[i] : stats.getNorm(key);
					if(isNaN(value))
					{
						value = 0

			if (doCDLayoutFlag) setClassDiscriminationAnchorsLocations();
		}
		
		private function getNorm(column:IAttributeColumn, key:IQualifiedKey):Number
		{
			var stats:IColumnStatistics = WeaveAPI.StatisticsCache.getColumnStatistics(column);
			var _absNorm:Boolean = absNorm.value;
			var _normMin:Number = normMin.value;
			var _normMax:Number = normMax.value;
			
			if (!_absNorm && _normMin == 0 && _normMax == 1)
				return stats.getNorm(key);
			
			var value:Number = column.getValueFromKey(key, Number);
			var statsMin:Number = stats.getMin();
			var statsMax:Number = stats.getMax();
			var min:Number = Math.min(statsMin, statsMax);
			var max:Number = Math.max(statsMin, statsMax);
			
			return StandardLib.scale(value, min, max, _normMin, _normMax);
		}
		
		public function setclassDiscriminationMetric(tandpMapping:Dictionary,tandpValuesMapping:Dictionary):void
		{
