diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart03.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart03.java
index 5d9786aef032876e0e09591760767b3bfd6620ad..74351cfac9e056101ef1197966c8bd61a4967f12 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart03.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart03.java
@@ -53,16 +53,16 @@ public class DateChart03 implements ExampleChart {
 
     Random random = new Random();
 
-    DateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
+    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss.SSS");
     Date date = null;
     for (int i = 1; i <= 14; i++) {
       try {
-        date = sdf.parse("08:" + (5 * i + random.nextInt(2)) + ":" + (random.nextInt(2)) + "." + random.nextInt(1000));
+        date = sdf.parse("2013-07-22-08:" + (5 * i + random.nextInt(2)) + ":" + (random.nextInt(2)) + "." + random.nextInt(1000));
       } catch (ParseException e) {
         e.printStackTrace();
       }
-      // System.out.println(date.getTime());
-      // System.out.println(date.toString());
+      System.out.println(date.getTime());
+      System.out.println(date.toString());
       xData.add(date);
       yData.add(Math.random() * i);
     }
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java
index cc7959570a9d54c91729536df3af42b33a889758..777065cf0ad35b262674a7e536c58ea42b28ba44 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java
@@ -55,7 +55,7 @@ public class ScatterChart02 implements ExampleChart {
     for (int i = 0; i < size; i++) {
       double nextRandom = random.nextDouble();
       xData.add(Math.pow(10, nextRandom * 10));
-      yData.add(nextRandom + random.nextDouble());
+      yData.add(1000000000.0 + nextRandom + random.nextDouble());
     }
 
     // Create Chart
diff --git a/xchart/src/main/java/com/xeiam/xchart/Histogram.java b/xchart/src/main/java/com/xeiam/xchart/Histogram.java
index d7bd83065688c9d78a7da04c6172546d69d8cd06..31cb3b9879c66d6d3e887198c1d40b8ec262a186 100644
--- a/xchart/src/main/java/com/xeiam/xchart/Histogram.java
+++ b/xchart/src/main/java/com/xeiam/xchart/Histogram.java
@@ -87,10 +87,10 @@ public class Histogram {
 
       int bin = (int) ((((Number) itr.next()).doubleValue() - min) / binSize); // changed this from numBins
       if (bin < 0) { /* this data is smaller than min */
-        System.out.println("less than");
+        // System.out.println("less than");
       }
       else if (bin > numBins) { /* this data point is bigger than max */
-        System.out.println("greater than");
+        // System.out.println("greater than");
       }
       else if (bin == numBins) { // this falls right on the edge of the max bin
         tempYAxisData[bin - 1] += 1;
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickCalculator.java
index 7141e461c79d9a9b337ee4897efc19cac9ebcf07..63bd164647a160c4960abedcd36a3abdc80f8a32 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickCalculator.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickCalculator.java
@@ -100,13 +100,16 @@ public abstract class AxisTickCalculator {
    */
   double getFirstPosition(double gridStep) {
 
-    double firstPosition;
-    if (minValue % gridStep <= 0.0) {
+    // System.out.println("******");
+
+    double firstPosition = minValue - (minValue % gridStep) + gridStep;
+
+    // System.out.println(firstPosition - minValue);
+    // System.out.println(.9 * gridStep);
+
+    if ((firstPosition - minValue) > .8 * gridStep) {
       firstPosition = minValue - (minValue % gridStep);
     }
-    else {
-      firstPosition = minValue - (minValue % gridStep) + gridStep;
-    }
     return firstPosition;
   }
 
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java
index 4046f870e894f71bc546037b103fe6aff95e686e..4e2a3f220b82bdb2c9ab7ee21b071be6d1a706e3 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickDateCalculator.java
@@ -47,7 +47,7 @@ public class AxisTickDateCalculator extends AxisTickCalculator {
   private void calculate() {
 
     // tick space - a percentage of the working space available for ticks
-    int tickSpace = (int) (styleManager.getAxisTickSpaceRatio() * workingSpace); // in plot space
+    double tickSpace = styleManager.getAxisTickSpaceRatio() * workingSpace; // in plot space
 
     // where the tick should begin in the working space in pixels
     double margin = Utils.getTickStartOffset(workingSpace, tickSpace); // in plot space double gridStep = getGridStepForDecimal(tickSpace);
@@ -55,7 +55,7 @@ public class AxisTickDateCalculator extends AxisTickCalculator {
     // the span of the data
     long span = (long) Math.abs(maxValue - minValue); // in data space
 
-    long gridStepHint = (long) (span / (double) tickSpace * styleManager.getXAxisTickMarkSpacingHint());
+    long gridStepHint = (long) (span / tickSpace * styleManager.getXAxisTickMarkSpacingHint());
 
     long timeUnit = dateFormatter.getTimeUnit(gridStepHint);
     double gridStep = 0.0;
@@ -74,7 +74,7 @@ public class AxisTickDateCalculator extends AxisTickCalculator {
 
       tickLabels.add(dateFormatter.formatDate(tickPosition, timeUnit));
       // here we convert tickPosition finally to plot space, i.e. pixels
-      double tickLabelPosition = (int) (margin + ((tickPosition - minValue) / (maxValue - minValue) * tickSpace));
+      double tickLabelPosition = margin + ((tickPosition - minValue) / (maxValue - minValue) * tickSpace);
       tickLocations.add(tickLabelPosition);
     }
   }
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLogarithmicCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLogarithmicCalculator.java
index 266598a19fa855c594b726baf3531fa94599228d..5fc5279a841b8f8053b0fc1845a93fcf99ef0382 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLogarithmicCalculator.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLogarithmicCalculator.java
@@ -93,18 +93,18 @@ public class AxisTickLogarithmicCalculator extends AxisTickCalculator {
       // System.out.println("i: " + i);
       // System.out.println("pow(10, i).doubleValue(): " + pow(10, i).doubleValue());
 
-      // using trhe .00000001 factor to dal with double value imprecision
+      // using the .00000001 factor to deal with double value imprecision
       for (double j = firstPosition; j <= Utils.pow(10, i) + .00000001; j = j + tickStep) {
 
         // System.out.println("j: " + j);
         // System.out.println(Math.log10(j) % 1);
 
-        if (j < minValue) {
+        if (j < minValue - tickStep * .2) {
           // System.out.println("continue");
           continue;
         }
 
-        if (j > maxValue) {
+        if (j > maxValue + tickStep * 1.2) {
           // System.out.println("break");
           break;
         }
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java
index c83b47ca0e3df4b5949ec9ea5c552c4cdc7ee44e..6a5d3f15585732d39123fe952f7142b3894f150e 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java
@@ -65,7 +65,7 @@ public class AxisTickNumericalCalculator extends AxisTickCalculator {
     BigDecimal firstPosition = BigDecimal.valueOf(getFirstPosition(gridStep.doubleValue()));
 
     // generate all tickLabels and tickLocations from the first to last position
-    for (BigDecimal tickPosition = firstPosition; tickPosition.compareTo(BigDecimal.valueOf(maxValue)) <= 0; tickPosition = tickPosition.add(gridStep)) {
+    for (BigDecimal tickPosition = firstPosition; tickPosition.compareTo(BigDecimal.valueOf(maxValue + gridStep.doubleValue() * 0.8)) <= 0; tickPosition = tickPosition.add(gridStep)) {
 
       tickLabels.add(numberFormatter.formatNumber(tickPosition.doubleValue()));
       // here we convert tickPosition finally to plot space, i.e. pixels