diff --git a/org.framed.iorm.ui/core/fulfillment/FulfillmentFilled.etl b/org.framed.iorm.ui/core/fulfillment/FulfillmentFilled.etl
index 2251f4ea2af5cab0873660ce4b0381d36f82834a..62a4b63d020975cc8f94e9f917b382b8eed46018 100644
--- a/org.framed.iorm.ui/core/fulfillment/FulfillmentFilled.etl
+++ b/org.framed.iorm.ui/core/fulfillment/FulfillmentFilled.etl
@@ -34,13 +34,37 @@ rule FulfillmentNoRoleGroups
 				fulfillmentFillsRoleGroup(s) and
 				not(s.~features.get("Group_Constraints"))
 		
+		var fulfillmentsToDelete : OrderedSet(target!Fulfillment);
 		for(fulfillment : target!Fulfillment in s.~transformed) {
 			if(fulfillment.filled.instanceOf(target!RoleGroup))
-				delete(fulfillment);
-				s.~transformed.remove(fulfillment);
+				fulfillmentsToDelete.add(fulfillment); 
 		}	
+		for(fulfillment : target!Fulfillment in fulfillmentsToDelete) {
+			delete(fulfillment);
+			s.~transformed.remove(fulfillment);
+		}
 }
 
+@lazy
+rule FulfillmentWithOutFiller
+	transform s : source!Relation
+	to t : Sequence(target!Fulfillment)
+	extends Fulfillment {
+		guard : s.target.getType==(source!Type#CompartmentType)
+		
+		var fulfillmentsToDelete : OrderedSet(target!Fulfillment);
+		for(fulfillment : target!Fulfillment in s.~transformed) {
+			if(fulfillment.filled == null) {
+				fulfillment.filled.println();
+				fulfillmentsToDelete.add(fulfillment); }
+				
+		}	
+		for(fulfillment : target!Fulfillment in fulfillmentsToDelete) {
+			delete(fulfillment);
+			s.~transformed.remove(fulfillment);
+		}
+}			
+
 operation fulfillmentFillsRoleGroup(s: source!Relation):Boolean {
 	for(roles : source!Shape in s.getReferencedRoles) {
 		if(roles.getType==source!Type#RoleGroup)
diff --git a/org.framed.iorm.ui/core/rolemodel/RoleModel.etl b/org.framed.iorm.ui/core/rolemodel/RoleModel.etl
new file mode 100644
index 0000000000000000000000000000000000000000..949a119b9ccf7f6c1317294fc2b6188b863e305d
--- /dev/null
+++ b/org.framed.iorm.ui/core/rolemodel/RoleModel.etl
@@ -0,0 +1,27 @@
+/**
+ * The abstract rule for compartment type outside of compartment types
+ */
+@lazy
+rule RoleModel
+	transform s : source!Shape
+	to t : target!CompartmentType {
+		guard : s.getType==(source!Type#CompartmentType) and
+				not(s.~features.get("Compartment_Types")) and
+				(s.getContainer().getParent()==null or
+				 not(s.getContainer().getParent().getType()==(source!Type#CompartmentType)))
+		
+ 		//set the transformed target element to ensure the subrule work on the same target and only transform once
+ 		if(s.~transformed == null) {
+	 		s.~transformed = t;
+	 		//set the compartments name
+	 		t.name = s.name;
+	 		// iterate over all children of the compartment type	
+			if(not(s.getModel() == null)) {
+				for (elem : source!ModelElement in s.getModel().elements) {
+					//propagate the features list and and the main model reference to all children 
+					elem.~features = s.~features;
+					elem.~mainModel = s.~mainModel;
+					//transform all children
+					var e = elem.equivalent();	
+		}	}	}
+}
diff --git a/org.framed.iorm.ui/modules/compartment/CompartmentType.etl b/org.framed.iorm.ui/modules/compartment/CompartmentType.etl
index d8cfef2aca60cb32dead4669942ad479ba8c5e7d..d986b6480de3821bf19af9fa22112cea5cccc5d9 100644
--- a/org.framed.iorm.ui/modules/compartment/CompartmentType.etl
+++ b/org.framed.iorm.ui/modules/compartment/CompartmentType.etl
@@ -6,6 +6,7 @@ rule CompartmentType
 	transform s : source!Shape
 	to t : target!CompartmentType {
 		guard : s.getType==(source!Type#CompartmentType) and
+				s.~features.get("Compartment_Types") and
 				(s.getContainer().getParent()==null or
 				 not(s.getContainer().getParent().getType()==(source!Type#CompartmentType)))
 		
diff --git a/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroup.etl b/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroup.etl
index ffc775e81395f3c09b3979c2f592e987c14a3782..98af55d60d50fc8cfc21c25fe2ebf3577e7520fa 100644
--- a/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroup.etl
+++ b/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroup.etl
@@ -10,7 +10,8 @@ rule RoleGroup
 	to t : target!RoleGroup {	
 		guard : s.getType==(source!Type#RoleGroup) and
 				s.~features.get("Group_Constraints") //feature Group_Constraints implies feature Role_Constraints (not to check)
-		
+
+					
 		//set the transformed target element to ensure the subrule work on the same target and only transform once
  		if(s.~transformed == null) {
 	 		s.~transformed = t;
@@ -59,7 +60,7 @@ rule RoleGroupNotTransformed
 	to t : target!RoleGroup {	
 		guard : s.getType==(source!Type#RoleGroup) and
 				not(s.~features.get("Group_Constraints")) //feature Group_Constraints implies feature Role_Constraints (not to check)
-	
+		
 		//transform children
 		var children = s.`model`;
 		if (not (children == null)) {
diff --git a/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroupParent.etl b/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroupParent.etl
index d7d57467ea021b4c33904b0754fc59e4c545c1ad..0e059263271da51669019f413098c5ce69bb19df 100644
--- a/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroupParent.etl
+++ b/org.framed.iorm.ui/modules/roletype/group_constraints/RoleGroupParent.etl
@@ -9,7 +9,7 @@ rule RoleGroupInCompartmentType
 	to t : target!RoleGroup 
 	extends  RoleGroup {	
 		guard : not(s.getContainer().getParent() == null) and
-				s.getContainer().getParent().getType==(source!Type#CompartmentType)	
+				s.getContainer().getParent().getType==(source!Type#CompartmentType)
 				
 		//get the crom equivalent to compartment type the role group is in
 		var compartmentType = s.getContainer.getParent().equivalent();