diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart04.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart04.java
index de90dc2c0082b4f22c5c9dee30f2df201c38ffa1..74400142b1590d8c48cdcc6f3223735c26699d4b 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart04.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart04.java
@@ -46,8 +46,8 @@ public class BarChart04 implements ExampleChart {
 
     // Create Chart
     Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("XFactor vs. Age").xAxisTitle("Age").yAxisTitle("XFactor").build();
-    chart.addSeries("male", new double[] { 10, 20, 30, 50 }, new double[] { 40, 30, 20, 60 });
     chart.addSeries("female", new double[] { 10, 20, 30, 40, 50 }, new double[] { 50, 10, 20, 40, 35 });
+    chart.addSeries("male", new double[] { 10, 20, 30, 50 }, new double[] { 40, 30, 20, 60 });
 
     chart.getStyleManager().setYAxisMin(5);
     chart.getStyleManager().setYAxisMax(70);
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 48bffe3e67d581f8e096ed8aa7e6f4f7dff5c39b..e163b67852d693c58f0f1216cc7457fc4560953c 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
@@ -15,10 +15,10 @@
  */
 package com.xeiam.xchart.internal.chartpart;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.Iterator;
-import java.util.Set;
-import java.util.TreeSet;
+import java.util.List;
 
 import com.xeiam.xchart.Series;
 import com.xeiam.xchart.internal.Utils;
@@ -50,13 +50,13 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator {
   private void calculate(ChartPainter chartPainter) {
 
     // tick space - a percentage of the working space available for ticks
-    int tickSpace = (int)(styleManager.getAxisTickSpaceRatio() * workingSpace); // in plot space
+    int tickSpace = (int) (styleManager.getAxisTickSpaceRatio() * workingSpace); // in plot space
 
     // where the tick should begin in the working space in pixels
     int margin = Utils.getTickStartOffset(workingSpace, tickSpace); // in plot space double gridStep = getGridStepForDecimal(tickSpace);
 
     // get all categories
-    Set<Object> categories = new TreeSet<Object>();
+    List<Object> categories = new ArrayList<Object>();
     for (Series series : chartPainter.getAxisPair().getSeriesMap().values()) {
 
       Iterator<?> xItr = series.getXData().iterator();
@@ -71,7 +71,9 @@ public class AxisTickBarChartCalculator extends AxisTickCalculator {
         else if (chartPainter.getAxisPair().getXAxis().getAxisType() == AxisType.String) {
           x = xItr.next();
         }
-        categories.add(x);
+        if (!categories.contains(x)) {
+          categories.add(x);
+        }
       }
     }
 
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java
index dd3ed68526ebf505b20e3f8062c012699abca317..7fc2e0e3e3d0d7d826e7f7713c9a8727dbe34465 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java
@@ -18,10 +18,10 @@ package com.xeiam.xchart.internal.chartpart;
 import java.awt.Graphics2D;
 import java.awt.geom.Path2D;
 import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
-import java.util.Set;
-import java.util.TreeSet;
+import java.util.List;
 
 import com.xeiam.xchart.Series;
 import com.xeiam.xchart.StyleManager;
@@ -47,22 +47,25 @@ public class PlotContentBarChart extends PlotContent {
 
     Rectangle2D bounds = plot.getBounds();
     StyleManager styleManager = plot.getChartPainter().getStyleManager();
-    
+
     // X-Axis
-    int xTickSpace = (int)(styleManager.getAxisTickSpaceRatio() * bounds.getWidth());
+    int xTickSpace = (int) (styleManager.getAxisTickSpaceRatio() * bounds.getWidth());
     int xLeftMargin = Utils.getTickStartOffset((int) bounds.getWidth(), xTickSpace);
 
     // Y-Axis
-    int yTickSpace = (int)(styleManager.getAxisTickSpaceRatio() * bounds.getHeight());
+    int yTickSpace = (int) (styleManager.getAxisTickSpaceRatio() * bounds.getHeight());
     int yTopMargin = Utils.getTickStartOffset((int) bounds.getHeight(), yTickSpace);
 
     // get all categories
-    Set<Object> categories = new TreeSet<Object>();
+    List<Object> categories = new ArrayList<Object>();
     for (Series series : getChartPainter().getAxisPair().getSeriesMap().values()) {
 
       Iterator<?> xItr = series.getXData().iterator();
       while (xItr.hasNext()) {
-        categories.add(xItr.next());
+        Object object = xItr.next();
+        if (!categories.contains(object)) {
+          categories.add(object);
+        }
       }
     }
     int numBars = categories.size();