diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java
index d095f054247b1f13f0e44c7ea3d500a156d80a45..49bddd28c41e9e5aacb33913cd5fdc6c9cfe95cd 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Axis.java
@@ -154,8 +154,8 @@ public class Axis implements ChartPart {
       }
 
       /////////////////////////
-      int i = 1; // just twice through
-      double width = 80; // arbitrary, final width depends on Axis tick labels
+      int i = 1; // just twice through is all it takes
+      double width = 60; // arbitrary, final width depends on Axis tick labels
       double height = 0;
       do {
         // System.out.println("width: " + width);
@@ -291,10 +291,12 @@ public class Axis implements ChartPart {
       String sampleLabel = "";
       // find the longest String in all the labels
       for (int i = 0; i < axisTickCalculator.getTickLabels().size(); i++) {
+        // System.out.println("label: " + axisTickCalculator.getTickLabels().get(i));
         if (axisTickCalculator.getTickLabels().get(i) != null && axisTickCalculator.getTickLabels().get(i).length() > sampleLabel.length()) {
           sampleLabel = axisTickCalculator.getTickLabels().get(i);
         }
       }
+      // System.out.println("sampleLabel: " + sampleLabel);
 
       // get the height of the label including rotation
       TextLayout textLayout = new TextLayout(sampleLabel, getChartPainter().getStyleManager().getAxisTickLabelsFont(), new FontRenderContext(null, true, false));
@@ -326,7 +328,7 @@ public class Axis implements ChartPart {
       // System.out.println("XAxisHeightHint");
       // System.out.println("workingSpace: " + workingSpace);
       AxisTickCalculator axisTickCalculator = axisTick.getAxisTickCalculator(workingSpace);
-      String sampleLabel = " ";
+      String sampleLabel = "";
       // find the longest String in all the labels
       for (int i = 0; i < axisTickCalculator.getTickLabels().size(); i++) {
         if (axisTickCalculator.getTickLabels().get(i) != null && axisTickCalculator.getTickLabels().get(i).length() > sampleLabel.length()) {
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 f128202bd7f51d3fbabb56c77c0e230d27dbb2a4..08a0a7ce4e705f3ec51bf4cca3eef8999223e9bc 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
@@ -84,13 +84,13 @@ public class AxisTickDateCalculator extends AxisTickCalculator {
       // generate all tickLabels and tickLocations from the first to last position
       for (double value = firstPosition; value <= maxValue + 2 * gridStep; value = value + gridStep) {
 
-        if (value <= maxValue && value >= minValue) {
+        // if (value <= maxValue && value >= minValue) {
 
-          tickLabels.add(dateFormatter.formatDate(value, timeUnit));
-          // here we convert tickPosition finally to plot space, i.e. pixels
-          double tickLabelPosition = margin + ((value - minValue) / (maxValue - minValue) * tickSpace);
-          tickLocations.add(tickLabelPosition);
-        }
+        tickLabels.add(dateFormatter.formatDate(value, timeUnit));
+        // here we convert tickPosition finally to plot space, i.e. pixels
+        double tickLabelPosition = margin + ((value - minValue) / (maxValue - minValue) * tickSpace);
+        tickLocations.add(tickLabelPosition);
+        // }
       }
     } while (!willLabelsFitInTickSpaceHint(tickLabels, tickSpacingHint));
   }
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLabels.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLabels.java
index ebd5b079037f91d0867479a06091404625325485..21b85aae0bd36e829cafa56c61768194d193c5e6 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLabels.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickLabels.java
@@ -138,6 +138,7 @@ public class AxisTickLabels implements ChartPart {
         double tickLocation = axisTick.getTickLocations().get(i);
         double shiftedTickLocation = xOffset + tickLocation;
 
+        // discard null and out of bounds labels
         if (tickLabel != null && shiftedTickLocation > xOffset && shiftedTickLocation < xOffset + width) { // some are null for logarithmic axes
 
           FontRenderContext frc = g.getFontRenderContext();
@@ -183,6 +184,9 @@ public class AxisTickLabels implements ChartPart {
             maxTickLabelHeight = tickLabelBounds.getHeight();
           }
         }
+        // else {
+        // System.out.println("discarding: " + tickLabel);
+        // }
       }
 
       // bounds
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 79142c095385ee713909225efc88e4a62cfbcc87..d0ec0bea3abf8632b66b059ba457db90c064f43d 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
@@ -136,16 +136,16 @@ public class AxisTickNumericalCalculator extends AxisTickCalculator {
       // generate all tickLabels and tickLocations from the first to last position
       for (BigDecimal value = cleanedFirstPosition; value.compareTo(BigDecimal.valueOf(maxValue + 2 * cleanedGridStep.doubleValue())) < 0; value = value.add(cleanedGridStep)) {
 
-        if (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0 && value.compareTo(BigDecimal.valueOf(minValue)) >= 0) {
-          // System.out.println(value);
-          String tickLabel = numberFormatter.formatNumber(value, minValue, maxValue, axisDirection);
-          // System.out.println(tickLabel);
-          tickLabels.add(tickLabel);
-
-          // here we convert tickPosition finally to plot space, i.e. pixels
-          double tickLabelPosition = margin + ((value.doubleValue() - minValue) / (maxValue - minValue) * tickSpace);
-          tickLocations.add(tickLabelPosition);
-        }
+        // if (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0 && value.compareTo(BigDecimal.valueOf(minValue)) >= 0) {
+        // System.out.println(value);
+        String tickLabel = numberFormatter.formatNumber(value, minValue, maxValue, axisDirection);
+        // System.out.println(tickLabel);
+        tickLabels.add(tickLabel);
+
+        // here we convert tickPosition finally to plot space, i.e. pixels
+        double tickLabelPosition = margin + ((value.doubleValue() - minValue) / (maxValue - minValue) * tickSpace);
+        tickLocations.add(tickLabelPosition);
+        // }
       }
     } while (!willLabelsFitInTickSpaceHint(tickLabels, tickSpacingHint));