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 0774bf010653969920110d988bdc09bdb9e3729c..b0044f5dcc8dbeae3173779055c4118a7f34eefe 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
@@ -17,6 +17,8 @@ package com.xeiam.xchart.demo;
 
 import java.awt.Dimension;
 import java.awt.GridLayout;
+import java.util.Timer;
+import java.util.TimerTask;
 
 import javax.swing.JFrame;
 import javax.swing.JPanel;
@@ -49,6 +51,8 @@ import com.xeiam.xchart.demo.charts.line.LineChart03;
 import com.xeiam.xchart.demo.charts.line.LineChart04;
 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.scatter.ScatterChart01;
 import com.xeiam.xchart.demo.charts.scatter.ScatterChart02;
 import com.xeiam.xchart.demo.charts.scatter.ScatterChart03;
@@ -71,7 +75,12 @@ public class XChartDemo extends JPanel implements TreeSelectionListener {
   private JTree tree;
 
   /** The panel for chart */
-  private JPanel chartPanel;
+  private XChartPanel chartPanel;
+
+  /** real-time chart example */
+  final RealtimeChart01 realtimeChart01 = new RealtimeChart01();;
+  final RealtimeChart02 realtimeChart02 = new RealtimeChart02();;
+  Timer timer = new Timer();
 
   /**
    * Constructor
@@ -102,12 +111,13 @@ public class XChartDemo extends JPanel implements TreeSelectionListener {
     splitPane.setTopComponent(treeView);
     splitPane.setBottomComponent(chartPanel);
 
-    Dimension minimumSize = new Dimension(100, 125);
+    Dimension minimumSize = new Dimension(130, 160);
     treeView.setMinimumSize(minimumSize);
     splitPane.setPreferredSize(new Dimension(700, 700));
 
     // Add the split pane to this panel.
     add(splitPane);
+
   }
 
   @Override
@@ -126,6 +136,37 @@ public class XChartDemo extends JPanel implements TreeSelectionListener {
       // displayURL(chartInfo.bookURL);
       chartPanel = new XChartPanel(chartInfo.getExampleChart());
       splitPane.setBottomComponent(chartPanel);
+
+      // start running a simulated data feed for the sample real-time plot
+      timer.cancel(); // just in case
+      if (chartInfo.getExampleChartName().startsWith("RealtimeChart01")) {
+        // set up real-time chart simulated data feed
+        TimerTask chartUpdaterTask = new TimerTask() {
+
+          @Override
+          public void run() {
+
+            realtimeChart01.updateData();
+            chartPanel.updateSeries(RealtimeChart01.SERIES_NAME, realtimeChart01.getyData());
+          }
+        };
+        timer = new Timer();
+        timer.scheduleAtFixedRate(chartUpdaterTask, 0, 500);
+      }
+      else if (chartInfo.getExampleChartName().startsWith("RealtimeChart02")) {
+        // set up real-time chart simulated data feed
+        TimerTask chartUpdaterTask = new TimerTask() {
+
+          @Override
+          public void run() {
+
+            realtimeChart02.updateData();
+            chartPanel.updateSeries(RealtimeChart02.SERIES_NAME, realtimeChart02.getxData(), realtimeChart02.getyData());
+          }
+        };
+        timer = new Timer();
+        timer.scheduleAtFixedRate(chartUpdaterTask, 0, 500);
+      }
     }
   }
 
@@ -139,112 +180,122 @@ public class XChartDemo extends JPanel implements TreeSelectionListener {
     // categories
     DefaultMutableTreeNode category = null;
     // leaves
-    DefaultMutableTreeNode chart = null;
+    DefaultMutableTreeNode defaultMutableTreeNode = null;
 
     // Area category
     category = new DefaultMutableTreeNode("Area Charts");
     top.add(category);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("AreaChart01 - 3-Series", new AreaChart01().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("AreaChart01 - 3-Series", new AreaChart01().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("AreaChart02 - Null Y-Axis Data Points", new AreaChart02().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("AreaChart02 - Null Y-Axis Data Points", new AreaChart02().getChart()));
+    category.add(defaultMutableTreeNode);
 
     // First category
     category = new DefaultMutableTreeNode("Line Charts");
     top.add(category);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("LineChart01 -  Logarithmic Y-Axis", new LineChart01().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("LineChart01 -  Logarithmic Y-Axis", new LineChart01().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("LineChart02 - Customized Series Style", new LineChart02().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("LineChart02 - Customized Series Style", new LineChart02().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("LineChart03 - Extensive Chart Customization", new LineChart03().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("LineChart03 - Extensive Chart Customization", new LineChart03().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("LineChart04 - Hundreds of Series on One Plot", new LineChart04().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("LineChart04 - Hundreds of Series on One Plot", new LineChart04().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("LineChart05 - Scatter and Line", new LineChart05().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("LineChart05 - Scatter and Line", new LineChart05().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("LineChart06 - Logarithmic Y-Axis with Error Bars", new LineChart06().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("LineChart06 - Logarithmic Y-Axis with Error Bars", new LineChart06().getChart()));
+    category.add(defaultMutableTreeNode);
 
     // Scatter category
     category = new DefaultMutableTreeNode("Scatter Charts");
     top.add(category);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("ScatterChart01 - Gaussian Blob", new ScatterChart01().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("ScatterChart01 - Gaussian Blob", new ScatterChart01().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("ScatterChart02 - Logarithmic Data", new ScatterChart02().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("ScatterChart02 - Logarithmic Data", new ScatterChart02().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("ScatterChart03 - Single point", new ScatterChart03().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("ScatterChart03 - Single point", new ScatterChart03().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("ScatterChart04 - Error Bars", new ScatterChart04().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("ScatterChart04 - Error Bars", new ScatterChart04().getChart()));
+    category.add(defaultMutableTreeNode);
 
     // Bar category
     category = new DefaultMutableTreeNode("Bar Charts");
     top.add(category);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("BarChart01 - Basic Bar Chart", new BarChart01().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("BarChart01 - Basic Bar Chart", new BarChart01().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("BarChart02 - Date Categories", new BarChart02().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("BarChart02 - Date Categories", new BarChart02().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("BarChart03 - Positive and Negative", new BarChart03().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("BarChart03 - Positive and Negative", new BarChart03().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("BarChart04 - Missing Point in Series", new BarChart04().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("BarChart04 - Missing Point in Series", new BarChart04().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("BarChart05 - GGPlot2 Theme", new BarChart05().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("BarChart05 - GGPlot2 Theme", new BarChart05().getChart()));
+    category.add(defaultMutableTreeNode);
 
     // Theme category
     category = new DefaultMutableTreeNode("Chart Themes");
     top.add(category);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("ThemeChart01 - Default XChart Theme", new ThemeChart01().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("ThemeChart01 - Default XChart Theme", new ThemeChart01().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("ThemeChart02 - GGPlot2 Theme", new ThemeChart02().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("ThemeChart02 - GGPlot2 Theme", new ThemeChart02().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("ThemeChart03 - Matlab Theme", new ThemeChart03().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("ThemeChart03 - Matlab Theme", new ThemeChart03().getChart()));
+    category.add(defaultMutableTreeNode);
 
     // Date category
     category = new DefaultMutableTreeNode("Date Charts");
     top.add(category);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("DateChart01 - Millisecond Scale", new DateChart01().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("DateChart01 - Millisecond Scale", new DateChart01().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("DateChart02 - Second Scale", new DateChart02().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("DateChart02 - Second Scale", new DateChart02().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("DateChart03 - Minute Scale", new DateChart03().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("DateChart03 - Minute Scale", new DateChart03().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("DateChart04 - Hour Scale", new DateChart04().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("DateChart04 - Hour Scale", new DateChart04().getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("DateChart05 - Day Scale", new DateChart05().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("DateChart05 - Day Scale", new DateChart05().getChart()));
+    category.add(defaultMutableTreeNode);
+
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("DateChart06 - Month Scale", new DateChart06().getChart()));
+    category.add(defaultMutableTreeNode);
+
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("DateChart07 - Year Scale", new DateChart07().getChart()));
+    category.add(defaultMutableTreeNode);
+
+    // Real-time category
+    category = new DefaultMutableTreeNode("Real-time Charts");
+    top.add(category);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("DateChart06 - Month Scale", new DateChart06().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("RealtimeChart01 - Fixed X-Axis Window", realtimeChart01.getChart()));
+    category.add(defaultMutableTreeNode);
 
-    chart = new DefaultMutableTreeNode(new ChartInfo("DateChart07 - Year Scale", new DateChart07().getChart()));
-    category.add(chart);
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("RealtimeChart02 - Updating X-Axis Window", realtimeChart02.getChart()));
+    category.add(defaultMutableTreeNode);
 
   }
 
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt2.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart01.java
similarity index 69%
rename from xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt2.java
rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart01.java
index 63506465ccf541d5e3bb679c15e8d4bda36692ac..9bc6db2e8b3661bfa4ad48c5e2cb87c6d52b7aed 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt2.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart01.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.xeiam.xchart.standalone;
+package com.xeiam.xchart.demo.charts.realtime;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -21,26 +21,26 @@ import java.util.Timer;
 import java.util.TimerTask;
 
 import javax.swing.JFrame;
-import javax.swing.JPanel;
 
 import com.xeiam.xchart.Chart;
 import com.xeiam.xchart.XChartPanel;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 
 /**
+ * Realtime
+ * 
  * @author timmolter
  */
-public class RealtimeAttempt2 {
+public class RealtimeChart01 implements ExampleChart {
 
-  private Chart chart;
-  private XChartPanel chartPanel;
-  private static final String SERIES_NAME = "series1";
-  private List<Number> yData;
+  private List<Double> yData;
+  public static final String SERIES_NAME = "series1";
 
-  public static void main(String[] args) throws Exception {
+  public static void main(String[] args) {
 
     // Setup the panel
-    final RealtimeAttempt2 realtimeAttempt = new RealtimeAttempt2();
-    realtimeAttempt.buildPanel();
+    final RealtimeChart01 realtimeChart01 = new RealtimeChart01();
+    final XChartPanel chartPanel = realtimeChart01.buildPanel();
 
     // Schedule a job for the event-dispatching thread:
     // creating and showing this application's GUI.
@@ -52,7 +52,7 @@ public class RealtimeAttempt2 {
         // Create and set up the window.
         JFrame frame = new JFrame("XChart");
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-        frame.add(realtimeAttempt.getChartPanel());
+        frame.add(chartPanel);
 
         // Display the window.
         frame.pack();
@@ -66,7 +66,9 @@ public class RealtimeAttempt2 {
       @Override
       public void run() {
 
-        realtimeAttempt.updateData();
+        realtimeChart01.updateData();
+        chartPanel.updateSeries(SERIES_NAME, realtimeChart01.getyData());
+
       }
     };
 
@@ -75,24 +77,40 @@ public class RealtimeAttempt2 {
 
   }
 
-  public void buildPanel() {
+  public XChartPanel buildPanel() {
+
+    yData = getRandomData(5);
+    return new XChartPanel(getChart());
+  }
+
+  @Override
+  public Chart getChart() {
 
     yData = getRandomData(5);
 
     // Create Chart
-    chart = new Chart(500, 400);
+    Chart chart = new Chart(500, 400);
     chart.setChartTitle("Sample Real-time Chart");
     chart.setXAxisTitle("X");
     chart.setYAxisTitle("Y");
     chart.addSeries(SERIES_NAME, null, yData);
 
-    chartPanel = new XChartPanel(chart);
+    return chart;
+  }
+
+  private static List<Double> getRandomData(int numPoints) {
+
+    List<Double> data = new ArrayList<Double>();
+    for (int i = 0; i < numPoints; i++) {
+      data.add(Math.random() * 100);
+    }
+    return data;
   }
 
   public void updateData() {
 
     // Get some new data
-    List<Number> newData = getRandomData(1);
+    List<Double> newData = getRandomData(1);
 
     yData.addAll(newData);
 
@@ -101,25 +119,10 @@ public class RealtimeAttempt2 {
       yData.remove(0);
     }
 
-    chartPanel.updateSeries(SERIES_NAME, yData);
   }
 
-  public Chart getChart() {
+  public List<Double> getyData() {
 
-    return chart;
-  }
-
-  public JPanel getChartPanel() {
-
-    return chartPanel;
-  }
-
-  private static List<Number> getRandomData(int numPoints) {
-
-    List<Number> data = new ArrayList<Number>();
-    for (int i = 0; i < numPoints; i++) {
-      data.add(Math.random() * 100);
-    }
-    return data;
+    return yData;
   }
 }
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt3.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart02.java
similarity index 72%
rename from xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt3.java
rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart02.java
index 8d011d895ff292d6a572ad803730d874d3cd9378..899d2e2db7c75d75e0377270d64f03fca2d6c861 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt3.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/realtime/RealtimeChart02.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.xeiam.xchart.standalone;
+package com.xeiam.xchart.demo.charts.realtime;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -21,27 +21,29 @@ import java.util.Timer;
 import java.util.TimerTask;
 
 import javax.swing.JFrame;
-import javax.swing.JPanel;
 
 import com.xeiam.xchart.Chart;
 import com.xeiam.xchart.XChartPanel;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 
 /**
+ * Realtime
+ * 
  * @author timmolter
  */
-public class RealtimeAttempt3 {
+public class RealtimeChart02 implements ExampleChart {
 
   private Chart chart;
-  private XChartPanel chartPanel;
-  private static final String SERIES_NAME = "series1";
+  // private XChartPanel chartPanel;
+  public static final String SERIES_NAME = "series1";
   private List<Integer> xData;
   private List<Double> yData;
 
-  public static void main(String[] args) throws Exception {
+  public static void main(String[] args) {
 
     // Setup the panel
-    final RealtimeAttempt3 realtimeAttempt = new RealtimeAttempt3();
-    realtimeAttempt.buildPanel();
+    final RealtimeChart02 realtimeChart02 = new RealtimeChart02();
+    final XChartPanel chartPanel = realtimeChart02.buildPanel();
 
     // Schedule a job for the event-dispatching thread:
     // creating and showing this application's GUI.
@@ -53,7 +55,7 @@ public class RealtimeAttempt3 {
         // Create and set up the window.
         JFrame frame = new JFrame("XChart");
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-        frame.add(realtimeAttempt.getChartPanel());
+        frame.add(chartPanel);
 
         // Display the window.
         frame.pack();
@@ -67,7 +69,9 @@ public class RealtimeAttempt3 {
       @Override
       public void run() {
 
-        realtimeAttempt.updateData();
+        realtimeChart02.updateData();
+        chartPanel.updateSeries(SERIES_NAME, realtimeChart02.getxData(), realtimeChart02.getyData());
+
       }
     };
 
@@ -76,65 +80,73 @@ public class RealtimeAttempt3 {
 
   }
 
-  public void buildPanel() {
+  public XChartPanel buildPanel() {
 
     yData = getRandomData(5);
     xData = getMonotonicallyIncreasingData(5);
 
+    return new XChartPanel(getChart());
+  }
+
+  @Override
+  public Chart getChart() {
+
+    xData = getMonotonicallyIncreasingData(5);
+    yData = getRandomData(5);
+
     // Create Chart
-    chart = new Chart(500, 400);
+    Chart chart = new Chart(500, 400);
     chart.setChartTitle("Sample Real-time Chart");
     chart.setXAxisTitle("X");
     chart.setYAxisTitle("Y");
     chart.addSeries(SERIES_NAME, xData, yData);
 
-    chartPanel = new XChartPanel(chart);
+    return chart;
+  }
+
+  private List<Double> getRandomData(int numPoints) {
+
+    List<Double> data = new ArrayList<Double>();
+    for (int i = 0; i < numPoints; i++) {
+      data.add(Math.random() * 100);
+    }
+    return data;
+  }
+
+  private List<Integer> getMonotonicallyIncreasingData(int numPoints) {
+
+    List<Integer> data = new ArrayList<Integer>();
+    for (int i = 0; i < numPoints; i++) {
+      data.add(i);
+    }
+    return data;
   }
 
   public void updateData() {
 
     // Get some new data
-    List<Double> newYData = getRandomData(1);
-    yData.addAll(newYData);
+    List<Double> newData = getRandomData(1);
 
-    xData.add(xData.get(xData.size() - 1) + 1);
+    yData.addAll(newData);
 
     // Limit the total number of points
     while (yData.size() > 20) {
       yData.remove(0);
     }
+
+    xData.add(xData.get(xData.size() - 1) + 1);
     while (xData.size() > 20) {
       xData.remove(0);
     }
-
-    chartPanel.updateSeries(SERIES_NAME, xData, yData);
   }
 
-  public Chart getChart() {
+  public List<Double> getyData() {
 
-    return chart;
+    return yData;
   }
 
-  public JPanel getChartPanel() {
+  public List<Integer> getxData() {
 
-    return chartPanel;
-  }
-
-  private List<Double> getRandomData(int numPoints) {
-
-    List<Double> data = new ArrayList<Double>();
-    for (int i = 0; i < numPoints; i++) {
-      data.add(Math.random() * 100);
-    }
-    return data;
-  }
-
-  private List<Integer> getMonotonicallyIncreasingData(int numPoints) {
-
-    List<Integer> data = new ArrayList<Integer>();
-    for (int i = 0; i < numPoints; i++) {
-      data.add(i);
-    }
-    return data;
+    return xData;
   }
 }
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt1.java b/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt1.java
deleted file mode 100644
index c41260f4e80705bdc8a9ca5a06d916cb465a18ed..0000000000000000000000000000000000000000
--- a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt1.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/**
- * Copyright 2011 - 2014 Xeiam LLC.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.xeiam.xchart.standalone;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-
-import com.xeiam.xchart.Chart;
-import com.xeiam.xchart.Series;
-import com.xeiam.xchart.SeriesMarker;
-import com.xeiam.xchart.XChartPanel;
-
-/**
- * @author rossjourdain
- */
-public class RealtimeAttempt1 {
-
-  private Chart chart;
-  private JPanel chartPanel;
-
-  public static void main(String[] args) throws Exception {
-
-    // Setup the panel
-    final RealtimeAttempt1 realtimeAttempt = new RealtimeAttempt1();
-    realtimeAttempt.buildPanel();
-
-    // Schedule a job for the event-dispatching thread:
-    // creating and showing this application's GUI.
-    javax.swing.SwingUtilities.invokeLater(new Runnable() {
-
-      @Override
-      public void run() {
-
-        // Create and set up the window.
-        JFrame frame = new JFrame("XChart");
-        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-        frame.add(realtimeAttempt.getChartPanel());
-
-        // Display the window.
-        frame.pack();
-        frame.setVisible(true);
-      }
-    });
-
-    // Simulate a data feed
-    TimerTask chartUpdaterTask = new TimerTask() {
-
-      @Override
-      public void run() {
-
-        realtimeAttempt.updateData();
-      }
-    };
-
-    Timer timer = new Timer();
-    timer.scheduleAtFixedRate(chartUpdaterTask, 0, 500);
-
-  }
-
-  public void buildPanel() {
-
-    List<Double> yData = getRandomData(5);
-
-    // Create Chart
-    chart = new Chart(500, 400);
-    chart.setChartTitle("Sample Chart");
-    chart.setXAxisTitle("X");
-    chart.setYAxisTitle("Y");
-    Series series = chart.addSeries("y(x)", null, yData);
-    series.setMarker(SeriesMarker.CIRCLE);
-
-    chartPanel = new XChartPanel(chart);
-  }
-
-  public void updateData() {
-
-    // Get some new data
-    List<Double> newData = getRandomData(1);
-
-    // Replace the existing
-    List<Double> replacementData = new ArrayList<Double>();
-
-    Series oldSeries = (Series) chart.getSeriesMap().values().toArray()[0];
-    List<Double> oldData = (List<Double>) oldSeries.getYData();
-    replacementData.addAll(oldData);
-
-    replacementData.addAll(newData);
-
-    // Limit the total number of points
-    while (replacementData.size() > 20) {
-      replacementData.remove(0);
-    }
-
-    // Swap out the data
-    chart.getSeriesMap().clear();
-    Series newSeries = chart.addSeries(oldSeries.getName(), null, replacementData);
-    newSeries.setLineColor(oldSeries.getStrokeColor());
-    newSeries.setLineStyle(oldSeries.getStroke());
-    newSeries.setMarkerColor(oldSeries.getMarkerColor());
-    // etc
-
-    // Re-display the chart
-    chartPanel.revalidate();
-    chartPanel.repaint();
-  }
-
-  public Chart getChart() {
-
-    return chart;
-  }
-
-  public JPanel getChartPanel() {
-
-    return chartPanel;
-  }
-
-  private static List<Double> getRandomData(int numPoints) {
-
-    List<Double> data = new ArrayList<Double>();
-    for (int i = 0; i < numPoints; i++) {
-      data.add(Math.random() * 100);
-    }
-    return data;
-  }
-}