diff --git a/xchart-demo/src/main/java/org/knowm/xchart/demo/XChartDemo.java b/xchart-demo/src/main/java/org/knowm/xchart/demo/XChartDemo.java
index 6c16a872d84efc5ae6ce12b7f49ea4dcdf555f06..35b46b9b5e4fd1ac351e5f8fe27e24b54168c38e 100644
--- a/xchart-demo/src/main/java/org/knowm/xchart/demo/XChartDemo.java
+++ b/xchart-demo/src/main/java/org/knowm/xchart/demo/XChartDemo.java
@@ -60,6 +60,7 @@ import org.knowm.xchart.demo.charts.line.LineChart05;
 import org.knowm.xchart.demo.charts.line.LineChart06;
 import org.knowm.xchart.demo.charts.line.LineChart07;
 import org.knowm.xchart.demo.charts.pie.PieChart01;
+import org.knowm.xchart.demo.charts.pie.PieChart02;
 import org.knowm.xchart.demo.charts.realtime.RealtimeChart01;
 import org.knowm.xchart.demo.charts.realtime.RealtimeChart02;
 import org.knowm.xchart.demo.charts.realtime.RealtimeChart03;
@@ -227,6 +228,9 @@ public class XChartDemo extends JPanel implements TreeSelectionListener {
     defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("PieChart01 - Pie Chart with 4 Slices", new PieChart01().getChart()));
     category.add(defaultMutableTreeNode);
 
+    defaultMutableTreeNode = new DefaultMutableTreeNode(new ChartInfo("PieChart012 - Pie Chart Custom Color Palette", new PieChart02().getChart()));
+    category.add(defaultMutableTreeNode);
+
     // Line category
     category = new DefaultMutableTreeNode("Line Charts");
     top.add(category);
diff --git a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart01.java b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart01.java
index 3ab595495aadb5726f4b14d71979e070b717dccb..6c28e9f37569030c1613d029c85f7ea50a550b14 100644
--- a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart01.java
+++ b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart01.java
@@ -42,11 +42,11 @@ public class PieChart01 implements ExampleChart<Chart_Pie> {
   public Chart_Pie getChart() {
 
     // Create Chart
-    Chart_Pie chart = new ChartBuilderPie().width(800).height(600).title(getClass().getSimpleName()).build();
-    chart.addSeries("Pennies", 387);
-    chart.addSeries("Nickels", 234);
-    chart.addSeries("Dimes", 190);
-    chart.addSeries("Quarters", 270);
+    Chart_Pie chart = new ChartBuilderPie().width(400).height(500).title(getClass().getSimpleName()).build();
+    chart.addSeries("Pennies", 100);
+    chart.addSeries("Nickels", 100);
+    chart.addSeries("Dimes", 100);
+    chart.addSeries("Quarters", 100);
 
     return chart;
   }
diff --git a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart02.java b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart02.java
index 268fe317f1d6755e68b2e8e03a5f2a28048ecdd2..1dbb2956f02f29477f35aa613573d526ff39d707 100644
--- a/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart02.java
+++ b/xchart-demo/src/main/java/org/knowm/xchart/demo/charts/pie/PieChart02.java
@@ -20,12 +20,11 @@ import java.awt.Color;
 
 import org.knowm.xchart.ChartBuilderPie;
 import org.knowm.xchart.Chart_Pie;
-import org.knowm.xchart.Series_Pie;
 import org.knowm.xchart.SwingWrapper;
 import org.knowm.xchart.demo.charts.ExampleChart;
 
 /**
- * Pie Chart with 4 Slices
+ * Pie Chart Custom Color Palette
  * <p>
  * Demonstrates the following:
  * <ul>
@@ -49,8 +48,7 @@ public class PieChart02 implements ExampleChart<Chart_Pie> {
     Chart_Pie chart = new ChartBuilderPie().width(800).height(600).title(getClass().getSimpleName()).build();
     chart.addSeries("Gold", 24);
     chart.addSeries("Silver", 21);
-    Series_Pie series = chart.addSeries("Platinum", 39);
-
+    chart.addSeries("Platinum", 39);
     chart.addSeries("Copper", 17);
     chart.addSeries("Zinc", 40);
 
diff --git a/xchart/src/main/java/org/knowm/xchart/StyleManagerPie.java b/xchart/src/main/java/org/knowm/xchart/StyleManagerPie.java
index b78b68bcad616ebd674222d6ac7f85d39fe73941..c13a82d32c08f8d1e8b91b7c01a4c7738c2921e8 100644
--- a/xchart/src/main/java/org/knowm/xchart/StyleManagerPie.java
+++ b/xchart/src/main/java/org/knowm/xchart/StyleManagerPie.java
@@ -29,6 +29,7 @@ public class StyleManagerPie extends StyleManager {
 
   private double pieFillPercentage;
   private boolean isCircular;
+  private double startAngleInDegrees;
 
   /**
    * Constructor
@@ -92,6 +93,21 @@ public class StyleManagerPie extends StyleManager {
     this.isCircular = isCircular;
   }
 
+  public double getStartAngleInDegrees() {
+
+    return startAngleInDegrees;
+  }
+
+  /**
+   * Sets the start angle in degrees. Zero degrees is straight up.
+   *
+   * @param startAngleInDegrees
+   */
+  public void setStartAngleInDegrees(double startAngleInDegrees) {
+
+    this.startAngleInDegrees = startAngleInDegrees;
+  }
+
   /**
    * Set the theme the style manager should use
    *
diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartTitle.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartTitle.java
index 5772a09c4418784a2b6104e231b1dec9bc1dc300..a42526967a45bf6bb74f3ff6056d7b9ead2153ad 100644
--- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartTitle.java
+++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/ChartTitle.java
@@ -109,7 +109,6 @@ public class ChartTitle implements ChartPart {
       double width = 2 * chart.getStyleManager().getChartTitlePadding() + rectangle.getWidth();
       double height = 2 * chart.getStyleManager().getChartTitlePadding() + rectangle.getHeight();
       return new Rectangle2D.Double(Double.NaN, Double.NaN, width, height); // Double.NaN indicates not sure yet.
-
     }
     else {
       // TODO make this zero, need to account for null bounds then when laying out plot
diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend.java
index e5310d1ed79b00959b1e4a12308d977c568d2202..284f0f821c0d5eff51578b631f80fb2191941953 100644
--- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend.java
+++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/Legend.java
@@ -16,6 +16,7 @@
  */
 package org.knowm.xchart.internal.chartpart;
 
+import java.awt.BasicStroke;
 import java.awt.Graphics2D;
 import java.awt.Shape;
 import java.awt.font.FontRenderContext;
@@ -39,9 +40,11 @@ public abstract class Legend<SM extends StyleManager, S extends Series> implemen
   protected static final int BOX_SIZE = 20;
   protected static final int MULTI_LINE_SPACE = 3;
 
+  protected Chart<SM, S> chart;
   protected Rectangle2D bounds = null;
 
-  protected Chart<SM, S> chart;
+  protected double xOffset = 0;
+  protected double yOffset = 0;
 
   /**
    * Constructor
@@ -57,10 +60,6 @@ public abstract class Legend<SM extends StyleManager, S extends Series> implemen
   @Override
   public void paint(Graphics2D g) {
 
-    if (!chart.getStyleManager().isLegendVisible()) {
-      return;
-    }
-
     // if the area to draw a chart on is so small, don't even bother
     if (chart.getPlot().getBounds().getWidth() < 30) {
       return;
@@ -71,6 +70,46 @@ public abstract class Legend<SM extends StyleManager, S extends Series> implemen
     if (bounds == null) { // No other part asked for the bounds yet. Probably because it's an "inside" legend location
       bounds = getBoundsHint(); // Actually, the only information contained in thsi bounds is the width and height.
     }
+
+    // legend draw position
+
+    switch (chart.getStyleManager().getLegendPosition()) {
+    case OutsideE:
+      xOffset = chart.getWidth() - bounds.getWidth() - chart.getStyleManager().getChartPadding();
+      yOffset = chart.getPlot().getBounds().getY() + (chart.getPlot().getBounds().getHeight() - bounds.getHeight()) / 2.0;
+      break;
+    case InsideNW:
+      xOffset = chart.getPlot().getBounds().getX() + LEGEND_MARGIN;
+      yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN;
+      break;
+    case InsideNE:
+      xOffset = chart.getPlot().getBounds().getX() + chart.getPlot().getBounds().getWidth() - bounds.getWidth() - LEGEND_MARGIN;
+      yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN;
+      break;
+    case InsideSE:
+      xOffset = chart.getPlot().getBounds().getX() + chart.getPlot().getBounds().getWidth() - bounds.getWidth() - LEGEND_MARGIN;
+      yOffset = chart.getPlot().getBounds().getY() + chart.getPlot().getBounds().getHeight() - bounds.getHeight() - LEGEND_MARGIN;
+      break;
+    case InsideSW:
+      xOffset = chart.getPlot().getBounds().getX() + LEGEND_MARGIN;
+      yOffset = chart.getPlot().getBounds().getY() + chart.getPlot().getBounds().getHeight() - bounds.getHeight() - LEGEND_MARGIN;
+      break;
+    case InsideN:
+      xOffset = chart.getPlot().getBounds().getX() + (chart.getPlot().getBounds().getWidth() - bounds.getWidth()) / 2 + LEGEND_MARGIN;
+      yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN;
+      break;
+
+    default:
+      break;
+    }
+
+    // draw legend box background and border
+    Shape rect = new Rectangle2D.Double(xOffset, yOffset, bounds.getWidth(), bounds.getHeight());
+    g.setColor(chart.getStyleManager().getLegendBackgroundColor());
+    g.fill(rect);
+    g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 3.0f, 0.0f }, 0.0f));
+    g.setColor(chart.getStyleManager().getLegendBorderColor());
+    g.draw(rect);
   }
 
   /**
@@ -90,7 +129,6 @@ public abstract class Legend<SM extends StyleManager, S extends Series> implemen
     // determine total legend content height
     double legendContentHeight = 0;
 
-    // TODO 3.0.0 figure out this warning.
     Map<String, S> map = chart.getSeriesMap();
     for (Series series : map.values()) {
 
diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendAxesChart.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendAxesChart.java
index ffb4f89d0cfe285b96d9c59fe4628659c6981e62..8c867bfd5a36de42e8c10ebb75738459bbfc50d2 100644
--- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendAxesChart.java
+++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendAxesChart.java
@@ -54,56 +54,18 @@ public class LegendAxesChart<SM extends StyleManagerAxesChart, S extends Series>
   @Override
   public void paint(Graphics2D g) {
 
-    super.paint(g);
-
-    // legend draw position
-    double xOffset = 0;
-    double yOffset = 0;
-    switch (chart.getStyleManager().getLegendPosition()) {
-    case OutsideE:
-      xOffset = chart.getWidth() - bounds.getWidth() - chart.getStyleManager().getChartPadding();
-      yOffset = chart.getPlot().getBounds().getY() + (chart.getPlot().getBounds().getHeight() - bounds.getHeight()) / 2.0;
-      break;
-    case InsideNW:
-      xOffset = chart.getPlot().getBounds().getX() + LEGEND_MARGIN;
-      yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN;
-      break;
-    case InsideNE:
-      xOffset = chart.getPlot().getBounds().getX() + chart.getPlot().getBounds().getWidth() - bounds.getWidth() - LEGEND_MARGIN;
-      yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN;
-      break;
-    case InsideSE:
-      xOffset = chart.getPlot().getBounds().getX() + chart.getPlot().getBounds().getWidth() - bounds.getWidth() - LEGEND_MARGIN;
-      yOffset = chart.getPlot().getBounds().getY() + chart.getPlot().getBounds().getHeight() - bounds.getHeight() - LEGEND_MARGIN;
-      break;
-    case InsideSW:
-      xOffset = chart.getPlot().getBounds().getX() + LEGEND_MARGIN;
-      yOffset = chart.getPlot().getBounds().getY() + chart.getPlot().getBounds().getHeight() - bounds.getHeight() - LEGEND_MARGIN;
-      break;
-    case InsideN:
-      xOffset = chart.getPlot().getBounds().getX() + (chart.getPlot().getBounds().getWidth() - bounds.getWidth()) / 2 + LEGEND_MARGIN;
-      yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN;
-      break;
-
-    default:
-      break;
+    if (!chart.getStyleManager().isLegendVisible()) {
+      return;
     }
 
-    // TODO need this stroke?
-    g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 3.0f, 0.0f }, 0.0f));
+    super.paint(g);
 
-    // draw legend box background and border
-    Shape rect = new Rectangle2D.Double(xOffset + 1, yOffset + 1, bounds.getWidth() - 2, bounds.getHeight() - 2);
-    g.setColor(chart.getStyleManager().getLegendBackgroundColor());
-    g.fill(rect);
-    g.setColor(chart.getStyleManager().getLegendBorderColor());
-    g.draw(rect);
+    g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 3.0f, 0.0f }, 0.0f));
 
     // Draw legend content inside legend box
     double startx = xOffset + chart.getStyleManager().getLegendPadding();
     double starty = yOffset + chart.getStyleManager().getLegendPadding();
 
-    // TODO 3.0.0 figure out this warning.
     Map<String, Series_AxesChart> map = chart.getSeriesMap();
     for (Series_AxesChart series : map.values()) {
 
diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendPie.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendPie.java
index 33cbabcfa14c832c16b734e2a885094b47b93631..9e1a87dc3486dc5b9cdfc195677a30bf677140fc 100644
--- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendPie.java
+++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/LegendPie.java
@@ -51,56 +51,18 @@ public class LegendPie<SM extends StyleManagerAxesChart, S extends Series> exten
   @Override
   public void paint(Graphics2D g) {
 
-    super.paint(g);
-
-    // legend draw position
-    double xOffset = 0;
-    double yOffset = 0;
-    switch (chart.getStyleManager().getLegendPosition()) {
-    case OutsideE:
-      xOffset = chart.getWidth() - bounds.getWidth() - chart.getStyleManager().getChartPadding();
-      yOffset = chart.getPlot().getBounds().getY() + (chart.getPlot().getBounds().getHeight() - bounds.getHeight()) / 2.0;
-      break;
-    case InsideNW:
-      xOffset = chart.getPlot().getBounds().getX() + LEGEND_MARGIN;
-      yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN;
-      break;
-    case InsideNE:
-      xOffset = chart.getPlot().getBounds().getX() + chart.getPlot().getBounds().getWidth() - bounds.getWidth() - LEGEND_MARGIN;
-      yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN;
-      break;
-    case InsideSE:
-      xOffset = chart.getPlot().getBounds().getX() + chart.getPlot().getBounds().getWidth() - bounds.getWidth() - LEGEND_MARGIN;
-      yOffset = chart.getPlot().getBounds().getY() + chart.getPlot().getBounds().getHeight() - bounds.getHeight() - LEGEND_MARGIN;
-      break;
-    case InsideSW:
-      xOffset = chart.getPlot().getBounds().getX() + LEGEND_MARGIN;
-      yOffset = chart.getPlot().getBounds().getY() + chart.getPlot().getBounds().getHeight() - bounds.getHeight() - LEGEND_MARGIN;
-      break;
-    case InsideN:
-      xOffset = chart.getPlot().getBounds().getX() + (chart.getPlot().getBounds().getWidth() - bounds.getWidth()) / 2 + LEGEND_MARGIN;
-      yOffset = chart.getPlot().getBounds().getY() + LEGEND_MARGIN;
-      break;
-
-    default:
-      break;
+    if (!chart.getStyleManager().isLegendVisible()) {
+      return;
     }
 
-    // TODO need this stroke?
-    g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 3.0f, 0.0f }, 0.0f));
+    super.paint(g);
 
-    // draw legend box background and border
-    Shape rect = new Rectangle2D.Double(xOffset + 1, yOffset + 1, bounds.getWidth() - 2, bounds.getHeight() - 2);
-    g.setColor(chart.getStyleManager().getLegendBackgroundColor());
-    g.fill(rect);
-    g.setColor(chart.getStyleManager().getLegendBorderColor());
-    g.draw(rect);
+    g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10.0f, new float[] { 3.0f, 0.0f }, 0.0f));
 
     // Draw legend content inside legend box
     double startx = xOffset + chart.getStyleManager().getLegendPadding();
     double starty = yOffset + chart.getStyleManager().getLegendPadding();
 
-    // TODO 3.0.0 figure out this warning.
     Map<String, Series> map = chart.getSeriesMap();
     for (Series series : map.values()) {
 
diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_Pie.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_Pie.java
index 768d1a0fb09f6dadb6d4c7506df93a3e845d9e5b..25261cba83e1ae46f99d3772439276304b49c2c0 100644
--- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_Pie.java
+++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_Pie.java
@@ -17,8 +17,13 @@
 package org.knowm.xchart.internal.chartpart;
 
 import java.awt.Graphics2D;
+import java.awt.Shape;
+import java.awt.font.FontRenderContext;
+import java.awt.font.TextLayout;
+import java.awt.geom.AffineTransform;
 import java.awt.geom.Arc2D;
 import java.awt.geom.Rectangle2D;
+import java.text.DecimalFormat;
 import java.util.Map;
 
 import org.knowm.xchart.Series_Pie;
@@ -32,6 +37,7 @@ import org.knowm.xchart.internal.style.StyleManager;
 public class PlotContent_Pie<SM extends StyleManager, S extends Series> extends PlotContent_ {
 
   StyleManagerPie styleManagerPie;
+  DecimalFormat df = new DecimalFormat("#.0");
 
   /**
    * Constructor
@@ -66,14 +72,14 @@ public class PlotContent_Pie<SM extends StyleManager, S extends Series> extends
     g.setClip(bounds.createIntersection(rectangle));
 
     // pie bounds
-    double percentage = styleManagerPie.getPieFillPercentage();
+    double pieFillPercentage = styleManagerPie.getPieFillPercentage();
 
     // if (styleManagerPie.isCircular()) {
     //
     // double pieDiameter = Math.min(bounds.getWidth(), bounds.getHeight());
     // }
 
-    double halfBorderPercentage = (1 - percentage) / 2.0;
+    double halfBorderPercentage = (1 - pieFillPercentage) / 2.0;
     double width = styleManagerPie.isCircular() ? Math.min(bounds.getWidth(), bounds.getHeight()) : bounds.getWidth();
     double height = styleManagerPie.isCircular() ? Math.min(bounds.getWidth(), bounds.getHeight()) : bounds.getHeight();
 
@@ -83,9 +89,9 @@ public class PlotContent_Pie<SM extends StyleManager, S extends Series> extends
 
         bounds.getY() + bounds.getHeight() / 2 - height / 2 + halfBorderPercentage * height,
 
-        width * percentage,
+        width * pieFillPercentage,
 
-        height * percentage);
+        height * pieFillPercentage);
 
     // g.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
     // g.setColor(Color.black);
@@ -94,7 +100,6 @@ public class PlotContent_Pie<SM extends StyleManager, S extends Series> extends
     // get total
     double total = 0.0;
 
-    // TODO 3.0.0 figure out this warning.
     Map<String, Series_Pie> map = chart.getSeriesMap();
     for (Series_Pie series : map.values()) {
 
@@ -102,21 +107,59 @@ public class PlotContent_Pie<SM extends StyleManager, S extends Series> extends
     }
 
     // draw pie slices
-    double curValue = 0.0;
-    double startAngle = 0;
-    // TODO 3.0.0 figure out this warning.
+    // double curValue = 0.0;
+    // double curValue = 0.0;
+    double startAngle = styleManagerPie.getStartAngleInDegrees() + 90;
+
     map = chart.getSeriesMap();
     for (Series_Pie series : map.values()) {
 
       Number y = series.getValue();
 
-      startAngle = (curValue * 360 / total);
+      // draw slice
       double arcAngle = (y.doubleValue() * 360 / total);
       g.setColor(series.getFillColor());
       g.fill(new Arc2D.Double(pieBounds.getX(), pieBounds.getY(), pieBounds.getWidth(), pieBounds.getHeight(), startAngle, arcAngle, Arc2D.PIE));
       g.setColor(styleManagerPie.getPlotBackgroundColor());
       g.draw(new Arc2D.Double(pieBounds.getX(), pieBounds.getY(), pieBounds.getWidth(), pieBounds.getHeight(), startAngle, arcAngle, Arc2D.PIE));
-      curValue += y.doubleValue();
+      // curValue += y.doubleValue();
+
+      // draw percentage on slice
+      double percentage = y.doubleValue() / total * 100;
+
+      TextLayout textLayout = new TextLayout(df.format(percentage) + "%", chart.getStyleManager().getLegendFont(), new FontRenderContext(null, true, false));
+      Rectangle2D percentageRectangle = textLayout.getBounds();
+
+      double xCenter = pieBounds.getX() + pieBounds.getWidth() / 2 - percentageRectangle.getWidth() / 2;
+      double yCenter = pieBounds.getY() + pieBounds.getHeight() / 2 + percentageRectangle.getHeight() / 2;
+      double angle = (arcAngle + startAngle) - arcAngle / 2;
+      double xOffset = xCenter + Math.cos(Math.toRadians(angle)) * (pieBounds.getWidth() / 3.33);
+      double yOffset = yCenter - Math.sin(Math.toRadians(angle)) * (pieBounds.getHeight() / 3.33);
+
+      g.setColor(styleManagerPie.getChartFontColor());
+      g.setFont(styleManagerPie.getChartTitleFont());
+
+      Shape shape = textLayout.getOutline(null);
+      AffineTransform orig = g.getTransform();
+      AffineTransform at = new AffineTransform();
+      at.translate(xOffset, yOffset);
+      g.transform(at);
+      g.fill(shape);
+      g.setTransform(orig);
+
+      // // Tick Mark
+      // xCenter = pieBounds.getX() + pieBounds.getWidth() / 2;
+      // yCenter = pieBounds.getY() + pieBounds.getHeight() / 2;
+      // double xOffsetStart = xCenter + Math.cos(Math.toRadians(angle)) * (pieBounds.getWidth() / 2.01);
+      // double xOffsetEnd = xCenter + Math.cos(Math.toRadians(angle)) * (pieBounds.getWidth() / 1.9);
+      // double yOffsetStart = yCenter - Math.sin(Math.toRadians(angle)) * (pieBounds.getHeight() / 2.01);
+      // double yOffsetEnd = yCenter - Math.sin(Math.toRadians(angle)) * (pieBounds.getHeight() / 1.9);
+      //
+      // g.setStroke(new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER));
+      // Shape line = new Line2D.Double(xOffsetStart, yOffsetStart, xOffsetEnd, yOffsetEnd);
+      // g.draw(line);
+
+      startAngle += arcAngle;
     }
 
     g.setClip(null);
diff --git a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_XY.java b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_XY.java
index 29534e056fa270a7336a1d65652a7e62fd668549..ad7cc892cd01bb2ccc2312d86e5122d1d47c5142 100644
--- a/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_XY.java
+++ b/xchart/src/main/java/org/knowm/xchart/internal/chartpart/PlotContent_XY.java
@@ -104,7 +104,6 @@ public class PlotContent_XY<SM extends StyleManagerAxesChart, S extends Series>
       yMax = Math.log10(yMax);
     }
 
-    // TODO 3.0.0 figure out this warning.
     Map<String, Series_XY> map = chart.getSeriesMap();
     for (Series_XY series : map.values()) {
 
diff --git a/xchart/src/main/java/org/knowm/xchart/internal/style/GGPlot2Theme.java b/xchart/src/main/java/org/knowm/xchart/internal/style/GGPlot2Theme.java
index e8086333037e036ed09f963029be0965fced0aa3..bc254faa7eb7ad01c5b291ef643d1d10ec061c73 100644
--- a/xchart/src/main/java/org/knowm/xchart/internal/style/GGPlot2Theme.java
+++ b/xchart/src/main/java/org/knowm/xchart/internal/style/GGPlot2Theme.java
@@ -348,6 +348,12 @@ public class GGPlot2Theme implements Theme {
     return true;
   }
 
+  @Override
+  public double getStartAngleInDegrees() {
+
+    return 0;
+  }
+
   // Line, Scatter, Area Charts ///////////////////////////////
 
   @Override
diff --git a/xchart/src/main/java/org/knowm/xchart/internal/style/MatlabTheme.java b/xchart/src/main/java/org/knowm/xchart/internal/style/MatlabTheme.java
index 59ed862dd31538ad334e589eeeab2110f7d8e2ce..c7477fd63f16b0330fba6920365dbe5f2285c9ee 100644
--- a/xchart/src/main/java/org/knowm/xchart/internal/style/MatlabTheme.java
+++ b/xchart/src/main/java/org/knowm/xchart/internal/style/MatlabTheme.java
@@ -352,6 +352,12 @@ public class MatlabTheme implements Theme {
     return true;
   }
 
+  @Override
+  public double getStartAngleInDegrees() {
+
+    return 0;
+  }
+
   // Line, Scatter, Area Charts ///////////////////////////////
 
   @Override
diff --git a/xchart/src/main/java/org/knowm/xchart/internal/style/Theme.java b/xchart/src/main/java/org/knowm/xchart/internal/style/Theme.java
index 2297cfaf16a96df688806ff525bb9c282957cb40..133fb521faa10782c818b154b426343a50abf1ac 100644
--- a/xchart/src/main/java/org/knowm/xchart/internal/style/Theme.java
+++ b/xchart/src/main/java/org/knowm/xchart/internal/style/Theme.java
@@ -138,6 +138,8 @@ public interface Theme extends SeriesMarkers, SeriesLines, SeriesColors {
 
   public boolean isCircular();
 
+  public double getStartAngleInDegrees();
+
   // Line, Scatter, Area Charts ///////////////////////////////
 
   public int getMarkerSize();
diff --git a/xchart/src/main/java/org/knowm/xchart/internal/style/XChartTheme.java b/xchart/src/main/java/org/knowm/xchart/internal/style/XChartTheme.java
index 61e52800ee89edd47cf8bce20845db1c67d3b0d1..906d2f876aa8551f41334236ef16c4ca940cf3ec 100644
--- a/xchart/src/main/java/org/knowm/xchart/internal/style/XChartTheme.java
+++ b/xchart/src/main/java/org/knowm/xchart/internal/style/XChartTheme.java
@@ -348,6 +348,12 @@ public class XChartTheme implements Theme {
     return true;
   }
 
+  @Override
+  public double getStartAngleInDegrees() {
+
+    return 0;
+  }
+
   // Line, Scatter, Area Charts ///////////////////////////////
 
   @Override