diff --git a/simpleexample/src/main/java/simpleex/ui/DraggableNodeController.java b/simpleexample/src/main/java/simpleex/ui/DraggableNodeController.java
index 8ff284ce88317d023dfc3d0975a95b75ae4d4262..e3325203ee6663ea025d2be677f24a93cda970ea 100644
--- a/simpleexample/src/main/java/simpleex/ui/DraggableNodeController.java
+++ b/simpleexample/src/main/java/simpleex/ui/DraggableNodeController.java
@@ -1,6 +1,5 @@
 package simpleex.ui;
 
-import java.util.Optional;
 import javafx.event.EventHandler;
 import javafx.geometry.Point2D;
 import javafx.scene.Node;
@@ -8,16 +7,14 @@ import javafx.scene.input.MouseEvent;
 
 public class DraggableNodeController {
 
-  public DraggableNodeController() {}
+  private final NodeDraggedHandler nodeDraggedHandler;
 
-  public DraggableNodeController(final Optional<NodeDraggedHandler> nodeDraggedHandler) {
-    setNodeDraggedHandler(nodeDraggedHandler);
+  public DraggableNodeController() {
+    this(null);
   }
 
-  private Optional<NodeDraggedHandler> nodeDraggedHandler = Optional.empty();
-
-  public final void setNodeDraggedHandler(final Optional<NodeDraggedHandler> nodeDraggedHandler) {
-    this.nodeDraggedHandler = nodeDraggedHandler;
+  public DraggableNodeController(final NodeDraggedHandler nodeDraggedHandler) {
+    this.nodeDraggedHandler = (nodeDraggedHandler != null ? nodeDraggedHandler : (node, x, y) -> {});
   }
 
   private boolean immediate = false;
@@ -26,7 +23,7 @@ public class DraggableNodeController {
     this.immediate = immediate;
   }
 
-  private Optional<Node> currentNode = Optional.empty();
+  private Node currentNode = null;
   private Point2D startPoint = null;
   private Point2D startTranslate = null;
 
@@ -47,17 +44,16 @@ public class DraggableNodeController {
   }
 
   private void mousePressed(final MouseEvent mouseEvent) {
-    if (currentNode.isEmpty() && mouseEvent.getSource() instanceof Node) {
-      currentNode = Optional.of((Node) mouseEvent.getSource());
+    if (currentNode == null && mouseEvent.getSource() instanceof Node) {
+      currentNode = (Node) mouseEvent.getSource();
       startPoint = new Point2D(mouseEvent.getSceneX(), mouseEvent.getSceneY());
-      startTranslate =
-          new Point2D(currentNode.get().getTranslateX(), currentNode.get().getTranslateY());
+      startTranslate = new Point2D(currentNode.getTranslateX(), currentNode.getTranslateY());
       mouseEvent.consume();
     }
   }
 
   private void mouseDragged(final MouseEvent mouseEvent) {
-    if (currentNode.isPresent() && currentNode.get() == mouseEvent.getSource()) {
+    if (currentNode != null && currentNode == mouseEvent.getSource()) {
       final double dx = mouseEvent.getSceneX() - startPoint.getX();
       final double dy = mouseEvent.getSceneY() - startPoint.getY();
       updateNode(dx, dy);
@@ -65,28 +61,26 @@ public class DraggableNodeController {
   }
 
   protected void updateNode(final double dx, final double dy) {
-    if (immediate && nodeDraggedHandler.isPresent()) {
-      nodeDraggedHandler.get().nodeDragged(currentNode.get(), dx, dy);
+    if (immediate) {
+      nodeDraggedHandler.nodeDragged(currentNode, dx, dy);
       startPoint = startPoint.add(dx, dy);
-    } else if (currentNode.isPresent()) {
-      currentNode.get().setTranslateX(startTranslate.getX() + dx);
-      currentNode.get().setTranslateY(startTranslate.getY() + dy);
+    } else if (currentNode != null) {
+      currentNode.setTranslateX(startTranslate.getX() + dx);
+      currentNode.setTranslateY(startTranslate.getY() + dy);
     }
   }
 
   private void mouseReleased(final MouseEvent mouseEvent) {
-    if (currentNode.isPresent() && currentNode.get() == mouseEvent.getSource()) {
+    if (currentNode != null && currentNode == mouseEvent.getSource()) {
       final double dx = mouseEvent.getSceneX() - startPoint.getX();
       final double dy = mouseEvent.getSceneY() - startPoint.getY();
       if (!immediate) {
-        currentNode.get().setTranslateX(startTranslate.getX());
-        currentNode.get().setTranslateY(startTranslate.getY());
-      }
-      final Node node = currentNode.get();
-      currentNode = Optional.empty();
-      if (nodeDraggedHandler.isPresent()) {
-        nodeDraggedHandler.get().nodeDragged(node, dx, dy);
+        currentNode.setTranslateX(startTranslate.getX());
+        currentNode.setTranslateY(startTranslate.getY());
       }
+      final Node node = currentNode;
+      currentNode = null;
+      nodeDraggedHandler.nodeDragged(node, dx, dy);
     }
   }
 
diff --git a/simpleexample/src/main/java/simpleex/ui/FxAppController.java b/simpleexample/src/main/java/simpleex/ui/FxAppController.java
index f58187bcb376058965280aeb1328215296bea665..134d375d09565cb21becb6fe55da4109fae3d047 100644
--- a/simpleexample/src/main/java/simpleex/ui/FxAppController.java
+++ b/simpleexample/src/main/java/simpleex/ui/FxAppController.java
@@ -89,10 +89,10 @@ public class FxAppController {
     zoomSlider.setValue(8);
     markersParent = new MapItemsControl<MapNode>();
     mapView.getChildren().add(markersParent);
-    draggableMapController = new DraggableNodeController(Optional.of(this::handleMapDragged));
+    draggableMapController = new DraggableNodeController(this::handleMapDragged);
     draggableMapController.setImmediate(true);
     draggableMapController.attach(mapView);
-    draggableMarkerController = new DraggableNodeController(Optional.of(this::handleMarkerDragged));
+    draggableMarkerController = new DraggableNodeController(this::handleMarkerDragged);
     // the location list
     locationListView.getSelectionModel().selectedIndexProperty()
     .addListener((prop, oldValue, newValue) -> updateMapMarker(true));