diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java
index 1b47528a87c740044551f017417cf399c7104961..8690b96fcf4058cf0b2342d354178c74ac2dbd1e 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java
@@ -34,6 +34,7 @@ import com.xeiam.xchart.demo.charts.bar.BarChart01;
 import com.xeiam.xchart.demo.charts.bar.BarChart02;
 import com.xeiam.xchart.demo.charts.bar.BarChart03;
 import com.xeiam.xchart.demo.charts.bar.BarChart04;
+import com.xeiam.xchart.demo.charts.bar.BarChart05;
 import com.xeiam.xchart.demo.charts.date.DateChart01;
 import com.xeiam.xchart.demo.charts.date.DateChart02;
 import com.xeiam.xchart.demo.charts.date.DateChart03;
@@ -181,7 +182,10 @@ public class XChartDemo extends JPanel implements TreeSelectionListener {
     chart = new DefaultMutableTreeNode(new ChartInfo("BarChart03 - Basic Bar Chart", new BarChart03().getChart()));
     category.add(chart);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("BarChart04 - Basic Bar Chart", new BarChart04().getChart()));
+    chart = new DefaultMutableTreeNode(new ChartInfo("BarChart04 - Missing Point in Series", new BarChart04().getChart()));
+    category.add(chart);
+
+    chart = new DefaultMutableTreeNode(new ChartInfo("BarChart05 - Basic Bar Chart", new BarChart05().getChart()));
     category.add(chart);
 
     // Area category
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java
index 5712fc89d3f7184728746e5f24cbf9b7959b84e1..ec119137e5129d85c4c109d7142b846d6d451299 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java
@@ -51,11 +51,10 @@ public class BarChart01 implements ExampleChart {
   public Chart getChart() {
 
     // Create Chart
-    Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("BarChart01").xAxisTitle("X").yAxisTitle("Y").build();
-    chart.addSeries("a", new double[] { 0, 1, 2, 3, 4 }, new double[] { 4, 5, 9, 6, 5 });
+    Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("Score Histgram").xAxisTitle("Score").yAxisTitle("Number").build();
+    chart.addSeries("test 1", new double[] { 0, 1, 2, 3, 4 }, new double[] { 4, 5, 9, 6, 5 });
 
     // Customize Chart
-    chart.getStyleManager().setChartTitleVisible(false);
     chart.getStyleManager().setLegendPosition(LegendPosition.InsideNW);
 
     return chart;
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java
index 91645670c55d91754d72d53d7b474be47cf85fcc..51325c8986ba69f82aa854a7fa78019bbaecaa8d 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart02.java
@@ -43,6 +43,7 @@ import com.xeiam.xchart.style.StyleManager.ChartType;
  * <li>Date categories
  * <li>All negative values
  * <li>Single series
+ * <li>No horizontal plot gridlines
  */
 public class BarChart02 implements ExampleChart {
 
@@ -75,6 +76,7 @@ public class BarChart02 implements ExampleChart {
       yData.add(random.nextInt(i) + 1);
     }
     chart.addDateSeries("Model 77", xData, yData);
+    chart.getStyleManager().setPlotGridLinesVisible(false);
 
     return chart;
   }
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart03.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart03.java
index 77dfe5b6aa0e0a3550d969bc5c1c725ac54c310f..6f49563d52059a72268105c3ac2d9a9ecea012b0 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart03.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart03.java
@@ -49,11 +49,8 @@ public class BarChart03 implements ExampleChart {
   public Chart getChart() {
 
     // Create Chart
-    Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("BarChart03").xAxisTitle("X").yAxisTitle("Y").build();
-    chart.addSeries("a", new double[] { 10, 20, 30, 40 }, new double[] { 40, -30, -20, -60 });
-
-    // Customize Chart
-    chart.getStyleManager().setChartTitleVisible(false);
+    Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("Score vs. Age").xAxisTitle("Age").yAxisTitle("Score").build();
+    chart.addSeries("males", new double[] { 10, 20, 30, 40 }, new double[] { 40, -30, -20, -60 });
 
     return chart;
   }
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 58c5eb0cc658be88f1d7a670b535704acea2fda0..f26db94013a5286bc4eb1c9d1b22d0117b555f57 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
@@ -28,13 +28,14 @@ import com.xeiam.xchart.demo.charts.ExampleChart;
 import com.xeiam.xchart.style.StyleManager.ChartType;
 
 /**
- * Basic Bar Chart
+ * Missing Point in Series
  * <p>
  * Demonstrates the following:
  * <ul>
  * <li>Number categories
- * <li>Positive and negative values
+ * <li>Positive values
  * <li>Multiple series
+ * <li>Missing point in series
  */
 public class BarChart04 implements ExampleChart {
 
@@ -49,12 +50,9 @@ public class BarChart04 implements ExampleChart {
   public Chart getChart() {
 
     // Create Chart
-    Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("BarChart04").xAxisTitle("X").yAxisTitle("Y").build();
-    chart.addSeries("a", new double[] { 10, 20, 30, 40 }, new double[] { 40, 30, 20, 60 });
-    chart.addSeries("b", new double[] { 10, 20, 30, 40 }, new double[] { 50, 10, 20, 40 });
-
-    // Customize Chart
-    chart.getStyleManager().setChartTitleVisible(false);
+    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 });
 
     return chart;
   }
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart05.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart05.java
index 92b0ef3f68c8c8bd6e011d01279140358576824a..15416f087bb53d0b26a62cf2788c9afa4cd976bc 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart05.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart05.java
@@ -26,9 +26,9 @@ import com.xeiam.xchart.ChartBuilder;
 import com.xeiam.xchart.SwingWrapper;
 import com.xeiam.xchart.demo.charts.ExampleChart;
 import com.xeiam.xchart.style.StyleManager.ChartType;
+import com.xeiam.xchart.style.theme.GGPlot2Theme;
 
 /**
- * Basic Bar Chart
  * <p>
  * Demonstrates the following:
  * <ul>
@@ -49,9 +49,9 @@ public class BarChart05 implements ExampleChart {
   public Chart getChart() {
 
     // Create Chart
-    Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("BarChart05").xAxisTitle("X").yAxisTitle("Y").build();
-    chart.addSeries("a", new double[] { 10, 20, 30, 40 }, new double[] { -40, 30, 20, 60 });
-    chart.addSeries("b", new double[] { 10, 20, 30, 40 }, new double[] { 50, 10, -20, 40 });
+    Chart chart = new ChartBuilder().chartType(ChartType.Bar).width(800).height(600).title("Temperature vs. Length").xAxisTitle("Length").yAxisTitle("Temperature").theme(new GGPlot2Theme()).build();
+    chart.addSeries("fish", new double[] { 10, 20, 30, 40 }, new double[] { -40, 30, 20, 60 });
+    chart.addSeries("worms", new double[] { 10, 20, 30, 40 }, new double[] { 50, 10, -20, 40 });
 
     // Customize Chart
     chart.getStyleManager().setChartTitleVisible(false);
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 eae07dceabfba7e36765716d277a58aa6db142b4..598fe7a022f2f43eb9f1f5cc3af6a6f0de3dfdff 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
@@ -58,21 +58,14 @@ public class PlotContentBarChart extends PlotContent {
     int yTopMargin = AxisPair.getTickStartOffset((int) bounds.getHeight(), yTickSpace);
 
     // get all categories
-    Set<BigDecimal> categories = new TreeSet<BigDecimal>();
+    Set<Object> categories = new TreeSet<Object>();
     Map<Integer, Series> seriesMap = getChart().getAxisPair().getSeriesMap();
     for (Integer seriesId : seriesMap.keySet()) {
 
       Series series = seriesMap.get(seriesId);
       Iterator<?> xItr = series.getxData().iterator();
       while (xItr.hasNext()) {
-        BigDecimal x = null;
-        if (getChart().getAxisPair().getxAxis().getAxisType() == AxisType.Number) {
-          x = new BigDecimal(((Number) xItr.next()).doubleValue());
-        }
-        if (getChart().getAxisPair().getxAxis().getAxisType() == AxisType.Date) {
-          x = new BigDecimal(((Date) xItr.next()).getTime());
-        }
-        categories.add(x);
+        categories.add(xItr.next());
       }
     }
     int numBars = categories.size();
@@ -97,21 +90,30 @@ public class PlotContentBarChart extends PlotContent {
         yMax = BigDecimal.ZERO;
       }
 
+      Iterator<?> categoryItr = categories.iterator();
       Iterator<?> xItr = xData.iterator();
       Iterator<Number> yItr = yData.iterator();
 
       int barCounter = 0;
-      while (xItr.hasNext()) {
-        BigDecimal x = null;
-        if (getChart().getAxisPair().getxAxis().getAxisType() == AxisType.Number) {
-          x = new BigDecimal(((Number) xItr.next()).doubleValue());
-        }
-        if (getChart().getAxisPair().getxAxis().getAxisType() == AxisType.Date) {
-          x = new BigDecimal(((Date) xItr.next()).getTime());
-        }
-
-        if (categories.contains(x)) {
-
+      while (categoryItr.hasNext()) {
+
+        // BigDecimal category = null;
+        // if (getChart().getAxisPair().getxAxis().getAxisType() == AxisType.Number) {
+        // category = new BigDecimal(((Number) categoryItr.next()).doubleValue());
+        // }
+        // if (getChart().getAxisPair().getxAxis().getAxisType() == AxisType.Date) {
+        // category = new BigDecimal(((Date) categoryItr.next()).getTime());
+        // }
+
+        if (xData.contains(categoryItr.next())) {
+
+          BigDecimal x = null;
+          if (getChart().getAxisPair().getxAxis().getAxisType() == AxisType.Number) {
+            x = new BigDecimal(((Number) xItr.next()).doubleValue());
+          }
+          if (getChart().getAxisPair().getxAxis().getAxisType() == AxisType.Date) {
+            x = new BigDecimal(((Date) xItr.next()).getTime());
+          }
           BigDecimal y = new BigDecimal(yItr.next().doubleValue());
           int yTransform = (int) (bounds.getHeight() - (yTopMargin + y.subtract(yMin).doubleValue() / yMax.subtract(yMin).doubleValue() * yTickSpace));
           int yOffset = (int) (bounds.getY() + yTransform);
@@ -125,6 +127,8 @@ public class PlotContentBarChart extends PlotContent {
           int xOffset = (int) (bounds.getX() + xLeftMargin + gridStep * barCounter++ + seriesCounter * barWidth + barMargin);
           g.setColor(series.getStrokeColor());
           g.fillPolygon(new int[] { xOffset, xOffset + barWidth, xOffset + barWidth, xOffset }, new int[] { yOffset, yOffset, zeroOffset, zeroOffset }, 4);
+        } else {
+          barCounter++;
         }
       }
       seriesCounter++;