diff --git a/pom.xml b/pom.xml
index 394019085d6dac160bff4836ab398fef7215882d..9dfd357e5a12693eb76b3d8b4df234e13a0a3256 100644
--- a/pom.xml
+++ b/pom.xml
@@ -154,6 +154,8 @@
 										<exclude>**/fullcalendar/*</exclude>
 										<exclude>**/paella/**/*</exclude>
 										<exclude>**/sliderpips/jquery-ui-slider-pips.js</exclude>
+										<exclude>**/openolat/jquery.contenteditor.v2.js</exclude>
+										<exclude>**/interactjs/*</exclude>
 									</excludes>
 								</configuration>
 							</execution>
@@ -190,6 +192,8 @@
 										<exclude>**/mediaelementjs/**/*</exclude>
 										<exclude>**/paella/**/*</exclude>
 										<exclude>**/sliderpips/jquery-ui-slider-pips.js</exclude>
+										<exclude>**/openolat/jquery.contenteditor.v2.js</exclude>
+										<exclude>**/interactjs/*</exclude>
 									</excludes>
 								</configuration>
 							</execution>
@@ -315,6 +319,8 @@
 										<exclude>**/mediaelementjs/**/*</exclude>
 										<exclude>**/paella/**/*</exclude>
 										<exclude>**/sliderpips/jquery-ui-slider-pips.js</exclude>
+										<exclude>**/openolat/jquery.contenteditor.v2.js</exclude>
+										<exclude>**/interactjs/*</exclude>
 									</excludes>
 								</configuration>
 							</execution>
@@ -355,6 +361,8 @@
 										<exclude>**/mediaelementjs/**/*</exclude>
 										<exclude>**/paella/**/*</exclude>
 										<exclude>**/sliderpips/jquery-ui-slider-pips.js</exclude>
+										<exclude>**/openolat/jquery.contenteditor.v2.js</exclude>
+										<exclude>**/interactjs/*</exclude>
 									</excludes>
 								</configuration>
 							</execution>
diff --git a/src/main/java/org/olat/modules/ceditor/ui/component/ContentEditorComponent.java b/src/main/java/org/olat/modules/ceditor/ui/component/ContentEditorComponent.java
index 5e23ed658de37f06010828c50ada3c810320fd02..f43f31f3bd145a5b21a0e9c6e47b92c7710f302d 100644
--- a/src/main/java/org/olat/modules/ceditor/ui/component/ContentEditorComponent.java
+++ b/src/main/java/org/olat/modules/ceditor/ui/component/ContentEditorComponent.java
@@ -85,13 +85,15 @@ public class ContentEditorComponent extends FormBaseComponentImpl implements Com
 	public void setRootComponents(List<ContentEditorFragment> components) {
 		rootComponents = new ArrayList<>(components);
 		for(ContentEditorFragment component:components) {
-			component.setTranslator(getTranslator());
+			if(getTranslator() != null) {
+				component.setTranslator(getTranslator());
+			}
 		}
 		setDirty(true);
 	}
 	
 	public void addRootComponent(ContentEditorFragment component) {
-		if(rootComponents.contains(component)) return;
+		if(rootComponents.contains(component) || !checkAdd(component)) return;
 		
 		rootComponents.add(component);
 		setDirty(true);
@@ -101,6 +103,8 @@ public class ContentEditorComponent extends FormBaseComponentImpl implements Com
 	}
 	
 	public void addRootComponent(int index, ContentEditorFragment component) {
+		if(!checkAdd(component)) return;
+		
 		if(index >= 0 && index < rootComponents.size()) {
 			rootComponents.add(index, component);
 		} else {
@@ -112,6 +116,14 @@ public class ContentEditorComponent extends FormBaseComponentImpl implements Com
 		}
 	}
 	
+	private boolean checkAdd(ContentEditorFragment componentToAdd) {
+		if(componentToAdd == this) {
+			setDirty(true);// add to itself forbidden
+			return false;
+		}
+		return true;
+	}
+	
 	public boolean removeRootComponent(ContentEditorFragment component) {
 		boolean removed = rootComponents.remove(component);
 		if(removed) {
diff --git a/src/main/java/org/olat/modules/ceditor/ui/component/ContentEditorContainerComponent.java b/src/main/java/org/olat/modules/ceditor/ui/component/ContentEditorContainerComponent.java
index d268c1549e48bffa83d110b43f02acf4aa0688e7..ec487f492fc4d14fdae88b6a92f05b1a96ea08fc 100644
--- a/src/main/java/org/olat/modules/ceditor/ui/component/ContentEditorContainerComponent.java
+++ b/src/main/java/org/olat/modules/ceditor/ui/component/ContentEditorContainerComponent.java
@@ -177,6 +177,8 @@ public class ContentEditorContainerComponent extends FormBaseComponentImpl imple
 	}
 	
 	public void setElementAt(ContentEditorFragment component, int column, String sibling) {
+		if(!checkAdd(component)) return;
+
 		editorPart.setElementAt(component.getElementId(), column, sibling);
 		addComponent(component);
 		setDirty(true);
@@ -199,11 +201,22 @@ public class ContentEditorContainerComponent extends FormBaseComponentImpl imple
 	}
 	
 	public void addElement(ContentEditorFragment newComponent, ContentEditorFragment collocator, PageElementTarget target) {
+		if(!checkAdd(newComponent)) return;
+		
 		editorPart.addElement(newComponent.getElementId(), collocator.getElementId(), target);
 		addComponent(newComponent);
 		setDirty(true);
 	}
 	
+	private boolean checkAdd(ContentEditorFragment componentToAdd) {
+		if(componentToAdd == this) {
+			log.warn("Add container to itself: {}", componentToAdd);
+			setDirty(true);
+			return false;
+		}
+		return true;
+	}
+	
 	private void doDropFragment(UserRequest ureq) {
 		String sourceId = ureq.getParameter("source");
 		String slotId = ureq.getParameter("slot");
@@ -253,7 +266,8 @@ public class ContentEditorContainerComponent extends FormBaseComponentImpl imple
 	}
 	
 	public void addComponent(ContentEditorFragment fragmentCmp) {
-		if(fragmentCmp == null) return;
+		if(fragmentCmp == null || components.contains(fragmentCmp)) return;
+		
 		components.add(fragmentCmp);
 		if(getTranslator() != null) {
 			fragmentCmp.setTranslator(getTranslator());