docs: function () {
  		var series = this,  //state = series.state,
  			points = series.points,
  			options = series.options,
  			chart = series.chart,
  			renderer = chart.renderer,
  			pointAttr,
  			q1Plot,
  			q3Plot,
  			highPlot,
  			lowPlot,
  			medianPlot,
  			crispCorr,
  			crispX,
  			graphic,
  			stemPath,
  			stemAttr,
  			boxPath,
  			whiskersPath,
  			whiskersAttr,
  			medianPath,
  			medianAttr,
  			width,
  			left,
  			right,
  			halfWidth,
  			shapeArgs,
  			color,
  			doQuartiles = series.doQuartiles !== false, // error bar inherits this series type but doesn't do quartiles
  			whiskerLength = parseInt(series.options.whiskerLength, 10) / 100;
  
  
  		each(points, function (point) {
  
  			graphic = point.graphic;
  			shapeArgs = point.shapeArgs; // the box
  			stemAttr = {};
  			whiskersAttr = {};
  			medianAttr = {};
  			color = point.color || series.color;
  			
  			if (point.plotY !== UNDEFINED) {
  
  				pointAttr = point.pointAttr[point.selected ? 'selected' : ''];
  
  				// crisp vector coordinates
  				width = shapeArgs.width;
  				left = mathFloor(shapeArgs.x);
  				right = left + width;
  				halfWidth = mathRound(width / 2);
  				//crispX = mathRound(left + halfWidth) + crispCorr;
  				q1Plot = mathFloor(doQuartiles ? point.q1Plot : point.lowPlot);// + crispCorr;
  				q3Plot = mathFloor(doQuartiles ? point.q3Plot : point.lowPlot);// + crispCorr;
  				highPlot = mathFloor(point.highPlot);// + crispCorr;
  				lowPlot = mathFloor(point.lowPlot);// + crispCorr;
  				
  				// Stem attributes
  				stemAttr.stroke = point.stemColor || options.stemColor || color;
  				stemAttr['stroke-width'] = pick(point.stemWidth, options.stemWidth, options.lineWidth);
  				stemAttr.dashstyle = point.stemDashStyle || options.stemDashStyle;
  				
  				// Whiskers attributes
  				whiskersAttr.stroke = point.whiskerColor || options.whiskerColor || color;
  				whiskersAttr['stroke-width'] = pick(point.whiskerWidth, options.whiskerWidth, options.lineWidth);
  				
  				// Median attributes
  				medianAttr.stroke = point.medianColor || options.medianColor || color;
  				medianAttr['stroke-width'] = pick(point.medianWidth, options.medianWidth, options.lineWidth);
  				
  				// The stem
  				crispCorr = (stemAttr['stroke-width'] % 2) / 2;
  				crispX = left + halfWidth + crispCorr;				
  				stemPath = [
  					// stem up
  					'M',
  					crispX, q3Plot,
  					'L',
  					crispX, highPlot,
  					
  					// stem down
  					'M',
  					crispX, q1Plot,
  					'L',
  					crispX, lowPlot
  				];
  				
  				// The box
  				if (doQuartiles) {
  					crispCorr = (pointAttr['stroke-width'] % 2) / 2;
  					crispX = mathFloor(crispX) + crispCorr;
  					q1Plot = mathFloor(q1Plot) + crispCorr;
  					q3Plot = mathFloor(q3Plot) + crispCorr;
  					left += crispCorr;
  					right += crispCorr;
  					boxPath = [
  						'M',
  						left, q3Plot,
  						'L',
  						left, q1Plot,
  						'L',
  						right, q1Plot,
  						'L',
  						right, q3Plot,
  						'L',
  						left, q3Plot,
  						'z'
  					];
  				}
  				
  				// The whiskers
  				if (whiskerLength) {
  					crispCorr = (whiskersAttr['stroke-width'] % 2) / 2;
  					highPlot = highPlot + crispCorr;
  					lowPlot = lowPlot + crispCorr;
  					whiskersPath = [
  						// High whisker
  						'M',
  						crispX - halfWidth * whiskerLength, 
  						highPlot,
  						'L',
  						crispX + halfWidth * whiskerLength, 
  						highPlot,
  						
  						// Low whisker
  						'M',
  						crispX - halfWidth * whiskerLength, 
  						lowPlot,
  						'L',
  						crispX + halfWidth * whiskerLength, 
  						lowPlot
  					];
  				}
  				
  				// The median
  				crispCorr = (medianAttr['stroke-width'] % 2) / 2;				
  				medianPlot = mathRound(point.medianPlot) + crispCorr;
  				medianPath = [
  					'M',
  					left, 
  					medianPlot,
  					'L',
  					right, 
  					medianPlot
  				];
  				
  				// Create or update the graphics
  				if (graphic) { // update
  					
  					point.stem.animate({ d: stemPath });
  					if (whiskerLength) {
  						point.whiskers.animate({ d: whiskersPath });
  					}
  					if (doQuartiles) {
  						point.box.animate({ d: boxPath });
  					}
  					point.medianShape.animate({ d: medianPath });
  					
  				} else { // create new
  					point.graphic = graphic = renderer.g()
  						.add(series.group);
  					
  					point.stem = renderer.path(stemPath)
  						.attr(stemAttr)
  						.add(graphic);
  						
  					if (whiskerLength) {
  						point.whiskers = renderer.path(whiskersPath) 
  							.attr(whiskersAttr)
  							.add(graphic);
  					}
  					if (doQuartiles) {
  						point.box = renderer.path(boxPath)
  							.attr(pointAttr)
  							.add(graphic);
  					}	
  					point.medianShape = renderer.path(medianPath)
  						.attr(medianAttr)
  						.add(graphic);
  				}
  			}
  		});
  
  	}