From 4b9af1f388eadb1d16a067c9a513b55b8b7c27ba Mon Sep 17 00:00:00 2001
From: Andrea Gottsponer <ago@attr.ch>
Date: Tue, 1 Nov 2022 09:24:34 +0100
Subject: [PATCH] - selftest fix - marker generator fix - menu hide fixes -
 text fixes

---
 package-lock.json                             |  18 +--
 package.json                                  |   4 +-
 src/app/index.ts                              |  10 +-
 src/lib/bases/elements/BaseGraphics.ts        |  10 +-
 src/lib/bases/elements/BaseSprite.ts          |  17 +++
 src/lib/bases/elements/BaseText.ts            |  20 +++-
 src/lib/bases/elements/BaseTilingSprite.ts    |  20 +++-
 src/lib/elements/basics/EditableText.ts       |   7 ++
 src/lib/elements/connections/Line.ts          |  26 ++++-
 .../elements/controls/SelectGroupElement.ts   |  29 +++--
 src/lib/elements/fills/FillCollection.ts      |  24 +++-
 src/lib/elements/images/Image.ts              |  26 ++---
 src/lib/elements/legends/LegendCollection.ts  |  24 +++-
 src/lib/elements/legends/LegendColumn.ts      |  21 +++-
 src/lib/elements/legends/LegendRow.ts         |  24 +++-
 .../elements/positionings/PositionPoint.ts    |  28 ++++-
 .../elements/positionings/SelftestPoint.ts    |  45 ++++++--
 src/lib/elements/primitives/ArrowPrimitive.ts |  77 ++++++++++++-
 .../BackgroundRectanglePrimitive.ts           |  24 +++-
 .../elements/primitives/EllipsePrimitive.ts   |  77 ++++++++++++-
 .../elements/primitives/RectanglePrimitive.ts |  77 ++++++++++++-
 src/lib/elements/primitives/TextPrimitive.ts  | 105 +++++++++++++++++-
 .../combinations/InteractiveAreaGenerator.ts  |   2 +-
 .../combinations/MarkerGenerator.ts           |  31 ++++--
 .../generators/connections/LineGenerator.ts   |   7 +-
 .../generators/copies/CloneLayerGenerator.ts  |   2 +-
 src/lib/generators/legends/LegendGenerator.ts |   2 +-
 src/lib/interactions/WriteInteraction.ts      |  11 ++
 28 files changed, 653 insertions(+), 115 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index d147427d..cf7f048a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,15 +1,15 @@
 {
   "name": "medsurf-draw",
-  "version": "1.0.241",
+  "version": "1.0.242",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "medsurf-draw",
-      "version": "1.0.241",
+      "version": "1.0.242",
       "license": "MIT",
       "dependencies": {
-        "@ascii-dev-user/medsurf-lib": "^1.18.0-146",
+        "@ascii-dev-user/medsurf-lib": "^1.18.0-147",
         "@babel/core": "^7.8.4",
         "@pixi-essentials/cull": "^1.0.12",
         "debounce": "^1.2.1",
@@ -89,9 +89,9 @@
       }
     },
     "node_modules/@ascii-dev-user/medsurf-lib": {
-      "version": "1.18.0-146",
-      "resolved": "https://registry.npmjs.org/@ascii-dev-user/medsurf-lib/-/medsurf-lib-1.18.0-146.tgz",
-      "integrity": "sha512-fDS/83JoaroTbY5CH1yS3DiCjp8AkdKBycDub2/1nh74hxK6AmKuwydE84CYnPalgexs296vgQPQcKL9dAAepQ==",
+      "version": "1.18.0-147",
+      "resolved": "https://registry.npmjs.org/@ascii-dev-user/medsurf-lib/-/medsurf-lib-1.18.0-147.tgz",
+      "integrity": "sha512-qldkyKXM6F4kpSoXgQTmVTS+QKkO+Fp/I0oSb06IR7AvXt/GTVBYbyOTC+tuNGgWmBIjmWoLkElcEW5pjbw3YA==",
       "dependencies": {
         "lodash.clonedeep": "^4.5.0",
         "tslib": "^2.3.0"
@@ -5264,9 +5264,9 @@
       }
     },
     "@ascii-dev-user/medsurf-lib": {
-      "version": "1.18.0-146",
-      "resolved": "https://registry.npmjs.org/@ascii-dev-user/medsurf-lib/-/medsurf-lib-1.18.0-146.tgz",
-      "integrity": "sha512-fDS/83JoaroTbY5CH1yS3DiCjp8AkdKBycDub2/1nh74hxK6AmKuwydE84CYnPalgexs296vgQPQcKL9dAAepQ==",
+      "version": "1.18.0-147",
+      "resolved": "https://registry.npmjs.org/@ascii-dev-user/medsurf-lib/-/medsurf-lib-1.18.0-147.tgz",
+      "integrity": "sha512-qldkyKXM6F4kpSoXgQTmVTS+QKkO+Fp/I0oSb06IR7AvXt/GTVBYbyOTC+tuNGgWmBIjmWoLkElcEW5pjbw3YA==",
       "requires": {
         "lodash.clonedeep": "^4.5.0",
         "tslib": "^2.3.0"
diff --git a/package.json b/package.json
index f028f8fa..b6c94c09 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "medsurf-draw",
-  "version": "1.0.241",
+  "version": "1.0.242",
   "description": "Draw annotations on jpg/zoomify images, based on PIXI.js",
   "keywords": [
     "draw",
@@ -28,7 +28,7 @@
   "author": "Gottsponer Andrea Leonardo",
   "license": "MIT",
   "dependencies": {
-    "@ascii-dev-user/medsurf-lib": "^1.18.0-146",
+    "@ascii-dev-user/medsurf-lib": "^1.18.0-147",
     "@babel/core": "^7.8.4",
     "@pixi-essentials/cull": "^1.0.12",
     "debounce": "^1.2.1",
diff --git a/src/app/index.ts b/src/app/index.ts
index 0ec157b5..71cdd9e1 100644
--- a/src/app/index.ts
+++ b/src/app/index.ts
@@ -9,6 +9,9 @@ import { PixiPlugin } from 'gsap/PixiPlugin.js';
 // import { Simple, SpatialHash } from "pixi-cull"
 
 /* TODO
+    - Menu schliessen bei klonen / kopieren
+    - Selftest visible when no selftest available
+    Bugfixing machen
     +++
     - Pfeil / Spickel (Grundkante / Wedge 1/3)
     - Löschen von PositionPoints when no primitives / lines
@@ -1126,7 +1129,7 @@ async function setupImageObjects() {
             x: 600 / image.dimensions.width,
             y: 500 / image.dimensions.width,
         },
-        isSelftest: true,
+        isSelftest: false,
         selftestItems: [],
         primitives: []
     });
@@ -1141,7 +1144,7 @@ async function setupImageObjects() {
             x: 550 / image.dimensions.width,
             y: 550 / image.dimensions.width,
         },
-        isSelftest: true,
+        isSelftest: false,
         selftestItems: [],
         primitives: []
     });
@@ -1683,7 +1686,8 @@ function _startGenerator(): void {
     for(const layerImageObject of layerGroupsArray['sketch'].layerImageObjects || []) {
         const imageObject = image.getChildByName(layerImageObject.imageObject);
         if (imageObject) {
-            (imageObject as MedsurfDraw.DrawableObject).modeInteraction.setModeItem('draw_clickable');
+            // (imageObject as MedsurfDraw.DrawableObject).modeInteraction.setModeItem('draw_clickable');
+            (imageObject as MedsurfDraw.DrawableObject).modeInteraction.setMode('draw_clickable');
         }
     }
     /**/
diff --git a/src/lib/bases/elements/BaseGraphics.ts b/src/lib/bases/elements/BaseGraphics.ts
index c17aed62..8ccb38b9 100644
--- a/src/lib/bases/elements/BaseGraphics.ts
+++ b/src/lib/bases/elements/BaseGraphics.ts
@@ -56,14 +56,20 @@ export class BaseGraphics<TData extends BaseGraphicsModel | BaseGraphicsImageMod
 
         // Events
         // -- Added
-        this.on("added", () => {
+        this.on("added", (parent: MedsurfDraw.ImageObject) => {
             // -- Debounce
             this.on("debounceDraw", this._debounceDrawMethod);
+            // -- Mode
+            parent.modeInteraction.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction);
+            parent.modeInteraction.on("setMode", this.modeInteraction.setMode, this.modeInteraction);
         });
         // -- Removed
-        this.on("removed", () => {
+        this.on("removed", (parent: MedsurfDraw.ImageObject) => {
             // -- Debounce
             this.off("debounceDraw", this._debounceDrawMethod);
+            // -- Mode
+            parent.modeInteraction.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction);
+            parent.modeInteraction.off("setMode", this.modeInteraction.setMode, this.modeInteraction);
         });
     }
 
diff --git a/src/lib/bases/elements/BaseSprite.ts b/src/lib/bases/elements/BaseSprite.ts
index e382d2da..17490306 100644
--- a/src/lib/bases/elements/BaseSprite.ts
+++ b/src/lib/bases/elements/BaseSprite.ts
@@ -44,6 +44,23 @@ export class BaseSprite<TData extends BaseSpriteModel | BaseSpriteImageModel> ex
         this.modeInteraction = new MedsurfDraw.ModeInteraction(this);
         this.modeInteraction.on("init", this.init, this);
         //</editor-fold>
+
+        //<editor-fold desc="Events">
+        // -- Added
+        this.on("added", (parent: MedsurfDraw.ImageObject) => {
+            // Events
+            // -- Mode
+            parent.modeInteraction.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction);
+            parent.modeInteraction.on("setMode", this.modeInteraction.setMode, this.modeInteraction);
+        });
+        // -- Removed
+        this.on("removed", (parent: MedsurfDraw.ImageObject) => {
+            // Events
+            // -- Mode
+            parent.modeInteraction.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction);
+            parent.modeInteraction.off("setMode", this.modeInteraction.setMode, this.modeInteraction);
+        });
+        //</editor-fold>
     }
 
     /**
diff --git a/src/lib/bases/elements/BaseText.ts b/src/lib/bases/elements/BaseText.ts
index 1bb16c73..0a8b1187 100644
--- a/src/lib/bases/elements/BaseText.ts
+++ b/src/lib/bases/elements/BaseText.ts
@@ -41,10 +41,28 @@ export abstract class BaseText<TData extends BaseTextModel | BaseTextImageModel>
         // Members
         this.data = data;
 
-        // Interaction
+        //<editor-fold desc="Interactions">
         // -- Mode interaction
         this.modeInteraction = new MedsurfDraw.ModeInteraction(this);
         this.modeInteraction.on("init", this.init, this);
+        //</editor-fold>
+
+        //<editor-fold desc="Events">
+        // -- Added
+        this.on("added", (parent: MedsurfDraw.ImageObject) => {
+            // Events
+            // -- Mode
+            parent.modeInteraction.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction);
+            parent.modeInteraction.on("setMode", this.modeInteraction.setMode, this.modeInteraction);
+        });
+        // -- Removed
+        this.on("removed", (parent: MedsurfDraw.ImageObject) => {
+            // Events
+            // -- Mode
+            parent.modeInteraction.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction);
+            parent.modeInteraction.off("setMode", this.modeInteraction.setMode, this.modeInteraction);
+        });
+        //</editor-fold>
     }
 
     /**
diff --git a/src/lib/bases/elements/BaseTilingSprite.ts b/src/lib/bases/elements/BaseTilingSprite.ts
index 322c0e90..cfe4bb8a 100644
--- a/src/lib/bases/elements/BaseTilingSprite.ts
+++ b/src/lib/bases/elements/BaseTilingSprite.ts
@@ -40,10 +40,28 @@ export class BaseTilingSprite<TData extends BaseTilingSpriteModel | BaseTilingSp
         // Members
         this.data = data;
 
-        // Interaction
+        //<editor-fold desc="Interactions">
         // -- Mode interaction
         this.modeInteraction = new MedsurfDraw.ModeInteraction(this);
         this.modeInteraction.on("init", this.init, this);
+        //</editor-fold>
+
+        //<editor-fold desc="Events">
+        // -- Added
+        this.on("added", (parent: MedsurfDraw.ImageObject) => {
+            // Events
+            // -- Mode
+            parent.modeInteraction.on("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction);
+            parent.modeInteraction.on("setMode", this.modeInteraction.setMode, this.modeInteraction);
+        });
+        // -- Removed
+        this.on("removed", (parent: MedsurfDraw.ImageObject) => {
+            // Events
+            // -- Mode
+            parent.modeInteraction.off("setDefaultMode", this.modeInteraction.setDefaultMode, this.modeInteraction);
+            parent.modeInteraction.off("setMode", this.modeInteraction.setMode, this.modeInteraction);
+        });
+        //</editor-fold>
     }
 
     /**
diff --git a/src/lib/elements/basics/EditableText.ts b/src/lib/elements/basics/EditableText.ts
index 9fe369ed..b70b900a 100644
--- a/src/lib/elements/basics/EditableText.ts
+++ b/src/lib/elements/basics/EditableText.ts
@@ -184,6 +184,13 @@ export class EditableText extends BaseText<EditableTextModel> {
     //</editor-fold>
 
     //<editor-fold desc="Public function">
+    /**
+     * Select end of text
+     */
+    public selectEndText(): void {
+        this.writeInteraction.selectEndText();
+    }
+
     /**
      * Select all text
      */
diff --git a/src/lib/elements/connections/Line.ts b/src/lib/elements/connections/Line.ts
index 8a250ae8..639bdb71 100644
--- a/src/lib/elements/connections/Line.ts
+++ b/src/lib/elements/connections/Line.ts
@@ -265,7 +265,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer
         this._editButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf3f0',
-            description: 'Editieren',
+            description: 'Bearbeiten',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -284,7 +284,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer
         this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf87f',
-            description: 'In den\nHintergrund',
+            description: 'Nach Hinten\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -295,7 +295,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer
         this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({
             image: this.image,
             text: '\uf856',
-            description: 'In den\nVordergrund',
+            description: 'Nach Vorne\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             menuElements: [
                 {
@@ -337,7 +337,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer
         this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf248',
-            description: 'Ungruppieren',
+            description: 'Aus Gruppe\nentfernen',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -1660,6 +1660,9 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.editImageObject(this.model);
     }
@@ -1701,6 +1704,10 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer
     public onButtonDelete(event: PIXI.InteractionEvent): void {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
+
+        // Hide menu
+        this.image.controlHideMenu();
+
         setTimeout(() => {
             // Set mode
             this.modeInteraction.setMode("delete");
@@ -1717,6 +1724,9 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.degroupLayerGroupImageObject(this.model);
         if (unselectElement) {
@@ -1733,6 +1743,9 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Copy image object
         this.image.copyImageObject(this.model);
     }
@@ -1745,6 +1758,9 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Clipboard image object
         this.image.clipboardImageObject(this.model);
     }
@@ -2178,8 +2194,6 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer
      * Show control points
      */
     public showControlPoints(): void {
-        // TODO remove
-        // TODO remove console.log(this.name);
         if (this._lineControlPointElement) {
             this._lineControlPointElement.showItem()
         }
diff --git a/src/lib/elements/controls/SelectGroupElement.ts b/src/lib/elements/controls/SelectGroupElement.ts
index 65e53da5..a19e5009 100644
--- a/src/lib/elements/controls/SelectGroupElement.ts
+++ b/src/lib/elements/controls/SelectGroupElement.ts
@@ -187,7 +187,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> {
         this._editButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf3f0',
-            description: 'Editieren',
+            description: 'Bearbeiten',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -206,7 +206,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> {
         this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf87f',
-            description: 'In den\nHintergrund',
+            description: 'Nach Hinten\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -217,7 +217,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> {
         this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({
             image: this.image,
             text: '\uf856',
-            description: 'In den\nVordergrund',
+            description: 'Nach Vorne\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             menuElements: [
                 {
@@ -259,7 +259,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> {
         this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf248',
-            description: 'Ungruppieren',
+            description: 'Gruppe\nauflösen',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -320,7 +320,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> {
         this._interactiveGroupingButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf277',
-            description: 'Interactive Gruppe',
+            description: 'Interaktive\nFläche\n(Gruppe)',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -339,7 +339,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> {
         this._poiGroupingButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf649',
-            description: 'POI Gruppe',
+            description: 'POI\n(Gruppe)',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -358,7 +358,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> {
         this._textGroupingButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf53f',
-            description: 'Text Gruppe',
+            description: 'Farbgruppe',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -377,7 +377,7 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> {
         this._legendGroupingButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf0cb',
-            description: 'Legenden Gruppe',
+            description: 'Legende\n(Gruppe)',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -839,6 +839,9 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.editImageObjectGrouping();
     }
@@ -871,6 +874,9 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Delete
         this.displayObjects.forEach((io) => {
             (io as any).modeInteraction.setMode("delete_multiple");
@@ -892,7 +898,9 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> {
     public onButtonDegroup(): void {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
-        this.controlHideMenu();
+
+        // Hide menu
+        this.image.controlHideMenu();
 
         // Emits
         if (this._type === SelectGroupType.GROUPING) {
@@ -913,6 +921,9 @@ export class SelectGroupElement extends BaseContainer<SelectGroupModel> {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Copy image object
         switch (this._type) {
             case SelectGroupType.LAYERGROUP:
diff --git a/src/lib/elements/fills/FillCollection.ts b/src/lib/elements/fills/FillCollection.ts
index a74e27f9..03039a76 100644
--- a/src/lib/elements/fills/FillCollection.ts
+++ b/src/lib/elements/fills/FillCollection.ts
@@ -166,7 +166,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection,
         this._editButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf3f0',
-            description: 'Editieren',
+            description: 'Bearbeiten',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -185,7 +185,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection,
         this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf87f',
-            description: 'In den\nHintergrund',
+            description: 'Nach Hinten\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -196,7 +196,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection,
         this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({
             image: this.image,
             text: '\uf856',
-            description: 'In den\nVordergrund',
+            description: 'Nach Vorne\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             menuElements: [
                 {
@@ -238,7 +238,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection,
         this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf248',
-            description: 'Ungruppieren',
+            description: 'Aus Gruppe\nentfernen',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -1386,6 +1386,9 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection,
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.editImageObject(this.model);
     }
@@ -1427,6 +1430,10 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection,
     public onButtonDelete(event: PIXI.InteractionEvent): void {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
+
+        // Hide menu
+        this.image.controlHideMenu();
+
         setTimeout(() => {
             // Set mode
             this.modeInteraction.setMode("delete");
@@ -1443,6 +1450,9 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection,
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.degroupLayerGroupImageObject(this.model);
         if (unselectElement) {
@@ -1459,6 +1469,9 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection,
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Copy image object
         this.image.copyImageObject(this.model);
     }
@@ -1471,6 +1484,9 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection,
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Clipboard image object
         this.image.clipboardImageObject(this.model);
     }
diff --git a/src/lib/elements/images/Image.ts b/src/lib/elements/images/Image.ts
index 34f36143..f29b56de 100644
--- a/src/lib/elements/images/Image.ts
+++ b/src/lib/elements/images/Image.ts
@@ -292,7 +292,7 @@ export class Image extends BaseContainer<ImageModel> {
         this._interactiveAreaButtonElement = new MedsurfDraw.IndexedRoundButtonElement({
             image: this,
             text: '\uf304',
-            description: 'Interactive\nFläche',
+            description: 'Zeichenstift\n(Interaktiv)',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             index: '\uf277',
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
@@ -304,7 +304,7 @@ export class Image extends BaseContainer<ImageModel> {
         this._polygonButtonElement = new MedsurfDraw.RoundSubMenuElement({
             image: this,
             text: '\uf304',
-            description: 'Polygon',
+            description: 'Zeichenstift',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             menuElements: [
                 {
@@ -328,7 +328,7 @@ export class Image extends BaseContainer<ImageModel> {
         this._legendButtonElement = new MedsurfDraw.IndexedRoundButtonElement({
             image: this,
             text: '\uf893',
-            description: 'Legende',
+            description: 'Text\n(Legende)',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             index: '\uf0cb',
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
@@ -364,7 +364,7 @@ export class Image extends BaseContainer<ImageModel> {
         this._arrowTextGroupingButtonElement = new MedsurfDraw.IndexedRoundButtonElement({
             image: this,
             text: '\uf124',
-            description: 'Spickel in\nText Gruppe',
+            description: 'Pfeil\n(Farbgruppe)',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             index: '\uf53f',
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
@@ -376,7 +376,7 @@ export class Image extends BaseContainer<ImageModel> {
         this._arrowButtonElement = new MedsurfDraw.RoundSubMenuElement({
             image: this,
             text: '\uf124',
-            description: 'Spickel',
+            description: 'Pfeil',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             menuElements: [
                 {
@@ -400,7 +400,7 @@ export class Image extends BaseContainer<ImageModel> {
         this._ellipseInteractiveGroupingButtonElement = new MedsurfDraw.IndexedRoundButtonElement({
             image: this,
             text: '\uf5ed',
-            description: 'Ellipse in\ninteractiver\nGruppe',
+            description: 'Ellipse\n(Interaktiv)',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             index: '\uf277',
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
@@ -436,7 +436,7 @@ export class Image extends BaseContainer<ImageModel> {
         this._rectangleInteractiveGroupingButtonElement = new MedsurfDraw.IndexedRoundButtonElement({
             image: this,
             text: '\uf5ef',
-            description: 'Rechteck in\ninteractiver\nGruppe',
+            description: 'Rechteck\n(Interaktiv)',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             index: '\uf277',
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
@@ -472,7 +472,7 @@ export class Image extends BaseContainer<ImageModel> {
         this._arrowMarkerButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this,
             text: '\uf30a',
-            description: 'Pfeil\nMarker',
+            description: 'Marker\n(Pfeil)',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -491,7 +491,7 @@ export class Image extends BaseContainer<ImageModel> {
         this._ellipseMarkerButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this,
             text: '\uf276',
-            description: 'Ellipse\nMarker',
+            description: 'Marker\n(Punkt)',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -514,7 +514,7 @@ export class Image extends BaseContainer<ImageModel> {
         this._interactiveGroupingButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this,
             text: '\uf277',
-            description: 'Interactive\nGruppe',
+            description: 'Interaktive\nFläche\n(Gruppe)',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -533,7 +533,7 @@ export class Image extends BaseContainer<ImageModel> {
         this._poiGroupingButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this,
             text: '\uf649',
-            description: 'POI Gruppe',
+            description: 'POI\n(Gruppe)',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -552,7 +552,7 @@ export class Image extends BaseContainer<ImageModel> {
         this._textGroupingButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this,
             text: '\uf53f',
-            description: 'Text Gruppe',
+            description: 'Farbgruppe',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -571,7 +571,7 @@ export class Image extends BaseContainer<ImageModel> {
         this._legendGroupingButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this,
             text: '\uf0cb',
-            description: 'Legenden\nGruppe',
+            description: 'Legende\n(Gruppe)',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
diff --git a/src/lib/elements/legends/LegendCollection.ts b/src/lib/elements/legends/LegendCollection.ts
index 58e3cd10..888a2ff5 100644
--- a/src/lib/elements/legends/LegendCollection.ts
+++ b/src/lib/elements/legends/LegendCollection.ts
@@ -183,7 +183,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti
         this._editButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf3f0',
-            description: 'Editieren',
+            description: 'Bearbeiten',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -202,7 +202,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti
         this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf87f',
-            description: 'In den\nHintergrund',
+            description: 'Nach Hinten\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -213,7 +213,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti
         this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({
             image: this.image,
             text: '\uf856',
-            description: 'In den\nVordergrund',
+            description: 'Nach Vorne\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             menuElements: [
                 {
@@ -255,7 +255,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti
         this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf248',
-            description: 'Ungruppieren',
+            description: 'Aus Gruppe\nentfernen',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -990,6 +990,9 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.editImageObject(this.model);
     }
@@ -1031,6 +1034,10 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti
     public onButtonDelete(event: PIXI.InteractionEvent): void {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
+
+        // Hide menu
+        this.image.controlHideMenu();
+
         setTimeout(() => {
             // Set mode
             this.modeInteraction.setMode("delete");
@@ -1047,6 +1054,9 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.degroupLayerGroupImageObject(this.model);
         if (unselectElement) {
@@ -1063,6 +1073,9 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Copy image object
         this.image.copyImageObject(this.model);
     }
@@ -1075,6 +1088,9 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Clipboard image object
         this.image.clipboardImageObject(this.model);
     }
diff --git a/src/lib/elements/legends/LegendColumn.ts b/src/lib/elements/legends/LegendColumn.ts
index cd35c842..c9effe8a 100644
--- a/src/lib/elements/legends/LegendColumn.ts
+++ b/src/lib/elements/legends/LegendColumn.ts
@@ -108,7 +108,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base
         this._editButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf3f0',
-            description: 'Editieren',
+            description: 'Bearbeiten',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -127,7 +127,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base
         this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf87f',
-            description: 'In den\nHintergrund',
+            description: 'Nach Hinten\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -138,7 +138,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base
         this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({
             image: this.image,
             text: '\uf856',
-            description: 'In den\nVordergrund',
+            description: 'Nach Vorne\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             menuElements: [
                 {
@@ -180,7 +180,7 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base
         this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf248',
-            description: 'Ungruppieren',
+            description: 'Aus Gruppe\nentfernen',
             descriptionFontSize: 6,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -508,6 +508,9 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.editLegendColumn(this.model, (this.parent as MedsurfDraw.LegendCollection).model);
     }
@@ -549,6 +552,10 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base
     public onButtonDelete(event: PIXI.InteractionEvent): void {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
+
+        // Hide menu
+        this.image.controlHideMenu();
+
         setTimeout(() => {
             (this.parent as MedsurfDraw.LegendCollection).removeLegendColumn(this.model);
             /*
@@ -568,6 +575,9 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Degroup image object
         (this.parent as MedsurfDraw.LegendCollection).onButtonDegroup(unselectElement);
     }
@@ -580,6 +590,9 @@ export class LegendColumn extends BaseElementContainer<Models.LegendColumn, Base
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Copy image object
         (this.parent as MedsurfDraw.LegendCollection).onButtonDuplicate();
     }
diff --git a/src/lib/elements/legends/LegendRow.ts b/src/lib/elements/legends/LegendRow.ts
index 8af8e074..496c6e20 100644
--- a/src/lib/elements/legends/LegendRow.ts
+++ b/src/lib/elements/legends/LegendRow.ts
@@ -126,7 +126,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen
         this._editButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf3f0',
-            description: 'Editieren',
+            description: 'Bearbeiten',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -145,7 +145,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen
         this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf87f',
-            description: 'In den\nHintergrund',
+            description: 'Nach Hinten\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -156,7 +156,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen
         this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({
             image: this.image,
             text: '\uf856',
-            description: 'In den\nVordergrund',
+            description: 'Nach Vorne\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             menuElements: [
                 {
@@ -198,7 +198,7 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen
         this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf248',
-            description: 'Ungruppieren',
+            description: 'Aus Gruppe\nentfernen',
             descriptionFontSize: 6,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -687,6 +687,9 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.editLegendRow(this.model, (this.parent as MedsurfDraw.LegendColumn).model, (this.parent.parent as MedsurfDraw.LegendCollection).model);
 
@@ -730,6 +733,10 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen
     public onButtonDelete(event: PIXI.InteractionEvent): void {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
+
+        // Hide menu
+        this.image.controlHideMenu();
+
         setTimeout(() => {
             (this.parent as MedsurfDraw.LegendColumn).removeLegendRow(this.model);
             /* TODO remove
@@ -749,6 +756,9 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Degroup image object
         (this.parent as MedsurfDraw.LegendColumn).onButtonDegroup(unselectElement);
     }
@@ -761,6 +771,9 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Copy image object
         (this.parent as MedsurfDraw.LegendColumn).onButtonDuplicate();
     }
@@ -773,6 +786,9 @@ export class LegendRow extends BaseElementContainer<Models.LegendRow, BaseElemen
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Clipboard image object
         (this.parent as MedsurfDraw.LegendColumn).onButtonClipboard();
     }
diff --git a/src/lib/elements/positionings/PositionPoint.ts b/src/lib/elements/positionings/PositionPoint.ts
index b56d41ec..d0dfb46c 100644
--- a/src/lib/elements/positionings/PositionPoint.ts
+++ b/src/lib/elements/positionings/PositionPoint.ts
@@ -195,7 +195,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba
         this._editButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf3f0',
-            description: 'Editieren',
+            description: 'Bearbeiten',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -214,7 +214,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba
         this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf87f',
-            description: 'In den\nHintergrund',
+            description: 'Nach Hinten\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -225,7 +225,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba
         this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({
             image: this.image,
             text: '\uf856',
-            description: 'In den\nVordergrund',
+            description: 'Nach Vorne\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             menuElements: [
                 {
@@ -267,7 +267,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba
         this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf248',
-            description: 'Ungruppieren',
+            description: 'Aus Gruppe\nentfernen',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -1139,6 +1139,9 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.editImageObject(this.model);
     }
@@ -1180,6 +1183,10 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba
     public onButtonDelete(event: PIXI.InteractionEvent): void {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
+
+        // Hide menu
+        this.image.controlHideMenu();
+
         setTimeout(() => {
             // Set mode
             this.modeInteraction.setMode("delete");
@@ -1196,6 +1203,9 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.degroupLayerGroupImageObject(this.model);
         if (unselectElement) {
@@ -1212,6 +1222,9 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Copy image object
         this.image.copyImageObject(this.model);
     }
@@ -1224,6 +1237,9 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Clipboard image object
         this.image.clipboardImageObject(this.model);
     }
@@ -1266,7 +1282,9 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba
         this.emit("debounceDraw");
 
         // Emits
-        // TODO not needed this.emit("selftestChanged");
+        this.emit("selftestChanged");
+
+        // Update
         this.image.updateImageObject(this.model);
     }
     //</editor-fold>
diff --git a/src/lib/elements/positionings/SelftestPoint.ts b/src/lib/elements/positionings/SelftestPoint.ts
index db76dff1..548487ad 100644
--- a/src/lib/elements/positionings/SelftestPoint.ts
+++ b/src/lib/elements/positionings/SelftestPoint.ts
@@ -8,6 +8,7 @@ import {BaseContainer, BaseContainerImageModel} from "../../bases/elements/BaseC
  * Selftest point model
  */
 export class SelftestPointModel extends BaseContainerImageModel {
+    isSelftest: boolean;
     selftestPoint: Models.Point;
     options: Models.ElementOptions = {hasLine: true, lineColor: 0xFFFFFF, lineAlpha: 1, hasFill: false};
 }
@@ -145,19 +146,24 @@ export class SelftestPoint extends BaseContainer<SelftestPointModel> {
      * @private
      */
     protected _modeSelftest(): void {
-        // Setup
-        this.interactive = true;
-        this.cursor = "select";
+        if (this.data.isSelftest) {
+            // Setup
+            this.interactive = true;
+            this.cursor = "select";
 
-        // Events
-        this.selectInteraction.reset();
-        this.on("pointerover", this.selectInteraction.onHover, this.selectInteraction);
-        this.on("pointerout", this.selectInteraction.onOut, this.selectInteraction);
-        this.on("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction);
-        this.on("mouseup", this.selectInteraction.onSelftest, this.selectInteraction);
-
-        // Show item
-        this.showItem();
+            // Events
+            this.selectInteraction.reset();
+            this.on("pointerover", this.selectInteraction.onHover, this.selectInteraction);
+            this.on("pointerout", this.selectInteraction.onOut, this.selectInteraction);
+            this.on("mousedown", this.selectInteraction.onPointerDown, this.selectInteraction);
+            this.on("mouseup", this.selectInteraction.onSelftest, this.selectInteraction);
+
+            // Show item
+            this.showItem();
+        } else {
+            // Hide item
+            this.hideItem();
+        }
     }
 
     /**
@@ -263,6 +269,21 @@ export class SelftestPoint extends BaseContainer<SelftestPointModel> {
     //</editor-fold>
 
     //<editor-fold desc="Getter and Setter">
+    /**
+     * Get isSelftest
+     */
+    public get isSelftest(): boolean {
+        return this.data.isSelftest;
+    }
+
+    /**
+     * Set isSelftest
+     * @param value
+     */
+    public set isSelftest(value: boolean) {
+        this.data.isSelftest = value;
+    }
+
     /**
      * Get selftest point
      */
diff --git a/src/lib/elements/primitives/ArrowPrimitive.ts b/src/lib/elements/primitives/ArrowPrimitive.ts
index 7a2e6134..80621d88 100644
--- a/src/lib/elements/primitives/ArrowPrimitive.ts
+++ b/src/lib/elements/primitives/ArrowPrimitive.ts
@@ -100,6 +100,8 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
         this.modeInteraction.on("remove-blocked_item", this._removeModeBlockedItem, this);
         this.modeInteraction.on('draw_item', this._modeDrawItem, this);
         this.modeInteraction.on("remove-draw_item", this._removeModeDrawItem, this);
+        this.modeInteraction.on('draw_clickable', this._modeDrawSelect, this);
+        this.modeInteraction.on('remove-draw_clickable', this._removeModeDrawSelect, this);
         this.modeInteraction.on('choose_select', this._modeChooseSelect, this);
         this.modeInteraction.on('remove-choose_select', this._removeModeChooseSelect, this);
         this.modeInteraction.on('choose_unselect', this._modeChooseUnselect, this);
@@ -137,6 +139,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
             // -- Move
             parent.on("endPositionPointMove", this.endPositionPointMove, this);
             // -- Selftest
+            parent.on("selftestChanged", this.selftestChanged, this);
             this._selftestElement.selectInteraction.on("onSelftest", this.onSelftest, this);
         });
         // -- Removed
@@ -148,6 +151,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
             // -- Move
             parent.off("endPositionPointMove", this.endPositionPointMove, this);
             // -- Selftest
+            parent.off("selftestChanged", this.selftestChanged, this);
             this._selftestElement.selectInteraction.off("onSelftest", this.onSelftest, this);
         });
         //</editor-fold>
@@ -183,6 +187,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
         // -- Selftest element
         this._selftestElement = new MedsurfDraw.SelftestPoint({
             image: this.image,
+            isSelftest: (this.parent as MedsurfDraw.PositionPoint).model.isSelftest,
             selftestPoint: new PIXI.Point(
                 this.parent.x + this.model.rectangle.x * imageWidth,
                 this.parent.y + this.model.rectangle.y * imageWidth
@@ -207,7 +212,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
         this._editButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf3f0',
-            description: 'Editieren',
+            description: 'Bearbeiten',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -226,7 +231,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
         this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf87f',
-            description: 'In den\nHintergrund',
+            description: 'Nach Hinten\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -237,7 +242,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
         this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({
             image: this.image,
             text: '\uf856',
-            description: 'In den\nVordergrund',
+            description: 'Nach Vorne\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             menuElements: [
                 {
@@ -280,7 +285,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
         this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf248',
-            description: 'Ungruppieren',
+            description: 'Aus Gruppe\nentfernen',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -615,6 +620,7 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
             this.interactive = true;
             this.cursor = "select";
 
+            // Elements
             // -- Arrow element
             this._arrowElement.hideItem();
 
@@ -1011,6 +1017,44 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
         this.scaleInteraction.reset();
     }
 
+    /**
+     * Mode draw select
+     * @private
+     */
+    protected _modeDrawSelect(): void {
+        // Setup
+        this.interactive = true;
+        this.cursor = "select";
+
+        // Element
+        // -- Arrow element
+        this._arrowElement.options.lineColor = Design.positionPoint.lineColorGroup;
+        this._arrowElement.options.fillColor = Design.positionPoint.fillColorGroup;
+
+        // Draw
+        this.emit("debounceDraw");
+    }
+
+    /**
+     * Remove mode draw select
+     * @param parent
+     * @param mode
+     * @private
+     */
+    protected _removeModeDrawSelect(parent: MedsurfDraw.ImageObject, mode: string): void {
+        // Setup
+        this.interactive = false;
+
+        // Element
+        // -- Arrow element
+        this._arrowElement.options = Object.assign({}, this.model.options);
+
+        // Draw
+        if (!mode.startsWith('delete')) {
+            this.emit("debounceDraw");
+        }
+    }
+
     /**
      * Mode choose select
      * @private
@@ -1139,6 +1183,9 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.editPrimitive(this.model);
     }
@@ -1191,6 +1238,10 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
     public onButtonDelete(event: PIXI.InteractionEvent): void {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
+
+        // Hide menu
+        this.image.controlHideMenu();
+
         setTimeout(() => {
             // Set mode
             this.modeInteraction.setMode("delete");
@@ -1207,6 +1258,9 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Degroup image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonDegroup(false);
 
@@ -1289,6 +1343,9 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Copy image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonDuplicate();
     }
@@ -1301,6 +1358,9 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Clipboard image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonClipboard();
     }
@@ -1861,6 +1921,15 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
     }
     //</editor-fold>
 
+    //<editor-fold desc="Selftest">
+    /**
+     * Selftest changed
+     */
+    public selftestChanged(): void {
+        this._selftestElement.isSelftest = (this.parent as MedsurfDraw.PositionPoint).model.isSelftest;
+    }
+    //</editor-fold>
+
     //<editor-fold desc="BaseContainer">
     /**
      * Get rectangle
diff --git a/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts b/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts
index f1809800..fc76fba1 100644
--- a/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts
+++ b/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts
@@ -168,7 +168,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba
         this._editButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf3f0',
-            description: 'Editieren',
+            description: 'Bearbeiten',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -187,7 +187,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba
         this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf87f',
-            description: 'In den\nHintergrund',
+            description: 'Nach Hinten\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -198,7 +198,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba
         this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({
             image: this.image,
             text: '\uf856',
-            description: 'In den\nVordergrund',
+            description: 'Nach Vorne\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             menuElements: [
                 {
@@ -241,7 +241,7 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba
         this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf248',
-            description: 'Ungruppieren',
+            description: 'Aus Gruppe\nentfernen',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -1042,6 +1042,9 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.editPrimitive(this.model);
     }
@@ -1094,6 +1097,10 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba
     public onButtonDelete(event: PIXI.InteractionEvent): void {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
+
+        // Hide menu
+        this.image.controlHideMenu();
+
         setTimeout(() => {
             // Set mode
             this.modeInteraction.setMode("delete");
@@ -1110,6 +1117,9 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Degroup image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonDegroup(false);
 
@@ -1192,6 +1202,9 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Copy image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonDuplicate();
     }
@@ -1204,6 +1217,9 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Clipboard image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonClipboard();
     }
diff --git a/src/lib/elements/primitives/EllipsePrimitive.ts b/src/lib/elements/primitives/EllipsePrimitive.ts
index 04ea6c06..14459330 100644
--- a/src/lib/elements/primitives/EllipsePrimitive.ts
+++ b/src/lib/elements/primitives/EllipsePrimitive.ts
@@ -100,6 +100,8 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
         this.modeInteraction.on("remove-blocked_item", this._removeModeBlockedItem, this);
         this.modeInteraction.on('draw_item', this._modeDrawItem, this);
         this.modeInteraction.on("remove-draw_item", this._removeModeDrawItem, this);
+        this.modeInteraction.on('draw_clickable', this._modeDrawSelect, this);
+        this.modeInteraction.on('remove-draw_clickable', this._removeModeDrawSelect, this);
         this.modeInteraction.on('choose_select', this._modeChooseSelect, this);
         this.modeInteraction.on('remove-choose_select', this._removeModeChooseSelect, this);
         this.modeInteraction.on('choose_unselect', this._modeChooseUnselect, this);
@@ -137,6 +139,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
             // -- Move
             parent.on("endPositionPointMove", this.endPositionPointMove, this);
             // -- Selftest
+            parent.on("selftestChanged", this.selftestChanged, this);
             this._selftestElement.selectInteraction.on("onSelftest", this.onSelftest, this);
         });
         // -- Removed
@@ -148,6 +151,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
             // -- Move
             parent.off("endPositionPointMove", this.endPositionPointMove, this);
             // -- Selftest
+            parent.off("selftestChanged", this.selftestChanged, this);
             this._selftestElement.selectInteraction.off("onSelftest", this.onSelftest, this);
         });
         //</editor-fold>
@@ -177,6 +181,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
         // -- Selftest element
         this._selftestElement = new MedsurfDraw.SelftestPoint({
             image: this.image,
+            isSelftest: (this.parent as MedsurfDraw.PositionPoint).model.isSelftest,
             selftestPoint: new PIXI.Point(
                 this.parent.x + this.model.ellipse.x * imageWidth,
                 this.parent.y + this.model.ellipse.y * imageWidth
@@ -192,7 +197,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
         this._editButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf3f0',
-            description: 'Editieren',
+            description: 'Bearbeiten',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -211,7 +216,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
         this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf87f',
-            description: 'In den\nHintergrund',
+            description: 'Nach Hinten\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -222,7 +227,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
         this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({
             image: this.image,
             text: '\uf856',
-            description: 'In den\nVordergrund',
+            description: 'Nach Vorne\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             menuElements: [
                 {
@@ -265,7 +270,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
         this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf248',
-            description: 'Ungruppieren',
+            description: 'Aus Gruppe\nentfernen',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -589,6 +594,7 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
             this.interactive = true;
             this.cursor = "select";
 
+            // Elements
             // -- Ellipse element
             this._ellipseElement.hideItem();
 
@@ -977,6 +983,44 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
         this.scaleInteraction.reset();
     }
 
+    /**
+     * Mode draw select
+     * @private
+     */
+    protected _modeDrawSelect(): void {
+        // Setup
+        this.interactive = true;
+        this.cursor = "select";
+
+        // Element
+        // -- Ellipse element
+        this._ellipseElement.options.lineColor = Design.positionPoint.lineColorGroup;
+        this._ellipseElement.options.fillColor = Design.positionPoint.fillColorGroup;
+
+        // Draw
+        this.emit("debounceDraw");
+    }
+
+    /**
+     * Remove mode draw select
+     * @param parent
+     * @param mode
+     * @private
+     */
+    protected _removeModeDrawSelect(parent: MedsurfDraw.ImageObject, mode: string): void {
+        // Setup
+        this.interactive = false;
+
+        // Element
+        // -- Ellipse element
+        this._ellipseElement.options = Object.assign({}, this.model.options);
+
+        // Draw
+        if (!mode.startsWith('delete')) {
+            this.emit("debounceDraw");
+        }
+    }
+
     /**
      * Mode choose select
      * @private
@@ -1105,6 +1149,9 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.editPrimitive(this.model);
     }
@@ -1157,6 +1204,10 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
     public onButtonDelete(event: PIXI.InteractionEvent): void {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
+
+        // Hide menu
+        this.image.controlHideMenu();
+
         setTimeout(() => {
             // Set mode
             this.modeInteraction.setMode("delete");
@@ -1173,6 +1224,9 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Degroup image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonDegroup(false);
 
@@ -1255,6 +1309,9 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Copy image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonDuplicate();
     }
@@ -1267,6 +1324,9 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Clipboard image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonClipboard();
     }
@@ -1749,6 +1809,15 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
     }
     //</editor-fold>
 
+    //<editor-fold desc="Selftest">
+    /**
+     * Selftest changed
+     */
+    public selftestChanged(): void {
+        this._selftestElement.isSelftest = (this.parent as MedsurfDraw.PositionPoint).model.isSelftest;
+    }
+    //</editor-fold>
+
     //<editor-fold desc="BaseContainer">
     /**
      * Get rectangle
diff --git a/src/lib/elements/primitives/RectanglePrimitive.ts b/src/lib/elements/primitives/RectanglePrimitive.ts
index 6bbcfe6f..07ad215e 100644
--- a/src/lib/elements/primitives/RectanglePrimitive.ts
+++ b/src/lib/elements/primitives/RectanglePrimitive.ts
@@ -100,6 +100,8 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
         this.modeInteraction.on("remove-blocked_item", this._removeModeBlockedItem, this);
         this.modeInteraction.on('draw_item', this._modeDrawItem, this);
         this.modeInteraction.on("remove-draw_item", this._removeModeDrawItem, this);
+        this.modeInteraction.on('draw_clickable', this._modeDrawSelect, this);
+        this.modeInteraction.on('remove-draw_clickable', this._removeModeDrawSelect, this);
         this.modeInteraction.on('choose_select', this._modeChooseSelect, this);
         this.modeInteraction.on('remove-choose_select', this._removeModeChooseSelect, this);
         this.modeInteraction.on('choose_unselect', this._modeChooseUnselect, this);
@@ -137,6 +139,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
             // -- Move
             parent.on("endPositionPointMove", this.endPositionPointMove, this);
             // -- Selftest
+            parent.on("selftestChanged", this.selftestChanged, this);
             this._selftestElement.selectInteraction.on("onSelftest", this.onSelftest, this);
         });
         // -- Removed
@@ -148,6 +151,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
             // -- Move
             parent.off("endPositionPointMove", this.endPositionPointMove, this);
             // -- Selftest
+            parent.off("selftestChanged", this.selftestChanged, this);
             this._selftestElement.selectInteraction.off("onSelftest", this.onSelftest, this);
         });
         //</editor-fold>
@@ -177,6 +181,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
         // -- Selftest element
         this._selftestElement = new MedsurfDraw.SelftestPoint({
             image: this.image,
+            isSelftest: (this.parent as MedsurfDraw.PositionPoint).model.isSelftest,
             selftestPoint: new PIXI.Point(
                 this.parent.x + this.model.rectangle.x * imageWidth,
                 this.parent.y + this.model.rectangle.y * imageWidth
@@ -192,7 +197,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
         this._editButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf3f0',
-            description: 'Editieren',
+            description: 'Bearbeiten',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -211,7 +216,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
         this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf87f',
-            description: 'In den\nHintergrund',
+            description: 'Nach Hinten\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -222,7 +227,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
         this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({
             image: this.image,
             text: '\uf856',
-            description: 'In den\nVordergrund',
+            description: 'Nach Vorne\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             menuElements: [
                 {
@@ -265,7 +270,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
         this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf248',
-            description: 'Ungruppieren',
+            description: 'Aus Gruppe\nentfernen',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -590,6 +595,7 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
             this.interactive = true;
             this.cursor = "select";
 
+            // Elements
             // -- Rectangle element
             this._rectangleElement.hideItem();
 
@@ -978,6 +984,44 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
         this.scaleInteraction.reset();
     }
 
+    /**
+     * Mode draw select
+     * @private
+     */
+    protected _modeDrawSelect(): void {
+        // Setup
+        this.interactive = true;
+        this.cursor = "select";
+
+        // Element
+        // -- Rectangle element
+        this._rectangleElement.options.lineColor = Design.positionPoint.lineColorGroup;
+        this._rectangleElement.options.fillColor = Design.positionPoint.fillColorGroup;
+
+        // Draw
+        this.emit("debounceDraw");
+    }
+
+    /**
+     * Remove mode draw select
+     * @param parent
+     * @param mode
+     * @private
+     */
+    protected _removeModeDrawSelect(parent: MedsurfDraw.ImageObject, mode: string): void {
+        // Setup
+        this.interactive = false;
+
+        // Element
+        // -- Rectangle element
+        this._rectangleElement.options = Object.assign({}, this.model.options);
+
+        // Draw
+        if (!mode.startsWith('delete')) {
+            this.emit("debounceDraw");
+        }
+    }
+
     /**
      * Mode choose select
      * @private
@@ -1106,6 +1150,9 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.editPrimitive(this.model);
     }
@@ -1158,6 +1205,10 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
     public onButtonDelete(event: PIXI.InteractionEvent): void {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
+
+        // Hide menu
+        this.image.controlHideMenu();
+
         setTimeout(() => {
             // Set mode
             this.modeInteraction.setMode("delete");
@@ -1174,6 +1225,9 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Degroup image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonDegroup(false);
 
@@ -1256,6 +1310,9 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Copy image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonDuplicate();
     }
@@ -1268,6 +1325,9 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Clipboard image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonClipboard();
     }
@@ -1750,6 +1810,15 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
     }
     //</editor-fold>
 
+    //<editor-fold desc="Selftest">
+    /**
+     * Selftest changed
+     */
+    public selftestChanged(): void {
+        this._selftestElement.isSelftest = (this.parent as MedsurfDraw.PositionPoint).model.isSelftest;
+    }
+    //</editor-fold>
+
     //<editor-fold desc="BaseContainer">
     /**
      * Get rectangle
diff --git a/src/lib/elements/primitives/TextPrimitive.ts b/src/lib/elements/primitives/TextPrimitive.ts
index 5d7f3d59..a2416d6e 100644
--- a/src/lib/elements/primitives/TextPrimitive.ts
+++ b/src/lib/elements/primitives/TextPrimitive.ts
@@ -100,6 +100,8 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
         this.modeInteraction.on("remove-blocked_item", this._removeModeBlockedItem, this);
         this.modeInteraction.on('draw_item', this._modeDrawItem, this);
         this.modeInteraction.on("remove-draw_item", this._removeModeDrawItem, this);
+        this.modeInteraction.on('draw_clickable', this._modeDrawSelect, this);
+        this.modeInteraction.on('remove-draw_clickable', this._removeModeDrawSelect, this);
         this.modeInteraction.on('choose_select', this._modeChooseSelect, this);
         this.modeInteraction.on('remove-choose_select', this._removeModeChooseSelect, this);
         this.modeInteraction.on('choose_unselect', this._modeChooseUnselect, this);
@@ -111,6 +113,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
         this.moveInteraction.on("startMove", this.startMove, this);
         this.moveInteraction.on("onMove", this.onMove, this);
         this.moveInteraction.on("endMove", this.endMove, this);
+        this.moveInteraction.on("endMoveLock", this.endMoveLock, this);
         // -- Scale interaction
         this.scaleInteraction = new MedsurfDraw.ScaleInteraction(this);
         this.scaleInteraction.on("onScale", this.onScale, this);
@@ -139,6 +142,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
             // -- Move
             parent.on("endPositionPointMove", this.endPositionPointMove, this);
             // -- Selftest
+            parent.on("selftestChanged", this.selftestChanged, this);
             this._selftestElement.selectInteraction.on("onSelftest", this.onSelftest, this);
         });
         // -- Removed
@@ -151,6 +155,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
             // -- Move
             parent.off("endPositionPointMove", this.endPositionPointMove, this);
             // -- Selftest
+            parent.off("selftestChanged", this.selftestChanged, this);
             this._selftestElement.selectInteraction.off("onSelftest", this.onSelftest, this);
         });
         //</editor-fold>
@@ -192,6 +197,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
         // -- Selftest element
         this._selftestElement = new MedsurfDraw.SelftestPoint({
             image: this.image,
+            isSelftest: (this.parent as MedsurfDraw.PositionPoint).model.isSelftest,
             selftestPoint: new PIXI.Point(
                 this.parent.x + this.model.rectangle.x * imageWidth,
                 this.parent.y + this.model.rectangle.y * imageWidth
@@ -207,7 +213,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
         this._editButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf3f0',
-            description: 'Editieren',
+            description: 'Bearbeiten',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -226,7 +232,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
         this._moveToBackButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf87f',
-            description: 'In den\nHintergrund',
+            description: 'Nach Hinten\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -237,7 +243,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
         this._moveToFrontButtonElement = new MedsurfDraw.RoundSubMenuElement({
             image: this.image,
             text: '\uf856',
-            description: 'In den\nVordergrund',
+            description: 'Nach Vorne\nverschieben',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             menuElements: [
                 {
@@ -280,7 +286,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
         this._degroupButtonElement = new MedsurfDraw.RoundButtonElement({
             image: this.image,
             text: '\uf248',
-            description: 'Ungruppieren',
+            description: 'Aus Gruppe\nentfernen',
             descriptionFontSize: Design.subMenu.descriptionFontSize,
             circle: new PIXI.Circle(0, 0, Design.subMenu.buttonRadius),
             fontSize: Design.subMenu.fontSize,
@@ -641,6 +647,7 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
             this.interactive = true;
             this.cursor = "select";
 
+            // Elements
             // -- Text element
             this._textElement.hideItem();
 
@@ -885,11 +892,16 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
 
     /**
      * Remove mode select child
+     * @param parent
+     * @param mode
      * @private
      */
-    protected _removeModeSelectChild(): void {
+    protected _removeModeSelectChild(parent: MedsurfDraw.ImageObject, mode: string): void {
         // Emits
         this.image.updatePrimitive(this.model);
+
+        // Set select item
+        this.emit("debounceControlSelectItem");
     }
 
 
@@ -994,6 +1006,52 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
     protected _modeDrawItem(): void {
     }
 
+    /**
+     * Mode draw select
+     * @private
+     */
+    protected _modeDrawSelect(): void {
+        // Setup
+        this.interactive = true;
+        this.cursor = "select";
+
+        // Element
+        // -- Text element
+        this._textElement.style.fill = Design.positionPoint.fillColorGroup;
+
+        // Draw
+        this.emit("debounceDraw");
+    }
+
+    /**
+     * Remove mode draw select
+     * @param parent
+     * @param mode
+     * @private
+     */
+    protected _removeModeDrawSelect(parent: MedsurfDraw.ImageObject, mode: string): void {
+        // Get image width
+        const imageWidth = this.imageDimensions.width;
+
+        // Defaults
+        const style = Object.assign({}, this.model.style);
+        if (style.fontSize) {
+            if (typeof style.fontSize === 'string') {
+                style.fontSize = parseFloat(style.fontSize);
+            }
+            style.fontSize *= imageWidth;
+        }
+
+        // Setup
+        this.interactive = false;
+        // @ts-ignore TODO ignore
+        this._textElement.style = new PIXI.TextStyle(style);
+
+        // Draw
+        if (!mode.startsWith('delete')) {
+            this.emit("debounceDraw");
+        }
+    }
 
     /**
      * Remove mode draw item
@@ -1156,6 +1214,9 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Emits
         this.image.editPrimitive(this.model);
     }
@@ -1208,6 +1269,10 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
     public onButtonDelete(event: PIXI.InteractionEvent): void {
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
+
+        // Hide menu
+        this.image.controlHideMenu();
+
         setTimeout(() => {
             // Set mode
             this.modeInteraction.setMode("delete");
@@ -1224,6 +1289,9 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Degroup image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonDegroup(true);
 
@@ -1306,6 +1374,9 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Copy image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonDuplicate();
     }
@@ -1318,6 +1389,9 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
         // Menu
         this.collapseAllMenus(new PIXI.InteractionEvent());
 
+        // Hide menu
+        this.image.controlHideMenu();
+
         // Clipboard image object
         (this.parent as MedsurfDraw.PositionPoint).onButtonClipboard();
     }
@@ -1660,6 +1734,18 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
         (this.parent as MedsurfDraw.PositionPoint).moveInteraction.emit("endMove", event);
     }
 
+    /**
+     * End move lock
+     * @param event
+     */
+    public endMoveLock(event: PIXI.InteractionEvent): void {
+        // Select all text
+        this._textElement.selectEndText();
+
+        // Edit Text
+        this.editText();
+    }
+
     /**
      * End position point move
      */
@@ -1915,6 +2001,15 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
     }
     //</editor-fold>
 
+    //<editor-fold desc="Selftest">
+    /**
+     * Selftest changed
+     */
+    public selftestChanged(): void {
+        this._selftestElement.isSelftest = (this.parent as MedsurfDraw.PositionPoint).model.isSelftest;
+    }
+    //</editor-fold>
+
     //<editor-fold desc="BaseContainer">
     /**
      * Get rectangle
diff --git a/src/lib/generators/combinations/InteractiveAreaGenerator.ts b/src/lib/generators/combinations/InteractiveAreaGenerator.ts
index a7859c84..e25d15c1 100644
--- a/src/lib/generators/combinations/InteractiveAreaGenerator.ts
+++ b/src/lib/generators/combinations/InteractiveAreaGenerator.ts
@@ -86,7 +86,7 @@ export class InteractiveAreaGenerator extends BaseGenerator<MedsurfDraw.Image, I
 
         //<editor-fold desc="Elements">
         // -- Line element
-        if (this._lineElement && this._lineElement.modeInteraction.lastMode.endsWith('new')) {
+        if (this._lineElement && this._lineElement.modeInteraction.lastMode.endsWith('_new')) {
             this._lineElement.modeInteraction.setMode('delete_draw');
         }
         //</editor-fold>
diff --git a/src/lib/generators/combinations/MarkerGenerator.ts b/src/lib/generators/combinations/MarkerGenerator.ts
index 7354b75e..530111df 100644
--- a/src/lib/generators/combinations/MarkerGenerator.ts
+++ b/src/lib/generators/combinations/MarkerGenerator.ts
@@ -187,7 +187,7 @@ export class MarkerGenerator extends BaseGenerator<MedsurfDraw.Image, MarkerGene
                 layerGroup: this.data.layerGroup,
                 image: this.data.image,
                 bezierCourve: false,
-                stickMode: MedsurfDraw.StickMode.NOELEMENTS,
+                stickMode: MedsurfDraw.StickMode.POSITIONPOINTS,
                 startElement: positionPoint
             });
             this._lineGenerator.once("startGenerator", this.start, this);
@@ -222,17 +222,28 @@ export class MarkerGenerator extends BaseGenerator<MedsurfDraw.Image, MarkerGene
             this._startPositionPointElement = this._lineGenerator.startPositionPointElement as MedsurfDraw.PositionPoint;
         }
 
-        // Check if key pressed
-        if (!(MedsurfDraw.Keyboard.isKeyDown("ControlLeft") || MedsurfDraw.Keyboard.isKeyDown("ControlRight"))) {
-            // Members
-            this._enableKeyEvents = true;
+        const primitives = (this._lineGenerator.endPositionPointElement as MedsurfDraw.PositionPoint).model.primitives || [] as any [];
+        if (primitives.filter((p: any) => p.type === Models.ImageObjectType.TEXT).length > 0) {
+            // Emit end generator
+            this.emit("endGenerator");
 
-            // Members
-            this._state = MarkerGeneratorStates.TEXT;
+            // End
+            this.end();
+        } else {
+            if ((this._lineGenerator.endPositionPointElement as MedsurfDraw.PositionPoint).modeInteraction.lastMode !== 'draw_select') {
+                // Check if key pressed
+                if (!(MedsurfDraw.Keyboard.isKeyDown("ControlLeft") || MedsurfDraw.Keyboard.isKeyDown("ControlRight"))) {
+                    // Members
+                    this._enableKeyEvents = true;
+
+                    // Members
+                    this._state = MarkerGeneratorStates.TEXT;
+                }
+            }
+
+            // Setup generator
+            this.emit("debounceSetupGenerator", this._lineGenerator.endPositionPointElement);
         }
-
-        // Setup generator
-        this.emit("debounceSetupGenerator", this._lineGenerator.endPositionPointElement);
     }
 
     /**
diff --git a/src/lib/generators/connections/LineGenerator.ts b/src/lib/generators/connections/LineGenerator.ts
index 7fd706b1..a10b71c5 100644
--- a/src/lib/generators/connections/LineGenerator.ts
+++ b/src/lib/generators/connections/LineGenerator.ts
@@ -124,7 +124,7 @@ export class LineGenerator extends BaseGenerator<MedsurfDraw.Image, LineGenerato
 
         //<editor-fold desc="Elements">
         // -- Line element
-        if (this.lineElement && this.lineElement.modeInteraction.lastMode.endsWith('new')) {
+        if (this.lineElement && this.lineElement.modeInteraction.lastMode.endsWith('_new')) {
             this.lineElement.modeInteraction.setMode('delete_draw');
         }
         //</editor-fold>
@@ -342,7 +342,7 @@ export class LineGenerator extends BaseGenerator<MedsurfDraw.Image, LineGenerato
         this.lineElement.modeInteraction.setMode("delete_draw");
 
         // Check for same position point
-        if (this.startPositionPointElement !== this._endPositionPointGenerator.positionPointElement) {
+        if (this.startPositionPointElement !== this.endPositionPointElement) {
             // Create new line element
             this.startEndPositionPointGenerator();
 
@@ -372,6 +372,9 @@ export class LineGenerator extends BaseGenerator<MedsurfDraw.Image, LineGenerato
             this.data.layerGroup.layerImageObjects.push(layerImageObject);
             */
 
+            // Set mode
+            this.lineElement.modeInteraction.setModeItem('draw_select');
+
             // Emit end generator
             this.emit("endGenerator", this.endPositionPointElement);
 
diff --git a/src/lib/generators/copies/CloneLayerGenerator.ts b/src/lib/generators/copies/CloneLayerGenerator.ts
index 61e61d0a..ca890d4d 100644
--- a/src/lib/generators/copies/CloneLayerGenerator.ts
+++ b/src/lib/generators/copies/CloneLayerGenerator.ts
@@ -163,7 +163,7 @@ export class CloneLayerGenerator extends BaseGenerator<MedsurfDraw.Image, CloneL
 
         // Remove new elements
         imageObjects.filter((imageObject) => imageObject.modeInteraction.lastMode.startsWith('clone')
-            && imageObject.modeInteraction.lastMode.endsWith('new'))
+            && imageObject.modeInteraction.lastMode.endsWith('_new'))
             .sort((a, b) => { // Prio for line elements
                 const aModel = (a as any).model;
                 const bModel = (b as any).model;
diff --git a/src/lib/generators/legends/LegendGenerator.ts b/src/lib/generators/legends/LegendGenerator.ts
index dc220668..8a65edb2 100644
--- a/src/lib/generators/legends/LegendGenerator.ts
+++ b/src/lib/generators/legends/LegendGenerator.ts
@@ -158,7 +158,7 @@ export class LegendGenerator extends BaseGenerator<MedsurfDraw.Image, LegendGene
 
         //<editor-fold desc="Elements">
         // -- Legend element
-        if (this.legendElement && this.legendElement.modeInteraction.lastMode.endsWith('new')) {
+        if (this.legendElement && this.legendElement.modeInteraction.lastMode.endsWith('_new')) {
             this.legendElement.modeInteraction.setMode('delete_draw')
         }
         //</editor-fold>
diff --git a/src/lib/interactions/WriteInteraction.ts b/src/lib/interactions/WriteInteraction.ts
index 4c8ee943..263f693a 100644
--- a/src/lib/interactions/WriteInteraction.ts
+++ b/src/lib/interactions/WriteInteraction.ts
@@ -360,6 +360,17 @@ export class WriteInteraction<TElement extends MedsurfDraw.EditableText> extends
     //</editor-fold>
 
     //<editor-fold desc="Public functions">
+    /**
+     * Select end of text
+     */
+    public selectEndText(): void {
+        this.element.startTextIndex = this.element.text.length;
+        this.emit("onCaret");
+    }
+
+    /**
+     * Select all text
+     */
     public selectAllText(): void {
         this.element.textSelection = true;
         this.element.startTextIndex = this.element.text.length;
-- 
GitLab