diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Axis.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Axis.java
index 9059f6116039669f2b464f7418a3cfd886a8c6b4..06a290d407192061a00c0e415acd24b43d65a0f2 100644
--- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Axis.java
+++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Axis.java
@@ -22,6 +22,7 @@ import java.awt.font.FontRenderContext;
 import java.awt.font.TextLayout;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
+import java.util.List;
 
 import org.knowm.xchart.StyleManager.LegendPosition;
 import org.knowm.xchart.internal.chartpart.ChartInternal.ChartInternalType;
@@ -349,13 +350,13 @@ public class Axis implements ChartPart {
 
       if (getChartInternal().getChartInternalType() == ChartInternalType.Category) {
 
-        // No need to pass in min and max
         // pass in axis type instead of ChartInternal
-        return new AxisTickCategoryChartCalculator(getDirection(), workingSpace, getChartInternal());
+        List<?> categories = (List<?>) getChartInternal().getSeriesMap().values().iterator().next().getXData();
+        AxisType axisType = getChartInternal().getAxisPair().getXAxis().getAxisType();
+        return new AxisTickCategoryChartCalculator(getDirection(), workingSpace, categories, axisType, getChartInternal().getStyleManager());
       }
       else if (getChartInternal().getChartInternalType() == ChartInternalType.XY && getAxisType() == AxisType.Date) {
 
-        // TODO don't pass in style manager
         return new AxisTickDateCalculator(getDirection(), workingSpace, getChartInternal().getxAxisMin(), getChartInternal().getxAxisMax(), getChartInternal().getStyleManager());
       }
       else if (getChartInternal().getStyleManager().isXAxisLogarithmic()) {
diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/AxisTickCategoryChartCalculator.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/AxisTickCategoryChartCalculator.java
index 6620c7290045cc4a7fd13a1f7a887b035d99e96c..ec2019af48a0f4855e2e885498498de36f1a86f6 100644
--- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/AxisTickCategoryChartCalculator.java
+++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/AxisTickCategoryChartCalculator.java
@@ -21,7 +21,7 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 
-import org.knowm.xchart.Series;
+import org.knowm.xchart.StyleManager;
 import org.knowm.xchart.internal.Utils;
 import org.knowm.xchart.internal.chartpart.Axis.AxisType;
 import org.knowm.xchart.internal.chartpart.Axis.Direction;
@@ -42,14 +42,14 @@ public class AxisTickCategoryChartCalculator extends AxisTickCalculator {
    * @param maxValue
    * @param styleManager
    */
-  public AxisTickCategoryChartCalculator(Direction axisDirection, double workingSpace, ChartInternal chart) {
+  public AxisTickCategoryChartCalculator(Direction axisDirection, double workingSpace, List<?> categories, AxisType axisType, StyleManager styleManager) {
 
-    super(axisDirection, workingSpace, Double.NaN, Double.NaN, chart.getStyleManager());
+    super(axisDirection, workingSpace, Double.NaN, Double.NaN, styleManager);
 
-    calculate(chart);
+    calculate(categories, axisType);
   }
 
-  private void calculate(ChartInternal chartInternal) {
+  private void calculate(List<?> categories, AxisType axisType) {
 
     // tick space - a percentage of the working space available for ticks
     int tickSpace = (int) (styleManager.getAxisTickSpacePercentage() * workingSpace); // in plot space
@@ -57,18 +57,6 @@ public class AxisTickCategoryChartCalculator extends AxisTickCalculator {
     // where the tick should begin in the working space in pixels
     double margin = Utils.getTickStartOffset(workingSpace, tickSpace);
 
-    List<?> categories = (List<?>) chartInternal.getSeriesMap().values().iterator().next().getXData();
-
-    // verify all series have exactly the same xAxis
-    if (chartInternal.getSeriesMap().size() > 1) {
-
-      for (Series series : chartInternal.getSeriesMap().values()) {
-        if (!series.getXData().equals(categories)) {
-          throw new IllegalArgumentException("X-Axis data must exactly match all other Series X-Axis data for Bar Charts!!");
-        }
-      }
-    }
-
     // generate all tickLabels and tickLocations from the first to last position
     double gridStep = (tickSpace / (double) categories.size());
     double firstPosition = gridStep / 2.0;
@@ -76,10 +64,10 @@ public class AxisTickCategoryChartCalculator extends AxisTickCalculator {
     // set up String formatters that may be encountered
     NumberFormatter numberFormatter = null;
     SimpleDateFormat simpleDateformat = null;
-    if (chartInternal.getAxisPair().getXAxis().getAxisType() == AxisType.Number) {
+    if (axisType == AxisType.Number) {
       numberFormatter = new NumberFormatter(styleManager);
     }
-    else if (chartInternal.getAxisPair().getXAxis().getAxisType() == AxisType.Date) {
+    else if (axisType == AxisType.Date) {
       if (styleManager.getDatePattern() == null) {
         throw new RuntimeException("You need to set the Date Formatting Pattern!!!");
       }
@@ -90,15 +78,15 @@ public class AxisTickCategoryChartCalculator extends AxisTickCalculator {
     int counter = 0;
 
     for (Object category : categories) {
-      if (chartInternal.getAxisPair().getXAxis().getAxisType() == AxisType.String) {
+      if (axisType == AxisType.String) {
         tickLabels.add(category.toString());
         double tickLabelPosition = margin + firstPosition + gridStep * counter++;
         tickLocations.add(tickLabelPosition);
       }
-      else if (chartInternal.getAxisPair().getXAxis().getAxisType() == AxisType.Number) {
+      else if (axisType == AxisType.Number) {
         tickLabels.add(numberFormatter.formatNumber(new BigDecimal(category.toString()), minValue, maxValue, axisDirection));
       }
-      else if (chartInternal.getAxisPair().getXAxis().getAxisType() == AxisType.Date) {
+      else if (axisType == AxisType.Date) {
 
         tickLabels.add(simpleDateformat.format((((Date) category).getTime())));
       }
diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartInternal.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartInternal.java
index 6701d7ea8afb561f13dacea8a5b9f811bf0ce9a6..332d7ab8be22e4bce2d0d3a5f9eee5610c925d97 100644
--- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartInternal.java
+++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartInternal.java
@@ -163,6 +163,13 @@ public class ChartInternal {
     if (xData.size() != yData.size()) {
       throw new IllegalArgumentException("X and Y-Axis sizes are not the same!!!");
     }
+    // verify all series have exactly the same xAxis
+    if (seriesMap.size() > 0) { // there was already a series added
+      if (!seriesMap.entrySet().iterator().next().getValue().getXData().equals(xData)) {
+        throw new IllegalArgumentException("X-Axis data must exactly match all other Series X-Axis data for Category Charts!!");
+      }
+    }
+    // TODO make sure pie charts only have one series!
 
     // inspect the series to see what kind of data it contains (Number, Date, String)
     setXAxisType(xData);
@@ -304,6 +311,7 @@ public class ChartInternal {
     if (getSeriesMap().isEmpty()) {
       throw new RuntimeException("No series defined for Chart!!!");
     }
+
     xAxisMin = axisPair.getXAxis().getMin();
     xAxisMax = axisPair.getXAxis().getMax();
     yAxisMin = axisPair.getYAxis().getMin();