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 ce69b6b9e4a4f9c4b23bac17c3fd9d4c5c5911d9..45c335b6831701f0cd728bf4b5b03b9172a38c96 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
@@ -48,6 +48,7 @@ import com.xeiam.xchart.demo.charts.line.LineChart09;
 import com.xeiam.xchart.demo.charts.line.LineChart10;
 import com.xeiam.xchart.demo.charts.line.LineChart11;
 import com.xeiam.xchart.demo.charts.scatter.ScatterChart01;
+import com.xeiam.xchart.demo.charts.scatter.ScatterChart02;
 
 /**
  * Class containing all XChart example charts
@@ -173,6 +174,8 @@ public class XChartDemo extends JPanel implements TreeSelectionListener {
 
     chart = new DefaultMutableTreeNode(new ChartInfo("ScatterChart01 - Gaussian Blob", new ScatterChart01().getChart()));
     category.add(chart);
+    chart = new DefaultMutableTreeNode(new ChartInfo("ScatterChart02 - Logarithmic Data", new ScatterChart02().getChart()));
+    category.add(chart);
 
     // Area category
     category = new DefaultMutableTreeNode("Area Charts");
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/ExampleChart.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/ExampleChart.java
similarity index 96%
rename from xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/ExampleChart.java
rename to xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/ExampleChart.java
index cfe44b64d3c39d146d1924813ecb953b57a0f632..7e26d815c30c013154d185c1c48e129b36f9dac1 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/ExampleChart.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/ExampleChart.java
@@ -19,12 +19,10 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-package com.xeiam.xchart.demo.charts.line;
+package com.xeiam.xchart.demo.charts;
 
 import com.xeiam.xchart.Chart;
 
-/**
- */
 public interface ExampleChart {
 
   public Chart getChart();
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart01.java
index 7e36c715eb816c871aa39e8819b93abf3c8f5eb4..2176779ea6a888a654b2fb40bb618f9279dd7aa9 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart01.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/area/AreaChart01.java
@@ -18,7 +18,7 @@ package com.xeiam.xchart.demo.charts.area;
 import com.xeiam.xchart.Chart;
 import com.xeiam.xchart.ChartBuilder;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.demo.charts.line.ExampleChart;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 import com.xeiam.xchart.style.StyleManager.ChartType;
 import com.xeiam.xchart.style.StyleManager.LegendPosition;
 
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java
index 1b23ded02cf16108eb8adba6614eafa37a0fe839..24b32ea72ceeb27296fdabf91235352c37ce1cce 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/bar/BarChart01.java
@@ -24,7 +24,7 @@ package com.xeiam.xchart.demo.charts.bar;
 import com.xeiam.xchart.Chart;
 import com.xeiam.xchart.ChartBuilder;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.demo.charts.line.ExampleChart;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 import com.xeiam.xchart.style.StyleManager.ChartType;
 import com.xeiam.xchart.style.StyleManager.LegendPosition;
 
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart01.java
index d0194a968fb80a6f6a5372a748e1fd501e10133b..d100041dc9859e805478babb68962f208596354d 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart01.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart01.java
@@ -24,9 +24,9 @@ import java.util.Date;
 import java.util.Random;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.demo.charts.line.ExampleChart;
-import com.xeiam.xchart.style.Series;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 
 /**
  * Millisecond scale
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart02.java
index fd2db2f19d1cfc7b07ecb0cbada50b9aa4de8e7d..00d1e95620094a5c6da2af706bd110a274388145 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart02.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart02.java
@@ -24,9 +24,9 @@ import java.util.Date;
 import java.util.Random;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.demo.charts.line.ExampleChart;
-import com.xeiam.xchart.style.Series;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 
 /**
  * Second scale
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 157d8215756dacdb7ab78ba421be69c540e4340c..b13aaacc8da1671fbcbf835b0d6270f0114ea040 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
@@ -24,9 +24,9 @@ import java.util.Date;
 import java.util.Random;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.demo.charts.line.ExampleChart;
-import com.xeiam.xchart.style.Series;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 
 /**
  * Minute scale
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java
index cf0ae7701bbad1b416fc92fb36280e9042156497..bb3e9901a49271836af0746802ebfd674d92e0ef 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java
@@ -24,9 +24,9 @@ import java.util.Date;
 import java.util.Random;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.demo.charts.line.ExampleChart;
-import com.xeiam.xchart.style.Series;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 
 /**
  * Hour scale
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java
index b71be652c0d5cfc8b93b122d7ef5fb8e924d80e2..7277b3b8447256f7119d4208af02e383788aaac3 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java
@@ -24,9 +24,9 @@ import java.util.Date;
 import java.util.Random;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.demo.charts.line.ExampleChart;
-import com.xeiam.xchart.style.Series;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 
 /**
  * Day scale
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart06.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart06.java
index 09d66139a9ddd84b915d859de284a75b5a60a8bf..c574840c46a8e9febe8a200f7350e79908f71203 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart06.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart06.java
@@ -24,9 +24,9 @@ import java.util.Date;
 import java.util.Random;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.demo.charts.line.ExampleChart;
-import com.xeiam.xchart.style.Series;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 
 /**
  * Month scale
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart07.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart07.java
index 0a7b999b2efd9219d01ab066fc5b19a097c87a0b..305fd2f0f3b8d6b5dc69a7697cd4317eb7a3b338 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart07.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart07.java
@@ -24,9 +24,9 @@ import java.util.Date;
 import java.util.Random;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.demo.charts.line.ExampleChart;
-import com.xeiam.xchart.style.Series;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 
 /**
  * Year scale
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java
index 2291ad4a0fba5332a487ef776dd9b8794591a678..2c40b189987e4f112096ee33e1f51a48b7e404e2 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart01.java
@@ -19,8 +19,9 @@ import java.util.Arrays;
 import java.util.Collection;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.style.Series;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 import com.xeiam.xchart.style.SeriesMarker;
 
 /**
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java
index e1b558d8317589075dd0283424e1d7853b4b4932..19c78112588c0ed61e90c8346f326f7a0aecd074 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java
@@ -19,8 +19,9 @@ import java.util.ArrayList;
 import java.util.List;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.style.Series;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 import com.xeiam.xchart.style.SeriesColor;
 import com.xeiam.xchart.style.SeriesLineStyle;
 import com.xeiam.xchart.style.SeriesMarker;
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart03.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart03.java
index 3404c6e8accdbabadb749288b47d99ae68bb2a9e..d2e7afbb1af9c36ba54ee980b47da82c6de01149 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart03.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart03.java
@@ -20,6 +20,7 @@ import java.util.Collection;
 
 import com.xeiam.xchart.Chart;
 import com.xeiam.xchart.SwingWrapper;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 
 /**
  * Multiple curves on one Chart
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart05.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart05.java
index ca77de2eee0816203fd1b8e22b9385099777fd19..b8abf2220014144cfa05b035655159479dcc8055 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart05.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart05.java
@@ -18,6 +18,7 @@ package com.xeiam.xchart.demo.charts.line;
 import com.xeiam.xchart.Chart;
 import com.xeiam.xchart.ChartBuilder;
 import com.xeiam.xchart.SwingWrapper;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 import com.xeiam.xchart.style.theme.GGPlot2Theme;
 
 /**
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart06.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart06.java
index de073739fb25d4bbfcd663adfd2570c1be709ead..a49c0b171065ceec3e3314c51d34cd9975762793 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart06.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart06.java
@@ -17,6 +17,7 @@ package com.xeiam.xchart.demo.charts.line;
 
 import com.xeiam.xchart.Chart;
 import com.xeiam.xchart.SwingWrapper;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 
 /**
  * Single point
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart07.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart07.java
index 1e54855ecf6e4aca3612be2e7fc87255d1d3aa82..e1c397588253a50fb72498320d155ed103fa4b76 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart07.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart07.java
@@ -20,6 +20,7 @@ import java.util.Collection;
 
 import com.xeiam.xchart.Chart;
 import com.xeiam.xchart.SwingWrapper;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 
 /**
  * Longs as X-Axis data
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart08.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart08.java
index 1d025112ec12e40ec59a7df5848e222cf3ed3d13..0191eee1d2012406d49d72a4f0d02dc3c5f5839c 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart08.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart08.java
@@ -19,8 +19,9 @@ import java.util.ArrayList;
 import java.util.Collection;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.style.Series;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 import com.xeiam.xchart.style.SeriesColor;
 import com.xeiam.xchart.style.SeriesLineStyle;
 import com.xeiam.xchart.style.SeriesMarker;
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart09.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart09.java
index c91f5353435b41f77f96c5285b9aecc65df72b12..701ee74e84118f9168c22b1df826665b4c9f3ea7 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart09.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart09.java
@@ -26,9 +26,10 @@ import java.util.Date;
 import java.util.Locale;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 import com.xeiam.xchart.style.ChartColor;
-import com.xeiam.xchart.style.Series;
 import com.xeiam.xchart.style.SeriesColor;
 import com.xeiam.xchart.style.SeriesLineStyle;
 import com.xeiam.xchart.style.SeriesMarker;
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart10.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart10.java
index 2b56b2d3bb005c7b08f007d548ba884e8b3ec169..479af8b06b6f3e24f562c98e0ed944f247a52f81 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart10.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart10.java
@@ -16,8 +16,9 @@
 package com.xeiam.xchart.demo.charts.line;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.style.Series;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 import com.xeiam.xchart.style.SeriesColor;
 import com.xeiam.xchart.style.SeriesLineStyle;
 import com.xeiam.xchart.style.SeriesMarker;
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart11.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart11.java
index e42a0195f479e848d07a05f6d2b37f8c4f00fb47..f2b3ba564d831ede9bce125855d265f75ea15cf0 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart11.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart11.java
@@ -18,6 +18,7 @@ package com.xeiam.xchart.demo.charts.line;
 import com.xeiam.xchart.Chart;
 import com.xeiam.xchart.ChartBuilder;
 import com.xeiam.xchart.SwingWrapper;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 
 /**
  * Using ChartBuilder to Make a Chart
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart01.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart01.java
index 9b8dadf18e13e1257bc45a7e7cfa288ca6fd31e6..3883fe6aaee9c2b8d88c10d46b3b4db2aed0429c 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart01.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart01.java
@@ -21,7 +21,7 @@ import java.util.Random;
 
 import com.xeiam.xchart.Chart;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.demo.charts.line.ExampleChart;
+import com.xeiam.xchart.demo.charts.ExampleChart;
 import com.xeiam.xchart.style.StyleManager.ChartType;
 
 /**
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
new file mode 100644
index 0000000000000000000000000000000000000000..1dd235069b7f90f9d7d7e588f40f89a8fe5a0885
--- /dev/null
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java
@@ -0,0 +1,76 @@
+/**
+ * Copyright 2011-2013 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.demo.charts.scatter;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.SwingWrapper;
+import com.xeiam.xchart.demo.charts.ExampleChart;
+import com.xeiam.xchart.style.StyleManager.ChartType;
+import com.xeiam.xchart.style.StyleManager.LegendPosition;
+
+/**
+ * Logarithmic Data
+ * <p>
+ * Demonstrates the following:
+ * <ul>
+ * <li>Scatter chart
+ * <li>Logarithmic X-Axis
+ * <li>Place legend at Inside-NW position
+ * 
+ * @author timmolter
+ */
+public class ScatterChart02 implements ExampleChart {
+
+  public static void main(String[] args) {
+
+    ExampleChart exampleChart = new ScatterChart02();
+    Chart chart = exampleChart.getChart();
+    new SwingWrapper(chart).displayChart();
+  }
+
+  @Override
+  public Chart getChart() {
+
+    List<Number> xData = new ArrayList<Number>();
+    List<Number> yData = new ArrayList<Number>();
+    Random random = new Random();
+    int size = 400;
+    for (int i = 0; i < size; i++) {
+      double nextRandom = random.nextDouble();
+      xData.add(Math.pow(10, nextRandom * 10));
+      yData.add(nextRandom + random.nextDouble());
+    }
+
+    // Create Chart
+    Chart chart = new Chart(800, 600);
+    chart.setChartTitle("Logarithmic Data");
+    chart.getStyleManager().setChartType(ChartType.Scatter);
+    chart.getStyleManager().setXAxisLogarithmic(true);
+
+    // Customize Chart
+    chart.getStyleManager().setLegendPosition(LegendPosition.InsideNW);
+
+    // Series
+    chart.addSeries("logarithmic data", xData, yData);
+
+    return chart;
+  }
+
+}
diff --git a/xchart/src/main/java/com/xeiam/xchart/Chart.java b/xchart/src/main/java/com/xeiam/xchart/Chart.java
index 17e51c2934f518b4fa89cb38a6a4ecf7d244eab1..ac5fa6df43b5118322d319c9ddafd919c86d0795 100644
--- a/xchart/src/main/java/com/xeiam/xchart/Chart.java
+++ b/xchart/src/main/java/com/xeiam/xchart/Chart.java
@@ -25,7 +25,6 @@ import com.xeiam.xchart.internal.chartpart.AxisPair;
 import com.xeiam.xchart.internal.chartpart.ChartTitle;
 import com.xeiam.xchart.internal.chartpart.Legend;
 import com.xeiam.xchart.internal.chartpart.Plot;
-import com.xeiam.xchart.style.Series;
 import com.xeiam.xchart.style.StyleManager;
 import com.xeiam.xchart.style.theme.Theme;
 
diff --git a/xchart/src/main/java/com/xeiam/xchart/QuickChart.java b/xchart/src/main/java/com/xeiam/xchart/QuickChart.java
index 2d4249b0b29576b3fbef74b03351ae40b56b0013..7450bc0c4bc1b259530cffee561a52c7086bbdf3 100644
--- a/xchart/src/main/java/com/xeiam/xchart/QuickChart.java
+++ b/xchart/src/main/java/com/xeiam/xchart/QuickChart.java
@@ -17,7 +17,6 @@ package com.xeiam.xchart;
 
 import java.util.Collection;
 
-import com.xeiam.xchart.style.Series;
 import com.xeiam.xchart.style.SeriesMarker;
 
 /**
diff --git a/xchart/src/main/java/com/xeiam/xchart/style/Series.java b/xchart/src/main/java/com/xeiam/xchart/Series.java
similarity index 96%
rename from xchart/src/main/java/com/xeiam/xchart/style/Series.java
rename to xchart/src/main/java/com/xeiam/xchart/Series.java
index e701cd7d8d087f8917d0ca6a465a74adaf9fc3ba..638ee8ad194158b7599644047adcb7f35c9fd727 100644
--- a/xchart/src/main/java/com/xeiam/xchart/style/Series.java
+++ b/xchart/src/main/java/com/xeiam/xchart/Series.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.xeiam.xchart.style;
+package com.xeiam.xchart;
 
 import java.awt.BasicStroke;
 import java.awt.Color;
@@ -24,6 +24,10 @@ import java.util.Iterator;
 
 import com.xeiam.xchart.internal.chartpart.Axis.AxisType;
 import com.xeiam.xchart.internal.markers.Marker;
+import com.xeiam.xchart.style.SeriesColor;
+import com.xeiam.xchart.style.SeriesColorMarkerLineStyle;
+import com.xeiam.xchart.style.SeriesLineStyle;
+import com.xeiam.xchart.style.SeriesMarker;
 
 /**
  * A Series containing X and Y data to be plotted on a Chart
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 668b6559542d05955f1c228bc733df1df472bace..7d7e08f2cc1543e16794177c298071897575d704 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
@@ -25,8 +25,8 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.internal.chartpart.Axis.AxisType;
-import com.xeiam.xchart.style.Series;
 import com.xeiam.xchart.style.SeriesColorMarkerLineStyleCycler;
 
 /**
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java
index 3274a34292bbb4f7d86198a511c9110116c7c1dc..c0a96ea141ff911731c58d210abe782ec5740b8e 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTick.java
@@ -23,6 +23,7 @@ import com.xeiam.xchart.Chart;
 import com.xeiam.xchart.internal.chartpart.Axis.AxisType;
 import com.xeiam.xchart.internal.chartpart.axistickcalculator.AxisTickCalculator;
 import com.xeiam.xchart.internal.chartpart.axistickcalculator.DateAxisTickCalculator;
+import com.xeiam.xchart.internal.chartpart.axistickcalculator.LogarithmicAxisTickCalculator;
 import com.xeiam.xchart.internal.chartpart.axistickcalculator.NumberAxisTickCalculator;
 
 /**
@@ -81,7 +82,15 @@ public class AxisTick implements ChartPart {
       // System.out.println("workingspace= " + workingSpace);
     }
 
-    if (axis.getAxisType() == AxisType.Number) {
+    if (axis.getDirection() == Axis.Direction.X && getChart().getStyleManager().isXAxisLogarithmic() && axis.getAxisType() != AxisType.Date) {
+
+      gridStep = new LogarithmicAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart().getStyleManager());
+
+    } else if (axis.getDirection() == Axis.Direction.Y && getChart().getStyleManager().isYAxisLogarithmic() && axis.getAxisType() != AxisType.Date) {
+
+      gridStep = new LogarithmicAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart().getStyleManager());
+
+    } else if (axis.getAxisType() == AxisType.Number) {
 
       gridStep = new NumberAxisTickCalculator(axis.getDirection(), workingSpace, axis.getMin(), axis.getMax(), getChart().getStyleManager());
 
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 2cbabd21c5129574478ddd9cd9fe51a2e1d1e045..c40585e819a95031f701c22843a556de42a60c09 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
@@ -95,12 +95,14 @@ public class AxisTickLabels implements ChartPart {
         int tickLocation = axisTick.getTickLocations().get(i);
 
         FontRenderContext frc = g.getFontRenderContext();
-        TextLayout layout = new TextLayout(tickLabel, getChart().getStyleManager().getAxisTickLabelsFont(), frc);
-        Rectangle tickLabelBounds = layout.getPixelBounds(null, 0, 0);
-        layout.draw(g, (int) (xOffset + tickLocation - tickLabelBounds.getWidth() / 2.0), yOffset);
-
-        if (tickLabelBounds.getHeight() > maxTickLabelHeight) {
-          maxTickLabelHeight = (int) tickLabelBounds.getHeight();
+        if (tickLabel != null) { // some are null for logarithmic axes
+          TextLayout layout = new TextLayout(tickLabel, getChart().getStyleManager().getAxisTickLabelsFont(), frc);
+          Rectangle tickLabelBounds = layout.getPixelBounds(null, 0, 0);
+          layout.draw(g, (int) (xOffset + tickLocation - tickLabelBounds.getWidth() / 2.0), yOffset);
+
+          if (tickLabelBounds.getHeight() > maxTickLabelHeight) {
+            maxTickLabelHeight = (int) tickLabelBounds.getHeight();
+          }
         }
       }
 
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Legend.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Legend.java
index 70c99f172a5b646e80f6b6012418ebadcf878e97..2a1dc9242798c160c65480f3636f7e074f5c8699 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Legend.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/Legend.java
@@ -22,8 +22,8 @@ import java.awt.font.TextLayout;
 import java.util.Map;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.internal.markers.Marker;
-import com.xeiam.xchart.style.Series;
 
 /**
  * @author timmolter
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContent.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContent.java
index 86f9aa01c99d5e77c59f38498dbcb66ae09574bb..425a84d42a5afb1602166d82651017d3a0ad9638 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContent.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContent.java
@@ -26,8 +26,8 @@ import java.util.Iterator;
 import java.util.Map;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.internal.chartpart.Axis.AxisType;
-import com.xeiam.xchart.style.Series;
 import com.xeiam.xchart.style.StyleManager.ChartType;
 
 /**
@@ -78,9 +78,17 @@ public class PlotContent implements ChartPart {
       Collection<?> xData = series.getxData();
       BigDecimal xMin = getChart().getAxisPair().getxAxis().getMin();
       BigDecimal xMax = getChart().getAxisPair().getxAxis().getMax();
+      if (getChart().getStyleManager().isXAxisLogarithmic()) {
+        xMin = new BigDecimal(Math.log10(xMin.doubleValue()));
+        xMax = new BigDecimal(Math.log10(xMax.doubleValue()));
+      }
       Collection<Number> yData = series.getyData();
       BigDecimal yMin = getChart().getAxisPair().getyAxis().getMin();
       BigDecimal yMax = getChart().getAxisPair().getyAxis().getMax();
+      if (getChart().getStyleManager().isYAxisLogarithmic()) {
+        yMin = new BigDecimal(Math.log10(yMin.doubleValue()));
+        yMax = new BigDecimal(Math.log10(yMax.doubleValue()));
+      }
       Collection<Number> errorBars = series.getErrorBars();
 
       int previousX = Integer.MIN_VALUE;
@@ -103,7 +111,16 @@ public class PlotContent implements ChartPart {
           // System.out.println(x);
         }
 
+        if (getChart().getStyleManager().isXAxisLogarithmic()) {
+          x = new BigDecimal(Math.log10(x.doubleValue()));
+        }
+
         BigDecimal y = new BigDecimal(yItr.next().doubleValue());
+
+        if (getChart().getStyleManager().isYAxisLogarithmic()) {
+          y = new BigDecimal(Math.log10(y.doubleValue()));
+        }
+
         // System.out.println(y);
         double eb = 0.0;
         if (errorBars != null) {
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java
index efacecbd99e599ff71c5e78149fd2065737e906d..2dc8b452fc757c3c9bdffd86b40cb3a66d601226 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/AxisTickCalculator.java
@@ -27,7 +27,6 @@ import java.text.NumberFormat;
 import java.util.LinkedList;
 import java.util.List;
 
-import com.xeiam.xchart.internal.chartpart.Axis.AxisType;
 import com.xeiam.xchart.internal.chartpart.Axis.Direction;
 import com.xeiam.xchart.style.StyleManager;
 
@@ -58,6 +57,15 @@ public abstract class AxisTickCalculator {
 
   protected final StyleManager styleManager;
 
+  /**
+   * Constructor
+   * 
+   * @param axisDirection
+   * @param workingSpace
+   * @param minValue
+   * @param maxValue
+   * @param styleManager
+   */
   public AxisTickCalculator(Direction axisDirection, int workingSpace, BigDecimal minValue, BigDecimal maxValue, StyleManager styleManager) {
 
     this.axisDirection = axisDirection;
@@ -65,63 +73,15 @@ public abstract class AxisTickCalculator {
     this.minValue = minValue;
     this.maxValue = maxValue;
     this.styleManager = styleManager;
-
   }
 
-  BigDecimal getGridStepDecimal(double gridStepHint) {
-
-    // gridStepHint --> significand * 10 ** exponent
-    // e.g. 724.1 --> 7.241 * 10 ** 2
-    double significand = gridStepHint;
-    int exponent = 0;
-    if (significand == 0) {
-      exponent = 1;
-    } else if (significand < 1) {
-      while (significand < 1) {
-        significand *= 10.0;
-        exponent--;
-      }
-    } else {
-      while (significand >= 10) {
-        significand /= 10.0;
-        exponent++;
-      }
-    }
+  BigDecimal pow(double base, int exponent) {
 
-    // calculate the grid step with hint.
-    BigDecimal gridStep;
-    if (significand > 7.5) {
-      // gridStep = 10.0 * 10 ** exponent
-      gridStep = BigDecimal.TEN.multiply(pow(10, exponent));
-    } else if (significand > 3.5) {
-      // gridStep = 5.0 * 10 ** exponent
-      gridStep = new BigDecimal(new Double(5).toString()).multiply(pow(10, exponent));
-    } else if (significand > 1.5) {
-      // gridStep = 2.0 * 10 ** exponent
-      gridStep = new BigDecimal(new Double(2).toString()).multiply(pow(10, exponent));
-    } else {
-      // gridStep = 1.0 * 10 ** exponent
-      gridStep = pow(10, exponent);
-    }
-    return gridStep;
-  }
-
-  /**
-   * Calculates the value of the first argument raised to the power of the second argument.
-   * 
-   * @param base the base
-   * @param exponent the exponent
-   * @return the value <tt>a<sup>b</sup></tt> in <tt>BigDecimal</tt>
-   */
-  private BigDecimal pow(double base, int exponent) {
-
-    BigDecimal value;
     if (exponent > 0) {
-      value = new BigDecimal(new Double(base).toString()).pow(exponent);
+      return new BigDecimal(base).pow(exponent);
     } else {
-      value = BigDecimal.ONE.divide(new BigDecimal(new Double(base).toString()).pow(-exponent));
+      return BigDecimal.ONE.divide(new BigDecimal(base).pow(-exponent));
     }
-    return value;
   }
 
   /**
@@ -152,6 +112,17 @@ public abstract class AxisTickCalculator {
 
   }
 
+  BigDecimal getFirstPosition(final BigDecimal min, BigDecimal gridStep) {
+
+    BigDecimal firstPosition;
+    if (min.remainder(gridStep).doubleValue() <= 0.0) {
+      firstPosition = min.subtract(min.remainder(gridStep));
+    } else {
+      firstPosition = min.subtract(min.remainder(gridStep)).add(gridStep);
+    }
+    return firstPosition;
+  }
+
   public List<Integer> getTickLocations() {
 
     return tickLocations;
@@ -162,10 +133,8 @@ public abstract class AxisTickCalculator {
     return tickLabels;
   }
 
-  public abstract BigDecimal getGridStep(int tickSpace);
-
-  public abstract BigDecimal getFirstPosition(BigDecimal minValue, BigDecimal gridStep);
-
-  public abstract AxisType getAxisType();
+  // public abstract BigDecimal getGridStep(int tickSpace);
+  //
+  // public abstract BigDecimal getFirstPosition(BigDecimal minValue, BigDecimal gridStep);
 
 }
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java
index eb51da94b5fd65282fdd7108ede94d5b100bab81..0397b8119747cc10d273b59fd4c06042074ee1a2 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/DateAxisTickCalculator.java
@@ -28,7 +28,6 @@ import java.util.Map.Entry;
 import java.util.TreeMap;
 import java.util.concurrent.TimeUnit;
 
-import com.xeiam.xchart.internal.chartpart.Axis.AxisType;
 import com.xeiam.xchart.internal.chartpart.Axis.Direction;
 import com.xeiam.xchart.internal.chartpart.AxisPair;
 import com.xeiam.xchart.style.StyleManager;
@@ -109,8 +108,7 @@ public class DateAxisTickCalculator extends AxisTickCalculator {
    * @param tickSpace in plot space
    * @return
    */
-  @Override
-  public BigDecimal getGridStep(int tickSpace) {
+  private BigDecimal getGridStep(int tickSpace) {
 
     // the span of the data
     long span = Math.abs(maxValue.subtract(minValue).longValue()); // in data space
@@ -130,18 +128,6 @@ public class DateAxisTickCalculator extends AxisTickCalculator {
     return gridStep;
   }
 
-  @Override
-  public BigDecimal getFirstPosition(final BigDecimal min, BigDecimal gridStep) {
-
-    BigDecimal firstPosition;
-    if (min.remainder(gridStep).doubleValue() <= 0.0) {
-      firstPosition = min.subtract(min.remainder(gridStep));
-    } else {
-      firstPosition = min.subtract(min.remainder(gridStep)).add(gridStep);
-    }
-    return firstPosition;
-  }
-
   private long getTimeUnit(long gridStepHint) {
 
     for (Entry<Long, int[]> entry : validTickStepsMap.entrySet()) {
@@ -193,10 +179,4 @@ public class DateAxisTickCalculator extends AxisTickCalculator {
     return simpleDateformat.format(value.longValueExact());
   }
 
-  @Override
-  public AxisType getAxisType() {
-
-    return AxisType.Date;
-  }
-
 }
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/LogarithmicAxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/LogarithmicAxisTickCalculator.java
index 0ea90c666c66ae05b0dd3406fdf7fd5cb31b8041..92aafe7e9c2f9d4cdb816b62f5abe0be329221fa 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/LogarithmicAxisTickCalculator.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/LogarithmicAxisTickCalculator.java
@@ -23,12 +23,12 @@ package com.xeiam.xchart.internal.chartpart.axistickcalculator;
 
 import java.math.BigDecimal;
 
-import com.xeiam.xchart.internal.chartpart.Axis.AxisType;
 import com.xeiam.xchart.internal.chartpart.Axis.Direction;
+import com.xeiam.xchart.internal.chartpart.AxisPair;
 import com.xeiam.xchart.style.StyleManager;
 
 /**
- * This class encapsulates the logic to generate the axis tick mark and axis tick label data for rendering the axis ticks for decimal axes
+ * This class encapsulates the logic to generate the axis tick mark and axis tick label data for rendering the axis ticks for logarithmic axes
  * 
  * @author timmolter
  */
@@ -46,98 +46,56 @@ public class LogarithmicAxisTickCalculator extends AxisTickCalculator {
   public LogarithmicAxisTickCalculator(Direction axisDirection, int workingSpace, BigDecimal minValue, BigDecimal maxValue, StyleManager styleManager) {
 
     super(axisDirection, workingSpace, minValue, maxValue, styleManager);
+    calculate();
   }
 
-  /**
-   * Determine the grid step for the data set given the space in pixels allocated for the axis
-   * 
-   * @param tickSpace in plot space
-   * @return
-   */
-  @Override
-  public BigDecimal getGridStep(int tickSpace) {
+  private void calculate() {
 
-    // the span of the data
-    double span = Math.abs(maxValue.subtract(minValue).doubleValue()); // in data space
+    // a check if all axis data are the exact same values
+    if (minValue == maxValue) {
+      tickLabels.add(formatNumber(maxValue));
+      tickLocations.add((int) (workingSpace / 2.0));
+      return;
+    }
 
-    int tickMarkSpaceHint = (axisDirection == Direction.X ? DEFAULT_TICK_MARK_STEP_HINT_X : DEFAULT_TICK_MARK_STEP_HINT_Y);
+    // tick space - a percentage of the working space available for ticks, i.e. 95%
+    int tickSpace = AxisPair.getTickSpace(workingSpace); // in plot space
 
-    // for very short plots, squeeze some more ticks in than normal
-    if (axisDirection == Direction.Y && tickSpace < 160) {
-      tickMarkSpaceHint = 25;
-    }
+    // where the tick should begin in the working space in pixels
+    int margin = AxisPair.getTickStartOffset(workingSpace, tickSpace); // in plot space BigDecimal gridStep = getGridStepForDecimal(tickSpace);
 
-    double gridStepHint = span / tickSpace * tickMarkSpaceHint;
-
-    // gridStepHint --> significand * 10 ** exponent
-    // e.g. 724.1 --> 7.241 * 10 ** 2
-    double significand = gridStepHint;
-    int exponent = 0;
-    if (significand == 0) {
-      exponent = 1;
-    } else if (significand < 1) {
-      while (significand < 1) {
-        significand *= 10.0;
-        exponent--;
-      }
-    } else {
-      while (significand >= 10) {
-        significand /= 10.0;
-        exponent++;
-      }
-    }
+    int logMin = (int) Math.floor(Math.log10(minValue.doubleValue()));
+    int logMax = (int) Math.ceil(Math.log10(maxValue.doubleValue()));
 
-    // calculate the grid step with hint.
-    BigDecimal gridStep;
-    if (significand > 7.5) {
-      // gridStep = 10.0 * 10 ** exponent
-      gridStep = BigDecimal.TEN.multiply(pow(10, exponent));
-    } else if (significand > 3.5) {
-      // gridStep = 5.0 * 10 ** exponent
-      gridStep = new BigDecimal(new Double(5).toString()).multiply(pow(10, exponent));
-    } else if (significand > 1.5) {
-      // gridStep = 2.0 * 10 ** exponent
-      gridStep = new BigDecimal(new Double(2).toString()).multiply(pow(10, exponent));
-    } else {
-      // gridStep = 1.0 * 10 ** exponent
-      gridStep = pow(10, exponent);
-    }
-    return gridStep;
-  }
+    final BigDecimal min = new BigDecimal(minValue.doubleValue());
+    BigDecimal tickStep = pow(10, logMin - 1);
 
-  /**
-   * Calculates the value of the first argument raised to the power of the second argument.
-   * 
-   * @param base the base
-   * @param exponent the exponent
-   * @return the value <tt>a<sup>b</sup></tt> in <tt>BigDecimal</tt>
-   */
-  private BigDecimal pow(double base, int exponent) {
+    BigDecimal firstPosition = getFirstPosition(minValue, tickStep);
 
-    BigDecimal value;
-    if (exponent > 0) {
-      value = new BigDecimal(new Double(base).toString()).pow(exponent);
-    } else {
-      value = BigDecimal.ONE.divide(new BigDecimal(new Double(base).toString()).pow(-exponent));
-    }
-    return value;
-  }
+    for (int i = logMin; i <= logMax; i++) { // for each decade
 
-  @Override
-  public BigDecimal getFirstPosition(final BigDecimal min, BigDecimal gridStep) {
+      for (BigDecimal j = firstPosition; j.doubleValue() <= pow(10, i).doubleValue(); j = j.add(tickStep)) {
 
-    BigDecimal firstPosition;
-    if (min.remainder(gridStep).doubleValue() <= 0.0) {
-      firstPosition = min.subtract(min.remainder(gridStep));
-    } else {
-      firstPosition = min.subtract(min.remainder(gridStep)).add(gridStep);
-    }
-    return firstPosition;
-  }
+        // System.out.println(Math.log10(j.doubleValue()) % 1);
+
+        if (j.doubleValue() > maxValue.doubleValue()) {
+          break;
+        }
 
-  @Override
-  public AxisType getAxisType() {
+        // only add labels for the decades
+        if (Math.log10(j.doubleValue()) % 1 == 0.0) {
+          tickLabels.add(formatNumber(j));
+        } else {
+          tickLabels.add(null);
+        }
 
-    return AxisType.Number;
+        // add all the tick marks though
+        int tickLabelPosition = (int) (margin + (Math.log10(j.doubleValue()) - Math.log10(min.doubleValue())) / (Math.log10(maxValue.doubleValue()) - Math.log10(min.doubleValue())) * tickSpace);
+        tickLocations.add(tickLabelPosition);
+      }
+      tickStep = tickStep.multiply(pow(10, 1));
+      firstPosition = tickStep.add(pow(10, i));
+    }
   }
+
 }
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/NumberAxisTickCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/NumberAxisTickCalculator.java
index 7f286d4d4364a03b067c73c0c1767811cb8b6fec..55540bc0805276968048e0e754067c904b240718 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/NumberAxisTickCalculator.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/axistickcalculator/NumberAxisTickCalculator.java
@@ -23,7 +23,6 @@ package com.xeiam.xchart.internal.chartpart.axistickcalculator;
 
 import java.math.BigDecimal;
 
-import com.xeiam.xchart.internal.chartpart.Axis.AxisType;
 import com.xeiam.xchart.internal.chartpart.Axis.Direction;
 import com.xeiam.xchart.internal.chartpart.AxisPair;
 import com.xeiam.xchart.style.StyleManager;
@@ -84,8 +83,7 @@ public class NumberAxisTickCalculator extends AxisTickCalculator {
    * @param tickSpace in plot space
    * @return
    */
-  @Override
-  public BigDecimal getGridStep(int tickSpace) {
+  private BigDecimal getGridStep(int tickSpace) {
 
     // the span of the data
     double span = Math.abs(maxValue.subtract(minValue).doubleValue()); // in data space
@@ -135,40 +133,4 @@ public class NumberAxisTickCalculator extends AxisTickCalculator {
     return gridStep;
   }
 
-  /**
-   * Calculates the value of the first argument raised to the power of the second argument.
-   * 
-   * @param base the base
-   * @param exponent the exponent
-   * @return the value <tt>a<sup>b</sup></tt> in <tt>BigDecimal</tt>
-   */
-  private BigDecimal pow(double base, int exponent) {
-
-    BigDecimal value;
-    if (exponent > 0) {
-      value = new BigDecimal(new Double(base).toString()).pow(exponent);
-    } else {
-      value = BigDecimal.ONE.divide(new BigDecimal(new Double(base).toString()).pow(-exponent));
-    }
-    return value;
-  }
-
-  @Override
-  public BigDecimal getFirstPosition(final BigDecimal min, BigDecimal gridStep) {
-
-    BigDecimal firstPosition;
-    if (min.remainder(gridStep).doubleValue() <= 0.0) {
-      firstPosition = min.subtract(min.remainder(gridStep));
-    } else {
-      firstPosition = min.subtract(min.remainder(gridStep)).add(gridStep);
-    }
-    return firstPosition;
-  }
-
-  @Override
-  public AxisType getAxisType() {
-
-    return AxisType.Number;
-  }
-
 }
diff --git a/xchart/src/main/java/com/xeiam/xchart/style/SeriesLineStyle.java b/xchart/src/main/java/com/xeiam/xchart/style/SeriesLineStyle.java
index 060ef115e4d9e48a22cf71a3ab109beeaa12e360..f8a01980e7ba965a53525b27dfeb64a2103d99a1 100644
--- a/xchart/src/main/java/com/xeiam/xchart/style/SeriesLineStyle.java
+++ b/xchart/src/main/java/com/xeiam/xchart/style/SeriesLineStyle.java
@@ -83,7 +83,7 @@ public enum SeriesLineStyle {
    * @param seriesMarker
    * @return an AWT Stroke
    */
-  protected static BasicStroke getBasicStroke(SeriesLineStyle seriesMarker) {
+  public static BasicStroke getBasicStroke(SeriesLineStyle seriesMarker) {
 
     return seriesMarker.basicStroke;
   }
diff --git a/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java b/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java
index 00507e5feb118a46107ba9dba9ae426e981168ad..b840eff4cc032eb302926ade8de6674bb62c40d6 100644
--- a/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java
+++ b/xchart/src/main/java/com/xeiam/xchart/style/StyleManager.java
@@ -84,6 +84,8 @@ public class StyleManager {
   private boolean isAxisTicksLineVisible;
   private int plotPadding;
   private int axisTitlePadding;
+  private boolean isXAxisLogarithmic;
+  private boolean isYAxisLogarithmic;
 
   // Chart Plot Area ///////////////////////////////
   private boolean isPlotGridLinesVisible;
@@ -149,6 +151,8 @@ public class StyleManager {
     isAxisTicksLineVisible = theme.isAxisTicksLineVisible();
     plotPadding = theme.getPlotPadding();
     axisTitlePadding = theme.getAxisTitlePadding();
+    isXAxisLogarithmic = false;
+    isYAxisLogarithmic = false;
 
     // Chart Plot Area ///////////////////////////////
     isPlotGridLinesVisible = theme.isPlotGridLinesVisible();
@@ -649,6 +653,36 @@ public class StyleManager {
     return axisTitlePadding;
   }
 
+  /**
+   * sets the X-Axis to be rendered with a logarithmic scale or not
+   * 
+   * @param isXAxisLogarithmic
+   */
+  public void setXAxisLogarithmic(boolean isXAxisLogarithmic) {
+
+    this.isXAxisLogarithmic = isXAxisLogarithmic;
+  }
+
+  public boolean isXAxisLogarithmic() {
+
+    return isXAxisLogarithmic;
+  }
+
+  /**
+   * sets the Y-Axis to be rendered with a logarithmic scale or not
+   * 
+   * @param isYAxisLogarithmic
+   */
+  public void setYAxisLogarithmic(boolean isYAxisLogarithmic) {
+
+    this.isYAxisLogarithmic = isYAxisLogarithmic;
+  }
+
+  public boolean isYAxisLogarithmic() {
+
+    return isYAxisLogarithmic;
+  }
+
   // Chart Plot Area ///////////////////////////////
 
   /**
diff --git a/xchart/src/test/java/com/xeiam/xchart/chart/Example2.java b/xchart/src/test/java/com/xeiam/xchart/chart/Example2.java
index 2a8f4b2598d061fc856275062ae33ed4ed5a7865..7561f5b4f8200479a9af86ea4a8f7c8647dfe9e5 100644
--- a/xchart/src/test/java/com/xeiam/xchart/chart/Example2.java
+++ b/xchart/src/test/java/com/xeiam/xchart/chart/Example2.java
@@ -20,8 +20,8 @@ import java.util.List;
 
 import com.xeiam.xchart.Chart;
 import com.xeiam.xchart.ChartBuilder;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.style.Series;
 import com.xeiam.xchart.style.SeriesMarker;
 
 /**
diff --git a/xchart/src/test/java/com/xeiam/xchart/chart/NoBug.java b/xchart/src/test/java/com/xeiam/xchart/chart/NoBug.java
index e002be5836898d742d52f1993f0a786f6624d87d..8a4832d3c9da1839ec2288c4626100f9e5cbed6d 100644
--- a/xchart/src/test/java/com/xeiam/xchart/chart/NoBug.java
+++ b/xchart/src/test/java/com/xeiam/xchart/chart/NoBug.java
@@ -25,8 +25,8 @@ import java.util.ArrayList;
 import java.util.List;
 
 import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
 import com.xeiam.xchart.SwingWrapper;
-import com.xeiam.xchart.style.Series;
 
 /**
  * @author timmolter
diff --git a/xchart/src/test/java/com/xeiam/xchart/unit/ValueFormatterTest.java b/xchart/src/test/java/com/xeiam/xchart/unit/ValueFormatterTest.java
index 26aff9a68f397fed56006dac069dd5c35803400f..020a6745202e516f35e6ab56bb2cc00b9e4a1879 100644
--- a/xchart/src/test/java/com/xeiam/xchart/unit/ValueFormatterTest.java
+++ b/xchart/src/test/java/com/xeiam/xchart/unit/ValueFormatterTest.java
@@ -30,7 +30,7 @@ import java.util.Locale;
 import org.junit.Test;
 
 import com.xeiam.xchart.internal.chartpart.Axis.Direction;
-import com.xeiam.xchart.internal.chartpart.axistickcalculator.DateAxisTickCalculator;
+import com.xeiam.xchart.internal.chartpart.axistickcalculator.NumberAxisTickCalculator;
 import com.xeiam.xchart.style.StyleManager;
 
 /**
@@ -44,59 +44,59 @@ public class ValueFormatterTest {
   public void testNumberFormatting() {
 
     StyleManager styleManager = new StyleManager();
-    DateAxisTickCalculator dateAxisTickCalculator = new DateAxisTickCalculator(Direction.X, 1000, new BigDecimal(10), new BigDecimal(90), styleManager);
+    NumberAxisTickCalculator numberAxisTickCalculator = new NumberAxisTickCalculator(Direction.X, 1000, new BigDecimal(10), new BigDecimal(90), styleManager);
 
     // big
     styleManager.setLocale(locale);
 
     BigDecimal value = new BigDecimal("1");
-    String stringValue = dateAxisTickCalculator.formatNumber(value);
+    String stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("1"));
 
     value = new BigDecimal(1000L);
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("1000"));
 
     value = new BigDecimal("9999");
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("9999"));
 
     value = new BigDecimal(20000L);
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("2E4"));
 
     value = new BigDecimal("200.23");
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("200.23"));
 
     // small
 
     value = new BigDecimal("0.01");
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("0.01"));
 
     value = new BigDecimal("0.001");
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("0.001"));
 
     value = new BigDecimal("0.0012");
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("0.0012"));
 
     value = new BigDecimal("0.0001");
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("1E-4"));
 
     value = new BigDecimal(".00012");
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("1.2E-4"));
 
     value = new BigDecimal("0.0");
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("0"));
 
     value = new BigDecimal("0");
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("0"));
 
     // other case
@@ -115,21 +115,21 @@ public class ValueFormatterTest {
     styleManager.setLocale(Locale.GERMANY);
 
     value = new BigDecimal("0.01");
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("0,01"));
 
     value = new BigDecimal("200.23");
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("200,23"));
 
     styleManager.setNormalDecimalPattern("#.#");
     value = new BigDecimal("200.23");
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("200,2"));
 
     styleManager.setScientificDecimalPattern("0.#E0");
     value = new BigDecimal("2009764.23");
-    stringValue = dateAxisTickCalculator.formatNumber(value);
+    stringValue = numberAxisTickCalculator.formatNumber(value);
     assertThat(stringValue, equalTo("2E6"));
 
   }