diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/App.java b/src/main/java/de/tudresden/inf/mci/brailleplot/App.java
index c703a1a3f49d8f9a0fe231cef7777e1fc7d9c0c7..611d592cde5ad56719276216af01c50fb23b9093 100644
--- a/src/main/java/de/tudresden/inf/mci/brailleplot/App.java
+++ b/src/main/java/de/tudresden/inf/mci/brailleplot/App.java
@@ -4,7 +4,10 @@ import de.tudresden.inf.mci.brailleplot.configparser.Format;
 import de.tudresden.inf.mci.brailleplot.configparser.JavaPropertiesConfigurationParser;
 import de.tudresden.inf.mci.brailleplot.configparser.Printer;
 
+import de.tudresden.inf.mci.brailleplot.layout.PlotCanvas;
 import de.tudresden.inf.mci.brailleplot.layout.RasterCanvas;
+import de.tudresden.inf.mci.brailleplot.point.Point2DValued;
+import de.tudresden.inf.mci.brailleplot.printabledata.FloatingPointData;
 import de.tudresden.inf.mci.brailleplot.printerbackend.PrintDirector;
 import de.tudresden.inf.mci.brailleplot.printerbackend.PrinterCapability;
 
@@ -22,11 +25,16 @@ import de.tudresden.inf.mci.brailleplot.datacontainers.CategoricalPointListConta
 import de.tudresden.inf.mci.brailleplot.datacontainers.PointList;
 import de.tudresden.inf.mci.brailleplot.diagrams.BarChart;
 import de.tudresden.inf.mci.brailleplot.rendering.MasterRenderer;
+import de.tudresden.inf.mci.brailleplot.svgexporter.BoolFloatingPointDataSvgExporter;
 import de.tudresden.inf.mci.brailleplot.svgexporter.BoolMatrixDataSvgExporter;
 import de.tudresden.inf.mci.brailleplot.svgexporter.SvgExporter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import tec.units.ri.quantity.Quantities;
+import tec.units.ri.unit.MetricPrefix;
 
+import javax.measure.Quantity;
+import javax.measure.quantity.Length;
 import java.io.BufferedReader;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -34,11 +42,13 @@ import java.io.Reader;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentLinkedDeque;
 
+import static tec.units.ri.unit.Units.METRE;
+
 /**
  * Main class.
  * Set up the application and run it.
  * @author Georg Graßnick, Andrey Ruzhanskiy
- * @version 2019.08.16
+ * @version 2019.08.26
  */
 
 public final class App {
@@ -177,6 +187,23 @@ public final class App {
             svgExporter.render();
             svgExporter.dump("boolMat");
 
+            // FloatingPointData SVG exporting example
+            PlotCanvas floatCanvas = new PlotCanvas(indexV4Printer, a4Format);
+            FloatingPointData<Boolean> points = floatCanvas.getNewPage();
+
+            final int blockX = 230;
+            final int blockY = 400;
+            for (int y = 0; y < blockY; y += 2) {
+                for (int x = 0; x < blockX; x += 2) {
+                    Point2DValued<Quantity<Length>, Boolean> point = new Point2DValued<>(Quantities.getQuantity(x, MetricPrefix.MILLI(METRE)), Quantities.getQuantity(y, MetricPrefix.MILLI(METRE)), true);
+                    points.addPoint(point);
+                }
+            }
+
+            SvgExporter<PlotCanvas> floatSvgExporter = new BoolFloatingPointDataSvgExporter(floatCanvas);
+            floatSvgExporter.render();
+            floatSvgExporter.dump("floatingPointData");
+
             // Check if some SpoolerService/Printservice exists
             if (!PrintDirector.isPrintServiceOn()) {
                 throw new Exception("Can't find any Printservices on this System.");
diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/layout/AbstractCanvas.java b/src/main/java/de/tudresden/inf/mci/brailleplot/layout/AbstractCanvas.java
index b28a3cc0525cc8734d8b7573bb0824c864aae0b2..9a37434c37acfcac081c9e0e6cdfa2391a9cd20a 100644
--- a/src/main/java/de/tudresden/inf/mci/brailleplot/layout/AbstractCanvas.java
+++ b/src/main/java/de/tudresden/inf/mci/brailleplot/layout/AbstractCanvas.java
@@ -14,7 +14,7 @@ import java.util.ListIterator;
  * Representation of a target onto which can be drawn. It wraps a {@link PrintableData} instance and specifies the size of the drawing area (in mm).
  * @param <T> The type of the managed {@link PrintableData}
  * @author Leonard Kupper, Georg Graßnick
- * @version 2019.08.16
+ * @version 2019.08.26
  */
 public abstract class AbstractCanvas<T extends PrintableData> {
 
@@ -25,6 +25,10 @@ public abstract class AbstractCanvas<T extends PrintableData> {
 
     Rectangle mPrintableArea;
 
+    private double mDotDiameter;
+    private double mConstraintLeft;
+    private double mConstraintTop;
+
     List<T> mPageContainer;
 
     AbstractCanvas(final Printer printer, final Format format) throws InsufficientRenderingAreaException {
@@ -88,6 +92,12 @@ public abstract class AbstractCanvas<T extends PrintableData> {
         mPrintableArea = calculatePrintingArea(marginBox, constraintBox);
         mLogger.info("The calculated available printing area equals: {}", mPrintableArea);
 
+        mDotDiameter = mPrinter.getProperty("raster.dotDiameter").toDouble();
+
+        // Constraints
+        mConstraintLeft =  mPrinter.getProperty("constraint.left").toDouble();
+        mConstraintTop =  mPrinter.getProperty("constraint.top").toDouble();
+
     }
 
     /**
@@ -126,6 +136,25 @@ public abstract class AbstractCanvas<T extends PrintableData> {
         return mFormat.getProperty("page.height").toDouble();
     }
 
+    /**
+     * Get the diameter of a dot in mm.
+     * @return The diameter of a dot in mm.
+     */
+    public final double getDotDiameter() {
+        return mDotDiameter;
+    }
+
+    public final double getConstraintLeft() {
+        return mConstraintLeft;
+    }
+
+    public final double getConstraintTop() {
+        return mConstraintTop;
+    }
+
+    public abstract double getFullConstraintLeft();
+    public abstract double getFullConstraintTop();
+
     /**
      * Get the number of pages in the canvas.
      * @return The number of pages.
@@ -142,4 +171,13 @@ public abstract class AbstractCanvas<T extends PrintableData> {
         return mPageContainer.listIterator();
     }
 
+    public final T getCurrentPage() {
+        if (mPageContainer.size() < 1) {
+            return getNewPage();
+        }
+        return mPageContainer.get(mPageContainer.size() - 1);
+    }
+
+    public abstract T getNewPage();
+
 }
diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/layout/PlotCanvas.java b/src/main/java/de/tudresden/inf/mci/brailleplot/layout/PlotCanvas.java
new file mode 100644
index 0000000000000000000000000000000000000000..6a74413980f348ad78cc1a5a1de5130a758dc294
--- /dev/null
+++ b/src/main/java/de/tudresden/inf/mci/brailleplot/layout/PlotCanvas.java
@@ -0,0 +1,34 @@
+package de.tudresden.inf.mci.brailleplot.layout;
+
+import de.tudresden.inf.mci.brailleplot.configparser.Format;
+import de.tudresden.inf.mci.brailleplot.configparser.Printer;
+import de.tudresden.inf.mci.brailleplot.printabledata.FloatingPointData;
+import de.tudresden.inf.mci.brailleplot.printabledata.SimpleFloatingPointDataImpl;
+
+/**
+ * Representation of a target onto which an image can be plotted.
+ * It wraps a {@link de.tudresden.inf.mci.brailleplot.printabledata.FloatingPointData} instance and describes the raster size and its layout.
+ * @author Georg Graßnick
+ * @version 2019.08.26
+ */
+public class PlotCanvas extends AbstractCanvas<FloatingPointData<Boolean>> {
+
+    public PlotCanvas(final Printer printer, final Format format) throws InsufficientRenderingAreaException {
+        super(printer, format);
+    }
+
+    public final FloatingPointData<Boolean> getNewPage() {
+        mPageContainer.add(new SimpleFloatingPointDataImpl<>(mPrinter, mFormat));
+        return getCurrentPage();
+    }
+
+    @Override
+    public double getFullConstraintLeft() {
+        return getConstraintLeft();
+    }
+
+    @Override
+    public double getFullConstraintTop() {
+        return getConstraintTop();
+    }
+}
diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/layout/RasterCanvas.java b/src/main/java/de/tudresden/inf/mci/brailleplot/layout/RasterCanvas.java
index 9e88d921126e6552ffaf73ab746c9bd0ca08329c..6878b795c98e829d07d702e082b27e5f7d785bc4 100644
--- a/src/main/java/de/tudresden/inf/mci/brailleplot/layout/RasterCanvas.java
+++ b/src/main/java/de/tudresden/inf/mci/brailleplot/layout/RasterCanvas.java
@@ -18,8 +18,8 @@ import static java.lang.Math.floor;
 /**
  * Representation of a target onto which an image can be rasterized.
  * It wraps a {@link de.tudresden.inf.mci.brailleplot.printabledata.MatrixData} instance and describes the raster size and its (not necessarily equidistant) layout.
- * @author Leonard Kupper, georg Graßnick
- * @version 2019.08.16
+ * @author Leonard Kupper, Georg Graßnick
+ * @version 2019.08.26
  */
 public class RasterCanvas extends AbstractCanvas<MatrixData<Boolean>> {
 
@@ -49,13 +49,15 @@ public class RasterCanvas extends AbstractCanvas<MatrixData<Boolean>> {
     private double mVerticalDotDistance;
     private double mHorizontalCellDistance;
     private double mVerticalCellDistance;
-    private double mDotDiameter;
+
+    private int mRasterConstraintLeft; // cells
+    private int mRasterConstraintTop; // cells
 
     /**
      * Constructor. Creates a new RasterCanvas, which is a canvas that represents it pages as instances of
      * {@link MatrixData} and holds information about the layout and spacing of the underlying raster grid.
      * The described grid is build from uniform 'cells' consisting of a variable amount of dots.
-     * It is used as a target on which can be drawn by a {@link Rasterizer}.
+     * It is used as a target on which can be drawn by a {@link de.tudresden.inf.mci.brailleplot.rendering.Rasterizer}.
      * @param printer The {@link Printer} configuration to be used.
      * @param format The {@link Format} configuration to be used.
      * @param cellWidth The horizontal count of dots in a cell.
@@ -85,12 +87,6 @@ public class RasterCanvas extends AbstractCanvas<MatrixData<Boolean>> {
         return getCurrentPage();
     }
 
-    public final MatrixData<Boolean> getCurrentPage() {
-        if (mPageContainer.size() < 1) {
-            return getNewPage();
-        }
-        return mPageContainer.get(mPageContainer.size() - 1);
-    }
 
     private void readConfig() {
 
@@ -101,12 +97,13 @@ public class RasterCanvas extends AbstractCanvas<MatrixData<Boolean>> {
         mVerticalDotDistance = mPrinter.getProperty("raster.dotDistance.vertical").toDouble();
         mHorizontalCellDistance = mPrinter.getProperty("raster.cellDistance.horizontal").toDouble();
         mVerticalCellDistance = mPrinter.getProperty("raster.cellDistance.vertical").toDouble();
-        mDotDiameter = mPrinter.getProperty("raster.dotDiameter").toDouble();
 
         // Calculate cell size in mm
         mCellHorizontalMM = mHorizontalDotDistance * (mCellWidth - 1) + mHorizontalCellDistance; // Full width of one cell + padding in mm
         mCellVerticalMM = mVerticalDotDistance * (mCellHeight - 1) + mVerticalCellDistance; // Full height of one cell + padding in mm
 
+        mRasterConstraintTop = mPrinter.getProperty("raster.constraint.top").toInt();
+        mRasterConstraintLeft = mPrinter.getProperty("raster.constraint.left").toInt();
     }
 
     private void calculateRasterSize() throws InsufficientRenderingAreaException {
@@ -218,9 +215,6 @@ public class RasterCanvas extends AbstractCanvas<MatrixData<Boolean>> {
     public final double getVerticalCellDistance() {
         return mVerticalCellDistance;
     }
-    public final double getDotDiameter() {
-        return mDotDiameter;
-    }
     public final Rectangle getCellRectangle() {
         return new Rectangle(mPrintingAreaCells);
     }
@@ -258,18 +252,42 @@ public class RasterCanvas extends AbstractCanvas<MatrixData<Boolean>> {
         return dotY / mCellHeight;
     }
 
-    public final int getFullConstraintLeft() {
-        return (int) Math.round(mPrinter.getProperty("raster.constraint.left").toInt() * mCellHorizontalMM + mPrinter.getProperty("constraint.left").toDouble());
+    public final int getRasterConstraintLeft() {
+        return mRasterConstraintLeft;
+    }
+
+    public final int getRasterConstraintTop() {
+        return mRasterConstraintTop;
+    }
+
+    /**
+     * Returns the full constraint of the printable Area from the left in mm.
+     * @return The margin to the left of the paper in mm, where printing is not possible.
+     */
+    public final double getFullConstraintLeft() {
+        return getRasterConstraintLeft() * mCellHorizontalMM + getConstraintLeft();
     }
 
-    public final int getFullConstraintTop() {
-        return (int) Math.round(mPrinter.getProperty("raster.constraint.top").toInt() * mCellVerticalMM + mPrinter.getProperty("constraint.top").toDouble());
+    /**
+     * Returns the full constraint of the printable Area from the top in mm.
+     * @return The margin to the top of the paper in mm, where printing is not possible.
+     */
+    public final double getFullConstraintTop() {
+        return getRasterConstraintTop() * mCellVerticalMM + getConstraintTop();
     }
 
+    /**
+     * Get the X coordinates of all dots.
+     * @return The X coordinates of all dots in mm.
+     */
     public final List<Double> getXPositions() {
         return Collections.unmodifiableList(mXPositions);
     }
 
+    /**
+     * Get the Y coordinates of all dots.
+     * @return The Y coordinates of all dots in mm.
+     */
     public final List<Double> getYPositions() {
         return Collections.unmodifiableList(mYPositions);
     }
diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/svgexporter/AbstractSvgExporter.java b/src/main/java/de/tudresden/inf/mci/brailleplot/svgexporter/AbstractSvgExporter.java
index ed9e16d9c73850c447c6f1fc5bd55d9ce435e4a5..b14304b83c1e532f17e25e414c56da75dc851c16 100644
--- a/src/main/java/de/tudresden/inf/mci/brailleplot/svgexporter/AbstractSvgExporter.java
+++ b/src/main/java/de/tudresden/inf/mci/brailleplot/svgexporter/AbstractSvgExporter.java
@@ -13,6 +13,7 @@ import java.awt.Color;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Objects;
@@ -38,6 +39,7 @@ abstract class AbstractSvgExporter<T extends AbstractCanvas, U extends Printable
     AbstractSvgExporter(final T canvas) {
         Objects.requireNonNull(canvas);
         mCanvas = canvas;
+        mSvgs = new ArrayList<>(mCanvas.getPageCount());
     }
 
     @Override
diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/svgexporter/BoolFloatingPointDataSvgExporter.java b/src/main/java/de/tudresden/inf/mci/brailleplot/svgexporter/BoolFloatingPointDataSvgExporter.java
new file mode 100644
index 0000000000000000000000000000000000000000..5cbd8b63cb08431d0f23d5c0b719ed8baf2aaf4d
--- /dev/null
+++ b/src/main/java/de/tudresden/inf/mci/brailleplot/svgexporter/BoolFloatingPointDataSvgExporter.java
@@ -0,0 +1,41 @@
+package de.tudresden.inf.mci.brailleplot.svgexporter;
+
+import de.tudresden.inf.mci.brailleplot.layout.PlotCanvas;
+import de.tudresden.inf.mci.brailleplot.point.Point2DValued;
+import de.tudresden.inf.mci.brailleplot.printabledata.FloatingPointData;
+import org.jfree.graphics2d.svg.SVGGraphics2D;
+import tec.units.ri.unit.MetricPrefix;
+
+import javax.measure.Quantity;
+import javax.measure.quantity.Length;
+import java.util.Iterator;
+
+import static tec.units.ri.unit.Units.METRE;
+
+/**
+ * SVG exporter class that supports {@link PlotCanvas} as input.
+ * @author Georg Graßnick
+ * @version 2019.08.26
+ */
+public class BoolFloatingPointDataSvgExporter extends AbstractSvgExporter<PlotCanvas, FloatingPointData<Boolean>> {
+
+    public BoolFloatingPointDataSvgExporter(final PlotCanvas canvas) {
+        super(canvas);
+    }
+
+    @Override
+    protected void renderPage(final FloatingPointData<Boolean> points, final int dataIndex) {
+        int dotDiameter = (int) (mCanvas.getDotDiameter() * SCALE_FACTOR);
+        Iterator<Point2DValued<Quantity<Length>, Boolean>> it = points.getIterator();
+        SVGGraphics2D svg = mSvgs.get(dataIndex);
+        while (it.hasNext()) {
+            Point2DValued<Quantity<Length>, Boolean> p = it.next();
+
+            double x = p.getX().to(MetricPrefix.MILLI(METRE)).getValue().doubleValue();
+            double y = p.getY().to(MetricPrefix.MILLI(METRE)).getValue().doubleValue();
+            int xPos = (int) Math.round((x - dotDiameter / 2f + mCanvas.getFullConstraintLeft()) * SCALE_FACTOR);
+            int yPos = (int) Math.round((y - dotDiameter / 2f + mCanvas.getFullConstraintTop()) * SCALE_FACTOR);
+            svg.drawOval(xPos, yPos, dotDiameter, dotDiameter);
+        }
+    }
+}
diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/svgexporter/BoolMatrixDataSvgExporter.java b/src/main/java/de/tudresden/inf/mci/brailleplot/svgexporter/BoolMatrixDataSvgExporter.java
index a0649a3e659b609d036460c94769e9473e2870a7..72619483ccc5dd1b508b33f91ccc30c77ec3d017 100644
--- a/src/main/java/de/tudresden/inf/mci/brailleplot/svgexporter/BoolMatrixDataSvgExporter.java
+++ b/src/main/java/de/tudresden/inf/mci/brailleplot/svgexporter/BoolMatrixDataSvgExporter.java
@@ -4,7 +4,6 @@ import de.tudresden.inf.mci.brailleplot.printabledata.MatrixData;
 import de.tudresden.inf.mci.brailleplot.layout.RasterCanvas;
 import org.jfree.graphics2d.svg.SVGGraphics2D;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -17,7 +16,6 @@ public class BoolMatrixDataSvgExporter extends AbstractSvgExporter<RasterCanvas,
 
     public BoolMatrixDataSvgExporter(final RasterCanvas rasterCanvas) {
         super(rasterCanvas);
-        mSvgs = new ArrayList<>(mCanvas.getPageCount());
     }
 
     @Override