docs: function redraw(animation) {
  		var redrawLegend = chart.isDirtyLegend,
  			hasStackedSeries,
  			isDirtyBox = chart.isDirtyBox, // todo: check if it has actually changed?
  			seriesLength = series.length,
  			i = seriesLength,
  			clipRect = chart.clipRect,
  			serie;
  
  		setAnimation(animation, chart);
  
  		// link stacked series
  		while (i--) {
  			serie = series[i];
  			if (serie.isDirty && serie.options.stacking) {
  				hasStackedSeries = true;
  				break;
  			}
  		}
  		if (hasStackedSeries) { // mark others as dirty
  			i = seriesLength;
  			while (i--) {
  				serie = series[i];
  				if (serie.options.stacking) {
  					serie.isDirty = true;
  				}
  			}
  		}
  
  		// handle updated data in the series
  		each(series, function (serie) {
  			if (serie.isDirty) { // prepare the data so axis can read it
  				serie.cleanData();
  				serie.getSegments();
  
  				if (serie.options.legendType === 'point') {
  					redrawLegend = true;
  				}
  			}
  		});
  
  		// handle added or removed series
  		if (redrawLegend && legend.renderLegend) { // series or pie points are added or removed
  			// draw legend graphics
  			legend.renderLegend();
  
  			chart.isDirtyLegend = false;
  		}
  
  		if (hasCartesianSeries) {
  			if (!isResizing) {
  
  				// reset maxTicks
  				maxTicks = null;
  
  				// set axes scales
  				each(axes, function (axis) {
  					axis.setScale();
  				});
  			}
  			adjustTickAmounts();
  			getMargins();
  
  			// redraw axes
  			each(axes, function (axis) {
  				if (axis.isDirty || isDirtyBox) {
  					axis.redraw();
  					isDirtyBox = true; // always redraw box to reflect changes in the axis labels
  				}
  			});
  
  
  		}
  
  		// the plot areas size has changed
  		if (isDirtyBox) {
  			drawChartBox();
  			placeTrackerGroup();
  
  			// move clip rect
  			if (clipRect) {
  				stop(clipRect);
  				clipRect.animate({ // for chart resize
  					width: chart.plotSizeX,
  					height: chart.plotSizeY
  				});
  			}
  
  		}
  
  
  		// redraw affected series
  		each(series, function (serie) {
  			if (serie.isDirty && serie.visible &&
  					(!serie.isCartesian || serie.xAxis)) { // issue #153
  				serie.redraw();
  			}
  		});
  
  
  		// hide tooltip and hover states
  		if (tracker && tracker.resetTracker) {
  			tracker.resetTracker();
  		}
  
  		// fire the event
  		fireEvent(chart, 'redraw');
  	}