diff --git a/package-lock.json b/package-lock.json
index 1c66dc8c7d5cffa211e8c16a52af286f2687825c..ae570e17f5f63d3382b31f938f87307b14b7d2bd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "medsurf-draw",
-  "version": "1.0.234",
+  "version": "1.0.238",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "medsurf-draw",
-      "version": "1.0.234",
+      "version": "1.0.238",
       "license": "MIT",
       "dependencies": {
         "@ascii-dev-user/medsurf-lib": "^1.18.0-144",
@@ -15,6 +15,7 @@
         "debounce": "^1.2.1",
         "gsap": "^3.6.0",
         "nom-events": "^1.0.1",
+        "pixi-cull": "^2.2.0",
         "pixi.js-keyboard": "1.0.9",
         "pixi.js-legacy": "^6.2.2",
         "uuid": "^8.3.2",
@@ -7840,6 +7841,14 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/pixi-cull": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/pixi-cull/-/pixi-cull-2.2.0.tgz",
+      "integrity": "sha512-Ngg9GbflBemRm2ASI3lqnMtARYJUx8n+71XzQzG8jexHVadnNZ/mdqYBUcdIpUITk5P5LW5tCJFn0QWgYMYeFw==",
+      "peerDependencies": {
+        "pixi.js": "^6.0.0"
+      }
+    },
     "node_modules/pixi.js": {
       "version": "6.2.2",
       "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-6.2.2.tgz",
@@ -18220,6 +18229,12 @@
         "pinkie": "^2.0.0"
       }
     },
+    "pixi-cull": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/pixi-cull/-/pixi-cull-2.2.0.tgz",
+      "integrity": "sha512-Ngg9GbflBemRm2ASI3lqnMtARYJUx8n+71XzQzG8jexHVadnNZ/mdqYBUcdIpUITk5P5LW5tCJFn0QWgYMYeFw==",
+      "requires": {}
+    },
     "pixi.js": {
       "version": "6.2.2",
       "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-6.2.2.tgz",
diff --git a/package.json b/package.json
index fbbbe0ff7e528094ba0849c5442663a82ab5bad3..794c4d6976b76766540cf704611eeec9a87dc1bd 100644
--- a/package.json
+++ b/package.json
@@ -35,6 +35,7 @@
     "debounce": "^1.2.1",
     "gsap": "^3.6.0",
     "nom-events": "^1.0.1",
+    "pixi-cull": "^2.2.0",
     "pixi.js-keyboard": "1.0.9",
     "pixi.js-legacy": "^6.2.2",
     "uuid": "^8.3.2",
diff --git a/src/app/index.ts b/src/app/index.ts
index b58361d3004cc0d4086ffe6b339a532538a66cf1..01c379e4c3325bf995435ffdf51db2bfcc7a0819 100644
--- a/src/app/index.ts
+++ b/src/app/index.ts
@@ -6,6 +6,7 @@ import * as Models from '@ascii-dev-user/medsurf-lib/models';
 import { gsap } from 'gsap';
 // @ts-ignore TODO ignore
 import { PixiPlugin } from 'gsap/PixiPlugin.js';
+import { Simple, SpatialHash } from "pixi-cull"
 
 /* TODO
     +++
@@ -25,6 +26,7 @@ import { PixiPlugin } from 'gsap/PixiPlugin.js';
     - Selftest selcet interaction available -> WHY?
     - Speicherfehler
     - Menu verschiebung auf LayerGruppe when Schrift angepasst wird (How to???)
+    Context menu schrift sowie anzeige nicht ok.
     Interactions anpassen; siehe dazu CloneInteraction -> kann einfacher so umgesetzt werden (Scale auf Draw nicht mehr notwendig; ausbauen) -> Test: Move events in Draw / Copy / Selection Generator
     Verpixelung ??? -> grössere Schrift
     Create Behaviour/Interaction -> to eliminate/clean up the elements
@@ -425,6 +427,10 @@ async function setupImage() {
     window["sprite"] = image;
     //</editor-fold>
 
+    // Start app
+    app.stage.emit("setDefaultMode", "default");
+    app.stage.interactive = true;
+
     return Promise.resolve();
 }
 
@@ -1245,7 +1251,7 @@ ready(() => {
             loader.load(async (loader: PIXI.Loader, resources: any) => {
                 //<editor-fold desc="PIXI">
                 PIXI.settings.PRECISION_FRAGMENT = PIXI.PRECISION.HIGH;
-                PIXI.settings.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT = false;
+                // PIXI.settings.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT = false;
                 // PIXI.settings.ROUND_PIXELS = true;
 
                 app = new PIXI.Application({
@@ -1291,6 +1297,11 @@ ready(() => {
                 /**
                  * setup cull
                  */
+                /*
+                const cull = new Simple() // new SpatialHash()
+                cull.addList(image.children)
+                cull.cull(image.getVisibleBounds())
+                */
                 /* TODO * /
                 const cull = new PixiCull.Cull({ recursive: true, toggle: 'renderable' });
                 cull.add(app.stage);
@@ -1319,6 +1330,7 @@ ready(() => {
 
                 //<editor-fold desc="App Ticker">
                 PIXI.Ticker.shared.add(() => { MedsurfDraw.Keyboard.update(); });
+                // PIXI.Ticker.shared.add(() => { cull.cull(image.getVisibleBounds()) });
                 // app.ticker.add(() => { MedsurfDraw.Keyboard.update(); });
                 // app.ticker.add(() => { Keyboard.update(); });
                 /*
@@ -1468,9 +1480,26 @@ buttonVirtualPointer.addEventListener("click", () => {
     virtualPointer.rectangle = new PIXI.Rectangle(canvas.width / 2, canvas.height / 2, size / 10, size / 16);
     virtualPointer.draw();
 
-    virtualPointer.visible = !virtualPointer.visible;
+    virtualPointer.toggleItem();
 });
 buttonTest.addEventListener("click", () => {
+    // TEST Fill
+    const test = new PIXI.Graphics();
+    test.name = "test_fill";
+    test.clear();
+    test.beginFill(0xff0000, 0.3);
+    test.drawCircle(0, 0, 30);
+    test.endFill();
+    test.position.set(300, 500);
+    // container
+    /*
+    const container = new PIXI.Container();
+    container.position.set(image.position.x, image.position.y);
+    container.addChild(test);
+    */
+    // stage
+    app.stage.addChild(test);
+
     /* Fill polygon test
     const test = new PIXI.Graphics();
 
@@ -1482,7 +1511,7 @@ buttonTest.addEventListener("click", () => {
 
     // Add Middle point
     // line1-5; fillLine; realLine1
-    (elementsArray['line1'] as MedsurfDraw.Line).onButtonAddMiddlePoint(image, layerGroupsArray['layerGroupModel1']);
+    // (elementsArray['line1'] as MedsurfDraw.Line).onButtonAddMiddlePoint(image, layerGroupsArray['layerGroupModel1']);
     // (elementsArray['fillLine'] as MedsurfDraw.Line).onButtonAddMiddlePoint(image);
     // (elementsArray['realLine1'] as MedsurfDraw.Line).onButtonAddMiddlePoint(image, layerGroupsArray['realLayerGroup1']);
 
@@ -1714,9 +1743,10 @@ buttonTest.addEventListener("click", () => {
 
     /** /
     // Default
-    // generator.once('startGenerator', _startGenerator, this); // NOT FOR CLONING; TODO layerGroup testing
+    generator.once('startGenerator', _startGenerator, this); // NOT FOR CLONING; TODO layerGroup testing
     generator.once('endGenerator', generator.endGenerator, generator);
     generator.once('abortGenerator', generator.abortGenerator, generator);
+    /**/
 
     // TODO remove
     /*
diff --git a/src/lib/elements/basics/Arrow.ts b/src/lib/elements/basics/Arrow.ts
index b91587f17d33bcec5634f19632d5ae82192af33a..93e5a54d11d759806187fcebbe5bcc5d75221d90 100644
--- a/src/lib/elements/basics/Arrow.ts
+++ b/src/lib/elements/basics/Arrow.ts
@@ -45,6 +45,8 @@ export class Arrow extends BaseGraphics<ArrowModel> {
             return;
         }
 
+        // this.cacheAsBitmap = false;
+
         this.clear();
 
         // Setup polygon
@@ -64,6 +66,8 @@ export class Arrow extends BaseGraphics<ArrowModel> {
         }
         this.drawPolygon(polygon);
         this.endFill();
+
+        // this.cacheAsBitmap = true;
     }
 
     //<editor-fold desc="Getter and Setter">
diff --git a/src/lib/elements/basics/Circle.ts b/src/lib/elements/basics/Circle.ts
index 44458e21a1502cb3bcf4a798f186e1472ab3368f..740660977e9e9846c765f8c1739eaaf4b0b8979f 100644
--- a/src/lib/elements/basics/Circle.ts
+++ b/src/lib/elements/basics/Circle.ts
@@ -44,17 +44,26 @@ export class Circle extends BaseGraphics<CircleModel> {
             return;
         }
 
+        this.cacheAsBitmap = false;
+
         this.clear();
 
+        // Get scale
+        const scale = this.getImage().scale;
+
         // Draw circle
         if (this.options.hasLine) {
-            this.lineStyle(this.lineWidth || 0, this.options.lineColor, this.options.lineAlpha, 1);
+            this.lineStyle((this.lineWidth || 1) * scale.x, this.options.lineColor, this.options.lineAlpha, 1);
         }
         if (this.options.hasFill) {
             this.beginFill(this.options.fillColor, this.options.fillAlpha);
         }
-        this.drawCircle(this.circle.x, this.circle.y, this.circle.radius);
+        this.drawCircle(this.circle.x, this.circle.y, this.circle.radius * scale.x);
         this.endFill();
+
+        this.scale.set(1 / scale.x, 1 / scale.y);
+
+        this.cacheAsBitmap = true;
     }
 
     //<editor-fold desc="Getter and Setter">
diff --git a/src/lib/elements/basics/Ellipse.ts b/src/lib/elements/basics/Ellipse.ts
index 749409460ed0959dc2d437556575a72ec3d6bb91..63b6ab5b880e6fb57b5de172863f3eef8617439e 100644
--- a/src/lib/elements/basics/Ellipse.ts
+++ b/src/lib/elements/basics/Ellipse.ts
@@ -44,17 +44,26 @@ export class Ellipse extends BaseGraphics<EllipseModel> {
             return;
         }
 
+        this.cacheAsBitmap = false;
+
         this.clear();
 
+        // Get scale
+        const scale = this.getImage().scale;
+
         // Draw ellipse
         if (this.options.hasLine) {
-            this.lineStyle(this.lineWidth || 0, this.options.lineColor, this.options.lineAlpha, 1);
+            this.lineStyle((this.lineWidth || 1) * scale.x, this.options.lineColor, this.options.lineAlpha, 1);
         }
         if (this.options.hasFill) {
             this.beginFill(this.options.fillColor, this.options.fillAlpha);
         }
-        this.drawEllipse(this.ellipse.x, this.ellipse.y, this.ellipse.width, this.ellipse.height);
+        this.drawEllipse(this.ellipse.x, this.ellipse.y, this.ellipse.width * scale.x, this.ellipse.height * scale.y);
         this.endFill();
+
+        this.scale.set(1 / scale.x, 1 / scale.y);
+
+        this.cacheAsBitmap = true;
     }
 
     //<editor-fold desc="Getter and Setter">
diff --git a/src/lib/elements/basics/Killbox.ts b/src/lib/elements/basics/Killbox.ts
index 3137864e53e74475c394a91a657246793d021f42..b583251836f87fd8da3672cdb16c28e261a93811 100644
--- a/src/lib/elements/basics/Killbox.ts
+++ b/src/lib/elements/basics/Killbox.ts
@@ -47,6 +47,8 @@ export class Killbox extends BaseContainer<KillboxModel> {
      * Draw
      */
     public draw(): void {
+        this.cacheAsBitmap = false;
+
         // Elements
         // -- Killbox element
         this._killboxElement.clear();
@@ -81,6 +83,8 @@ export class Killbox extends BaseContainer<KillboxModel> {
         this._killboxElement.lineTo(this.rectangle.x + this.rectangle.width, this.rectangle.y + this.rectangle.height - Design.selftestElement.gab);
 
         this._killboxElement.endFill();
+
+        this.cacheAsBitmap = true;
     }
 
     /**
diff --git a/src/lib/elements/basics/Rectangle.ts b/src/lib/elements/basics/Rectangle.ts
index 7cb8a7a1ea9b042b6609f839a0bb43eb68c0c279..60e6a3d8189bda3cd340b2adc5d2655360899b50 100644
--- a/src/lib/elements/basics/Rectangle.ts
+++ b/src/lib/elements/basics/Rectangle.ts
@@ -44,6 +44,8 @@ export class Rectangle extends BaseGraphics<RectangleModel> {
             return;
         }
 
+        this.cacheAsBitmap = false;
+
         this.clear();
 
         // Draw rectangle
@@ -55,6 +57,8 @@ export class Rectangle extends BaseGraphics<RectangleModel> {
         }
         this.drawRect(this.rectangle.x, this.rectangle.y, this.rectangle.width, this.rectangle.height);
         this.endFill();
+
+        this.cacheAsBitmap = true;
     }
 
     //<editor-fold desc="Getter and Setter">
diff --git a/src/lib/elements/buttons/IndexedRoundButtonMaskElement.ts b/src/lib/elements/buttons/IndexedRoundButtonMaskElement.ts
index cf67ef15e52b3e7aa6ecaf9dbac93c9ec0a36b23..82e6eb2c572b51acde056aa1251bba7e9ecec5bc 100644
--- a/src/lib/elements/buttons/IndexedRoundButtonMaskElement.ts
+++ b/src/lib/elements/buttons/IndexedRoundButtonMaskElement.ts
@@ -44,6 +44,8 @@ export class IndexedRoundButtonMaskElement extends BaseGraphics<IndexedRoundButt
             return;
         }
 
+        this.cacheAsBitmap = false;
+
         this.clear();
 
         /*
@@ -71,6 +73,8 @@ export class IndexedRoundButtonMaskElement extends BaseGraphics<IndexedRoundButt
             new PIXI.Point(this.textRectangle.x, this.textRectangle.y + this.textRectangle.height), // 6
         ]);
         this.endFill();
+
+        this.cacheAsBitmap = true;
     }
 
     /**
diff --git a/src/lib/elements/buttons/RoundButtonIndicatorElement.ts b/src/lib/elements/buttons/RoundButtonIndicatorElement.ts
index eaf3888f8b30cbbee71da05061b7831262cd2db0..a2d3dff0c4fc436e325234918fcc807f9a65dfe1 100644
--- a/src/lib/elements/buttons/RoundButtonIndicatorElement.ts
+++ b/src/lib/elements/buttons/RoundButtonIndicatorElement.ts
@@ -2,12 +2,12 @@ import * as PIXI from "pixi.js-legacy";
 import * as Models from "@ascii-dev-user/medsurf-lib/models";
 import * as MedsurfDraw from "../../public-api";
 import {Design} from "../../config/design";
-import {BaseGraphics, BaseGraphicsModel} from "../../bases/elements/BaseGraphics";
+import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer";
 
 /**
  * Round button indicator element model
  */
-export class RoundButtonIndicatorElementModel extends BaseGraphicsModel {
+export class RoundButtonIndicatorElementModel extends BaseContainerModel {
     circle?: PIXI.Circle;
     options?: Models.ElementOptions;
     lineWidth?: number;
@@ -16,7 +16,7 @@ export class RoundButtonIndicatorElementModel extends BaseGraphicsModel {
 /**
  * Round button indicator element
  */
-export class RoundButtonIndicatorElement extends BaseGraphics<RoundButtonIndicatorElementModel> {
+export class RoundButtonIndicatorElement extends BaseContainer<RoundButtonIndicatorElementModel> {
     /**
      * Elements
      */
diff --git a/src/lib/elements/connections/LineControlPoint.ts b/src/lib/elements/connections/LineControlPoint.ts
index 8270fb4bc7128069a790b7c6428180078a30d971..376c1ac85bf6cb72474867f3bdfa2f216ed026d9 100644
--- a/src/lib/elements/connections/LineControlPoint.ts
+++ b/src/lib/elements/connections/LineControlPoint.ts
@@ -45,6 +45,8 @@ export class LineControlPoint extends BaseGraphics<LineControlPointModel> {
             return;
         }
 
+        this.cacheAsBitmap = false;
+
         this.clear();
 
         if (!(this.points instanceof QuadraticCurvePointsModel || this.points instanceof BezierLinePointsModel)) {
@@ -76,6 +78,8 @@ export class LineControlPoint extends BaseGraphics<LineControlPointModel> {
             this.lineTo(this.points.end.x, this.points.end.y);
             this.endFill();
         }
+
+        this.cacheAsBitmap = true;
     }
 
     //<editor-fold desc="Getter and Setter">
diff --git a/src/lib/elements/connections/LineCorner.ts b/src/lib/elements/connections/LineCorner.ts
index 281cf6022ddf239689953d8b61bdd900f39394f8..d1bae3dac48f3bf602e5392b4711fca5bc4f3607 100644
--- a/src/lib/elements/connections/LineCorner.ts
+++ b/src/lib/elements/connections/LineCorner.ts
@@ -44,6 +44,8 @@ export class LineCorner extends BaseGraphics<LineCornerModel> {
             return;
         }
 
+        this.cacheAsBitmap = false;
+
         this.clear();
 
         // Draw corner
@@ -55,6 +57,8 @@ export class LineCorner extends BaseGraphics<LineCornerModel> {
 
             this.endFill();
         }
+
+        this.cacheAsBitmap = true;
     }
 
     //<editor-fold desc="Getter and Setter">
diff --git a/src/lib/elements/controls/MultiSelectItemElement.ts b/src/lib/elements/controls/MultiSelectItemElement.ts
index 8e841ee3a41dc5f5de39833199c31cf6a1284671..768cce08ab13e8b1124eba09fb679741dcfc053d 100644
--- a/src/lib/elements/controls/MultiSelectItemElement.ts
+++ b/src/lib/elements/controls/MultiSelectItemElement.ts
@@ -2,7 +2,6 @@ import * as PIXI from "pixi.js-legacy";
 import * as MedsurfDraw from "../../public-api";
 import {BaseContainer, BaseContainerModel} from "../../bases/elements/BaseContainer";
 import {Design} from "../../config/design";
-import {debounce} from "debounce";
 
 /**
  * Multi select item model
diff --git a/src/lib/elements/images/Image.ts b/src/lib/elements/images/Image.ts
index a41e36eaad3a3769e27b8c5034f0d6f0ceae9c20..bd312be71841c1cb17a6ca65151325673b5c2485 100644
--- a/src/lib/elements/images/Image.ts
+++ b/src/lib/elements/images/Image.ts
@@ -256,6 +256,7 @@ export class Image extends BaseContainer<ImageModel> {
         this._imageObjectMenuElement = new MedsurfDraw.MenuElement({
             menuElements: undefined
         });
+        // TODO oho
         this.addChild(this._imageObjectMenuElement);
         // -- Grouping menu element
         this._groupingMenuElement = new MedsurfDraw.MenuElement({