 						_bitmapText.text = heightColumn.getValueFromKey(recordKey, String);
 						
 						var valueLabelPos:Number = valueLabelDataCoordinate.value;
-						if(!(valueLabelPos <= Infinity)) // alternative to isNaN
-						{
+						if (!isFinite(valueLabelPos))
 							valueLabelPos = (height >= 0) ? yMax : yNegativeMax;
-						}
 						
 						// For stack and percent stack bar charts, draw value label in the middle of each segment
 						if (_heightColumns.length > 1 && _groupingMode != GROUP)
 						{
 							if (height >= 0)
-							{
-								stackValueLabelPos = tempPositiveValueLabelPos + (valueLabelPos - tempPositiveValueLabelPos) / 2;
-								tempPositiveValueLabelPos = valueLabelPos;
-							}
+								valueLabelPos = (yMin + yMax) / 2;
 							else
-							{
-								stackValueLabelPos = tempNegativeValueLabelPos + (valueLabelPos - tempNegativeValueLabelPos) / 2;
-								tempNegativeValueLabelPos = valueLabelPos;
-							}
-							valueLabelPos = stackValueLabelPos;
+								valueLabelPos = (yNegativeMin + yNegativeMax) / 2;
 						}
 						
 						if (!_horizontalMode)

							tempRange.begin += height;
					}
				}
			}
			
			if (allMissing)
				tempRange.setRange(0, 0); // bar starts at zero
			
			if (tempRange.end == 0)
				tempRange.setRange(tempRange.end, tempRange.begin);
			
			if (horizontalMode.value) // x range
				bounds.setXRange(tempRange.begin, tempRange.end);

					if (height >= 0)
					{
						//normalizing to 100% stack
						if (_groupingMode == PERCENT_STACK && totalHeight)
							yMax = yMin + (100 / totalHeight * height);
						else
							yMax = yMin + height;
					}
					else
					{
						if (_groupingMode == PERCENT_STACK && totalHeight)
							yNegativeMax = yNegativeMin + (100 / totalHeight * height);
						else
							yNegativeMax = yNegativeMin + height;
