diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickBarChartCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickBarChartCalculator.java
index c7d1184944111e17497d03caa1ea6a401557d93f..17ecc718bd8b2578f548f4bebfd5255aedb1df53 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickBarChartCalculator.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickBarChartCalculator.java
@@ -16,7 +16,6 @@
 package com.xeiam.xchart.internal.chartpart;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
@@ -56,22 +55,33 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator {
     // where the tick should begin in the working space in pixels
     double margin = Utils.getTickStartOffset(workingSpace, tickSpace);
 
-    // get all categories
-    List<Object> categories = new ArrayList<Object>();
+    List<?> firstXAxis = (List<?>) chartPainter.getAxisPair().getSeriesMap().values().iterator().next().getXData();
+
+    // verify all series have exactly the same xAxis
+    if (chartPainter.getAxisPair().getSeriesMap().size() > 1) {
+
+      for (Series series : chartPainter.getAxisPair().getSeriesMap().values()) {
+        Iterator<?> firstSeriesItr = firstXAxis.iterator();
+        Iterator<?> xItr = series.getXData().iterator();
+        while (xItr.hasNext()) {
+
+          // check matching
+          Object next = xItr.next();
+          Object firstSeriesNext = firstSeriesItr.next();
+          if (!firstSeriesNext.equals(next)) {
+            throw new IllegalArgumentException("X-Axis data must exactly match all other Series X-Axis data for Bar Charts!!");
+          }
+        }
+      }
+    }
 
-    Series firstSeries = chartPainter.getAxisPair().getSeriesMap().values().iterator().next(); // we use this to check all series have the exact same length and values
     for (Series series : chartPainter.getAxisPair().getSeriesMap().values()) {
 
-      Iterator<?> firstSeriesItr = firstSeries.getXData().iterator();
       Iterator<?> xItr = series.getXData().iterator();
       while (xItr.hasNext()) {
 
         // check matching
         Object next = xItr.next();
-        Object firstSeriesNext = firstSeriesItr.next();
-        if (!firstSeriesNext.equals(next)) {
-          throw new IllegalArgumentException("X-Axis data must exactly match all other Series X-Axis data for Bar Charts!!");
-        }
 
         Object x = null;
         if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Number) {
@@ -83,25 +93,22 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator {
         else if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.String) {
           x = next;
         }
-        if (!categories.contains(x)) {
-          categories.add(x);
-        }
       }
     }
 
     if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.String) {
 
-      double gridStep = (tickSpace / (double) categories.size());
+      double gridStep = (tickSpace / (double) firstXAxis.size());
       double firstPosition = gridStep / 2.0;
       int counter = 0;
-      for (Object category : categories) {
+      for (Object category : firstXAxis) {
         tickLabels.add(category.toString());
         double tickLabelPosition = margin + firstPosition + gridStep * counter++;
         tickLocations.add(tickLabelPosition);
       }
     }
 
-    double gridStep = (tickSpace / (double) categories.size());
+    double gridStep = (tickSpace / (double) firstXAxis.size());
     double firstPosition = gridStep / 2.0;
 
     // generate all tickLabels and tickLocations from the first to last position
@@ -116,7 +123,7 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator {
     }
     int counter = 0;
 
-    for (Object category : categories) {
+    for (Object category : firstXAxis) {
       if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.Number) {
         tickLabels.add(numberFormatter.formatNumber(new BigDecimal(category.toString()), minValue, maxValue, axisDirection));
       }