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 4fa54f3057b7c47272cffe40c0092105f6f66aac..18c433fff95c75e857b420ca97e21f6476cad948 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
@@ -58,6 +58,7 @@ import com.xeiam.xchart.demo.charts.line.LineChart05;
 import com.xeiam.xchart.demo.charts.line.LineChart06;
 import com.xeiam.xchart.demo.charts.realtime.RealtimeChart01;
 import com.xeiam.xchart.demo.charts.realtime.RealtimeChart02;
+import com.xeiam.xchart.demo.charts.realtime.RealtimeChart03;
 import com.xeiam.xchart.demo.charts.scatter.ScatterChart01;
 import com.xeiam.xchart.demo.charts.scatter.ScatterChart02;
 import com.xeiam.xchart.demo.charts.scatter.ScatterChart03;
@@ -86,6 +87,7 @@ public class XChartDemo extends JPanel implements TreeSelectionListener {
   /** real-time chart example */
   final RealtimeChart01 realtimeChart01 = new RealtimeChart01();
   final RealtimeChart02 realtimeChart02 = new RealtimeChart02();
+  final RealtimeChart03 realtimeChart03 = new RealtimeChart03();
   Timer timer = new Timer();
 
   /**
@@ -153,7 +155,7 @@ public class XChartDemo extends JPanel implements TreeSelectionListener {
           public void run() {
 
             realtimeChart01.updateData();
-            chartPanel.updateSeries(RealtimeChart01.SERIES_NAME, realtimeChart01.getyData());
+            chartPanel.updateSeries(RealtimeChart01.SERIES_NAME, null, realtimeChart01.getyData(), null);
           }
         };
         timer = new Timer();
@@ -167,7 +169,21 @@ public class XChartDemo extends JPanel implements TreeSelectionListener {
           public void run() {
 
             realtimeChart02.updateData();
-            chartPanel.updateSeries(RealtimeChart02.SERIES_NAME, realtimeChart02.getxData(), realtimeChart02.getyData());
+            chartPanel.updateSeries(RealtimeChart02.SERIES_NAME, realtimeChart02.getxData(), realtimeChart02.getyData(), null);
+          }
+        };
+        timer = new Timer();
+        timer.scheduleAtFixedRate(chartUpdaterTask, 0, 500);
+      }
+      else if (chartInfo.getExampleChartName().startsWith("RealtimeChart03")) {
+        // set up real-time chart simulated data feed
+        TimerTask chartUpdaterTask = new TimerTask() {
+
+          @Override
+          public void run() {
+
+            realtimeChart03.updateData();
+            chartPanel.updateSeries(RealtimeChart02.SERIES_NAME, null, realtimeChart03.getyData(), realtimeChart03.getErrorBars());
           }
         };
         timer = new Timer();
@@ -321,6 +337,9 @@ public class XChartDemo extends JPanel implements TreeSelectionListener {
     defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("RealtimeChart02 - Updating X-Axis Window", realtimeChart02.getChart()));
     category.add(defaultMutableTreeNode);
 
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("RealtimeChart03 - Updating With Error Bars", realtimeChart03.getChart()));
+    category.add(defaultMutableTreeNode);
+
   }
 
   /**
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart01.java
index 4970231dc0549c36bfcd3d13321a86cb8998453a..22d4ad5db3e113528929c87d1fa662a7963ddb27 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart01.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart01.java
@@ -70,7 +70,7 @@ public class RealtimeChart01 implements ExampleChart {
       public void run() {
 
         realtimeChart01.updateData();
-        chartPanel.updateSeries(SERIES_NAME, realtimeChart01.getyData());
+        chartPanel.updateSeries(SERIES_NAME, null, realtimeChart01.getyData(), null);
 
       }
     };
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart02.java
index 4cd06de9284385014c09af181f38cc47201daa83..6689ed14cb9d9f9b690618e7dc3af4060c2d2213 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart02.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart02.java
@@ -72,7 +72,7 @@ public class RealtimeChart02 implements ExampleChart {
       public void run() {
 
         realtimeChart02.updateData();
-        chartPanel.updateSeries(SERIES_NAME, realtimeChart02.getxData(), realtimeChart02.getyData());
+        chartPanel.updateSeries(SERIES_NAME, realtimeChart02.getxData(), realtimeChart02.getyData(), null);
 
       }
     };
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart03.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart03.java
index e1260e369993374a5a9812731862a001ca045ceb..8b7a3a963d25338d97059f075c3df5fc82939fc2 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart03.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart03.java
@@ -141,4 +141,9 @@ public class RealtimeChart03 implements ExampleChart {
 
     return yData;
   }
+
+  public List<Double> getErrorBars() {
+
+    return errorBars;
+  }
 }
diff --git a/xchart/src/main/java/com/xeiam/xchart/Series.java b/xchart/src/main/java/com/xeiam/xchart/Series.java
index 9c7040c4a9e2f79c73446e1571c851977b5a3960..3cafb6f40e64307fc56d5e4f0febbe4365361df6 100644
--- a/xchart/src/main/java/com/xeiam/xchart/Series.java
+++ b/xchart/src/main/java/com/xeiam/xchart/Series.java
@@ -27,7 +27,7 @@ import com.xeiam.xchart.internal.style.SeriesColorMarkerLineStyle;
 
 /**
  * A Series containing X and Y data to be plotted on a Chart
- * 
+ *
  * @author timmolter
  */
 public class Series {
@@ -77,7 +77,7 @@ public class Series {
 
   /**
    * Constructor
-   * 
+   *
    * @param name
    * @param xData
    * @param xAxisType
@@ -110,7 +110,7 @@ public class Series {
 
   /**
    * Finds the min and max of a dataset
-   * 
+   *
    * @param data
    * @return
    */
@@ -150,7 +150,7 @@ public class Series {
 
   /**
    * Finds the min and max of a dataset accounting for error bars
-   * 
+   *
    * @param data
    * @return
    */
@@ -176,7 +176,7 @@ public class Series {
 
   /**
    * Set the line style of the series
-   * 
+   *
    * @param seriesLineStyle
    */
   public Series setLineStyle(SeriesLineStyle seriesLineStyle) {
@@ -187,7 +187,7 @@ public class Series {
 
   /**
    * Set the line style of the series
-   * 
+   *
    * @param basicStroke
    */
   public Series setLineStyle(BasicStroke basicStroke) {
@@ -198,7 +198,7 @@ public class Series {
 
   /**
    * Set the line color of the series
-   * 
+   *
    * @param seriesColor
    */
   public Series setLineColor(SeriesColor seriesColor) {
@@ -209,7 +209,7 @@ public class Series {
 
   /**
    * Set the line color of the series
-   * 
+   *
    * @param color
    */
   public Series setLineColor(java.awt.Color color) {
@@ -220,7 +220,7 @@ public class Series {
 
   /**
    * Sets the marker for the series
-   * 
+   *
    * @param seriesMarker
    */
   public Series setMarker(SeriesMarker seriesMarker) {
@@ -231,7 +231,7 @@ public class Series {
 
   /**
    * Sets the marker color for the series
-   * 
+   *
    * @param seriesColor
    */
   public Series setMarkerColor(SeriesColor seriesColor) {
@@ -242,7 +242,7 @@ public class Series {
 
   /**
    * Sets the marker color for the series
-   * 
+   *
    * @param color
    */
   public Series setMarkerColor(java.awt.Color color) {
@@ -331,20 +331,18 @@ public class Series {
     return name;
   }
 
-  public void replaceXData(Collection<?> newXData) {
-
-    xData = newXData;
-    calculateMinMax();
-  }
+  public void replaceData(Collection<?> newXData, Collection<? extends Number> newYData, Collection<? extends Number> newErrorBars) {
 
-  public void replaceYData(Collection<? extends Number> newYData) {
+    // Sanity check
+    if (newErrorBars != null && newErrorBars.size() != newYData.size()) {
+      throw new IllegalArgumentException("errorbars and Y-Axis sizes are not the same!!!");
+    }
+    if (newXData.size() != newYData.size()) {
+      throw new IllegalArgumentException("X and Y-Axis sizes are not the same!!!");
+    }
 
+    xData = newXData;
     yData = newYData;
-    calculateMinMax();
-  }
-
-  public void replaceErrroBarData(Collection<? extends Number> newErrorBars) {
-
     errorBars = newErrorBars;
     calculateMinMax();
   }
diff --git a/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java b/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java
index 6d2365e814a001cea0a857e1faf031f94f9c4a4d..de1fafafd3b3df2302c515b2fc7c7359d8de98b8 100644
--- a/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java
+++ b/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java
@@ -275,76 +275,32 @@ public class XChartPanel extends JPanel {
   }
 
   /**
-   * update a series by only updating the Y-Axis data. The X-Axis data will be automatically generated as a list of increasing Integers starting from
-   * 1 and ending at the size of the new Y-Axis data list.
+   * Update a series by updating the X-Axis, Y-Axis and error bar data
    *
    * @param seriesName
+   * @param newXData - set null to be automatically generated as a list of increasing Integers starting from
+   *          1 and ending at the size of the new Y-Axis data list.
    * @param newYData
+   * @param newErrorBarData - set null if there are no error bars
    * @return
    */
-  public Series updateSeries(String seriesName, Collection<? extends Number> newYData) {
+  public Series updateSeries(String seriesName, Collection<?> newXData, List<? extends Number> newYData, List<? extends Number> newErrorBarData) {
 
     Series series = chart.getSeriesMap().get(seriesName);
     if (series == null) {
       throw new IllegalArgumentException("Series name >" + seriesName + "< not found!!!");
     }
-    series.replaceYData(newYData);
-
-    // generate X-Data
-    List<Integer> generatedXData = new ArrayList<Integer>();
-    for (int i = 1; i < newYData.size() + 1; i++) {
-      generatedXData.add(i);
-    }
-    series.replaceXData(generatedXData);
-
-    // Re-display the chart
-    revalidate();
-    repaint();
-    return series;
-
-  }
-
-  /**
-   * update a series by updating both the X-Axis and Y-Axis data
-   *
-   * @param seriesName
-   * @param newYData
-   * @return
-   */
-  public Series updateSeries(String seriesName, Collection<?> newXData, List<? extends Number> newYData) {
-
-    Series series = chart.getSeriesMap().get(seriesName);
-    if (series == null) {
-      throw new IllegalArgumentException("Series name >" + seriesName + "< not found!!!");
+    if (newXData == null) {
+      // generate X-Data
+      List<Integer> generatedXData = new ArrayList<Integer>();
+      for (int i = 1; i <= newYData.size(); i++) {
+        generatedXData.add(i);
+      }
+      series.replaceData(generatedXData, newYData, newErrorBarData);
     }
-    series.replaceXData(newXData);
-    series.replaceYData(newYData);
-
-    // Re-display the chart
-    revalidate();
-    repaint();
-
-    return series;
-  }
-
-  /**
-   * update a series by updating the X-Axis, Y-Axis and error bar data
-   *
-   * @param seriesName
-   * @param newXData
-   * @param newYData
-   * @param newErrorBarData
-   * @return
-   */
-  public Series updateSeries(String seriesName, Collection<?> newXData, List<? extends Number> newYData, List<? extends Number> newErrorBarData) {
-
-    Series series = chart.getSeriesMap().get(seriesName);
-    if (series == null) {
-      throw new IllegalArgumentException("Series name >" + seriesName + "< not found!!!");
+    else {
+      series.replaceData(newXData, newYData, newErrorBarData);
     }
-    series.replaceXData(newXData);
-    series.replaceYData(newYData);
-    series.replaceErrroBarData(newErrorBarData);
 
     // Re-display the chart
     revalidate();
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java
index 1962b469188c67e1157e3455ecacbf08cdd17646..fdc809871da467fe212de8399e0d24475a9985bc 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java
@@ -81,9 +81,18 @@ public class AxisPair implements ChartPart {
     if (xData != null && xData.size() == 0) {
       throw new IllegalArgumentException("X-Axis data cannot be empty!!!");
     }
+    // Sanity check
+    if (errorBars != null && errorBars.size() != yData.size()) {
+      throw new IllegalArgumentException("errorbars and Y-Axis sizes are not the same!!!");
+    }
 
     Series series = null;
     if (xData != null) {
+
+      // Sanity check
+      if (xData.size() != yData.size()) {
+        throw new IllegalArgumentException("X and Y-Axis sizes are not the same!!!");
+      }
       // inspect the series to see what kind of data it contains (Number, Date or String)
       Iterator<?> itr = xData.iterator();
       Object dataPoint = itr.next();
@@ -123,14 +132,6 @@ public class AxisPair implements ChartPart {
       series.setSeriesType(Series.SeriesType.Line);
     }
 
-    // Sanity check
-    if (xData != null && xData.size() != yData.size()) {
-      throw new IllegalArgumentException("X and Y-Axis sizes are not the same!!!");
-    }
-    if (errorBars != null && errorBars.size() != yData.size()) {
-      throw new IllegalArgumentException("errorbars and Y-Axis sizes are not the same!!!");
-    }
-
     if (seriesMap.keySet().contains(seriesName)) {
       throw new IllegalArgumentException("Series name >" + seriesName + "< has already been used. Use unique names for each series!!!");
     }