docs: function () {
  		
  		var data = this.data,
  			length = data.length,
  			i,
  			originalDataLabels = [],
  			seriesProto = Series.prototype,
  			dataLabelOptions = this.options.dataLabels,
  			align = dataLabelOptions.align,
  			point,
  			inverted = this.chart.inverted;
  			
  		if (dataLabelOptions.enabled || this._hasPointLabels) {
  			
  			// Step 1: set preliminary values for plotY and dataLabel and draw the upper labels
  			i = length;
  			while (i--) {
  				point = data[i];
  				
  				// Set preliminary values
  				point.y = point.high;
  				point._plotY = point.plotY;
  				point.plotY = point.plotHigh;
  				
  				// Store original data labels and set preliminary label objects to be picked up 
  				// in the uber method
  				originalDataLabels[i] = point.dataLabel;
  				point.dataLabel = point.dataLabelUpper;
  				
  				// Set the default offset
  				point.below = false;
  				if (inverted) {
  					if (!align) {
  						dataLabelOptions.align = 'left';
  					}
  					dataLabelOptions.x = dataLabelOptions.xHigh;								
  				} else {
  					dataLabelOptions.y = dataLabelOptions.yHigh;
  				}
  			}
  			
  			if (seriesProto.drawDataLabels) {
  				seriesProto.drawDataLabels.apply(this, arguments); // #1209
  			}
  			
  			// Step 2: reorganize and handle data labels for the lower values
  			i = length;
  			while (i--) {
  				point = data[i];
  				
  				// Move the generated labels from step 1, and reassign the original data labels
  				point.dataLabelUpper = point.dataLabel;
  				point.dataLabel = originalDataLabels[i];
  				
  				// Reset values
  				point.y = point.low;
  				point.plotY = point._plotY;
  				
  				// Set the default offset
  				point.below = true;
  				if (inverted) {
  					if (!align) {
  						dataLabelOptions.align = 'right';
  					}
  					dataLabelOptions.x = dataLabelOptions.xLow;
  				} else {
  					dataLabelOptions.y = dataLabelOptions.yLow;
  				}
  			}
  			if (seriesProto.drawDataLabels) {
  				seriesProto.drawDataLabels.apply(this, arguments);
  			}
  		}
  
  		dataLabelOptions.align = align;
  	
  	}