diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt.java b/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt.java
index 884ec7926968465fd60a1301d910c26744127f5b..668fbdb62dc3ea456a6e9452fdff30af0b8c8f07 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt.java
@@ -16,7 +16,7 @@
 package com.xeiam.xchart.standalone;
 
 import java.util.ArrayList;
-import java.util.Collection;
+import java.util.List;
 import java.util.Timer;
 import java.util.TimerTask;
 
@@ -77,7 +77,7 @@ public class RealtimeAttempt {
 
   public void buildPanel() {
 
-    Collection<Number> yData = getRandomData(5);
+    List<Double> yData = getRandomData(5);
 
     // Create Chart
     chart = new Chart(500, 400);
@@ -93,13 +93,13 @@ public class RealtimeAttempt {
   public void updateData() {
 
     // Get some new data
-    Collection<Number> newData = getRandomData(1);
+    List<Double> newData = getRandomData(1);
 
     // Replace the existing
-    ArrayList<Number> replacementData = new ArrayList<Number>();
+    List<Double> replacementData = new ArrayList<Double>();
 
     Series oldSeries = (Series) chart.getSeriesMap().values().toArray()[0];
-    Collection<Number> oldData = oldSeries.getYData();
+    List<Double> oldData = (List<Double>) oldSeries.getYData();
     replacementData.addAll(oldData);
 
     replacementData.addAll(newData);
@@ -132,9 +132,9 @@ public class RealtimeAttempt {
     return chartPanel;
   }
 
-  private static Collection<Number> getRandomData(int numPoints) {
+  private static List<Double> getRandomData(int numPoints) {
 
-    ArrayList<Number> data = new ArrayList<Number>();
+    List<Double> data = new ArrayList<Double>();
     for (int i = 0; i < numPoints; i++) {
       data.add(Math.random() * 100);
     }
diff --git a/xchart/src/main/java/com/xeiam/xchart/CSVExporter.java b/xchart/src/main/java/com/xeiam/xchart/CSVExporter.java
index 6e9a366ecb334a44e694dd689ad9ecd258b259c2..4d29b4e91d6efe98fc1c13fd9ad22704b414ab15 100644
--- a/xchart/src/main/java/com/xeiam/xchart/CSVExporter.java
+++ b/xchart/src/main/java/com/xeiam/xchart/CSVExporter.java
@@ -82,11 +82,11 @@ public class CSVExporter {
 
       out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(newFile), "UTF8"));
       Collection<?> xData = series.getXData();
-      Collection<Number> yData = series.getYData();
-      Collection<Number> errorBarData = series.getErrorBars();
+      Collection<? extends Number> yData = series.getYData();
+      Collection<? extends Number> errorBarData = series.getErrorBars();
       Iterator<?> itrx = xData.iterator();
-      Iterator<Number> itry = yData.iterator();
-      Iterator<Number> itrErrorBar = null;
+      Iterator<? extends Number> itry = yData.iterator();
+      Iterator<? extends Number> itrErrorBar = null;
       if (errorBarData != null) {
         itrErrorBar = errorBarData.iterator();
       }
diff --git a/xchart/src/main/java/com/xeiam/xchart/Chart.java b/xchart/src/main/java/com/xeiam/xchart/Chart.java
index ebac129ef2892a1bd6f9d888be9453a0da9cd4bd..3b250946144c2a103e0e318d97b93e5a862881d8 100644
--- a/xchart/src/main/java/com/xeiam/xchart/Chart.java
+++ b/xchart/src/main/java/com/xeiam/xchart/Chart.java
@@ -151,7 +151,7 @@ public class Chart {
    * @param yData the Y-Axis data
    * @return A Series object that you can set properties on
    */
-  public Series addSeries(String seriesName, Collection<Number> xData, Collection<Number> yData) {
+  public Series addSeries(String seriesName, Collection<? extends Number> xData, Collection<? extends Number> yData) {
 
     return chartPainter.getAxisPair().addSeries(seriesName, xData, yData, null);
   }
@@ -165,7 +165,7 @@ public class Chart {
    * @param errorBars the error bar data
    * @return A Series object that you can set properties on
    */
-  public Series addSeries(String seriesName, Collection<Number> xData, Collection<Number> yData, Collection<Number> errorBars) {
+  public Series addSeries(String seriesName, Collection<? extends Number> xData, Collection<? extends Number> yData, Collection<? extends Number> errorBars) {
 
     return chartPainter.getAxisPair().addSeries(seriesName, xData, yData, errorBars);
   }
diff --git a/xchart/src/main/java/com/xeiam/xchart/Series.java b/xchart/src/main/java/com/xeiam/xchart/Series.java
index 96b01b3cce2ec85ede4cc4589d9020f03db34fb0..5748e2732cc347816f3a7b3b5ccaa5cf396dec5a 100644
--- a/xchart/src/main/java/com/xeiam/xchart/Series.java
+++ b/xchart/src/main/java/com/xeiam/xchart/Series.java
@@ -39,10 +39,10 @@ public class Series {
   private Collection<?> xData;
   private AxisType xAxisType;
 
-  private Collection<Number> yData;
+  private Collection<? extends Number> yData;
   private AxisType yAxisType;
 
-  private Collection<Number> errorBars;
+  private Collection<? extends Number> errorBars;
 
   /** the minimum value of axis range */
   private BigDecimal xMin;
@@ -79,7 +79,8 @@ public class Series {
    * @param errorBars
    * @param seriesColorMarkerLineStyle
    */
-  public Series(String name, Collection<?> xData, AxisType xAxisType, Collection<Number> yData, AxisType yAxisType, Collection<Number> errorBars, SeriesColorMarkerLineStyle seriesColorMarkerLineStyle) {
+  public Series(String name, Collection<?> xData, AxisType xAxisType, Collection<? extends Number> yData, AxisType yAxisType, Collection<? extends Number> errorBars,
+      SeriesColorMarkerLineStyle seriesColorMarkerLineStyle) {
 
     if (name == null || name.length() < 1) {
       throw new IllegalArgumentException("Series name cannot be null or zero-length!!!");
@@ -147,13 +148,13 @@ public class Series {
    * @param data
    * @return
    */
-  private BigDecimal[] findMinMaxWithErrorBars(Collection<Number> data, Collection<Number> errorBars) {
+  private BigDecimal[] findMinMaxWithErrorBars(Collection<? extends Number> data, Collection<? extends Number> errorBars) {
 
     BigDecimal min = null;
     BigDecimal max = null;
 
-    Iterator<Number> itr = data.iterator();
-    Iterator<Number> ebItr = errorBars.iterator();
+    Iterator<? extends Number> itr = data.iterator();
+    Iterator<? extends Number> ebItr = errorBars.iterator();
     while (itr.hasNext()) {
       BigDecimal bigDecimal = new BigDecimal(itr.next().doubleValue());
       BigDecimal eb = new BigDecimal(ebItr.next().doubleValue());
@@ -249,12 +250,12 @@ public class Series {
     return xData;
   }
 
-  public Collection<Number> getYData() {
+  public Collection<? extends Number> getYData() {
 
     return yData;
   }
 
-  public Collection<Number> getErrorBars() {
+  public Collection<? extends Number> getErrorBars() {
 
     return errorBars;
   }
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 f062b68ce63d5759b207ea0fbd66bc3266b0ac67..99535e46576bc5127fb2a54f70654975d09b9b3d 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
@@ -62,7 +62,7 @@ public class AxisPair implements ChartPart {
    * @param xData
    * @param yData
    */
-  public <T> Series addSeries(String seriesName, Collection<T> xData, Collection<Number> yData, Collection<Number> errorBars) {
+  public <T> Series addSeries(String seriesName, Collection<T> xData, Collection<? extends Number> yData, Collection<? extends Number> errorBars) {
 
     // Sanity checks
     if (seriesName == null) {
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 dd4961b2419aee172d73c895da1fd3c289284a7a..acd946c23f7f1d2b6103ad6837a1fe3ed1ec32fe 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
@@ -74,7 +74,7 @@ public class PlotContentBarChart extends PlotContent {
       // data points
       Collection<?> xData = series.getXData();
 
-      Collection<Number> yData = series.getYData();
+      Collection<? extends Number> yData = series.getYData();
       BigDecimal yMin = getChartPainter().getAxisPair().getyAxis().getMin();
       BigDecimal yMax = getChartPainter().getAxisPair().getyAxis().getMax();
 
@@ -121,7 +121,7 @@ public class PlotContentBarChart extends PlotContent {
       // System.out.println(yMax);
 
       Iterator<?> categoryItr = categories.iterator();
-      Iterator<Number> yItr = yData.iterator();
+      Iterator<? extends Number> yItr = yData.iterator();
 
       int barCounter = 0;
       while (categoryItr.hasNext()) {
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java
index 0f53885616cf74ee676ee7968a1d3afe65a82b7f..33b415236ebef198393ba7296e78d7960c40c2ef 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java
@@ -65,7 +65,7 @@ public class PlotContentLineChart extends PlotContent {
       BigDecimal xMin = getChartPainter().getAxisPair().getxAxis().getMin();
       BigDecimal xMax = getChartPainter().getAxisPair().getxAxis().getMax();
 
-      Collection<Number> yData = series.getYData();
+      Collection<? extends Number> yData = series.getYData();
       BigDecimal yMin = getChartPainter().getAxisPair().getyAxis().getMin();
       BigDecimal yMax = getChartPainter().getAxisPair().getyAxis().getMax();
 
@@ -92,14 +92,14 @@ public class PlotContentLineChart extends PlotContent {
         yMin = new BigDecimal(Math.log10(yMin.doubleValue()));
         yMax = new BigDecimal(Math.log10(yMax.doubleValue()));
       }
-      Collection<Number> errorBars = series.getErrorBars();
+      Collection<? extends Number> errorBars = series.getErrorBars();
 
       double previousX = Integer.MIN_VALUE;
       double previousY = Integer.MIN_VALUE;
 
       Iterator<?> xItr = xData.iterator();
-      Iterator<Number> yItr = yData.iterator();
-      Iterator<Number> ebItr = null;
+      Iterator<? extends Number> yItr = yData.iterator();
+      Iterator<? extends Number> ebItr = null;
       if (errorBars != null) {
         ebItr = errorBars.iterator();
       }