diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/.classpath b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/.classpath
index ad32c83..eca7bdb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/.classpath
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/.settings/org.eclipse.jdt.core.prefs b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/.settings/org.eclipse.jdt.core.prefs
index 94d61f0..b3aa6d6 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/.settings/org.eclipse.jdt.core.prefs
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/.settings/org.eclipse.jdt.core.prefs
@@ -1,10 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.8
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/META-INF/MANIFEST.MF b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/META-INF/MANIFEST.MF
index 848e084..4b1719d 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/META-INF/MANIFEST.MF
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/META-INF/MANIFEST.MF
@@ -1,22 +1,23 @@
 Manifest-Version: 1.0
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.papyrus.infra.core;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.emf;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.emf.diagram.common;bundle-version="1.2.0",
- org.eclipse.emf.ecore;bundle-version="2.9.0",
- org.eclipse.gmf.runtime.notation;bundle-version="1.5.0",
- org.eclipse.papyrus.infra.gmfdiag.layers.model.editor;bundle-version="0.7.0",
- org.eclipse.emf.transaction;bundle-version="1.4.0",
- org.eclipse.papyrus.infra.core.log;bundle-version="1.2.0",
- org.eclipse.core.expressions,
- org.eclipse.gmf.runtime.diagram.ui.resources.editor,
- org.eclipse.papyrus.infra.gmfdiag.layers.runtime;bundle-version="0.7.0",
- org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.7.0",
- org.eclipse.ui.ide;bundle-version="3.10.0",
- org.eclipse.papyrus.infra.ui;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.core.sasheditor;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.gmfdiag.layers.model;bundle-version="0.7.0"
+Require-Bundle: org.eclipse.ui;bundle-version="[3.110.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.15.0,4.0.0)",
+ org.eclipse.papyrus.infra.core;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.infra.emf;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.infra.emf.diagram.common;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.15.0,3.0.0)",
+ org.eclipse.gmf.runtime.notation;bundle-version="[1.9.0,2.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.layers.model.editor;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.emf.transaction;bundle-version="[1.9.0,2.0.0)",
+ org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.6.0,4.0.0)",
+ org.eclipse.gmf.runtime.diagram.ui.resources.editor;bundle-version="[1.7.0,2.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.layers.runtime;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.gmf.runtime.diagram.ui;bundle-version="[1.8.0,2.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.14.0,4.0.0)",
+ org.eclipse.papyrus.infra.ui;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.papyrus.infra.core.sasheditor;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.layers.model;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.emf.edit.ui;bundle-version="[2.15.0,3.0.0)"
 Bundle-Vendor: %providerName
 Bundle-ActivationPolicy: lazy
 Bundle-Version: 0.7.0.qualifier
@@ -25,4 +26,5 @@
 Bundle-ManifestVersion: 2
 Bundle-Activator: org.eclipse.papyrus.infra.gmfdiag.layers.diagram.Activator
 Bundle-SymbolicName: org.eclipse.papyrus.infra.gmfdiag.layers.diagram;singleton:=true
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Automatic-Module-Name: org.eclipse.papyrus.infra.gmfdiag.layers.diagram
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/Activator.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/Activator.java
similarity index 96%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/Activator.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/Activator.java
index e35fa61..90b8872 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/Activator.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/Activator.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
  ******************************************************************************/
-package org.eclipse.papyrus.infra.gmfdiag.diagram;
+package org.eclipse.papyrus.infra.gmfdiag.layers.diagram;
 
 import org.eclipse.papyrus.infra.core.log.LogHelper;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/CreateLayersTreeDiagramHandler.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/CreateLayersTreeDiagramHandler.java
similarity index 94%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/CreateLayersTreeDiagramHandler.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/CreateLayersTreeDiagramHandler.java
index 345616e..e10cc7b 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/CreateLayersTreeDiagramHandler.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/CreateLayersTreeDiagramHandler.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
  ******************************************************************************/
-package org.eclipse.papyrus.infra.gmfdiag.diagram;
+package org.eclipse.papyrus.infra.gmfdiag.layers.diagram;
 
 import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
 import org.eclipse.papyrus.infra.emf.diagram.common.handler.CreateDiagramHandler;
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/DynamicContextMenu.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/DynamicContextMenu.java
similarity index 99%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/DynamicContextMenu.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/DynamicContextMenu.java
index 6e44f15..9146272 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/DynamicContextMenu.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/DynamicContextMenu.java
@@ -10,7 +10,7 @@
  ******************************************************************************/
 /**
  */
-package org.eclipse.papyrus.infra.gmfdiag.diagram;
+package org.eclipse.papyrus.infra.gmfdiag.layers.diagram;
 
 import java.util.ArrayList;
 import java.util.Collection;
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/LayersDiagramActionBarContributor.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/LayersDiagramActionBarContributor.java
similarity index 99%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/LayersDiagramActionBarContributor.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/LayersDiagramActionBarContributor.java
index fa05d91..c06f519 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/LayersDiagramActionBarContributor.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/LayersDiagramActionBarContributor.java
@@ -10,7 +10,7 @@
  ******************************************************************************/
 /**
  */
-package org.eclipse.papyrus.infra.gmfdiag.diagram;
+package org.eclipse.papyrus.infra.gmfdiag.layers.diagram;
 
 import java.util.ArrayList;
 import java.util.Collection;
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/LayersTreeDiagramEditorFactory.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/LayersTreeDiagramEditorFactory.java
similarity index 98%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/LayersTreeDiagramEditorFactory.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/LayersTreeDiagramEditorFactory.java
index a765ba2..cc9c243 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/LayersTreeDiagramEditorFactory.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/LayersTreeDiagramEditorFactory.java
@@ -10,7 +10,7 @@
  *     Christian W. Damus (CEA) - bug 392301
  *
  ******************************************************************************/
-package org.eclipse.papyrus.infra.gmfdiag.diagram;
+package org.eclipse.papyrus.infra.gmfdiag.layers.diagram;
 
 import org.eclipse.gmf.runtime.notation.Diagram;
 import org.eclipse.jface.resource.ImageDescriptor;
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/LayersTreeEditorDiagram.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/LayersTreeEditorDiagram.java
similarity index 95%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/LayersTreeEditorDiagram.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/LayersTreeEditorDiagram.java
index e3f33f2..35f9574 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/LayersTreeEditorDiagram.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/LayersTreeEditorDiagram.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
  ******************************************************************************/
-package org.eclipse.papyrus.infra.gmfdiag.diagram;
+package org.eclipse.papyrus.infra.gmfdiag.layers.diagram;
 
 import java.util.EventObject;
 import java.util.Iterator;
@@ -30,7 +30,7 @@
 import org.eclipse.papyrus.infra.core.editor.BackboneException;
 import org.eclipse.papyrus.infra.core.services.ServiceException;
 import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.presentation.LayersEditor;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.presentation.custom.CustomLayersEditor;
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
@@ -40,11 +40,9 @@
 import org.eclipse.ui.views.properties.PropertySheetPage;
 
 /**
- * This is an example of a EMF UML model editor. <!-- begin-user-doc --> <!-- end-user-doc -->
  *
- * @generated
  */
-public class LayersTreeEditorDiagram extends LayersEditor implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+public class LayersTreeEditorDiagram extends CustomLayersEditor implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
 
 	/**
 	 * ServiceRegistry used to retrieve needed services. This registry is provided by the multieditor.
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/ui/handlers/AbstractLayerCommand.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/ui/handlers/AbstractLayerCommand.java
similarity index 98%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/ui/handlers/AbstractLayerCommand.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/ui/handlers/AbstractLayerCommand.java
index e1e7a01..76649b7 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/ui/handlers/AbstractLayerCommand.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/ui/handlers/AbstractLayerCommand.java
@@ -11,7 +11,7 @@
  *     Christian W. Damus - bug 485220
  *     
  ******************************************************************************/
-package org.eclipse.papyrus.infra.gmfdiag.diagram.ui.handlers;
+package org.eclipse.papyrus.infra.gmfdiag.layers.diagram.ui.handlers;
 
 
 
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/ui/handlers/DynamicCreateChildMenu.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/ui/handlers/DynamicCreateChildMenu.java
similarity index 95%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/ui/handlers/DynamicCreateChildMenu.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/ui/handlers/DynamicCreateChildMenu.java
index 438840e..10c4920 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/ui/handlers/DynamicCreateChildMenu.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/ui/handlers/DynamicCreateChildMenu.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
  ******************************************************************************/
-package org.eclipse.papyrus.infra.gmfdiag.diagram.ui.handlers;
+package org.eclipse.papyrus.infra.gmfdiag.layers.diagram.ui.handlers;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/ui/handlers/ShowCreateChildCommand.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/ui/handlers/ShowCreateChildCommand.java
similarity index 95%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/ui/handlers/ShowCreateChildCommand.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/ui/handlers/ShowCreateChildCommand.java
index 51b4879..8a80d11 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/diagram/ui/handlers/ShowCreateChildCommand.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.diagram/src/org/eclipse/papyrus/infra/gmfdiag/layers/diagram/ui/handlers/ShowCreateChildCommand.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
  ******************************************************************************/
-package org.eclipse.papyrus.infra.gmfdiag.diagram.ui.handlers;
+package org.eclipse.papyrus.infra.gmfdiag.layers.diagram.ui.handlers;
 
 import org.eclipse.core.commands.IHandler;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.NotationDiagramHelper;
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/.classpath b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/.classpath
index c1f3189..c68522b 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/.classpath
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/.classpath
@@ -3,5 +3,6 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/META-INF/MANIFEST.MF b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/META-INF/MANIFEST.MF
index cbb24be..d08ce36 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/META-INF/MANIFEST.MF
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/META-INF/MANIFEST.MF
@@ -2,19 +2,19 @@
 Export-Package: org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.provider,
  org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider,
  org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.custom
-Require-Bundle: org.eclipse.core.runtime;resolution:=optional;x-installation:=greedy,
- org.eclipse.papyrus.infra.gmfdiag.layers.model;visibility:=reexport,
- org.eclipse.papyrus.infra.gmfdiag.layers.model;visibility:=reexport,
- org.eclipse.emf.edit;visibility:=reexport,
- org.eclipse.emf.ecore;visibility:=reexport,
- org.eclipse.emf.ecore.edit;visibility:=reexport,
- org.eclipse.gmf.runtime.notation;visibility:=reexport,
- org.eclipse.gmf.runtime.notation.edit;visibility:=reexport,
- org.eclipse.uml2.common.edit;visibility:=reexport,
- org.eclipse.papyrus.infra.gmfdiag.css.model;visibility:=reexport,
- org.eclipse.papyrus.infra.gmfdiag.css.model.edit;visibility:=reexport
+Require-Bundle: org.eclipse.core.runtime;resolution:=optional;x-installation:=greedy;bundle-version="[3.15.0,4.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.layers.model;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.layers.model;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.emf.edit;bundle-version="[2.14.0,3.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.15.0,3.0.0)",
+ org.eclipse.emf.ecore.edit;bundle-version="[2.11.0,3.0.0)",
+ org.eclipse.gmf.runtime.notation;bundle-version="[1.9.0,2.0.0)",
+ org.eclipse.gmf.runtime.notation.edit;bundle-version="[1.7.0,2.0.0)",
+ org.eclipse.uml2.common.edit;bundle-version="[2.4.0,3.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.css.model;bundle-version="[1.3.0,2.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.css.model.edit;bundle-version="[1.3.0,2.0.0)"
 Import-Package: org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers,
- org.osgi.framework
+ org.osgi.framework;version="[1.9.0,2.0.0)"
 Bundle-Vendor: %providerName
 Bundle-ActivationPolicy: lazy
 Bundle-ClassPath: .
@@ -24,4 +24,5 @@
 Bundle-ManifestVersion: 2
 Bundle-Activator: org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersEditPlugin$Implementation$Activator
 Bundle-SymbolicName: org.eclipse.papyrus.infra.gmfdiag.layers.model.edit;singleton:=true
+Automatic-Module-Name: org.eclipse.papyrus.infra.gmfdiag.layers.model.edit
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/build.properties b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/build.properties
index 8bea233..37bdf19 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/build.properties
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/build.properties
@@ -7,6 +7,7 @@
                plugin.properties,\
                about.html
 jars.compile.order = .
-source.. = src-gen/
+source.. = src-gen/,\
+           src
 output.. = bin/
 src.includes = about.html
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateAbstractLayer_propertyValueMap_StringToTypeInstanceMap.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateAbstractLayer_propertyValueMap_StringToTypeInstanceMap.gif
deleted file mode 100755
index 46a3c0c..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateAbstractLayer_propertyValueMap_StringToTypeInstanceMap.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateCSSHideInstance_stylesheet_EmbeddedStyleSheet.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateCSSHideInstance_stylesheet_EmbeddedStyleSheet.gif
deleted file mode 100755
index d8aebba..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateCSSHideInstance_stylesheet_EmbeddedStyleSheet.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateCSSHideInstance_stylesheet_StyleSheetReference.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateCSSHideInstance_stylesheet_StyleSheetReference.gif
deleted file mode 100755
index 160cd18..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateCSSHideInstance_stylesheet_StyleSheetReference.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateCSSInstance_styleSheet_EmbeddedStyleSheet.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateCSSInstance_styleSheet_EmbeddedStyleSheet.gif
deleted file mode 100755
index cfd10c2..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateCSSInstance_styleSheet_EmbeddedStyleSheet.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateCSSInstance_styleSheet_StyleSheetReference.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateCSSInstance_styleSheet_StyleSheetReference.gif
deleted file mode 100755
index 737366a..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateCSSInstance_styleSheet_StyleSheetReference.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFillInstance_fillColor_ColorInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFillInstance_fillColor_ColorInstance.gif
deleted file mode 100755
index 7b652ac..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFillInstance_fillColor_ColorInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_BooleanType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_BooleanType.gif
deleted file mode 100755
index 517abc7..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_BooleanType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_CSSHideType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_CSSHideType.gif
deleted file mode 100755
index a4565df..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_CSSHideType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_CSSType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_CSSType.gif
deleted file mode 100755
index b68de5e..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_CSSType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Color.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Color.gif
deleted file mode 100755
index 40ef685..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Color.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_CustomType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_CustomType.gif
deleted file mode 100755
index d56a04b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_CustomType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Fill.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Fill.gif
deleted file mode 100755
index 1ebcee0..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Fill.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Folder.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Folder.gif
deleted file mode 100755
index 40ef685..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Folder.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_FontType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_FontType.gif
deleted file mode 100755
index 5a308e5..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_FontType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_IntType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_IntType.gif
deleted file mode 100755
index ad157ff..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_IntType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_LayersStackApplication.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_LayersStackApplication.gif
deleted file mode 100755
index bf50c76..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_LayersStackApplication.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_LineType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_LineType.gif
deleted file mode 100755
index ad157ff..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_LineType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Metamodel.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Metamodel.gif
deleted file mode 100755
index 3408e14..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Metamodel.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Property.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Property.gif
deleted file mode 100755
index 2c857d7..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_Property.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_StringType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_StringType.gif
deleted file mode 100755
index 28525df..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_elements_StringType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_Folder.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_Folder.gif
deleted file mode 100755
index 40ef685..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_Folder.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_FolderElement.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_FolderElement.gif
deleted file mode 100755
index aced3dd..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_FolderElement.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_InstanciableElement.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_InstanciableElement.gif
deleted file mode 100755
index 997e434..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_InstanciableElement.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_LayerOperatorConfig.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_LayerOperatorConfig.gif
deleted file mode 100755
index d56a04b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_LayerOperatorConfig.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_LayerOperatorMultipleBinding.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_LayerOperatorMultipleBinding.gif
deleted file mode 100755
index aced3dd..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_LayerOperatorMultipleBinding.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_LayerOperatorToOperatorBinding.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_LayerOperatorToOperatorBinding.gif
deleted file mode 100755
index 9a73c8d..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_LayerOperatorToOperatorBinding.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_OperatorConfig.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_OperatorConfig.gif
deleted file mode 100755
index 8a4acfb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_OperatorConfig.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_PropertyId.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_PropertyId.gif
deleted file mode 100755
index 159895b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_PropertyId.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_TypeConfig.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_TypeConfig.gif
deleted file mode 100755
index 5fc9320..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateFolder_folderElements_TypeConfig.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerDescriptorRegistry_layerDescriptors_LayerDescriptor.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerDescriptorRegistry_layerDescriptors_LayerDescriptor.gif
deleted file mode 100755
index 261e1fa..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerDescriptorRegistry_layerDescriptors_LayerDescriptor.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerDescriptorRegistry_layerDescriptors_RegExpLayerDescriptor.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerDescriptorRegistry_layerDescriptors_RegExpLayerDescriptor.gif
deleted file mode 100755
index 9a4c243..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerDescriptorRegistry_layerDescriptors_RegExpLayerDescriptor.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerDescriptorRegistry_layerDescriptors_SimpleLayerDescriptor.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerDescriptorRegistry_layerDescriptors_SimpleLayerDescriptor.gif
deleted file mode 100755
index b7be165..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerDescriptorRegistry_layerDescriptors_SimpleLayerDescriptor.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerNamedStyle_layersStack_LayersStack.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerNamedStyle_layersStack_LayersStack.gif
deleted file mode 100755
index bb83437..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerNamedStyle_layersStack_LayersStack.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_AndStackedLayerOperatorDescriptor.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_AndStackedLayerOperatorDescriptor.gif
deleted file mode 100755
index 4a574b1..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_AndStackedLayerOperatorDescriptor.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_LayerOperatorDescriptor.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_LayerOperatorDescriptor.gif
deleted file mode 100755
index 1dbde94..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_LayerOperatorDescriptor.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_OrStackedLayerOperatorDescriptor.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_OrStackedLayerOperatorDescriptor.gif
deleted file mode 100755
index 6544d14..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_OrStackedLayerOperatorDescriptor.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_StackedLayerOperatorDescriptor.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_StackedLayerOperatorDescriptor.gif
deleted file mode 100755
index 09741e8..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_StackedLayerOperatorDescriptor.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_TopLayerOperatorDescriptor.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_TopLayerOperatorDescriptor.gif
deleted file mode 100755
index 700bd5e..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_descriptors_TopLayerOperatorDescriptor.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_propertyOperators_CustomPropertyOperator.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_propertyOperators_CustomPropertyOperator.gif
deleted file mode 100755
index da050a4..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_propertyOperators_CustomPropertyOperator.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_propertyOperators_DefaultPropertyOperator.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_propertyOperators_DefaultPropertyOperator.gif
deleted file mode 100755
index 8d289e3..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_propertyOperators_DefaultPropertyOperator.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_propertyOperators_PropertyOperator.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_propertyOperators_PropertyOperator.gif
deleted file mode 100755
index dcbeb3e..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorDescriptorRegistry_propertyOperators_PropertyOperator.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorMultipleBinding_bindings_OperatorBinding.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorMultipleBinding_bindings_OperatorBinding.gif
deleted file mode 100755
index 0cd2b13..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorMultipleBinding_bindings_OperatorBinding.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorMultipleBinding_bindings_SimpleBinding.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorMultipleBinding_bindings_SimpleBinding.gif
deleted file mode 100755
index a188f9e..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperatorMultipleBinding_bindings_SimpleBinding.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_AllViewsDerivedLayer.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_AllViewsDerivedLayer.gif
deleted file mode 100755
index b2b20e5..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_AllViewsDerivedLayer.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_CustomLayerOperator.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_CustomLayerOperator.gif
deleted file mode 100755
index d44bc94..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_CustomLayerOperator.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_Layer.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_Layer.gif
deleted file mode 100755
index 5bfbb66..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_Layer.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_RegExpLayer.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_RegExpLayer.gif
deleted file mode 100755
index c2b071b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_RegExpLayer.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_StackedLayerOperator.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_StackedLayerOperator.gif
deleted file mode 100755
index d799c18..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_StackedLayerOperator.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_TopLayerOperator.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_TopLayerOperator.gif
deleted file mode 100755
index 46106a3..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayerOperator_layers_TopLayerOperator.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayer_propertyValueMap_StringToTypeInstanceMap.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayer_propertyValueMap_StringToTypeInstanceMap.gif
deleted file mode 100755
index 2bed2e1..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayer_propertyValueMap_StringToTypeInstanceMap.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayer_propertyValues_BooleanInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayer_propertyValues_BooleanInstance.gif
deleted file mode 100755
index 3eb3c30..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayer_propertyValues_BooleanInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayer_propertyValues_IntInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayer_propertyValues_IntInstance.gif
deleted file mode 100755
index 01f8ed6..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayer_propertyValues_IntInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayer_propertyValues_StringInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayer_propertyValues_StringInstance.gif
deleted file mode 100755
index 6a0e6fc..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayer_propertyValues_StringInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_factory_LayerApplicationFactory.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_factory_LayerApplicationFactory.gif
deleted file mode 100755
index 85a51d1..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_factory_LayerApplicationFactory.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_layerDescriptorRegistry_LayerDescriptorRegistry.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_layerDescriptorRegistry_LayerDescriptorRegistry.gif
deleted file mode 100755
index 978ee2b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_layerDescriptorRegistry_LayerDescriptorRegistry.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_layerOperatorDescriptorRegistry_LayerOperatorDescriptorRegistry.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_layerOperatorDescriptorRegistry_LayerOperatorDescriptorRegistry.gif
deleted file mode 100755
index d8aebba..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_layerOperatorDescriptorRegistry_LayerOperatorDescriptorRegistry.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_layerStackRegistry_LayerStackDescriptorRegistry.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_layerStackRegistry_LayerStackDescriptorRegistry.gif
deleted file mode 100755
index 375192a..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_layerStackRegistry_LayerStackDescriptorRegistry.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_layersStacks_LayersStack.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_layersStacks_LayersStack.gif
deleted file mode 100755
index 64e6523..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_layersStacks_LayersStack.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_propertyRegistry_PropertyRegistry.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_propertyRegistry_PropertyRegistry.gif
deleted file mode 100755
index 85a51d1..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_propertyRegistry_PropertyRegistry.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_propertySetterRegistry_PropertySetterRegistry.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_propertySetterRegistry_PropertySetterRegistry.gif
deleted file mode 100755
index ed30ca5..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStackApplication_propertySetterRegistry_PropertySetterRegistry.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_AllViewsDerivedLayer.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_AllViewsDerivedLayer.gif
deleted file mode 100755
index 28ed761..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_AllViewsDerivedLayer.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_CustomLayerOperator.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_CustomLayerOperator.gif
deleted file mode 100755
index 845e9f4..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_CustomLayerOperator.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_Layer.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_Layer.gif
deleted file mode 100755
index dac0ebb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_Layer.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_RegExpLayer.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_RegExpLayer.gif
deleted file mode 100755
index 424142e..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_RegExpLayer.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_StackedLayerOperator.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_StackedLayerOperator.gif
deleted file mode 100755
index 252ab40..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_StackedLayerOperator.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_TopLayerOperator.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_TopLayerOperator.gif
deleted file mode 100755
index cd537c8..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateLayersStack_layers_TopLayerOperator.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateModelStyleSheets_stylesheets_EmbeddedStyleSheet.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateModelStyleSheets_stylesheets_EmbeddedStyleSheet.gif
deleted file mode 100755
index 381214b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateModelStyleSheets_stylesheets_EmbeddedStyleSheet.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateModelStyleSheets_stylesheets_StyleSheetReference.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateModelStyleSheets_stylesheets_StyleSheetReference.gif
deleted file mode 100755
index 8b42bd7..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateModelStyleSheets_stylesheets_StyleSheetReference.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertyRegistry_properties_Property.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertyRegistry_properties_Property.gif
deleted file mode 100755
index 9679858..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertyRegistry_properties_Property.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertyRegistry_typeRegistry_TypeRegistry.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertyRegistry_typeRegistry_TypeRegistry.gif
deleted file mode 100755
index 033a89e..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertyRegistry_typeRegistry_TypeRegistry.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_CSSPropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_CSSPropertySetter.gif
deleted file mode 100755
index 98a66f1..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_CSSPropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_FillPropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_FillPropertySetter.gif
deleted file mode 100755
index f8fc1d5..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_FillPropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_FontPropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_FontPropertySetter.gif
deleted file mode 100755
index 7e48702..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_FontPropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_IsValidPropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_IsValidPropertySetter.gif
deleted file mode 100755
index 05c17b3..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_IsValidPropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_IsVisiblePropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_IsVisiblePropertySetter.gif
deleted file mode 100755
index 53a716e..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_IsVisiblePropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_LinePropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_LinePropertySetter.gif
deleted file mode 100755
index 38bb022..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_LinePropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_NullPropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_NullPropertySetter.gif
deleted file mode 100755
index a7d0fbc..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_NullPropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_PropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_PropertySetter.gif
deleted file mode 100755
index 05eb255..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_PropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_isAbstractUmlSetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_isAbstractUmlSetter.gif
deleted file mode 100755
index 53a716e..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_propertySetters_isAbstractUmlSetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_setterMap_StringToPropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_setterMap_StringToPropertySetter.gif
deleted file mode 100755
index 4d10d57..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreatePropertySetterRegistry_setterMap_StringToPropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_BooleanInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_BooleanInstance.gif
deleted file mode 100755
index 889a6dd..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_BooleanInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_CSSHideInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_CSSHideInstance.gif
deleted file mode 100755
index 4a2fd2e..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_CSSHideInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_CSSInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_CSSInstance.gif
deleted file mode 100755
index 542f33a..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_CSSInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_ColorInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_ColorInstance.gif
deleted file mode 100755
index b021070..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_ColorInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_FillInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_FillInstance.gif
deleted file mode 100755
index 3be3f93..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_FillInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_FontInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_FontInstance.gif
deleted file mode 100755
index 7faa8da..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_FontInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_IntInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_IntInstance.gif
deleted file mode 100755
index d9a8b0c..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_IntInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_LineInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_LineInstance.gif
deleted file mode 100755
index d9a8b0c..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_LineInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_NullInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_NullInstance.gif
deleted file mode 100755
index cece060..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_NullInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_StringInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_StringInstance.gif
deleted file mode 100755
index b3062f7..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateProperty_defaultValue_StringInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertyIndexMap_value_PropertyIndex.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertyIndexMap_value_PropertyIndex.gif
deleted file mode 100755
index 34611db..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertyIndexMap_value_PropertyIndex.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_CSSHidePropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_CSSHidePropertySetter.gif
deleted file mode 100755
index a1607f9..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_CSSHidePropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_CSSPropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_CSSPropertySetter.gif
deleted file mode 100755
index 6875c5d..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_CSSPropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_FillPropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_FillPropertySetter.gif
deleted file mode 100755
index 9d0e539..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_FillPropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_FontPropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_FontPropertySetter.gif
deleted file mode 100755
index 12ec17b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_FontPropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_IsValidPropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_IsValidPropertySetter.gif
deleted file mode 100755
index 051fac7..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_IsValidPropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_IsVisiblePropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_IsVisiblePropertySetter.gif
deleted file mode 100755
index f5718d5..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_IsVisiblePropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_LinePropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_LinePropertySetter.gif
deleted file mode 100755
index f7e8a7b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_LinePropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_NullPropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_NullPropertySetter.gif
deleted file mode 100755
index 3d5c10a..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_NullPropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_PropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_PropertySetter.gif
deleted file mode 100755
index 396a4d7..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_PropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_isAbstractUmlSetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_isAbstractUmlSetter.gif
deleted file mode 100755
index f5718d5..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToPropertySetter_value_isAbstractUmlSetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_BooleanInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_BooleanInstance.gif
deleted file mode 100755
index 01247e3..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_BooleanInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_CSSHideInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_CSSHideInstance.gif
deleted file mode 100755
index 968b6be..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_CSSHideInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_CSSInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_CSSInstance.gif
deleted file mode 100755
index 0e5fb45..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_CSSInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_ColorInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_ColorInstance.gif
deleted file mode 100755
index 578475a..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_ColorInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_FillInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_FillInstance.gif
deleted file mode 100755
index 21f8952..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_FillInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_FontInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_FontInstance.gif
deleted file mode 100755
index fb71f8b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_FontInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_IntInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_IntInstance.gif
deleted file mode 100755
index e891a2b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_IntInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_LineInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_LineInstance.gif
deleted file mode 100755
index e891a2b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_LineInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_NullInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_NullInstance.gif
deleted file mode 100755
index b5e551d..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_NullInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_StringInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_StringInstance.gif
deleted file mode 100755
index dbbf504..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeInstanceMap_value_StringInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_BooleanType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_BooleanType.gif
deleted file mode 100755
index d203b1d..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_BooleanType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_CSSHideType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_CSSHideType.gif
deleted file mode 100755
index c05a418..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_CSSHideType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_CSSType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_CSSType.gif
deleted file mode 100755
index cca8aec..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_CSSType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_Color.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_Color.gif
deleted file mode 100755
index 81984fd..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_Color.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_CustomType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_CustomType.gif
deleted file mode 100755
index 983575c..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_CustomType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_Fill.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_Fill.gif
deleted file mode 100755
index b25c629..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_Fill.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_FontType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_FontType.gif
deleted file mode 100755
index eef1935..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_FontType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_IntType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_IntType.gif
deleted file mode 100755
index 9dd025a..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_IntType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_LineType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_LineType.gif
deleted file mode 100755
index 9dd025a..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_LineType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_StringType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_StringType.gif
deleted file mode 100755
index 385b365..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateStringToTypeMap_value_StringType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateTheme_stylesheets_EmbeddedStyleSheet.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateTheme_stylesheets_EmbeddedStyleSheet.gif
deleted file mode 100755
index d441dad..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateTheme_stylesheets_EmbeddedStyleSheet.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateTheme_stylesheets_StyleSheetReference.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateTheme_stylesheets_StyleSheetReference.gif
deleted file mode 100755
index 4712543..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateTheme_stylesheets_StyleSheetReference.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateTypeRegistry_types_StringToTypeMap.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateTypeRegistry_types_StringToTypeMap.gif
deleted file mode 100755
index d9e27ce..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateTypeRegistry_types_StringToTypeMap.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateWorkspaceThemes_themes_Theme.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateWorkspaceThemes_themes_Theme.gif
deleted file mode 100755
index becf3c9..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/ctool16/CreateWorkspaceThemes_themes_Theme.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/AbstractLayerOperator.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/AbstractLayerOperator.gif
deleted file mode 100755
index a26660e..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/AbstractLayerOperator.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/AllViewsDerivedLayer.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/AllViewsDerivedLayer.gif
index 5274202..ed87474 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/AllViewsDerivedLayer.gif
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/AllViewsDerivedLayer.gif
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/AndStackedLayerOperatorDescriptor.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/AndStackedLayerOperatorDescriptor.gif
deleted file mode 100755
index ea58a65..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/AndStackedLayerOperatorDescriptor.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/BooleanInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/BooleanInstance.gif
deleted file mode 100755
index f412370..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/BooleanInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/BooleanType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/BooleanType.gif
deleted file mode 100755
index a17dc7d..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/BooleanType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/Color.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/Color.gif
deleted file mode 100755
index b1f8afa..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/Color.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/ColorInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/ColorInstance.gif
deleted file mode 100755
index f412370..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/ColorInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/CustomType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/CustomType.gif
deleted file mode 100755
index 83afb9b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/CustomType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/EmbeddedStyleSheet.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/EmbeddedStyleSheet.gif
deleted file mode 100755
index 98b351f..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/EmbeddedStyleSheet.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/Fill.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/Fill.gif
deleted file mode 100755
index 8a5c70c..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/Fill.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FillInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FillInstance.gif
deleted file mode 100755
index f412370..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FillInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FillPropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FillPropertySetter.gif
deleted file mode 100755
index 5a9bc75..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FillPropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FolderElement.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FolderElement.gif
deleted file mode 100755
index cb1755a..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FolderElement.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FontInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FontInstance.gif
deleted file mode 100755
index f412370..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FontInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FontPropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FontPropertySetter.gif
deleted file mode 100755
index 7b7c428..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FontPropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FontType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FontType.gif
deleted file mode 100755
index e4bc22d..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/FontType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/InstanciableElement.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/InstanciableElement.gif
deleted file mode 100755
index 4365960..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/InstanciableElement.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/IntInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/IntInstance.gif
deleted file mode 100755
index f412370..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/IntInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/IntType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/IntType.gif
deleted file mode 100755
index d3dc5a9..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/IntType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/IsValidPropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/IsValidPropertySetter.gif
deleted file mode 100755
index cb1755a..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/IsValidPropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/IsVisiblePropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/IsVisiblePropertySetter.gif
deleted file mode 100755
index c3370c7..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/IsVisiblePropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/Layer.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/Layer.gif
index 9f55117..45731fe 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/Layer.gif
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/Layer.gif
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayerOperatorConfig.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayerOperatorConfig.gif
deleted file mode 100755
index 83afb9b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayerOperatorConfig.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayerOperatorMultipleBinding.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayerOperatorMultipleBinding.gif
deleted file mode 100755
index cb1755a..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayerOperatorMultipleBinding.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayerOperatorToOperatorBinding.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayerOperatorToOperatorBinding.gif
deleted file mode 100755
index 53500da..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayerOperatorToOperatorBinding.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayersStack.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayersStack.gif
index f830b32..c4a8af4 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayersStack.gif
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayersStack.gif
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayersStackApplication.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayersStackApplication.gif
index b4ac2ec..a26660e 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayersStackApplication.gif
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LayersStackApplication.gif
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LineInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LineInstance.gif
deleted file mode 100755
index f412370..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LineInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LinePropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LinePropertySetter.gif
deleted file mode 100755
index 338fb8d..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LinePropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LineType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LineType.gif
deleted file mode 100755
index d3dc5a9..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/LineType.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/ModelStyleSheets.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/ModelStyleSheets.gif
deleted file mode 100755
index cdd3b76..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/ModelStyleSheets.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/NullInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/NullInstance.gif
index f412370..c8d381f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/NullInstance.gif
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/NullInstance.gif
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/OperatorBinding.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/OperatorBinding.gif
deleted file mode 100755
index 89ad5da..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/OperatorBinding.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/OperatorConfig.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/OperatorConfig.gif
deleted file mode 100755
index ef56c14..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/OperatorConfig.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/OrStackedLayerOperatorDescriptor.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/OrStackedLayerOperatorDescriptor.gif
deleted file mode 100755
index c3370c7..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/OrStackedLayerOperatorDescriptor.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/PropertyId.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/PropertyId.gif
deleted file mode 100755
index 134551b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/PropertyId.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StringType.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/PropertyOperatorInstance.gif
similarity index 100%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StringType.gif
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/PropertyOperatorInstance.gif
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/PropertySetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/PropertySetter.gif
deleted file mode 100755
index 7bac4fd..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/PropertySetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/RegExpLayer.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/RegExpLayer.gif
deleted file mode 100755
index 5274202..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/RegExpLayer.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/RegExpLayerDescriptor.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/RegExpLayerDescriptor.gif
deleted file mode 100755
index 7bac4fd..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/RegExpLayerDescriptor.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/SimpleBinding.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/SimpleBinding.gif
deleted file mode 100755
index 420eee1..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/SimpleBinding.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StackedLayerOperator.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StackedLayerOperator.gif
index 6329a4e..739ebbf 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StackedLayerOperator.gif
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StackedLayerOperator.gif
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StringInstance.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StringInstance.gif
deleted file mode 100755
index f412370..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StringInstance.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StringToTypeInstanceMap.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StringToTypeInstanceMap.gif
index 249fda9..badaab0 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StringToTypeInstanceMap.gif
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StringToTypeInstanceMap.gif
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StyleSheetReference.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StyleSheetReference.gif
deleted file mode 100755
index c414fe9..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/StyleSheetReference.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/Theme.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/Theme.gif
deleted file mode 100755
index 5a9bc75..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/Theme.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/TopLayerOperator.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/TopLayerOperator.gif
index af9f5f2..7b7c428 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/TopLayerOperator.gif
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/TopLayerOperator.gif
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/TypeConfig.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/TypeConfig.gif
deleted file mode 100755
index caf2804..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/TypeConfig.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/WorkspaceThemes.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/WorkspaceThemes.gif
deleted file mode 100755
index 35ef84e..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/WorkspaceThemes.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/isAbstractUmlSetter.gif b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/isAbstractUmlSetter.gif
deleted file mode 100755
index c3370c7..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/icons/full/obj16/isAbstractUmlSetter.gif
+++ /dev/null
Binary files differ
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/plugin.properties b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/plugin.properties
index f552068..162bb15 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/plugin.properties
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/plugin.properties
@@ -261,3 +261,10 @@
 _UI_CSSInstance_style_feature = Style
 _UI_CSSHideInstance_stylesheet_feature = Stylesheet
 _UI_CSSHideInstance_style_feature = Style
+_UI_LayerOperator_layerOperatorDescriptorName_feature = Layer Operator Descriptor Name
+_UI_LayerOperator_layeroperatordescriptor_feature = Layeroperatordescriptor
+_UI_PropertyOperator_classname_feature = Classname
+_UI_PropertyOperator_operatorInstance_feature = Operator Instance
+_UI_PropertyOperator_classBundleID_feature = Class Bundle ID
+_UI_PropertyOperatorInstance_type = Property Operator Instance
+_UI_LayerOperator_layerOperatorDescriptor_feature = Layer Operator Descriptor
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/plugin.xml b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/plugin.xml
index cce1edb..bc1b780 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/plugin.xml
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/plugin.xml
@@ -10,7 +10,7 @@
       <!-- @generated layers -->
       <factory
             uri="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"
-            class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersItemProviderAdapterFactory"
+            class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.custom.CustomLayersItemProviderAdapterFactory"
             supportedTypes=
               "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
                org.eclipse.emf.edit.provider.IStructuredItemContentProvider
@@ -19,6 +19,13 @@
                org.eclipse.emf.edit.provider.IItemPropertySource"/>
    </extension>
 
+   <extension point="org.eclipse.emf.edit.childCreationExtenders">
+      <!-- @generated layers -->
+      <extender
+            uri="http://www.eclipse.org/gmf/runtime/1.0.2/notation"
+            class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersItemProviderAdapterFactory$NotationChildCreationExtender"/>
+   </extension>
+
    <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
       <!-- @generated layersconfig -->
       <factory
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/FolderElementItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/FolderElementItemProvider.java
index e77a6e1..029d5a8 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/FolderElementItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/FolderElementItemProvider.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.provider;
 
@@ -18,7 +19,9 @@
 
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.common.util.ResourceLocator;
+
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
@@ -29,6 +32,7 @@
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
 import org.eclipse.emf.edit.provider.ViewerNotification;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.FolderElement;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
 
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/FolderItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/FolderItemProvider.java
index 9b837e1..75b813a 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/FolderItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/FolderItemProvider.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.provider;
 
@@ -18,9 +19,12 @@
 
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.ecore.EStructuralFeature;
+
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ViewerNotification;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.Folder;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigFactory;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/InstanciableElementItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/InstanciableElementItemProvider.java
index 2b22884..2a85127 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/InstanciableElementItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/InstanciableElementItemProvider.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.provider;
 
@@ -18,10 +19,12 @@
 
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ViewerNotification;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.InstanciableElement;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
 
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/LayerOperatorConfigItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/LayerOperatorConfigItemProvider.java
index d59ac6e..c68c9dc 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/LayerOperatorConfigItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/LayerOperatorConfigItemProvider.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.provider;
 
@@ -18,7 +19,9 @@
 
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorConfig;
 
 /**
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/LayerOperatorMultipleBindingItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/LayerOperatorMultipleBindingItemProvider.java
index ea38c7e..ba7790f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/LayerOperatorMultipleBindingItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/LayerOperatorMultipleBindingItemProvider.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.provider;
 
@@ -18,10 +19,13 @@
 
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.ecore.EStructuralFeature;
+
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ViewerNotification;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorMultipleBinding;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigFactory;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/LayersConfigEditPlugin.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/LayersConfigEditPlugin.java
index 57f25e8..9bec2b3 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/LayersConfigEditPlugin.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/LayersConfigEditPlugin.java
@@ -20,7 +20,7 @@
 import org.osgi.framework.BundleActivator;
 
 /**
- * This is the central singleton for the Layersconfig edit plugin.
+ * This is the central singleton for the LayersConfig edit plugin.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  * @generated
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/OperatorBindingItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/OperatorBindingItemProvider.java
index f65c87e..253d041 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/OperatorBindingItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/OperatorBindingItemProvider.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.provider;
 
@@ -18,7 +19,9 @@
 
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.common.util.ResourceLocator;
+
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
@@ -27,6 +30,7 @@
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
 
 /**
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/OperatorConfigItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/OperatorConfigItemProvider.java
index 98c95b4..3818b59 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/OperatorConfigItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/OperatorConfigItemProvider.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.provider;
 
@@ -18,7 +19,9 @@
 
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.OperatorConfig;
 
 /**
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/PropertyIdItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/PropertyIdItemProvider.java
index b3297e1..5fa4360 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/PropertyIdItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/PropertyIdItemProvider.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.provider;
 
@@ -18,8 +19,10 @@
 
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.PropertyId;
 
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/TypeConfigItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/TypeConfigItemProvider.java
index 1fca231..d5fc56d 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/TypeConfigItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/provider/TypeConfigItemProvider.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.provider;
 
@@ -18,7 +19,9 @@
 
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.TypeConfig;
 
 /**
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/AbstractLayerItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/AbstractLayerItemProvider.java
index 8547c17..0d4292f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/AbstractLayerItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/AbstractLayerItemProvider.java
@@ -185,6 +185,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/AbstractLayerOperatorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/AbstractLayerOperatorItemProvider.java
deleted file mode 100755
index 91ac01d..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/AbstractLayerOperatorItemProvider.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class AbstractLayerOperatorItemProvider extends LayerOperatorItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public AbstractLayerOperatorItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-			addLayerOperatorDescriptorPropertyDescriptor(object);
-			addLayerOperatorDescriptorNamePropertyDescriptor(object);
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This adds a property descriptor for the Layer Operator Descriptor feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addLayerOperatorDescriptorPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_AbstractLayerOperator_layerOperatorDescriptor_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_AbstractLayerOperator_layerOperatorDescriptor_feature", "_UI_AbstractLayerOperator_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR,
-				 true,
-				 false,
-				 true,
-				 null,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This adds a property descriptor for the Layer Operator Descriptor Name feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addLayerOperatorDescriptorNamePropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_AbstractLayerOperator_layerOperatorDescriptorName_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_AbstractLayerOperator_layerOperatorDescriptorName_feature", "_UI_AbstractLayerOperator_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((AbstractLayerOperator) object).getName();
-		return label == null || label.length() == 0 ? getString("_UI_AbstractLayerOperator_type") : getString("_UI_AbstractLayerOperator_type") + " " + label;
-	}
-
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(AbstractLayerOperator.class)) {
-			case LayersPackage.ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
-				return;
-		}
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/AllViewsDerivedLayerItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/AllViewsDerivedLayerItemProvider.java
index e6e0bc6..9d3046a 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/AllViewsDerivedLayerItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/AllViewsDerivedLayerItemProvider.java
@@ -68,6 +68,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/AndStackedLayerOperatorDescriptorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/AndStackedLayerOperatorDescriptorItemProvider.java
deleted file mode 100755
index b56c924..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/AndStackedLayerOperatorDescriptorItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AndStackedLayerOperatorDescriptor;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AndStackedLayerOperatorDescriptor} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class AndStackedLayerOperatorDescriptorItemProvider extends StackedLayerOperatorDescriptorItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public AndStackedLayerOperatorDescriptorItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns AndStackedLayerOperatorDescriptor.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/AndStackedLayerOperatorDescriptor")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((AndStackedLayerOperatorDescriptor)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_AndStackedLayerOperatorDescriptor_type") : //$NON-NLS-1$
-			getString("_UI_AndStackedLayerOperatorDescriptor_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/ApplicationDependantElementItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/ApplicationDependantElementItemProvider.java
index 1d913a4..478e075 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/ApplicationDependantElementItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/ApplicationDependantElementItemProvider.java
@@ -23,6 +23,7 @@
 import org.eclipse.emf.common.util.ResourceLocator;
 
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -96,6 +97,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -140,7 +151,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/BooleanInstanceItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/BooleanInstanceItemProvider.java
deleted file mode 100755
index 8e091db..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/BooleanInstanceItemProvider.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class BooleanInstanceItemProvider extends TypeInstanceItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public BooleanInstanceItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-			addValuePropertyDescriptor(object);
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This adds a property descriptor for the Value feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addValuePropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_BooleanInstance_value_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_BooleanInstance_value_feature", "_UI_BooleanInstance_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.BOOLEAN_INSTANCE__VALUE,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This returns BooleanInstance.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/BooleanInstance")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public String getText(Object object) {
-		BooleanInstance booleanInstance = (BooleanInstance) object;
-		String propertyName = getInstancePropertyName(object);
-		return ("".equals(propertyName) ? getString("_UI_BooleanInstance_type") : "'" + propertyName + "'") + "=" + booleanInstance.isValue();
-	}
-
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(BooleanInstance.class)) {
-			case LayersPackage.BOOLEAN_INSTANCE__VALUE:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
-				return;
-		}
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/BooleanTypeItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/BooleanTypeItemProvider.java
deleted file mode 100755
index 6270f2f..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/BooleanTypeItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanType;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanType} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class BooleanTypeItemProvider extends TypeItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public BooleanTypeItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns BooleanType.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/BooleanType")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((BooleanType)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_BooleanType_type") : //$NON-NLS-1$
-			getString("_UI_BooleanType_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSHideInstanceItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSHideInstanceItemProvider.java
index 653533a..94df66a 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSHideInstanceItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSHideInstanceItemProvider.java
@@ -129,6 +129,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSHidePropertySetterItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSHidePropertySetterItemProvider.java
index 93a8e82..e4d0b2f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSHidePropertySetterItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSHidePropertySetterItemProvider.java
@@ -68,6 +68,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSHideTypeItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSHideTypeItemProvider.java
index 9f53c52..f388e32 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSHideTypeItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSHideTypeItemProvider.java
@@ -68,6 +68,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSInstanceItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSInstanceItemProvider.java
index e9b2c41..626e9ca 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSInstanceItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSInstanceItemProvider.java
@@ -129,6 +129,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSPropertySetterItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSPropertySetterItemProvider.java
index beb8919..03d36dc 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSPropertySetterItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSPropertySetterItemProvider.java
@@ -68,6 +68,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSTypeItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSTypeItemProvider.java
index 35a3dc4..52d1763 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSTypeItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CSSTypeItemProvider.java
@@ -68,6 +68,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/ColorInstanceItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/ColorInstanceItemProvider.java
deleted file mode 100755
index a0e1c60..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/ColorInstanceItemProvider.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class ColorInstanceItemProvider extends TypeInstanceItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public ColorInstanceItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-			addValuePropertyDescriptor(object);
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This adds a property descriptor for the Value feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addValuePropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_ColorInstance_value_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_ColorInstance_value_feature", "_UI_ColorInstance_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.COLOR_INSTANCE__VALUE,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This returns ColorInstance.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/ColorInstance")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public String getText(Object object) {
-		ColorInstance colorInstance = (ColorInstance) object;
-		String propertyName = getInstancePropertyName(object);
-		return ("".equals(propertyName) ? getString("_UI_ColorInstance_type") : "'" + propertyName + "'") + "=" + colorInstance.getValue();
-	}
-
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(ColorInstance.class)) {
-			case LayersPackage.COLOR_INSTANCE__VALUE:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
-				return;
-		}
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/ColorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/ColorItemProvider.java
deleted file mode 100755
index 4823f27..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/ColorItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Color;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Color} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class ColorItemProvider extends TypeItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public ColorItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns Color.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/Color")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((Color)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_Color_type") : //$NON-NLS-1$
-			getString("_UI_Color_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CustomLayerOperatorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CustomLayerOperatorItemProvider.java
deleted file mode 100755
index 170570a..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CustomLayerOperatorItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomLayerOperator;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomLayerOperator} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class CustomLayerOperatorItemProvider extends LayerOperatorItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public CustomLayerOperatorItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns CustomLayerOperator.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/CustomLayerOperator")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((CustomLayerOperator)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_CustomLayerOperator_type") : //$NON-NLS-1$
-			getString("_UI_CustomLayerOperator_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CustomPropertyOperatorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CustomPropertyOperatorItemProvider.java
deleted file mode 100755
index 4dda9d4..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CustomPropertyOperatorItemProvider.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class CustomPropertyOperatorItemProvider extends PropertyOperatorItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public CustomPropertyOperatorItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-			addClassnamePropertyDescriptor(object);
-			addOperatorInstancePropertyDescriptor(object);
-			addClassBundleIDPropertyDescriptor(object);
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This adds a property descriptor for the Classname feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addClassnamePropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_CustomPropertyOperator_classname_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_CustomPropertyOperator_classname_feature", "_UI_CustomPropertyOperator_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.CUSTOM_PROPERTY_OPERATOR__CLASSNAME,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This adds a property descriptor for the Operator Instance feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addOperatorInstancePropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_CustomPropertyOperator_operatorInstance_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_CustomPropertyOperator_operatorInstance_feature", "_UI_CustomPropertyOperator_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.CUSTOM_PROPERTY_OPERATOR__OPERATOR_INSTANCE,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This adds a property descriptor for the Class Bundle ID feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addClassBundleIDPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_CustomPropertyOperator_classBundleID_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_CustomPropertyOperator_classBundleID_feature", "_UI_CustomPropertyOperator_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.CUSTOM_PROPERTY_OPERATOR__CLASS_BUNDLE_ID,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This returns CustomPropertyOperator.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/CustomPropertyOperator")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((CustomPropertyOperator)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_CustomPropertyOperator_type") : //$NON-NLS-1$
-			getString("_UI_CustomPropertyOperator_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(CustomPropertyOperator.class)) {
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__CLASSNAME:
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__OPERATOR_INSTANCE:
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__CLASS_BUNDLE_ID:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
-				return;
-		}
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CustomTypeItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CustomTypeItemProvider.java
deleted file mode 100755
index 29ddf9a..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/CustomTypeItemProvider.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomType;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomType} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class CustomTypeItemProvider extends TypeItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public CustomTypeItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-			addClassifierPropertyDescriptor(object);
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This adds a property descriptor for the Classifier feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addClassifierPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_CustomType_classifier_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_CustomType_classifier_feature", "_UI_CustomType_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.CUSTOM_TYPE__CLASSIFIER,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This returns CustomType.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/CustomType")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((CustomType)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_CustomType_type") : //$NON-NLS-1$
-			getString("_UI_CustomType_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(CustomType.class)) {
-			case LayersPackage.CUSTOM_TYPE__CLASSIFIER:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
-				return;
-		}
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/DefaultPropertyOperatorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/DefaultPropertyOperatorItemProvider.java
deleted file mode 100755
index 009116d..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/DefaultPropertyOperatorItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.DefaultPropertyOperator;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.DefaultPropertyOperator} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class DefaultPropertyOperatorItemProvider extends PropertyOperatorItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public DefaultPropertyOperatorItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns DefaultPropertyOperator.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/DefaultPropertyOperator")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((DefaultPropertyOperator)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_DefaultPropertyOperator_type") : //$NON-NLS-1$
-			getString("_UI_DefaultPropertyOperator_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FillInstanceItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FillInstanceItemProvider.java
deleted file mode 100755
index 8d8e1e9..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FillInstanceItemProvider.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class FillInstanceItemProvider extends TypeInstanceItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public FillInstanceItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-			addTransparencyPropertyDescriptor(object);
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This adds a property descriptor for the Transparency feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addTransparencyPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_FillInstance_transparency_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_FillInstance_transparency_feature", "_UI_FillInstance_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.FILL_INSTANCE__TRANSPARENCY,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
-	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
-	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
-		if (childrenFeatures == null) {
-			super.getChildrenFeatures(object);
-			childrenFeatures.add(LayersPackage.Literals.FILL_INSTANCE__FILL_COLOR);
-		}
-		return childrenFeatures;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EStructuralFeature getChildFeature(Object object, Object child) {
-		// Check the type of the specified child object and return the proper feature to use for
-		// adding (see {@link AddCommand}) it as a child.
-
-		return super.getChildFeature(object, child);
-	}
-
-	/**
-	 * This returns FillInstance.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/FillInstance")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public String getText(Object object) {
-		FillInstance fillInstance = (FillInstance) object;
-		String propertyName = getInstancePropertyName(object);
-		return ("".equals(propertyName) ? getString("_UI_FillInstance_type") : "'" + propertyName + "'") + "=" + fillInstance.getTransparency();
-	}
-
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(FillInstance.class)) {
-			case LayersPackage.FILL_INSTANCE__TRANSPARENCY:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
-				return;
-			case LayersPackage.FILL_INSTANCE__FILL_COLOR:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
-				return;
-		}
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.FILL_INSTANCE__FILL_COLOR,
-				 LayersFactory.eINSTANCE.createColorInstance()));
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FillItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FillItemProvider.java
deleted file mode 100755
index ecaafd9..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FillItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Fill;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Fill} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class FillItemProvider extends TypeItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public FillItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns Fill.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/Fill")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((Fill)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_Fill_type") : //$NON-NLS-1$
-			getString("_UI_Fill_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FolderElementItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FolderElementItemProvider.java
index c3e2dd4..217ff0d 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FolderElementItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FolderElementItemProvider.java
@@ -22,6 +22,7 @@
 
 import org.eclipse.emf.common.util.ResourceLocator;
 
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -70,6 +71,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -114,7 +125,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FolderItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FolderItemProvider.java
index 2784d86..2a09fb4 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FolderItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FolderItemProvider.java
@@ -128,6 +128,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -188,52 +198,12 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(LayersPackage.Literals.FOLDER__ELEMENTS,
-				 LayersFactory.eINSTANCE.createMetamodel()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.FOLDER__ELEMENTS,
 				 LayersFactory.eINSTANCE.createFolder()));
 
 		newChildDescriptors.add
 			(createChildParameter
 				(LayersPackage.Literals.FOLDER__ELEMENTS,
-				 LayersFactory.eINSTANCE.createIntType()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.FOLDER__ELEMENTS,
-				 LayersFactory.eINSTANCE.createBooleanType()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.FOLDER__ELEMENTS,
-				 LayersFactory.eINSTANCE.createStringType()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.FOLDER__ELEMENTS,
-				 LayersFactory.eINSTANCE.createCustomType()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.FOLDER__ELEMENTS,
-				 LayersFactory.eINSTANCE.createColor()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.FOLDER__ELEMENTS,
-				 LayersFactory.eINSTANCE.createFill()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.FOLDER__ELEMENTS,
-				 LayersFactory.eINSTANCE.createLineType()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.FOLDER__ELEMENTS,
-				 LayersFactory.eINSTANCE.createFontType()));
+				 LayersFactory.eINSTANCE.createMetamodel()));
 
 		newChildDescriptors.add
 			(createChildParameter
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FontInstanceItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FontInstanceItemProvider.java
deleted file mode 100755
index 06efadf..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FontInstanceItemProvider.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class FontInstanceItemProvider extends TypeInstanceItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public FontInstanceItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-			addFontColorPropertyDescriptor(object);
-			addFontNamePropertyDescriptor(object);
-			addFontHeighPropertyDescriptor(object);
-			addBoldPropertyDescriptor(object);
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This adds a property descriptor for the Font Color feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addFontColorPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_FontInstance_fontColor_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_FontInstance_fontColor_feature", "_UI_FontInstance_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.FONT_INSTANCE__FONT_COLOR,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This adds a property descriptor for the Font Name feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addFontNamePropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_FontInstance_fontName_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_FontInstance_fontName_feature", "_UI_FontInstance_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.FONT_INSTANCE__FONT_NAME,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This adds a property descriptor for the Font Heigh feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addFontHeighPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_FontInstance_fontHeigh_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_FontInstance_fontHeigh_feature", "_UI_FontInstance_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.FONT_INSTANCE__FONT_HEIGH,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This adds a property descriptor for the Bold feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addBoldPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_FontInstance_bold_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_FontInstance_bold_feature", "_UI_FontInstance_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.FONT_INSTANCE__BOLD,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This returns FontInstance.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/FontInstance")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((FontInstance) object).getFontName();
-
-		String propertyName = getInstancePropertyName(object);
-		return ("".equals(propertyName) ? getString("_UI_FontInstance_type") : "'" + propertyName + "'")
-				+ "=" + label;
-
-	}
-
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(FontInstance.class)) {
-			case LayersPackage.FONT_INSTANCE__FONT_COLOR:
-			case LayersPackage.FONT_INSTANCE__FONT_NAME:
-			case LayersPackage.FONT_INSTANCE__FONT_HEIGH:
-			case LayersPackage.FONT_INSTANCE__BOLD:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
-				return;
-		}
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FontPropertySetterItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FontPropertySetterItemProvider.java
deleted file mode 100755
index 7cc990d..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FontPropertySetterItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontPropertySetter;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontPropertySetter} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class FontPropertySetterItemProvider extends PropertySetterItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public FontPropertySetterItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns FontPropertySetter.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/FontPropertySetter")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((FontPropertySetter)object).getPropertyName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_FontPropertySetter_type") : //$NON-NLS-1$
-			getString("_UI_FontPropertySetter_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FontTypeItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FontTypeItemProvider.java
deleted file mode 100755
index 7d37174..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FontTypeItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontType;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontType} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class FontTypeItemProvider extends TypeItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public FontTypeItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns FontType.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/FontType")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((FontType)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_FontType_type") : //$NON-NLS-1$
-			getString("_UI_FontType_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IntInstanceItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IntInstanceItemProvider.java
deleted file mode 100755
index a340486..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IntInstanceItemProvider.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntInstance} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class IntInstanceItemProvider extends TypeInstanceItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public IntInstanceItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-			addValuePropertyDescriptor(object);
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This adds a property descriptor for the Value feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addValuePropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_IntInstance_value_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_IntInstance_value_feature", "_UI_IntInstance_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.INT_INSTANCE__VALUE,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This returns IntInstance.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/IntInstance")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		IntInstance intInstance = (IntInstance)object;
-		return getString("_UI_IntInstance_type") + " " + intInstance.getValue(); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(IntInstance.class)) {
-			case LayersPackage.INT_INSTANCE__VALUE:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
-				return;
-		}
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IntTypeItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IntTypeItemProvider.java
deleted file mode 100755
index 4bfdfc9..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IntTypeItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntType;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntType} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class IntTypeItemProvider extends TypeItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public IntTypeItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns IntType.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/IntType")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((IntType)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_IntType_type") : //$NON-NLS-1$
-			getString("_UI_IntType_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IsAbstractUmlSetterItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IsAbstractUmlSetterItemProvider.java
deleted file mode 100755
index 86152cc..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IsAbstractUmlSetterItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsAbstractUmlSetter;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsAbstractUmlSetter} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class IsAbstractUmlSetterItemProvider extends PropertySetterItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public IsAbstractUmlSetterItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns IsAbstractUmlSetter.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/IsAbstractUmlSetter")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((IsAbstractUmlSetter)object).getPropertyName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_IsAbstractUmlSetter_type") : //$NON-NLS-1$
-			getString("_UI_IsAbstractUmlSetter_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IsValidPropertySetterItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IsValidPropertySetterItemProvider.java
deleted file mode 100755
index aa98a82..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IsValidPropertySetterItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsValidPropertySetter;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsValidPropertySetter} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class IsValidPropertySetterItemProvider extends PropertySetterItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public IsValidPropertySetterItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns IsValidPropertySetter.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/IsValidPropertySetter")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((IsValidPropertySetter)object).getPropertyName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_IsValidPropertySetter_type") : //$NON-NLS-1$
-			getString("_UI_IsValidPropertySetter_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IsVisiblePropertySetterItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IsVisiblePropertySetterItemProvider.java
deleted file mode 100755
index d0ae1ed..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/IsVisiblePropertySetterItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsVisiblePropertySetter;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsVisiblePropertySetter} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class IsVisiblePropertySetterItemProvider extends PropertySetterItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public IsVisiblePropertySetterItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns IsVisiblePropertySetter.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/IsVisiblePropertySetter")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((IsVisiblePropertySetter)object).getPropertyName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_IsVisiblePropertySetter_type") : //$NON-NLS-1$
-			getString("_UI_IsVisiblePropertySetter_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerApplicationFactoryItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerApplicationFactoryItemProvider.java
index 83b0169..b42ffbf 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerApplicationFactoryItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerApplicationFactoryItemProvider.java
@@ -22,6 +22,7 @@
 
 import org.eclipse.emf.common.util.ResourceLocator;
 
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -81,6 +82,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -125,7 +136,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerDescriptorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerDescriptorItemProvider.java
index 1785ff9..78659cb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerDescriptorItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerDescriptorItemProvider.java
@@ -23,6 +23,7 @@
 import org.eclipse.emf.common.util.ResourceLocator;
 
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -107,6 +108,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -151,7 +162,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerDescriptorRegistryItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerDescriptorRegistryItemProvider.java
index 8a6fb5d..c805f92 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerDescriptorRegistryItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerDescriptorRegistryItemProvider.java
@@ -24,6 +24,7 @@
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -118,6 +119,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -168,11 +179,6 @@
 			(createChildParameter
 				(LayersPackage.Literals.LAYER_DESCRIPTOR_REGISTRY__LAYER_DESCRIPTORS,
 				 LayersFactory.eINSTANCE.createSimpleLayerDescriptor()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.LAYER_DESCRIPTOR_REGISTRY__LAYER_DESCRIPTORS,
-				 LayersFactory.eINSTANCE.createRegExpLayerDescriptor()));
 	}
 
 	/**
@@ -183,7 +189,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerExpressionItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerExpressionItemProvider.java
index d9e3895..b68c886 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerExpressionItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerExpressionItemProvider.java
@@ -222,6 +222,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerItemProvider.java
index 3dbbe22..ef392a6 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerItemProvider.java
@@ -68,6 +68,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerNamedStyleItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerNamedStyleItemProvider.java
index afaebf3..6ccfd15 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerNamedStyleItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerNamedStyleItemProvider.java
@@ -24,6 +24,7 @@
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ViewerNotification;
 
@@ -107,6 +108,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -145,9 +156,8 @@
 	 * that can be created under this object.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
+	 * 
 	 * @generated NOT
-	 *
 	 */
 	@Override
 	protected void collectNewChildDescriptors(Collection/* <Object> */ newChildDescriptors, Object object) {
@@ -165,7 +175,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerOperatorDescriptorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerOperatorDescriptorItemProvider.java
index 21e8ef1..909752c 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerOperatorDescriptorItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerOperatorDescriptorItemProvider.java
@@ -23,6 +23,7 @@
 import org.eclipse.emf.common.util.ResourceLocator;
 
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -133,6 +134,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -186,7 +197,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerOperatorDescriptorRegistryItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerOperatorDescriptorRegistryItemProvider.java
index 313f5d2..1651f07 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerOperatorDescriptorRegistryItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerOperatorDescriptorRegistryItemProvider.java
@@ -25,6 +25,7 @@
 import org.eclipse.emf.ecore.EStructuralFeature;
 
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -167,6 +168,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -230,28 +241,8 @@
 
 		newChildDescriptors.add
 			(createChildParameter
-				(LayersPackage.Literals.LAYER_OPERATOR_DESCRIPTOR_REGISTRY__DESCRIPTORS,
-				 LayersFactory.eINSTANCE.createAndStackedLayerOperatorDescriptor()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.LAYER_OPERATOR_DESCRIPTOR_REGISTRY__DESCRIPTORS,
-				 LayersFactory.eINSTANCE.createOrStackedLayerOperatorDescriptor()));
-
-		newChildDescriptors.add
-			(createChildParameter
 				(LayersPackage.Literals.LAYER_OPERATOR_DESCRIPTOR_REGISTRY__PROPERTY_OPERATORS,
 				 LayersFactory.eINSTANCE.createPropertyOperator()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.LAYER_OPERATOR_DESCRIPTOR_REGISTRY__PROPERTY_OPERATORS,
-				 LayersFactory.eINSTANCE.createDefaultPropertyOperator()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.LAYER_OPERATOR_DESCRIPTOR_REGISTRY__PROPERTY_OPERATORS,
-				 LayersFactory.eINSTANCE.createCustomPropertyOperator()));
 	}
 
 	/**
@@ -262,7 +253,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerOperatorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerOperatorItemProvider.java
index 1d37393..7237526 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerOperatorItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerOperatorItemProvider.java
@@ -22,7 +22,9 @@
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ViewerNotification;
 
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator;
@@ -57,11 +59,57 @@
 		if (itemPropertyDescriptors == null) {
 			super.getPropertyDescriptors(object);
 
+			addLayerOperatorDescriptorNamePropertyDescriptor(object);
+			addLayerOperatorDescriptorPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
 
 	/**
+	 * This adds a property descriptor for the Layer Operator Descriptor Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addLayerOperatorDescriptorNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_LayerOperator_layerOperatorDescriptorName_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_LayerOperator_layerOperatorDescriptorName_feature", "_UI_LayerOperator_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LayersPackage.Literals.LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Layer Operator Descriptor feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addLayerOperatorDescriptorPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_LayerOperator_layerOperatorDescriptor_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_LayerOperator_layerOperatorDescriptor_feature", "_UI_LayerOperator_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LayersPackage.Literals.LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR,
+				 true,
+				 false,
+				 true,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
 	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
 	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
 	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
@@ -92,6 +140,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -118,6 +176,9 @@
 		updateChildren(notification);
 
 		switch (notification.getFeatureID(LayerOperator.class)) {
+			case LayersPackage.LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
 			case LayersPackage.LAYER_OPERATOR__LAYERS:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
 				return;
@@ -149,16 +210,6 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(LayersPackage.Literals.LAYER_OPERATOR__LAYERS,
-				 LayersFactory.eINSTANCE.createCustomLayerOperator()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.LAYER_OPERATOR__LAYERS,
-				 LayersFactory.eINSTANCE.createRegExpLayer()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.LAYER_OPERATOR__LAYERS,
 				 LayersFactory.eINSTANCE.createLayer()));
 
 		newChildDescriptors.add
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerStackDescriptorRegistryItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerStackDescriptorRegistryItemProvider.java
index 897227d..8fc0db2 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerStackDescriptorRegistryItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayerStackDescriptorRegistryItemProvider.java
@@ -22,6 +22,7 @@
 
 import org.eclipse.emf.common.util.ResourceLocator;
 
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -81,6 +82,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -125,7 +136,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayersItemProviderAdapterFactory.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayersItemProviderAdapterFactory.java
index 2f269e3..06c0d73 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayersItemProviderAdapterFactory.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayersItemProviderAdapterFactory.java
@@ -15,15 +15,26 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import org.eclipse.emf.common.notify.Adapter;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.Notifier;
 
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.edit.command.CommandParameter;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+
 import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ChildCreationExtenderManager;
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
 import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
 import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IDisposable;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
@@ -32,6 +43,14 @@
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+
+import org.eclipse.gmf.runtime.notation.util.NotationSwitch;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.util.LayersAdapterFactory;
 
 /**
@@ -43,7 +62,7 @@
  * <!-- end-user-doc -->
  * @generated
  */
-public class LayersItemProviderAdapterFactory extends LayersAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+public class LayersItemProviderAdapterFactory extends LayersAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable, IChildCreationExtender {
 	/**
 	 * This keeps track of the root adapter factory that delegates to this adapter factory.
 	 * <!-- begin-user-doc -->
@@ -61,6 +80,14 @@
 	protected IChangeNotifier changeNotifier = new ChangeNotifier();
 
 	/**
+	 * This helps manage the child creation extenders.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ChildCreationExtenderManager childCreationExtenderManager = new ChildCreationExtenderManager(LayersEditPlugin.INSTANCE, LayersPackage.eNS_URI);
+
+	/**
 	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -221,29 +248,6 @@
 	}
 
 	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected MetamodelItemProvider metamodelItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createMetamodelAdapter() {
-		if (metamodelItemProvider == null) {
-			metamodelItemProvider = new MetamodelItemProvider(this);
-		}
-
-		return metamodelItemProvider;
-	}
-
-	/**
 	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeRegistry} instances.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -474,29 +478,6 @@
 	}
 
 	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.DefaultPropertyOperator} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected DefaultPropertyOperatorItemProvider defaultPropertyOperatorItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.DefaultPropertyOperator}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createDefaultPropertyOperatorAdapter() {
-		if (defaultPropertyOperatorItemProvider == null) {
-			defaultPropertyOperatorItemProvider = new DefaultPropertyOperatorItemProvider(this);
-		}
-
-		return defaultPropertyOperatorItemProvider;
-	}
-
-	/**
 	 * This keeps track of the one adapter used for all {@link java.util.Map.Entry} instances.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -543,164 +524,26 @@
 	}
 
 	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntInstance} instances.
+	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel} instances.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	protected IntInstanceItemProvider intInstanceItemProvider;
+	protected MetamodelItemProvider metamodelItemProvider;
 
 	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntInstance}.
+	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel}.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
-	public Adapter createIntInstanceAdapter() {
-		if (intInstanceItemProvider == null) {
-			intInstanceItemProvider = new IntInstanceItemProvider(this);
+	public Adapter createMetamodelAdapter() {
+		if (metamodelItemProvider == null) {
+			metamodelItemProvider = new MetamodelItemProvider(this);
 		}
 
-		return intInstanceItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected BooleanInstanceItemProvider booleanInstanceItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createBooleanInstanceAdapter() {
-		if (booleanInstanceItemProvider == null) {
-			booleanInstanceItemProvider = new BooleanInstanceItemProvider(this);
-		}
-
-		return booleanInstanceItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected StringInstanceItemProvider stringInstanceItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createStringInstanceAdapter() {
-		if (stringInstanceItemProvider == null) {
-			stringInstanceItemProvider = new StringInstanceItemProvider(this);
-		}
-
-		return stringInstanceItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntType} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected IntTypeItemProvider intTypeItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntType}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createIntTypeAdapter() {
-		if (intTypeItemProvider == null) {
-			intTypeItemProvider = new IntTypeItemProvider(this);
-		}
-
-		return intTypeItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanType} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected BooleanTypeItemProvider booleanTypeItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanType}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createBooleanTypeAdapter() {
-		if (booleanTypeItemProvider == null) {
-			booleanTypeItemProvider = new BooleanTypeItemProvider(this);
-		}
-
-		return booleanTypeItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringType} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected StringTypeItemProvider stringTypeItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringType}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createStringTypeAdapter() {
-		if (stringTypeItemProvider == null) {
-			stringTypeItemProvider = new StringTypeItemProvider(this);
-		}
-
-		return stringTypeItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomType} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected CustomTypeItemProvider customTypeItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomType}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createCustomTypeAdapter() {
-		if (customTypeItemProvider == null) {
-			customTypeItemProvider = new CustomTypeItemProvider(this);
-		}
-
-		return customTypeItemProvider;
+		return metamodelItemProvider;
 	}
 
 	/**
@@ -750,29 +593,6 @@
 	}
 
 	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomLayerOperator} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected CustomLayerOperatorItemProvider customLayerOperatorItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomLayerOperator}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createCustomLayerOperatorAdapter() {
-		if (customLayerOperatorItemProvider == null) {
-			customLayerOperatorItemProvider = new CustomLayerOperatorItemProvider(this);
-		}
-
-		return customLayerOperatorItemProvider;
-	}
-
-	/**
 	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyIndex} instances.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -842,29 +662,6 @@
 	}
 
 	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayerDescriptor} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected RegExpLayerDescriptorItemProvider regExpLayerDescriptorItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayerDescriptor}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createRegExpLayerDescriptorAdapter() {
-		if (regExpLayerDescriptorItemProvider == null) {
-			regExpLayerDescriptorItemProvider = new RegExpLayerDescriptorItemProvider(this);
-		}
-
-		return regExpLayerDescriptorItemProvider;
-	}
-
-	/**
 	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullInstance} instances.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -888,29 +685,6 @@
 	}
 
 	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected RegExpLayerItemProvider regExpLayerItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createRegExpLayerAdapter() {
-		if (regExpLayerItemProvider == null) {
-			regExpLayerItemProvider = new RegExpLayerItemProvider(this);
-		}
-
-		return regExpLayerItemProvider;
-	}
-
-	/**
 	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Layer} instances.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -934,144 +708,6 @@
 	}
 
 	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Color} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected ColorItemProvider colorItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Color}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createColorAdapter() {
-		if (colorItemProvider == null) {
-			colorItemProvider = new ColorItemProvider(this);
-		}
-
-		return colorItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected ColorInstanceItemProvider colorInstanceItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createColorInstanceAdapter() {
-		if (colorInstanceItemProvider == null) {
-			colorInstanceItemProvider = new ColorInstanceItemProvider(this);
-		}
-
-		return colorInstanceItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected FillInstanceItemProvider fillInstanceItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createFillInstanceAdapter() {
-		if (fillInstanceItemProvider == null) {
-			fillInstanceItemProvider = new FillInstanceItemProvider(this);
-		}
-
-		return fillInstanceItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Fill} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected FillItemProvider fillItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Fill}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createFillAdapter() {
-		if (fillItemProvider == null) {
-			fillItemProvider = new FillItemProvider(this);
-		}
-
-		return fillItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillPropertySetter} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected FillPropertySetterItemProvider fillPropertySetterItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillPropertySetter}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createFillPropertySetterAdapter() {
-		if (fillPropertySetterItemProvider == null) {
-			fillPropertySetterItemProvider = new FillPropertySetterItemProvider(this);
-		}
-
-		return fillPropertySetterItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsValidPropertySetter} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected IsValidPropertySetterItemProvider isValidPropertySetterItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsValidPropertySetter}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createIsValidPropertySetterAdapter() {
-		if (isValidPropertySetterItemProvider == null) {
-			isValidPropertySetterItemProvider = new IsValidPropertySetterItemProvider(this);
-		}
-
-		return isValidPropertySetterItemProvider;
-	}
-
-	/**
 	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullPropertySetter} instances.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1095,167 +731,6 @@
 	}
 
 	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineType} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected LineTypeItemProvider lineTypeItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineType}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createLineTypeAdapter() {
-		if (lineTypeItemProvider == null) {
-			lineTypeItemProvider = new LineTypeItemProvider(this);
-		}
-
-		return lineTypeItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected LineInstanceItemProvider lineInstanceItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createLineInstanceAdapter() {
-		if (lineInstanceItemProvider == null) {
-			lineInstanceItemProvider = new LineInstanceItemProvider(this);
-		}
-
-		return lineInstanceItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LinePropertySetter} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected LinePropertySetterItemProvider linePropertySetterItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LinePropertySetter}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createLinePropertySetterAdapter() {
-		if (linePropertySetterItemProvider == null) {
-			linePropertySetterItemProvider = new LinePropertySetterItemProvider(this);
-		}
-
-		return linePropertySetterItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontPropertySetter} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected FontPropertySetterItemProvider fontPropertySetterItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontPropertySetter}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createFontPropertySetterAdapter() {
-		if (fontPropertySetterItemProvider == null) {
-			fontPropertySetterItemProvider = new FontPropertySetterItemProvider(this);
-		}
-
-		return fontPropertySetterItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected FontInstanceItemProvider fontInstanceItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createFontInstanceAdapter() {
-		if (fontInstanceItemProvider == null) {
-			fontInstanceItemProvider = new FontInstanceItemProvider(this);
-		}
-
-		return fontInstanceItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontType} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected FontTypeItemProvider fontTypeItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontType}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createFontTypeAdapter() {
-		if (fontTypeItemProvider == null) {
-			fontTypeItemProvider = new FontTypeItemProvider(this);
-		}
-
-		return fontTypeItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsVisiblePropertySetter} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected IsVisiblePropertySetterItemProvider isVisiblePropertySetterItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsVisiblePropertySetter}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createIsVisiblePropertySetterAdapter() {
-		if (isVisiblePropertySetterItemProvider == null) {
-			isVisiblePropertySetterItemProvider = new IsVisiblePropertySetterItemProvider(this);
-		}
-
-		return isVisiblePropertySetterItemProvider;
-	}
-
-	/**
 	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperatorDescriptor} instances.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1302,98 +777,6 @@
 	}
 
 	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected CustomPropertyOperatorItemProvider customPropertyOperatorItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createCustomPropertyOperatorAdapter() {
-		if (customPropertyOperatorItemProvider == null) {
-			customPropertyOperatorItemProvider = new CustomPropertyOperatorItemProvider(this);
-		}
-
-		return customPropertyOperatorItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AndStackedLayerOperatorDescriptor} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected AndStackedLayerOperatorDescriptorItemProvider andStackedLayerOperatorDescriptorItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AndStackedLayerOperatorDescriptor}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createAndStackedLayerOperatorDescriptorAdapter() {
-		if (andStackedLayerOperatorDescriptorItemProvider == null) {
-			andStackedLayerOperatorDescriptorItemProvider = new AndStackedLayerOperatorDescriptorItemProvider(this);
-		}
-
-		return andStackedLayerOperatorDescriptorItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.OrStackedLayerOperatorDescriptor} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected OrStackedLayerOperatorDescriptorItemProvider orStackedLayerOperatorDescriptorItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.OrStackedLayerOperatorDescriptor}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createOrStackedLayerOperatorDescriptorAdapter() {
-		if (orStackedLayerOperatorDescriptorItemProvider == null) {
-			orStackedLayerOperatorDescriptorItemProvider = new OrStackedLayerOperatorDescriptorItemProvider(this);
-		}
-
-		return orStackedLayerOperatorDescriptorItemProvider;
-	}
-
-	/**
-	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsAbstractUmlSetter} instances.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected IsAbstractUmlSetterItemProvider isAbstractUmlSetterItemProvider;
-
-	/**
-	 * This creates an adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsAbstractUmlSetter}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Adapter createIsAbstractUmlSetterAdapter() {
-		if (isAbstractUmlSetterItemProvider == null) {
-			isAbstractUmlSetterItemProvider = new IsAbstractUmlSetterItemProvider(this);
-		}
-
-		return isAbstractUmlSetterItemProvider;
-	}
-
-	/**
 	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AllViewsDerivedLayer} instances.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1560,6 +943,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public ComposeableAdapterFactory getRootAdapterFactory() {
 		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
 	}
@@ -1570,6 +954,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
 		this.parentAdapterFactory = parentAdapterFactory;
 	}
@@ -1613,11 +998,41 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public List<IChildCreationExtender> getChildCreationExtenders() {
+		return childCreationExtenderManager.getChildCreationExtenders();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<?> getNewChildDescriptors(Object object, EditingDomain editingDomain) {
+		return childCreationExtenderManager.getNewChildDescriptors(object, editingDomain);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return childCreationExtenderManager;
+	}
+
+	/**
 	 * This adds a listener.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void addListener(INotifyChangedListener notifyChangedListener) {
 		changeNotifier.addListener(notifyChangedListener);
 	}
@@ -1628,6 +1043,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void removeListener(INotifyChangedListener notifyChangedListener) {
 		changeNotifier.removeListener(notifyChangedListener);
 	}
@@ -1638,6 +1054,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void fireNotifyChanged(Notification notification) {
 		changeNotifier.fireNotifyChanged(notification);
 
@@ -1652,6 +1069,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void dispose() {
 		if (layerNamedStyleItemProvider != null) layerNamedStyleItemProvider.dispose();
 		if (layersStackItemProvider != null) layersStackItemProvider.dispose();
@@ -1659,7 +1077,6 @@
 		if (layerStackDescriptorRegistryItemProvider != null) layerStackDescriptorRegistryItemProvider.dispose();
 		if (propertyRegistryItemProvider != null) propertyRegistryItemProvider.dispose();
 		if (propertyItemProvider != null) propertyItemProvider.dispose();
-		if (metamodelItemProvider != null) metamodelItemProvider.dispose();
 		if (typeRegistryItemProvider != null) typeRegistryItemProvider.dispose();
 		if (stringToTypeMapItemProvider != null) stringToTypeMapItemProvider.dispose();
 		if (layerDescriptorRegistryItemProvider != null) layerDescriptorRegistryItemProvider.dispose();
@@ -1670,46 +1087,19 @@
 		if (layerOperatorDescriptorRegistryItemProvider != null) layerOperatorDescriptorRegistryItemProvider.dispose();
 		if (layerOperatorDescriptorItemProvider != null) layerOperatorDescriptorItemProvider.dispose();
 		if (propertyOperatorItemProvider != null) propertyOperatorItemProvider.dispose();
-		if (defaultPropertyOperatorItemProvider != null) defaultPropertyOperatorItemProvider.dispose();
 		if (stringToTypeInstanceMapItemProvider != null) stringToTypeInstanceMapItemProvider.dispose();
 		if (folderItemProvider != null) folderItemProvider.dispose();
-		if (intInstanceItemProvider != null) intInstanceItemProvider.dispose();
-		if (booleanInstanceItemProvider != null) booleanInstanceItemProvider.dispose();
-		if (stringInstanceItemProvider != null) stringInstanceItemProvider.dispose();
-		if (intTypeItemProvider != null) intTypeItemProvider.dispose();
-		if (booleanTypeItemProvider != null) booleanTypeItemProvider.dispose();
-		if (stringTypeItemProvider != null) stringTypeItemProvider.dispose();
-		if (customTypeItemProvider != null) customTypeItemProvider.dispose();
+		if (metamodelItemProvider != null) metamodelItemProvider.dispose();
 		if (topLayerOperatorItemProvider != null) topLayerOperatorItemProvider.dispose();
 		if (stackedLayerOperatorItemProvider != null) stackedLayerOperatorItemProvider.dispose();
-		if (customLayerOperatorItemProvider != null) customLayerOperatorItemProvider.dispose();
 		if (propertyIndexItemProvider != null) propertyIndexItemProvider.dispose();
 		if (stringToPropertyIndexMapItemProvider != null) stringToPropertyIndexMapItemProvider.dispose();
 		if (simpleLayerDescriptorItemProvider != null) simpleLayerDescriptorItemProvider.dispose();
-		if (regExpLayerDescriptorItemProvider != null) regExpLayerDescriptorItemProvider.dispose();
 		if (nullInstanceItemProvider != null) nullInstanceItemProvider.dispose();
-		if (regExpLayerItemProvider != null) regExpLayerItemProvider.dispose();
 		if (layerItemProvider != null) layerItemProvider.dispose();
-		if (colorItemProvider != null) colorItemProvider.dispose();
-		if (colorInstanceItemProvider != null) colorInstanceItemProvider.dispose();
-		if (fillInstanceItemProvider != null) fillInstanceItemProvider.dispose();
-		if (fillItemProvider != null) fillItemProvider.dispose();
-		if (fillPropertySetterItemProvider != null) fillPropertySetterItemProvider.dispose();
-		if (isValidPropertySetterItemProvider != null) isValidPropertySetterItemProvider.dispose();
 		if (nullPropertySetterItemProvider != null) nullPropertySetterItemProvider.dispose();
-		if (lineTypeItemProvider != null) lineTypeItemProvider.dispose();
-		if (lineInstanceItemProvider != null) lineInstanceItemProvider.dispose();
-		if (linePropertySetterItemProvider != null) linePropertySetterItemProvider.dispose();
-		if (fontPropertySetterItemProvider != null) fontPropertySetterItemProvider.dispose();
-		if (fontInstanceItemProvider != null) fontInstanceItemProvider.dispose();
-		if (fontTypeItemProvider != null) fontTypeItemProvider.dispose();
-		if (isVisiblePropertySetterItemProvider != null) isVisiblePropertySetterItemProvider.dispose();
 		if (topLayerOperatorDescriptorItemProvider != null) topLayerOperatorDescriptorItemProvider.dispose();
 		if (stackedLayerOperatorDescriptorItemProvider != null) stackedLayerOperatorDescriptorItemProvider.dispose();
-		if (customPropertyOperatorItemProvider != null) customPropertyOperatorItemProvider.dispose();
-		if (andStackedLayerOperatorDescriptorItemProvider != null) andStackedLayerOperatorDescriptorItemProvider.dispose();
-		if (orStackedLayerOperatorDescriptorItemProvider != null) orStackedLayerOperatorDescriptorItemProvider.dispose();
-		if (isAbstractUmlSetterItemProvider != null) isAbstractUmlSetterItemProvider.dispose();
 		if (allViewsDerivedLayerItemProvider != null) allViewsDerivedLayerItemProvider.dispose();
 		if (cssPropertySetterItemProvider != null) cssPropertySetterItemProvider.dispose();
 		if (cssTypeItemProvider != null) cssTypeItemProvider.dispose();
@@ -1719,4 +1109,95 @@
 		if (cssHideInstanceItemProvider != null) cssHideInstanceItemProvider.dispose();
 	}
 
+	/**
+	 * A child creation extender for the {@link NotationPackage}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class NotationChildCreationExtender implements IChildCreationExtender {
+		/**
+		 * The switch for creating child descriptors specific to each extended class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * 
+		 * @generated NOT
+		 */
+		protected static class CreationSwitch extends NotationSwitch {
+			/**
+			 * The child descriptors being populated.
+			 * <!-- begin-user-doc -->
+			 * <!-- end-user-doc -->
+			 * @generated
+			 */
+			protected List<Object> newChildDescriptors;
+
+			/**
+			 * The domain in which to create the children.
+			 * <!-- begin-user-doc -->
+			 * <!-- end-user-doc -->
+			 * @generated
+			 */
+			protected EditingDomain editingDomain;
+
+			/**
+			 * Creates the a switch for populating child descriptors in the given domain.
+			 * <!-- begin-user-doc -->
+			 * <!-- end-user-doc -->
+			 * @generated
+			 */
+			CreationSwitch(List<Object> newChildDescriptors, EditingDomain editingDomain) {
+				this.newChildDescriptors = newChildDescriptors;
+				this.editingDomain = editingDomain;
+			}
+
+			/**
+			 * <!-- begin-user-doc -->
+			 * <!-- end-user-doc -->
+			 * @generated
+			 */
+			@Override
+			public Object caseView(View object) {
+				newChildDescriptors.add
+					(createChildParameter
+						(NotationPackage.Literals.VIEW__STYLES,
+						 LayersFactory.eINSTANCE.createLayerNamedStyle()));
+
+				return null;
+			}
+
+			/**
+			 * <!-- begin-user-doc -->
+			 * <!-- end-user-doc -->
+			 * @generated
+			 */
+			protected CommandParameter createChildParameter(Object feature, Object child) {
+				return new CommandParameter(null, feature, child);
+			}
+
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public Collection<Object> getNewChildDescriptors(Object object, EditingDomain editingDomain) {
+			ArrayList<Object> result = new ArrayList<Object>();
+			new CreationSwitch(result, editingDomain).doSwitch((EObject)object);
+			return result;
+		}
+
+		/**
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		@Override
+		public ResourceLocator getResourceLocator() {
+			return LayersEditPlugin.INSTANCE;
+		}
+	}
+
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayersStackApplicationItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayersStackApplicationItemProvider.java
index baf300f..e2110d8 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayersStackApplicationItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayersStackApplicationItemProvider.java
@@ -109,6 +109,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayersStackItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayersStackItemProvider.java
index 703f3a8..29a085a 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayersStackItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LayersStackItemProvider.java
@@ -25,6 +25,7 @@
 import org.eclipse.emf.ecore.EStructuralFeature;
 
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -45,9 +46,9 @@
  * <!-- end-user-doc -->
  * @generated
  */
-public class LayersStackItemProvider
-		extends ItemProviderAdapter
-		implements
+public class LayersStackItemProvider 
+	extends ItemProviderAdapter
+	implements
 		IEditingDomainItemProvider,
 		IStructuredItemContentProvider,
 		ITreeItemContentProvider,
@@ -212,28 +213,29 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	@Override
 	public String getText(Object object) {
-		LayersStack stack = (LayersStack) object;
-		String label = ((LayersStack) object).getName();
-
-		if (label == null || label.length() == 0) {
-			try {
-				label = stack.getDiagram().getName();
-			} catch (NullPointerException e) {
-				return getString("_UI_LayersStack_type");
-			}
-		}
-
-		return "Stack " + label;
+		String label = ((LayersStack)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_LayersStack_type") : //$NON-NLS-1$
+			getString("_UI_LayersStack_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
 	}
-
+	
 
 	/**
 	 * This handles model notifications by calling {@link #updateChildren} to update any cached
@@ -283,16 +285,6 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(LayersPackage.Literals.LAYERS_STACK__LAYERS,
-				 LayersFactory.eINSTANCE.createCustomLayerOperator()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.LAYERS_STACK__LAYERS,
-				 LayersFactory.eINSTANCE.createRegExpLayer()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.LAYERS_STACK__LAYERS,
 				 LayersFactory.eINSTANCE.createLayer()));
 
 		newChildDescriptors.add
@@ -309,7 +301,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LineInstanceItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LineInstanceItemProvider.java
deleted file mode 100755
index 5873531..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LineInstanceItemProvider.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class LineInstanceItemProvider extends TypeInstanceItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LineInstanceItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-			addLineColorPropertyDescriptor(object);
-			addLineWithPropertyDescriptor(object);
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This adds a property descriptor for the Line Color feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addLineColorPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_LineInstance_lineColor_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_LineInstance_lineColor_feature", "_UI_LineInstance_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.LINE_INSTANCE__LINE_COLOR,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This adds a property descriptor for the Line With feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addLineWithPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_LineInstance_lineWith_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_LineInstance_lineWith_feature", "_UI_LineInstance_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.LINE_INSTANCE__LINE_WITH,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This returns LineInstance.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/LineInstance")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public String getText(Object object) {
-		LineInstance lineInstance = (LineInstance) object;
-		String propertyName = getInstancePropertyName(object);
-		return ("".equals(propertyName) ? getString("_UI_LineInstance_type") : "'" + propertyName + "'")
-				+ " with=" + lineInstance.getLineWith()
-				+ ", color=" + lineInstance.getLineColor();
-	}
-
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(LineInstance.class)) {
-			case LayersPackage.LINE_INSTANCE__LINE_COLOR:
-			case LayersPackage.LINE_INSTANCE__LINE_WITH:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
-				return;
-		}
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LinePropertySetterItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LinePropertySetterItemProvider.java
deleted file mode 100755
index 115fe54..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LinePropertySetterItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LinePropertySetter;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LinePropertySetter} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class LinePropertySetterItemProvider extends PropertySetterItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LinePropertySetterItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns LinePropertySetter.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/LinePropertySetter")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((LinePropertySetter)object).getPropertyName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_LinePropertySetter_type") : //$NON-NLS-1$
-			getString("_UI_LinePropertySetter_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LineTypeItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LineTypeItemProvider.java
deleted file mode 100755
index 63bfef8..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/LineTypeItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineType;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineType} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class LineTypeItemProvider extends TypeItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LineTypeItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns LineType.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/LineType")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((LineType)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_LineType_type") : //$NON-NLS-1$
-			getString("_UI_LineType_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/MetamodelItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/MetamodelItemProvider.java
index 48bef4d..89f352b 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/MetamodelItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/MetamodelItemProvider.java
@@ -210,6 +210,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/NullInstanceItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/NullInstanceItemProvider.java
index e48613e..df01c0b 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/NullInstanceItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/NullInstanceItemProvider.java
@@ -66,6 +66,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/NullPropertySetterItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/NullPropertySetterItemProvider.java
index 194a9b7..65b375d 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/NullPropertySetterItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/NullPropertySetterItemProvider.java
@@ -68,6 +68,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/OrStackedLayerOperatorDescriptorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/OrStackedLayerOperatorDescriptorItemProvider.java
deleted file mode 100755
index c64d75e..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/OrStackedLayerOperatorDescriptorItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.OrStackedLayerOperatorDescriptor;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.OrStackedLayerOperatorDescriptor} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class OrStackedLayerOperatorDescriptorItemProvider extends StackedLayerOperatorDescriptorItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public OrStackedLayerOperatorDescriptorItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns OrStackedLayerOperatorDescriptor.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/OrStackedLayerOperatorDescriptor")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((OrStackedLayerOperatorDescriptor)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_OrStackedLayerOperatorDescriptor_type") : //$NON-NLS-1$
-			getString("_UI_OrStackedLayerOperatorDescriptor_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyIndexItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyIndexItemProvider.java
index ea7b37a..ffd8739 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyIndexItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyIndexItemProvider.java
@@ -23,6 +23,7 @@
 import org.eclipse.emf.common.util.ResourceLocator;
 
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -133,6 +134,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -184,7 +195,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyItemProvider.java
index 5c0ff55..e06c9d4 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyItemProvider.java
@@ -197,6 +197,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -249,46 +259,11 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(LayersPackage.Literals.PROPERTY__DEFAULT_VALUE,
-				 LayersFactory.eINSTANCE.createIntInstance()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.PROPERTY__DEFAULT_VALUE,
-				 LayersFactory.eINSTANCE.createBooleanInstance()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.PROPERTY__DEFAULT_VALUE,
-				 LayersFactory.eINSTANCE.createStringInstance()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.PROPERTY__DEFAULT_VALUE,
 				 LayersFactory.eINSTANCE.createNullInstance()));
 
 		newChildDescriptors.add
 			(createChildParameter
 				(LayersPackage.Literals.PROPERTY__DEFAULT_VALUE,
-				 LayersFactory.eINSTANCE.createColorInstance()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.PROPERTY__DEFAULT_VALUE,
-				 LayersFactory.eINSTANCE.createFillInstance()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.PROPERTY__DEFAULT_VALUE,
-				 LayersFactory.eINSTANCE.createLineInstance()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.PROPERTY__DEFAULT_VALUE,
-				 LayersFactory.eINSTANCE.createFontInstance()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.PROPERTY__DEFAULT_VALUE,
 				 LayersFactory.eINSTANCE.createCSSInstance()));
 
 		newChildDescriptors.add
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FillPropertySetterItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyOperatorInstanceItemProvider.java
similarity index 63%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FillPropertySetterItemProvider.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyOperatorInstanceItemProvider.java
index 3cbe6eb..7e126f1 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/FillPropertySetterItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyOperatorInstanceItemProvider.java
@@ -20,24 +20,38 @@
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.common.notify.Notification;
 
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.common.util.ResourceLocator;
 
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillPropertySetter;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
 
 /**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillPropertySetter} object.
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperatorInstance} object.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  * @generated
  */
-public class FillPropertySetterItemProvider extends PropertySetterItemProvider {
+public class PropertyOperatorInstanceItemProvider 
+	extends ItemProviderAdapter
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
 	/**
 	 * This constructs an instance from a factory and a notifier.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public FillPropertySetterItemProvider(AdapterFactory adapterFactory) {
+	public PropertyOperatorInstanceItemProvider(AdapterFactory adapterFactory) {
 		super(adapterFactory);
 	}
 
@@ -57,14 +71,24 @@
 	}
 
 	/**
-	 * This returns FillPropertySetter.gif.
+	 * This returns PropertyOperatorInstance.gif.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
 	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/FillPropertySetter")); //$NON-NLS-1$
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/PropertyOperatorInstance")); //$NON-NLS-1$
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
 	}
 
 	/**
@@ -75,12 +99,9 @@
 	 */
 	@Override
 	public String getText(Object object) {
-		String label = ((FillPropertySetter)object).getPropertyName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_FillPropertySetter_type") : //$NON-NLS-1$
-			getString("_UI_FillPropertySetter_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+		return getString("_UI_PropertyOperatorInstance_type"); //$NON-NLS-1$
 	}
-	
+
 
 	/**
 	 * This handles model notifications by calling {@link #updateChildren} to update any cached
@@ -107,4 +128,15 @@
 		super.collectNewChildDescriptors(newChildDescriptors, object);
 	}
 
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
+	}
+
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyOperatorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyOperatorItemProvider.java
index 8fe8d0f..0d2115f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyOperatorItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyOperatorItemProvider.java
@@ -23,6 +23,7 @@
 import org.eclipse.emf.common.util.ResourceLocator;
 
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -72,6 +73,9 @@
 			super.getPropertyDescriptors(object);
 
 			addNamePropertyDescriptor(object);
+			addClassnamePropertyDescriptor(object);
+			addOperatorInstancePropertyDescriptor(object);
+			addClassBundleIDPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -99,6 +103,72 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Classname feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addClassnamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_PropertyOperator_classname_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_PropertyOperator_classname_feature", "_UI_PropertyOperator_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LayersPackage.Literals.PROPERTY_OPERATOR__CLASSNAME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Operator Instance feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addOperatorInstancePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_PropertyOperator_operatorInstance_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_PropertyOperator_operatorInstance_feature", "_UI_PropertyOperator_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LayersPackage.Literals.PROPERTY_OPERATOR__OPERATOR_INSTANCE,
+				 true,
+				 false,
+				 false,
+				 null,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Class Bundle ID feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addClassBundleIDPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_PropertyOperator_classBundleID_feature"), //$NON-NLS-1$
+				 getString("_UI_PropertyDescriptor_description", "_UI_PropertyOperator_classBundleID_feature", "_UI_PropertyOperator_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				 LayersPackage.Literals.PROPERTY_OPERATOR__CLASS_BUNDLE_ID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
 	 * This returns PropertyOperator.gif.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -110,6 +180,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -137,6 +217,9 @@
 
 		switch (notification.getFeatureID(PropertyOperator.class)) {
 			case LayersPackage.PROPERTY_OPERATOR__NAME:
+			case LayersPackage.PROPERTY_OPERATOR__CLASSNAME:
+			case LayersPackage.PROPERTY_OPERATOR__OPERATOR_INSTANCE:
+			case LayersPackage.PROPERTY_OPERATOR__CLASS_BUNDLE_ID:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 		}
@@ -163,7 +246,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyRegistryItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyRegistryItemProvider.java
index f9acf3d..c7531ee 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyRegistryItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertyRegistryItemProvider.java
@@ -25,6 +25,7 @@
 import org.eclipse.emf.ecore.EStructuralFeature;
 
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -144,6 +145,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -209,7 +220,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertySetterItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertySetterItemProvider.java
index b1baf44..aac6f25 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertySetterItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertySetterItemProvider.java
@@ -23,6 +23,7 @@
 import org.eclipse.emf.common.util.ResourceLocator;
 
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -122,6 +123,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -175,7 +186,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertySetterRegistryItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertySetterRegistryItemProvider.java
index 854014c..ea9f760 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertySetterRegistryItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/PropertySetterRegistryItemProvider.java
@@ -25,6 +25,7 @@
 import org.eclipse.emf.ecore.EStructuralFeature;
 
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -142,6 +143,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -197,7 +208,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/RegExpLayerDescriptorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/RegExpLayerDescriptorItemProvider.java
deleted file mode 100755
index f3c0cdf..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/RegExpLayerDescriptorItemProvider.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayerDescriptor} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class RegExpLayerDescriptorItemProvider extends LayerDescriptorItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public RegExpLayerDescriptorItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns RegExpLayerDescriptor.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/RegExpLayerDescriptor")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		return getString("_UI_RegExpLayerDescriptor_type"); //$NON-NLS-1$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/RegExpLayerItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/RegExpLayerItemProvider.java
deleted file mode 100755
index 4df71d1..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/RegExpLayerItemProvider.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class RegExpLayerItemProvider extends AbstractLayerItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public RegExpLayerItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-			addExprPropertyDescriptor(object);
-			addLanguagePropertyDescriptor(object);
-			addIsDomainChangedEventDependantPropertyDescriptor(object);
-			addDomainChangedEventLevelPropertyDescriptor(object);
-			addIsDiagramChangedEventDependantPropertyDescriptor(object);
-			addDiagramChangedEventLevelPropertyDescriptor(object);
-			addExpressionContextObjectTypePropertyDescriptor(object);
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This adds a property descriptor for the Expr feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addExprPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_RegExpLayer_expr_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_RegExpLayer_expr_feature", "_UI_RegExpLayer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.REG_EXP_LAYER__EXPR,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This adds a property descriptor for the Language feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addLanguagePropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_RegExpLayer_language_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_RegExpLayer_language_feature", "_UI_RegExpLayer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.REG_EXP_LAYER__LANGUAGE,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This adds a property descriptor for the Is Domain Changed Event Dependant feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addIsDomainChangedEventDependantPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_RegExpLayer_isDomainChangedEventDependant_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_RegExpLayer_isDomainChangedEventDependant_feature", "_UI_RegExpLayer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.REG_EXP_LAYER__IS_DOMAIN_CHANGED_EVENT_DEPENDANT,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This adds a property descriptor for the Domain Changed Event Level feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addDomainChangedEventLevelPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_RegExpLayer_domainChangedEventLevel_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_RegExpLayer_domainChangedEventLevel_feature", "_UI_RegExpLayer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.REG_EXP_LAYER__DOMAIN_CHANGED_EVENT_LEVEL,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This adds a property descriptor for the Is Diagram Changed Event Dependant feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addIsDiagramChangedEventDependantPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_RegExpLayer_isDiagramChangedEventDependant_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_RegExpLayer_isDiagramChangedEventDependant_feature", "_UI_RegExpLayer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.REG_EXP_LAYER__IS_DIAGRAM_CHANGED_EVENT_DEPENDANT,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This adds a property descriptor for the Diagram Changed Event Level feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addDiagramChangedEventLevelPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_RegExpLayer_diagramChangedEventLevel_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_RegExpLayer_diagramChangedEventLevel_feature", "_UI_RegExpLayer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.REG_EXP_LAYER__DIAGRAM_CHANGED_EVENT_LEVEL,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This adds a property descriptor for the Expression Context Object Type feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addExpressionContextObjectTypePropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_RegExpLayer_expressionContextObjectType_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_RegExpLayer_expressionContextObjectType_feature", "_UI_RegExpLayer_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.REG_EXP_LAYER__EXPRESSION_CONTEXT_OBJECT_TYPE,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This returns RegExpLayer.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/RegExpLayer")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((RegExpLayer)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_RegExpLayer_type") : //$NON-NLS-1$
-			getString("_UI_RegExpLayer_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(RegExpLayer.class)) {
-			case LayersPackage.REG_EXP_LAYER__EXPR:
-			case LayersPackage.REG_EXP_LAYER__LANGUAGE:
-			case LayersPackage.REG_EXP_LAYER__IS_DOMAIN_CHANGED_EVENT_DEPENDANT:
-			case LayersPackage.REG_EXP_LAYER__DOMAIN_CHANGED_EVENT_LEVEL:
-			case LayersPackage.REG_EXP_LAYER__IS_DIAGRAM_CHANGED_EVENT_DEPENDANT:
-			case LayersPackage.REG_EXP_LAYER__DIAGRAM_CHANGED_EVENT_LEVEL:
-			case LayersPackage.REG_EXP_LAYER__EXPRESSION_CONTEXT_OBJECT_TYPE:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
-				return;
-		}
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/SimpleLayerDescriptorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/SimpleLayerDescriptorItemProvider.java
index 64eb611..f0fd380 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/SimpleLayerDescriptorItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/SimpleLayerDescriptorItemProvider.java
@@ -66,6 +66,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StackedLayerOperatorDescriptorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StackedLayerOperatorDescriptorItemProvider.java
index 133b525..79d1341 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StackedLayerOperatorDescriptorItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StackedLayerOperatorDescriptorItemProvider.java
@@ -68,6 +68,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StackedLayerOperatorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StackedLayerOperatorItemProvider.java
index bee6882..2cae259 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StackedLayerOperatorItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StackedLayerOperatorItemProvider.java
@@ -21,7 +21,8 @@
 import org.eclipse.emf.common.notify.Notification;
 
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperator;
 
 /**
  * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperator} object.
@@ -29,7 +30,7 @@
  * <!-- end-user-doc -->
  * @generated
  */
-public class StackedLayerOperatorItemProvider extends AbstractLayerOperatorItemProvider {
+public class StackedLayerOperatorItemProvider extends LayerOperatorItemProvider {
 	/**
 	 * This constructs an instance from a factory and a notifier.
 	 * <!-- begin-user-doc -->
@@ -67,34 +68,29 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	@Override
 	public String getText(Object object) {
-		// String label = ((StackedLayerOperator)object).getName();
-		// return label == null || label.length() == 0 ?
-		// getString("_UI_StackedLayerOperator_type") :
-		// getString("_UI_StackedLayerOperator_type") + " " + label;
-
-		// Actually, we use an StackedLayerOperator as a concrete class for every type of layer operator
-		// (to be changed))
-		AbstractLayerOperator layer = ((AbstractLayerOperator) object);
-		if (!layer.isDescriptorSet()) {
-			// Original behavior
-			String label = ((AbstractLayerOperator) object).getName();
-			return label == null || label.length() == 0 ? getString("_UI_AbstractLayerOperator_type") : getString("_UI_AbstractLayerOperator_type") + " " + label;
-		}
-
-		// Custom behavior
-		String label = layer.getName();
-		return label == null || label.length() == 0 ? getString("_UI_AbstractLayerOperator_type") : getString("_UI_AbstractLayerOperator_type") + " (" + layer.getLayerOperatorDescriptor().getName() + ") " + label;
-
+		String label = ((StackedLayerOperator)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_StackedLayerOperator_type") : //$NON-NLS-1$
+			getString("_UI_StackedLayerOperator_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
 	}
-
+	
 
 	/**
 	 * This handles model notifications by calling {@link #updateChildren} to update any cached
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringInstanceItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringInstanceItemProvider.java
deleted file mode 100755
index 1a14125..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringInstanceItemProvider.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class StringInstanceItemProvider extends TypeInstanceItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public StringInstanceItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-			addValuePropertyDescriptor(object);
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This adds a property descriptor for the Value feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addValuePropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_StringInstance_value_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_StringInstance_value_feature", "_UI_StringInstance_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.STRING_INSTANCE__VALUE,
-				 true,
-				 false,
-				 false,
-				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
-				 null,
-				 null));
-	}
-
-	/**
-	 * This returns StringInstance.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/StringInstance")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((StringInstance)object).getValue();
-		return label == null || label.length() == 0 ?
-			getString("_UI_StringInstance_type") : //$NON-NLS-1$
-			getString("_UI_StringInstance_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-
-		switch (notification.getFeatureID(StringInstance.class)) {
-			case LayersPackage.STRING_INSTANCE__VALUE:
-				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
-				return;
-		}
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToPropertyIndexMapItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToPropertyIndexMapItemProvider.java
index 8f91a06..01889f1 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToPropertyIndexMapItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToPropertyIndexMapItemProvider.java
@@ -26,6 +26,7 @@
 import org.eclipse.emf.ecore.EStructuralFeature;
 
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -143,6 +144,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -202,7 +213,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToPropertySetterItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToPropertySetterItemProvider.java
index 751119d..a16f7c1 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToPropertySetterItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToPropertySetterItemProvider.java
@@ -26,6 +26,7 @@
 import org.eclipse.emf.ecore.EStructuralFeature;
 
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -143,6 +144,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -191,41 +202,11 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(LayersPackage.Literals.STRING_TO_PROPERTY_SETTER__VALUE,
-				 LayersFactory.eINSTANCE.createFillPropertySetter()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_PROPERTY_SETTER__VALUE,
-				 LayersFactory.eINSTANCE.createIsValidPropertySetter()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_PROPERTY_SETTER__VALUE,
 				 LayersFactory.eINSTANCE.createNullPropertySetter()));
 
 		newChildDescriptors.add
 			(createChildParameter
 				(LayersPackage.Literals.STRING_TO_PROPERTY_SETTER__VALUE,
-				 LayersFactory.eINSTANCE.createLinePropertySetter()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_PROPERTY_SETTER__VALUE,
-				 LayersFactory.eINSTANCE.createFontPropertySetter()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_PROPERTY_SETTER__VALUE,
-				 LayersFactory.eINSTANCE.createIsVisiblePropertySetter()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_PROPERTY_SETTER__VALUE,
-				 LayersFactory.eINSTANCE.createIsAbstractUmlSetter()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_PROPERTY_SETTER__VALUE,
 				 LayersFactory.eINSTANCE.createCSSPropertySetter()));
 
 		newChildDescriptors.add
@@ -242,7 +223,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToTypeInstanceMapItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToTypeInstanceMapItemProvider.java
index fc48465..8741106 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToTypeInstanceMapItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToTypeInstanceMapItemProvider.java
@@ -26,6 +26,7 @@
 import org.eclipse.emf.ecore.EStructuralFeature;
 
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -45,9 +46,9 @@
  * <!-- end-user-doc -->
  * @generated
  */
-public class StringToTypeInstanceMapItemProvider
-		extends ItemProviderAdapter
-		implements
+public class StringToTypeInstanceMapItemProvider 
+	extends ItemProviderAdapter
+	implements
 		IEditingDomainItemProvider,
 		IStructuredItemContentProvider,
 		ITreeItemContentProvider,
@@ -143,22 +144,27 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	@Override
 	public String getText(Object object) {
-		Map.Entry<?, ?> stringToTypeInstanceMap = (Map.Entry<?, ?>) object;
-		// return "" + stringToTypeInstanceMap.getKey() + " -> " + stringToTypeInstanceMap.getValue();
-
-		// TypeInstance instance = (TypeInstance)stringToTypeInstanceMap.getValue();
-
-		return "Property '" + stringToTypeInstanceMap.getKey() + "'";
+		Map.Entry<?, ?> stringToTypeInstanceMap = (Map.Entry<?, ?>)object;
+		return "" + stringToTypeInstanceMap.getKey() + " -> " + stringToTypeInstanceMap.getValue(); //$NON-NLS-1$ //$NON-NLS-2$
 	}
-
+	
 
 	/**
 	 * This handles model notifications by calling {@link #updateChildren} to update any cached
@@ -196,46 +202,11 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(LayersPackage.Literals.STRING_TO_TYPE_INSTANCE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createIntInstance()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_INSTANCE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createBooleanInstance()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_INSTANCE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createStringInstance()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_INSTANCE_MAP__VALUE,
 				 LayersFactory.eINSTANCE.createNullInstance()));
 
 		newChildDescriptors.add
 			(createChildParameter
 				(LayersPackage.Literals.STRING_TO_TYPE_INSTANCE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createColorInstance()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_INSTANCE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createFillInstance()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_INSTANCE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createLineInstance()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_INSTANCE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createFontInstance()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_INSTANCE_MAP__VALUE,
 				 LayersFactory.eINSTANCE.createCSSInstance()));
 
 		newChildDescriptors.add
@@ -252,7 +223,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToTypeMapItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToTypeMapItemProvider.java
index d34a4be..08a4425 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToTypeMapItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringToTypeMapItemProvider.java
@@ -26,6 +26,7 @@
 import org.eclipse.emf.ecore.EStructuralFeature;
 
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -143,6 +144,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -191,46 +202,6 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(LayersPackage.Literals.STRING_TO_TYPE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createIntType()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createBooleanType()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createStringType()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createCustomType()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createColor()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createFill()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createLineType()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_MAP__VALUE,
-				 LayersFactory.eINSTANCE.createFontType()));
-
-		newChildDescriptors.add
-			(createChildParameter
-				(LayersPackage.Literals.STRING_TO_TYPE_MAP__VALUE,
 				 LayersFactory.eINSTANCE.createCSSType()));
 
 		newChildDescriptors.add
@@ -247,7 +218,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringTypeItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringTypeItemProvider.java
deleted file mode 100755
index beea40b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/StringTypeItemProvider.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringType;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringType} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class StringTypeItemProvider extends TypeItemProvider {
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public StringTypeItemProvider(AdapterFactory adapterFactory) {
-		super(adapterFactory);
-	}
-
-	/**
-	 * This returns the property descriptors for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
-		if (itemPropertyDescriptors == null) {
-			super.getPropertyDescriptors(object);
-
-		}
-		return itemPropertyDescriptors;
-	}
-
-	/**
-	 * This returns StringType.gif.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object getImage(Object object) {
-		return overlayImage(object, getResourceLocator().getImage("full/obj16/StringType")); //$NON-NLS-1$
-	}
-
-	/**
-	 * This returns the label text for the adapted class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getText(Object object) {
-		String label = ((StringType)object).getName();
-		return label == null || label.length() == 0 ?
-			getString("_UI_StringType_type") : //$NON-NLS-1$
-			getString("_UI_StringType_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-	
-
-	/**
-	 * This handles model notifications by calling {@link #updateChildren} to update any cached
-	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-		updateChildren(notification);
-		super.notifyChanged(notification);
-	}
-
-	/**
-	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-	 * that can be created under this object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
-		super.collectNewChildDescriptors(newChildDescriptors, object);
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TopLayerOperatorDescriptorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TopLayerOperatorDescriptorItemProvider.java
index 0875921..1c9d356 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TopLayerOperatorDescriptorItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TopLayerOperatorDescriptorItemProvider.java
@@ -68,6 +68,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TopLayerOperatorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TopLayerOperatorItemProvider.java
index 3af1c2d..585793e 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TopLayerOperatorItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TopLayerOperatorItemProvider.java
@@ -30,7 +30,7 @@
  * <!-- end-user-doc -->
  * @generated
  */
-public class TopLayerOperatorItemProvider extends AbstractLayerOperatorItemProvider {
+public class TopLayerOperatorItemProvider extends LayerOperatorItemProvider {
 	/**
 	 * This constructs an instance from a factory and a notifier.
 	 * <!-- begin-user-doc -->
@@ -68,6 +68,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TypeInstanceItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TypeInstanceItemProvider.java
index b59e94d..cf99b90 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TypeInstanceItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TypeInstanceItemProvider.java
@@ -22,6 +22,7 @@
 
 import org.eclipse.emf.common.util.ResourceLocator;
 
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -71,6 +72,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -115,13 +126,12 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 	/**
+	 * @generated NOT
 	 *
-	 * @param object
-	 * @return
 	 */
 	protected String getInstancePropertyName(Object object) {
 
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TypeItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TypeItemProvider.java
index 067a263..cc05fad 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TypeItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TypeItemProvider.java
@@ -56,7 +56,6 @@
 		if (itemPropertyDescriptors == null) {
 			super.getPropertyDescriptors(object);
 
-			addMetamodelPropertyDescriptor(object);
 			addNamePropertyDescriptor(object);
 			addDescriptionPropertyDescriptor(object);
 		}
@@ -64,28 +63,6 @@
 	}
 
 	/**
-	 * This adds a property descriptor for the Metamodel feature.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected void addMetamodelPropertyDescriptor(Object object) {
-		itemPropertyDescriptors.add
-			(createItemPropertyDescriptor
-				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
-				 getResourceLocator(),
-				 getString("_UI_Type_metamodel_feature"), //$NON-NLS-1$
-				 getString("_UI_PropertyDescriptor_description", "_UI_Type_metamodel_feature", "_UI_Type_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				 LayersPackage.Literals.TYPE__METAMODEL,
-				 true,
-				 false,
-				 true,
-				 null,
-				 null,
-				 null));
-	}
-
-	/**
 	 * This adds a property descriptor for the Name feature.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -130,6 +107,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TypeRegistryItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TypeRegistryItemProvider.java
index b0bd305..22f4d9a 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TypeRegistryItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/TypeRegistryItemProvider.java
@@ -24,6 +24,7 @@
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
@@ -118,6 +119,16 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
 	 * This returns the label text for the adapted class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -173,7 +184,7 @@
 	 */
 	@Override
 	public ResourceLocator getResourceLocator() {
-		return LayersEditPlugin.INSTANCE;
+		return ((IChildCreationExtender)adapterFactory).getResourceLocator();
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/RegExpLayerItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/RegExpLayerItemProvider.java
deleted file mode 100755
index 45c7b85..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/RegExpLayerItemProvider.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.custom;
-
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IItemPropertySource;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class RegExpLayerItemProvider
-		extends AbstractLayerItemProvider
-		implements
-		IEditingDomainItemProvider,
-		IStructuredItemContentProvider,
-		ITreeItemContentProvider,
-		IItemLabelProvider,
-		IItemPropertySource {
-
-
-	/**
-	 * This constructs an instance from a factory and a notifier.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated
-	 */
-	public RegExpLayerItemProvider(AdapterFactory adapterFactory, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.RegExpLayerItemProvider extendedDelegate) {
-		super(adapterFactory, extendedDelegate);
-	}
-
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/AbstractLayerItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomAbstractLayerItemProvider.java
similarity index 86%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/AbstractLayerItemProvider.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomAbstractLayerItemProvider.java
index 5ca742d..9db324b 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/AbstractLayerItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomAbstractLayerItemProvider.java
@@ -26,7 +26,6 @@
 import org.eclipse.emf.edit.provider.ViewerNotification;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringToTypeInstanceMapImpl;
 
 /**
@@ -34,9 +33,8 @@
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
- * @generated
  */
-public class AbstractLayerItemProvider
+public class CustomAbstractLayerItemProvider
 		extends org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.AbstractLayerItemProvider {
 	/**
 	 * The extended object, used as a delegate. This delegate is usually the original implementation
@@ -49,9 +47,8 @@
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 *
-	 * @generated
 	 */
-	public AbstractLayerItemProvider(AdapterFactory adapterFactory,
+	public CustomAbstractLayerItemProvider(AdapterFactory adapterFactory,
 			org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.AbstractLayerItemProvider extendedDelegate) {
 		super(adapterFactory);
 		this.extendedDelegate = extendedDelegate;
@@ -153,7 +150,6 @@
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 *
-	 * @generated
 	 */
 	@Override
 	public Object getImage(Object object) {
@@ -165,7 +161,6 @@
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 *
-	 * @generated
 	 */
 	@Override
 	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
@@ -177,7 +172,6 @@
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 *
-	 * @generated
 	 */
 	@Override
 	public String getText(Object object) {
@@ -190,23 +184,10 @@
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 *
-	 * @generated
 	 */
 	@Override
 	public void notifyChanged(Notification notification) {
 		updateChildren(notification);
-
-		switch (notification.getFeatureID(RegExpLayer.class)) {
-		case LayersPackage.REG_EXP_LAYER__EXPR:
-		case LayersPackage.REG_EXP_LAYER__LANGUAGE:
-		case LayersPackage.REG_EXP_LAYER__IS_DOMAIN_CHANGED_EVENT_DEPENDANT:
-		case LayersPackage.REG_EXP_LAYER__DOMAIN_CHANGED_EVENT_LEVEL:
-		case LayersPackage.REG_EXP_LAYER__IS_DIAGRAM_CHANGED_EVENT_DEPENDANT:
-		case LayersPackage.REG_EXP_LAYER__DIAGRAM_CHANGED_EVENT_LEVEL:
-		case LayersPackage.REG_EXP_LAYER__EXPRESSION_CONTEXT_OBJECT_TYPE:
-			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
-			return;
-		}
 		super.notifyChanged(notification);
 	}
 
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/AllViewsDerivedLayerItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomAllViewsDerivedLayerItemProvider.java
similarity index 86%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/AllViewsDerivedLayerItemProvider.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomAllViewsDerivedLayerItemProvider.java
index b1139d1..6b570ee 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/AllViewsDerivedLayerItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomAllViewsDerivedLayerItemProvider.java
@@ -17,8 +17,8 @@
  *
  * @generated
  */
-public class AllViewsDerivedLayerItemProvider
-		extends AbstractLayerItemProvider
+public class CustomAllViewsDerivedLayerItemProvider
+		extends CustomAbstractLayerItemProvider
 		implements
 		IEditingDomainItemProvider,
 		IStructuredItemContentProvider,
@@ -32,7 +32,7 @@
 	 *
 	 * @generated
 	 */
-	public AllViewsDerivedLayerItemProvider(AdapterFactory adapterFactory,
+	public CustomAllViewsDerivedLayerItemProvider(AdapterFactory adapterFactory,
 			org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.AllViewsDerivedLayerItemProvider extendedDelegate) {
 		super(adapterFactory, extendedDelegate);
 	}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/LayerItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayerItemProvider.java
similarity index 91%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/LayerItemProvider.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayerItemProvider.java
index 0dad680..68ca694 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/LayerItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayerItemProvider.java
@@ -27,8 +27,8 @@
  *
  * @generated
  */
-public class LayerItemProvider
-		extends AbstractLayerItemProvider
+public class CustomLayerItemProvider
+		extends CustomAbstractLayerItemProvider
 		implements
 		IEditingDomainItemProvider,
 		IStructuredItemContentProvider,
@@ -42,7 +42,7 @@
 	 *
 	 * @generated
 	 */
-	public LayerItemProvider(AdapterFactory adapterFactory,
+	public CustomLayerItemProvider(AdapterFactory adapterFactory,
 			org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayerItemProvider extendedDelegate) {
 		super(adapterFactory, extendedDelegate);
 	}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayerNamedStyleItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayerNamedStyleItemProvider.java
new file mode 100755
index 0000000..3009b25
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayerNamedStyleItemProvider.java
@@ -0,0 +1,53 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.custom;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayerNamedStyleItemProvider;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomLayerNamedStyleItemProvider extends LayerNamedStyleItemProvider {
+
+	/**
+	 * Constructor.
+	 *
+	 * @param adapterFactory
+	 */
+	public CustomLayerNamedStyleItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 *
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection/* <Object> */ newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add(createChildParameter(LayersPackage.Literals.LAYER_NAMED_STYLE__LAYERS_STACK,
+				LayersFactory.eINSTANCE.createLayersStack()));
+	}
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayersItemProviderAdapterFactory.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayersItemProviderAdapterFactory.java
similarity index 67%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayersItemProviderAdapterFactory.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayersItemProviderAdapterFactory.java
index b3a850d..eb3b276 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayersItemProviderAdapterFactory.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayersItemProviderAdapterFactory.java
@@ -11,7 +11,13 @@
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.custom;
 
 import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersItemProviderAdapterFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.StackedLayerOperatorItemProvider;
 
 
 /**
@@ -28,7 +34,7 @@
  * </ul>
  *
  * <h2>Hierarchy of node</h2> By hierarchy, we mean classes with inheritance, with one common ancestor.
- * See {@link AbstractLayerItemProvider} as example.
+ * See {@link CustomAbstractLayerItemProvider} as example.
  * <ul>
  * <li>Create, in custom package, a new XxxItemProvider for the common ancestor, extending the original ItemProvider.</li>
  * <ul>
@@ -56,18 +62,8 @@
  */
 public class CustomLayersItemProviderAdapterFactory extends LayersItemProviderAdapterFactory {
 
-	protected LayerItemProvider layerItemProvider;
-	protected RegExpLayerItemProvider regExpLayerItemProvider;
-	protected AllViewsDerivedLayerItemProvider allViewsDerivedLayerItemProvider;
-
-	/**
-	 * Constructor.
-	 *
-	 */
-	public CustomLayersItemProviderAdapterFactory() {
-		// TODO Auto-generated constructor stub
-	}
-
+	protected CustomLayerItemProvider layerItemProvider;
+	protected CustomAllViewsDerivedLayerItemProvider allViewsDerivedLayerItemProvider;
 
 	/**
 	 *
@@ -78,7 +74,7 @@
 	@Override
 	public Adapter createLayersStackApplicationAdapter() {
 		if (layersStackApplicationItemProvider == null) {
-			layersStackApplicationItemProvider = new LayersStackApplicationItemProvider(this);
+			layersStackApplicationItemProvider = new CustomLayersStackApplicationItemProvider(this);
 		}
 
 		return layersStackApplicationItemProvider;
@@ -93,7 +89,7 @@
 	@Override
 	public Adapter createLayerAdapter() {
 		if (layerItemProvider == null) {
-			layerItemProvider = new LayerItemProvider(this,
+			layerItemProvider = new CustomLayerItemProvider(this,
 					(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayerItemProvider) super.createLayerAdapter());
 		}
 
@@ -102,22 +98,6 @@
 
 	/**
 	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersItemProviderAdapterFactory#createRegExpLayerAdapter()
-	 *
-	 * @return
-	 */
-	@Override
-	public Adapter createRegExpLayerAdapter() {
-		if (regExpLayerItemProvider == null) {
-			regExpLayerItemProvider = new RegExpLayerItemProvider(this,
-					(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.RegExpLayerItemProvider) super.createRegExpLayerAdapter());
-		}
-
-		return regExpLayerItemProvider;
-	}
-
-	/**
-	 *
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersItemProviderAdapterFactory#createAllViewsDerivedLayerAdapter()
 	 *
 	 * @return
@@ -125,7 +105,7 @@
 	@Override
 	public Adapter createAllViewsDerivedLayerAdapter() {
 		if (allViewsDerivedLayerItemProvider == null) {
-			allViewsDerivedLayerItemProvider = new AllViewsDerivedLayerItemProvider(this,
+			allViewsDerivedLayerItemProvider = new CustomAllViewsDerivedLayerItemProvider(this,
 					(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.AllViewsDerivedLayerItemProvider) super.createAllViewsDerivedLayerAdapter());
 		}
 
@@ -145,4 +125,55 @@
 	//
 	// return stringToTypeInstanceMapItemProvider;
 	// }
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersItemProviderAdapterFactory#createStackedLayerOperatorAdapter()
+	 *
+	 * @return
+	 */
+	@Override
+	public Adapter createStackedLayerOperatorAdapter() {
+		return new CustomStackedLayerOperatorItemProvider(this);
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersItemProviderAdapterFactory#createTopLayerOperatorAdapter()
+	 *
+	 * @return
+	 */
+	@Override
+	public Adapter createTopLayerOperatorAdapter() {
+		return new CustomTopLayerOperatorItemProvider(this);
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersItemProviderAdapterFactory#createLayerNamedStyleAdapter()
+	 *
+	 * @return
+	 */
+	@Override
+	public Adapter createLayerNamedStyleAdapter() {
+		return new CustomLayerNamedStyleItemProvider(this);
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersItemProviderAdapterFactory#createLayersStackAdapter()
+	 *
+	 * @return
+	 */
+	@Override
+	public Adapter createLayersStackAdapter() {
+		return new CustomLayersStackItemProvider(this);
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersItemProviderAdapterFactory#createStringToTypeInstanceMapAdapter()
+	 *
+	 * @return
+	 */
+	@Override
+	public Adapter createStringToTypeInstanceMapAdapter() {
+		return new CustomStringToTypeInstanceMapItemProvider(this);
+	}
+
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/LayersStackApplicationItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayersStackApplicationItemProvider.java
similarity index 82%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/LayersStackApplicationItemProvider.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayersStackApplicationItemProvider.java
index 5f6a8c8..d785353 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/LayersStackApplicationItemProvider.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayersStackApplicationItemProvider.java
@@ -20,14 +20,14 @@
  * @author cedric dumoulin
  *
  */
-public class LayersStackApplicationItemProvider extends org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersStackApplicationItemProvider {
+public class CustomLayersStackApplicationItemProvider extends org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersStackApplicationItemProvider {
 
 	/**
 	 * Constructor.
 	 *
 	 * @param adapterFactory
 	 */
-	public LayersStackApplicationItemProvider(AdapterFactory adapterFactory) {
+	public CustomLayersStackApplicationItemProvider(AdapterFactory adapterFactory) {
 		super(adapterFactory);
 	}
 
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayersStackItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayersStackItemProvider.java
new file mode 100755
index 0000000..9798b22
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomLayersStackItemProvider.java
@@ -0,0 +1,56 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.custom;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersStackItemProvider;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomLayersStackItemProvider extends LayersStackItemProvider {
+
+	/**
+	 * Constructor.
+	 *
+	 * @param adapterFactory
+	 */
+	public CustomLayersStackItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public String getText(Object object) {
+		LayersStack stack = (LayersStack) object;
+		String label = ((LayersStack) object).getName();
+
+		if (label == null || label.length() == 0) {
+			try {
+				label = stack.getDiagram().getName();
+			} catch (NullPointerException e) {
+				return getString("_UI_LayersStack_type");
+			}
+		}
+
+		return "Stack " + label;
+	}
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomStackedLayerOperatorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomStackedLayerOperatorItemProvider.java
new file mode 100755
index 0000000..decb2ce
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomStackedLayerOperatorItemProvider.java
@@ -0,0 +1,75 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.custom;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.StackedLayerOperatorItemProvider;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomStackedLayerOperatorItemProvider extends StackedLayerOperatorItemProvider {
+
+	/**
+	 * Constructor.
+	 *
+	 * @param adapterFactory
+	 */
+	public CustomStackedLayerOperatorItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	// /**
+	// * This returns the label text for the adapted class.
+	// * <!-- begin-user-doc -->
+	// * <!-- end-user-doc -->
+	// *
+	// */
+	// @Override
+	// public String getText(Object object) {
+	// String label = ((AbstractLayerOperator) object).getName();
+	// return label == null || label.length() == 0 ? getString("_UI_AbstractLayerOperator_type") : getString("_UI_AbstractLayerOperator_type") + " " + label;
+	// }
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public String getText(Object object) {
+		// String label = ((StackedLayerOperator)object).getName();
+		// return label == null || label.length() == 0 ?
+		// getString("_UI_StackedLayerOperator_type") :
+		// getString("_UI_StackedLayerOperator_type") + " " + label;
+
+		// Actually, we use an StackedLayerOperator as a concrete class for every type of layer operator
+		// (to be changed))
+		LayerOperator layer = ((LayerOperator) object);
+		if (!layer.isDescriptorSet()) {
+			// Original behavior
+			String label = ((LayerOperator) object).getName();
+			return label == null || label.length() == 0 ? getString("_UI_AbstractLayerOperator_type") : getString("_UI_AbstractLayerOperator_type") + " " + label;
+		}
+
+		// Custom behavior
+		String label = layer.getName();
+		return label == null || label.length() == 0 ? getString("_UI_AbstractLayerOperator_type") : getString("_UI_AbstractLayerOperator_type") + " (" + layer.getLayerOperatorDescriptorName() + ") " + label;
+
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomStringToTypeInstanceMapItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomStringToTypeInstanceMapItemProvider.java
new file mode 100755
index 0000000..74b104e
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomStringToTypeInstanceMapItemProvider.java
@@ -0,0 +1,51 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.custom;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.StringToTypeInstanceMapItemProvider;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomStringToTypeInstanceMapItemProvider extends StringToTypeInstanceMapItemProvider {
+
+	/**
+	 * Constructor.
+	 *
+	 * @param adapterFactory
+	 */
+	public CustomStringToTypeInstanceMapItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public String getText(Object object) {
+		Map.Entry<?, ?> stringToTypeInstanceMap = (Map.Entry<?, ?>) object;
+		// return "" + stringToTypeInstanceMap.getKey() + " -> " + stringToTypeInstanceMap.getValue();
+
+		// TypeInstance instance = (TypeInstance)stringToTypeInstanceMap.getValue();
+
+		return "Property '" + stringToTypeInstanceMap.getKey() + "'";
+	}
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomTopLayerOperatorItemProvider.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomTopLayerOperatorItemProvider.java
new file mode 100755
index 0000000..6108641
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/provider/custom/CustomTopLayerOperatorItemProvider.java
@@ -0,0 +1,46 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.custom;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.TopLayerOperatorItemProvider;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomTopLayerOperatorItemProvider extends TopLayerOperatorItemProvider {
+
+	/**
+	 * Constructor.
+	 *
+	 * @param adapterFactory
+	 */
+	public CustomTopLayerOperatorItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((LayerOperator) object).getName();
+		return label == null || label.length() == 0 ? getString("_UI_AbstractLayerOperator_type") : getString("_UI_AbstractLayerOperator_type") + " " + label;
+	}
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/.classpath b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/.classpath
index c1f3189..50aae14 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/.classpath
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/.classpath
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/.settings/org.eclipse.jdt.core.prefs b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/.settings/org.eclipse.jdt.core.prefs
index 94d61f0..b3aa6d6 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/.settings/org.eclipse.jdt.core.prefs
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/.settings/org.eclipse.jdt.core.prefs
@@ -1,10 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.8
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/META-INF/MANIFEST.MF b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/META-INF/MANIFEST.MF
index f285e96..43da9c9 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/META-INF/MANIFEST.MF
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/META-INF/MANIFEST.MF
@@ -1,19 +1,19 @@
 Manifest-Version: 1.0
 Export-Package: org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.presentation,
  org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.presentation,
- org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.presentation
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.core.resources;visibility:=reexport,
- org.eclipse.papyrus.infra.gmfdiag.layers.model.edit;visibility:=reexport,
- org.eclipse.papyrus.infra.gmfdiag.layers.model.edit;visibility:=reexport,
- org.eclipse.papyrus.infra.gmfdiag.layers.model;visibility:=reexport,
- org.eclipse.emf.ecore.xmi;visibility:=reexport,
- org.eclipse.emf.edit.ui;visibility:=reexport,
- org.eclipse.ui.ide;visibility:=reexport,
- org.eclipse.emf.ecore.edit;visibility:=reexport,
- org.eclipse.gmf.runtime.notation.edit;visibility:=reexport,
- org.eclipse.papyrus.infra.gmfdiag.css.model,
- org.eclipse.papyrus.infra.gmfdiag.css.model.edit;visibility:=reexport
+ org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.presentation.custom
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.15.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.13.0,4.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.layers.model.edit;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.layers.model.edit;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.layers.model;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.15.0,3.0.0)",
+ org.eclipse.emf.edit.ui;bundle-version="[2.15.0,3.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.14.0,4.0.0)",
+ org.eclipse.emf.ecore.edit;bundle-version="[2.11.0,3.0.0)",
+ org.eclipse.gmf.runtime.notation.edit;bundle-version="[1.7.0,2.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.css.model;bundle-version="[1.3.0,2.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.css.model.edit;bundle-version="[1.3.0,2.0.0)"
 Bundle-Vendor: %providerName
 Bundle-ActivationPolicy: lazy
 Bundle-ClassPath: .
@@ -23,4 +23,5 @@
 Bundle-ManifestVersion: 2
 Bundle-Activator: org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.presentation.LayersEditorPlugin$Implementation
 Bundle-SymbolicName: org.eclipse.papyrus.infra.gmfdiag.layers.model.editor;singleton:=true
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Automatic-Module-Name: org.eclipse.papyrus.infra.gmfdiag.layers.model.editor
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/build.properties b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/build.properties
index ae68638..7f5d56b 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/build.properties
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/build.properties
@@ -7,6 +7,7 @@
                plugin.properties,\
                about.html
 jars.compile.order = .
-source.. = src-gen/
+source.. = src-gen/,\
+           src
 output.. = bin
 src.includes = about.html
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/plugin.xml b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/plugin.xml
index cda4f2d..de0a6ff 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/plugin.xml
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/plugin.xml
@@ -6,22 +6,6 @@
 
 <plugin>
 
-   <extension point="org.eclipse.ui.newWizards">
-      <!-- @generated layers -->
-      <category
-            id="org.eclipse.emf.ecore.Wizard.category.ID"
-            name="%_UI_Wizard_category"/>
-      <wizard
-            id="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.presentation.LayersModelWizardID"
-            name="%_UI_LayersModelWizard_label"
-            class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.presentation.LayersModelWizard"
-            category="org.eclipse.emf.ecore.Wizard.category.ID"
-            icon="icons/full/obj16/LayersModelFile.gif">
-         <description>%_UI_LayersModelWizard_description</description>
-         <selection class="org.eclipse.core.resources.IResource"/>
-      </wizard>
-   </extension>
-
    <extension point="org.eclipse.ui.editors">
       <!-- @generated layers -->
       <editor
@@ -29,7 +13,7 @@
             name="%_UI_LayersEditor_label"
             icon="icons/full/obj16/LayersModelFile.gif"
             extensions="layers"
-            class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.presentation.LayersEditor"
+            class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.presentation.custom.CustomLayersEditor"
             contributorClass="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.presentation.LayersActionBarContributor">
       </editor>
    </extension>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/presentation/LayersConfigEditorPlugin.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/presentation/LayersConfigEditorPlugin.java
index d5e0dd2..4b27d82 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/presentation/LayersConfigEditorPlugin.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/presentation/LayersConfigEditorPlugin.java
@@ -20,7 +20,7 @@
 import org.eclipse.emf.common.util.ResourceLocator;
 
 /**
- * This is the central singleton for the Layersconfig editor plugin.
+ * This is the central singleton for the LayersConfig editor plugin.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  * @generated
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/presentation/LayersConfigModelWizard.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/presentation/LayersConfigModelWizard.java
index fb95a2c..0a2e808 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/presentation/LayersConfigModelWizard.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/presentation/LayersConfigModelWizard.java
@@ -406,7 +406,8 @@
 		 * @generated
 		 */
 		public void createControl(Composite parent) {
-			Composite composite = new Composite(parent, SWT.NONE); {
+			Composite composite = new Composite(parent, SWT.NONE);
+			{
 				GridLayout layout = new GridLayout();
 				layout.numColumns = 1;
 				layout.verticalSpacing = 12;
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/presentation/LayersActionBarContributor.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/presentation/LayersActionBarContributor.java
index 9f917bd..ff95f24 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/presentation/LayersActionBarContributor.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/presentation/LayersActionBarContributor.java
@@ -176,6 +176,7 @@
 	 */
 	@Override
 	public void contributeToToolBar(IToolBarManager toolBarManager) {
+		super.contributeToToolBar(toolBarManager);
 		toolBarManager.add(new Separator("layers-settings")); //$NON-NLS-1$
 		toolBarManager.add(new Separator("layers-additions")); //$NON-NLS-1$
 	}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/presentation/LayersEditor.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/presentation/LayersEditor.java
index bf45370..485286d 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/presentation/LayersEditor.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/presentation/LayersEditor.java
@@ -53,17 +53,13 @@
 
 import org.eclipse.jface.util.LocalSelectionTransfer;
 
-import org.eclipse.jface.viewers.ColumnWeightData;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ListViewer;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.StructuredViewer;
-import org.eclipse.jface.viewers.TableLayout;
-import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
 
@@ -80,14 +76,10 @@
 
 import org.eclipse.swt.graphics.Point;
 
-import org.eclipse.swt.layout.FillLayout;
-
+import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeColumn;
 
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IEditorInput;
@@ -121,7 +113,6 @@
 import org.eclipse.emf.common.notify.Notification;
 
 import org.eclipse.emf.common.ui.MarkerHelper;
-import org.eclipse.emf.common.ui.ViewerPane;
 
 import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
 
@@ -131,6 +122,7 @@
 import org.eclipse.emf.common.util.Diagnostic;
 import org.eclipse.emf.common.util.URI;
 
+
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 
@@ -182,8 +174,8 @@
  * @generated
  */
 public class LayersEditor
-		extends MultiPageEditorPart
-		implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+	extends MultiPageEditorPart
+	implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
 	/**
 	 * This keeps track of the editing domain that is used to track all changes to the model.
 	 * <!-- begin-user-doc -->
@@ -242,56 +234,6 @@
 	protected TreeViewer selectionViewer;
 
 	/**
-	 * This inverts the roll of parent and child in the content provider and show parents as a tree.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected TreeViewer parentViewer;
-
-	/**
-	 * This shows how a tree view works.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected TreeViewer treeViewer;
-
-	/**
-	 * This shows how a list view works.
-	 * A list viewer doesn't support icons.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected ListViewer listViewer;
-
-	/**
-	 * This shows how a table view works.
-	 * A table can be used as a list with icons.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected TableViewer tableViewer;
-
-	/**
-	 * This shows how a tree view with columns works.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected TreeViewer treeViewerWithColumns;
-
-	/**
-	 * This keeps track of the active viewer pane, in the book.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected ViewerPane currentViewerPane;
-
-	/**
 	 * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -338,7 +280,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	protected IPartListener partListener = new IPartListener() {
+	protected IPartListener partListener =
+		new IPartListener() {
 			public void partActivated(IWorkbenchPart p) {
 				if (p instanceof ContentOutline) {
 					if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
@@ -417,7 +360,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	protected EContentAdapter problemIndicationAdapter = new EContentAdapter() {
+	protected EContentAdapter problemIndicationAdapter =
+		new EContentAdapter() {
 			protected boolean dispatching;
 
 			@Override
@@ -477,7 +421,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	protected IResourceChangeListener resourceChangeListener = new IResourceChangeListener() {
+	protected IResourceChangeListener resourceChangeListener =
+		new IResourceChangeListener() {
 			public void resourceChanged(IResourceChangeEvent event) {
 				IResourceDelta delta = event.getDelta();
 				try {
@@ -591,8 +536,9 @@
 	 */
 	protected void handleChangedResources() {
 		if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+			ResourceSet resourceSet = editingDomain.getResourceSet();
 			if (isDirty()) {
-				changedResources.addAll(editingDomain.getResourceSet().getResources());
+				changedResources.addAll(resourceSet.getResources());
 			}
 			editingDomain.getCommandStack().flush();
 
@@ -601,7 +547,7 @@
 				if (resource.isLoaded()) {
 					resource.unload();
 					try {
-						resource.load(Collections.EMPTY_MAP);
+						resource.load(resourceSet.getLoadOptions());
 					}
 					catch (IOException exception) {
 						if (!resourceToDiagnosticMap.containsKey(resource)) {
@@ -762,7 +708,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
+			@Override
 	protected void firePropertyChange(int action) {
 		super.firePropertyChange(action);
 	}
@@ -800,7 +746,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EditingDomain getEditingDomain() {
 		return editingDomain;
 	}
@@ -865,21 +810,6 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setCurrentViewerPane(ViewerPane viewerPane) {
-		if (currentViewerPane != viewerPane) {
-			if (currentViewerPane != null) {
-				currentViewerPane.showFocus(false);
-			}
-			currentViewerPane = viewerPane;
-		}
-		setCurrentViewer(currentViewerPane.getViewer());
-	}
-
-	/**
 	 * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
 	 * is the current one.
 	 * <!-- begin-user-doc -->
@@ -931,7 +861,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public Viewer getViewer() {
 		return currentViewer;
 	}
@@ -940,20 +869,16 @@
 	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	protected void createContextMenuFor(StructuredViewer viewer) {
-		MenuManager contextMenu = new MenuManager("#PopUp");
-		contextMenu.add(new Separator("additions"));
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
 		contextMenu.setRemoveAllWhenShown(true);
 		contextMenu.addMenuListener(this);
-		Menu menu = contextMenu.createContextMenu(viewer.getControl());
+		Menu menu= contextMenu.createContextMenu(viewer.getControl());
 		viewer.getControl().setMenu(menu);
-		// getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
-
-		String menuId = "org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.diagram.ui.contextmenu";
-		getSite().registerContextMenu(menuId, contextMenu, new UnwrappingSelectionProvider(viewer));
+		getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
 
 		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
 		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance(), LocalSelectionTransfer.getTransfer(), FileTransfer.getInstance() };
@@ -1039,210 +964,28 @@
 		if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
 			// Create a page for the selection tree view.
 			//
-			{
-				ViewerPane viewerPane =
-					new ViewerPane(getSite().getPage(), LayersEditor.this) {
-						@Override
-						public Viewer createViewer(Composite composite) {
-							Tree tree = new Tree(composite, SWT.MULTI);
-							TreeViewer newTreeViewer = new TreeViewer(tree);
-							return newTreeViewer;
-						}
-						@Override
-						public void requestActivation() {
-							super.requestActivation();
-							setCurrentViewerPane(this);
-						}
-					};
-				viewerPane.createControl(getContainer());
+			Tree tree = new Tree(getContainer(), SWT.MULTI);
+			selectionViewer = new TreeViewer(tree);
+			setCurrentViewer(selectionViewer);
 
-				selectionViewer = (TreeViewer)viewerPane.getViewer();
-				selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
-				selectionViewer.setUseHashlookup(true);
+			selectionViewer.setUseHashlookup(true);
+			selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+			selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+			selectionViewer.setInput(editingDomain.getResourceSet());
+			selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
 
-				selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
-				selectionViewer.setInput(editingDomain.getResourceSet());
-				selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
-				viewerPane.setTitle(editingDomain.getResourceSet());
+			new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
 
-				new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
-
-				createContextMenuFor(selectionViewer);
-				int pageIndex = addPage(viewerPane.getControl());
-				setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
-			}
-
-			// Create a page for the parent tree view.
-			//
-			{
-				ViewerPane viewerPane =
-					new ViewerPane(getSite().getPage(), LayersEditor.this) {
-						@Override
-						public Viewer createViewer(Composite composite) {
-							Tree tree = new Tree(composite, SWT.MULTI);
-							TreeViewer newTreeViewer = new TreeViewer(tree);
-							return newTreeViewer;
-						}
-						@Override
-						public void requestActivation() {
-							super.requestActivation();
-							setCurrentViewerPane(this);
-						}
-					};
-				viewerPane.createControl(getContainer());
-
-				parentViewer = (TreeViewer)viewerPane.getViewer();
-				parentViewer.setAutoExpandLevel(30);
-				parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));
-				parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
-
-				createContextMenuFor(parentViewer);
-				int pageIndex = addPage(viewerPane.getControl());
-				setPageText(pageIndex, getString("_UI_ParentPage_label")); //$NON-NLS-1$
-			}
-
-			// This is the page for the list viewer
-			//
-			{
-				ViewerPane viewerPane =
-					new ViewerPane(getSite().getPage(), LayersEditor.this) {
-						@Override
-						public Viewer createViewer(Composite composite) {
-							return new ListViewer(composite);
-						}
-						@Override
-						public void requestActivation() {
-							super.requestActivation();
-							setCurrentViewerPane(this);
-						}
-					};
-				viewerPane.createControl(getContainer());
-				listViewer = (ListViewer)viewerPane.getViewer();
-				listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
-				listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
-
-				createContextMenuFor(listViewer);
-				int pageIndex = addPage(viewerPane.getControl());
-				setPageText(pageIndex, getString("_UI_ListPage_label")); //$NON-NLS-1$
-			}
-
-			// This is the page for the tree viewer
-			//
-			{
-				ViewerPane viewerPane =
-					new ViewerPane(getSite().getPage(), LayersEditor.this) {
-						@Override
-						public Viewer createViewer(Composite composite) {
-							return new TreeViewer(composite);
-						}
-						@Override
-						public void requestActivation() {
-							super.requestActivation();
-							setCurrentViewerPane(this);
-						}
-					};
-				viewerPane.createControl(getContainer());
-				treeViewer = (TreeViewer)viewerPane.getViewer();
-				treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
-				treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
-
-				new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);
-
-				createContextMenuFor(treeViewer);
-				int pageIndex = addPage(viewerPane.getControl());
-				setPageText(pageIndex, getString("_UI_TreePage_label")); //$NON-NLS-1$
-			}
-
-			// This is the page for the table viewer.
-			//
-			{
-				ViewerPane viewerPane =
-					new ViewerPane(getSite().getPage(), LayersEditor.this) {
-						@Override
-						public Viewer createViewer(Composite composite) {
-							return new TableViewer(composite);
-						}
-						@Override
-						public void requestActivation() {
-							super.requestActivation();
-							setCurrentViewerPane(this);
-						}
-					};
-				viewerPane.createControl(getContainer());
-				tableViewer = (TableViewer)viewerPane.getViewer();
-
-				Table table = tableViewer.getTable();
-				TableLayout layout = new TableLayout();
-				table.setLayout(layout);
-				table.setHeaderVisible(true);
-				table.setLinesVisible(true);
-
-				TableColumn objectColumn = new TableColumn(table, SWT.NONE);
-				layout.addColumnData(new ColumnWeightData(3, 100, true));
-				objectColumn.setText(getString("_UI_ObjectColumn_label")); //$NON-NLS-1$
-				objectColumn.setResizable(true);
-
-				TableColumn selfColumn = new TableColumn(table, SWT.NONE);
-				layout.addColumnData(new ColumnWeightData(2, 100, true));
-				selfColumn.setText(getString("_UI_SelfColumn_label")); //$NON-NLS-1$
-				selfColumn.setResizable(true);
-
-				tableViewer.setColumnProperties(new String [] {"a", "b"}); //$NON-NLS-1$ //$NON-NLS-2$
-				tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
-				tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
-
-				createContextMenuFor(tableViewer);
-				int pageIndex = addPage(viewerPane.getControl());
-				setPageText(pageIndex, getString("_UI_TablePage_label")); //$NON-NLS-1$
-			}
-
-			// This is the page for the table tree viewer.
-			//
-			{
-				ViewerPane viewerPane =
-					new ViewerPane(getSite().getPage(), LayersEditor.this) {
-						@Override
-						public Viewer createViewer(Composite composite) {
-							return new TreeViewer(composite);
-						}
-						@Override
-						public void requestActivation() {
-							super.requestActivation();
-							setCurrentViewerPane(this);
-						}
-					};
-				viewerPane.createControl(getContainer());
-
-				treeViewerWithColumns = (TreeViewer)viewerPane.getViewer();
-
-				Tree tree = treeViewerWithColumns.getTree();
-				tree.setLayoutData(new FillLayout());
-				tree.setHeaderVisible(true);
-				tree.setLinesVisible(true);
-
-				TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);
-				objectColumn.setText(getString("_UI_ObjectColumn_label")); //$NON-NLS-1$
-				objectColumn.setResizable(true);
-				objectColumn.setWidth(250);
-
-				TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);
-				selfColumn.setText(getString("_UI_SelfColumn_label")); //$NON-NLS-1$
-				selfColumn.setResizable(true);
-				selfColumn.setWidth(200);
-
-				treeViewerWithColumns.setColumnProperties(new String [] {"a", "b"}); //$NON-NLS-1$ //$NON-NLS-2$
-				treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
-				treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
-
-				createContextMenuFor(treeViewerWithColumns);
-				int pageIndex = addPage(viewerPane.getControl());
-				setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label")); //$NON-NLS-1$
-			}
+			createContextMenuFor(selectionViewer);
+			int pageIndex = addPage(tree);
+			setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
 
 			getSite().getShell().getDisplay().asyncExec
 				(new Runnable() {
 					 public void run() {
-						 setActivePage(0);
+						 if (!getContainer().isDisposed()) {
+							 setActivePage(0);
+						 }
 					 }
 				 });
 		}
@@ -1282,9 +1025,9 @@
 		if (getPageCount() <= 1) {
 			setPageText(0, ""); //$NON-NLS-1$
 			if (getContainer() instanceof CTabFolder) {
-				((CTabFolder)getContainer()).setTabHeight(1);
 				Point point = getContainer().getSize();
-				getContainer().setSize(point.x, point.y + 6);
+				Rectangle clientArea = getContainer().getClientArea();
+				getContainer().setSize(point.x,  2 * point.y - clientArea.height - clientArea.y);
 			}
 		}
 	}
@@ -1300,9 +1043,9 @@
 		if (getPageCount() > 1) {
 			setPageText(0, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
 			if (getContainer() instanceof CTabFolder) {
-				((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
 				Point point = getContainer().getSize();
-				getContainer().setSize(point.x, point.y - 6);
+				Rectangle clientArea = getContainer().getClientArea();
+				getContainer().setSize(point.x, clientArea.height + clientArea.y);
 			}
 		}
 	}
@@ -1330,15 +1073,15 @@
 	 */
 	@SuppressWarnings("rawtypes")
 	@Override
-	public Object getAdapter(Class key) {
+	public <T> T getAdapter(Class<T> key) {
 		if (key.equals(IContentOutlinePage.class)) {
-			return showOutlineView() ? getContentOutlinePage() : null;
+			return showOutlineView() ? key.cast(getContentOutlinePage()) : null;
 		}
 		else if (key.equals(IPropertySheetPage.class)) {
-			return getPropertySheetPage();
+			return key.cast(getPropertySheetPage());
 		}
 		else if (key.equals(IGotoMarker.class)) {
-			return this;
+			return key.cast(this);
 		}
 		else {
 			return super.getAdapter(key);
@@ -1418,7 +1161,7 @@
 	 */
 	public IPropertySheetPage getPropertySheetPage() {
 		PropertySheetPage propertySheetPage =
-			new ExtendedPropertySheetPage(editingDomain) {
+			new ExtendedPropertySheetPage(editingDomain, ExtendedPropertySheetPage.Decoration.NONE, null, 0, false) {
 				@Override
 				public void setSelectionToViewer(List<?> selection) {
 					LayersEditor.this.setSelectionToViewer(selection);
@@ -1444,34 +1187,22 @@
 	 * @generated
 	 */
 	public void handleContentOutlineSelection(ISelection selection) {
-		if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+		if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
 			Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
 			if (selectedElements.hasNext()) {
 				// Get the first selected element.
 				//
 				Object selectedElement = selectedElements.next();
 
-				// If it's the selection viewer, then we want it to select the same selection as this selection.
-				//
-				if (currentViewerPane.getViewer() == selectionViewer) {
-					ArrayList<Object> selectionList = new ArrayList<Object>();
-					selectionList.add(selectedElement);
-					while (selectedElements.hasNext()) {
-						selectionList.add(selectedElements.next());
-					}
+				ArrayList<Object> selectionList = new ArrayList<Object>();
+				selectionList.add(selectedElement);
+				while (selectedElements.hasNext()) {
+					selectionList.add(selectedElements.next());
+				}
 
-					// Set the selection to the widget.
-					//
-					selectionViewer.setSelection(new StructuredSelection(selectionList));
-				}
-				else {
-					// Set the input to the widget.
-					//
-					if (currentViewerPane.getViewer().getInput() != selectedElement) {
-						currentViewerPane.getViewer().setInput(selectedElement);
-						currentViewerPane.setTitle(selectedElement);
-					}
-				}
+				// Set the selection to the widget.
+				//
+				selectionViewer.setSelection(new StructuredSelection(selectionList));
 			}
 		}
 	}
@@ -1625,7 +1356,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void gotoMarker(IMarker marker) {
 		List<?> targetObjects = markerHelper.getTargetObjects(editingDomain, marker);
 		if (!targetObjects.isEmpty()) {
@@ -1656,12 +1386,7 @@
 	 */
 	@Override
 	public void setFocus() {
-		if (currentViewerPane != null) {
-			currentViewerPane.setFocus();
-		}
-		else {
-			getControl(getActivePage()).setFocus();
-		}
+		getControl(getActivePage()).setFocus();
 	}
 
 	/**
@@ -1670,7 +1395,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void addSelectionChangedListener(ISelectionChangedListener listener) {
 		selectionChangedListeners.add(listener);
 	}
@@ -1681,7 +1405,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
 		selectionChangedListeners.remove(listener);
 	}
@@ -1692,7 +1415,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public ISelection getSelection() {
 		return editorSelection;
 	}
@@ -1704,7 +1426,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setSelection(ISelection selection) {
 		editorSelection = selection;
 
@@ -1774,7 +1495,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void menuAboutToShow(IMenuManager menuManager) {
 		((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
 	}
@@ -1843,6 +1563,6 @@
 	 * @generated
 	 */
 	protected boolean showOutlineView() {
-		return true;
+		return false;
 	}
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/presentation/LayersModelWizard.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/presentation/LayersModelWizard.java
deleted file mode 100755
index 98932c6..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/presentation/LayersModelWizard.java
+++ /dev/null
@@ -1,639 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.presentation;
-
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.MissingResourceException;
-import java.util.StringTokenizer;
-
-import org.eclipse.emf.common.CommonPlugin;
-
-import org.eclipse.emf.common.util.URI;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-
-import org.eclipse.emf.ecore.EObject;
-
-import org.eclipse.emf.ecore.xmi.XMLResource;
-
-import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
-
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-
-import org.eclipse.jface.dialogs.MessageDialog;
-
-import org.eclipse.jface.viewers.IStructuredSelection;
-
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.jface.wizard.WizardPage;
-
-import org.eclipse.swt.SWT;
-
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.ModifyEvent;
-
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-
-import org.eclipse.ui.INewWizard;
-import org.eclipse.ui.IWorkbench;
-
-import org.eclipse.ui.actions.WorkspaceModifyOperation;
-
-import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
-
-import org.eclipse.ui.part.FileEditorInput;
-import org.eclipse.ui.part.ISetSelectionTarget;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersEditPlugin;
-
-
-import org.eclipse.core.runtime.Path;
-
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-
-
-/**
- * This is a simple wizard for creating a new model file.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class LayersModelWizard extends Wizard implements INewWizard {
-	/**
-	 * The supported extensions for created files.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public static final List<String> FILE_EXTENSIONS =
-		Collections.unmodifiableList(Arrays.asList(LayersEditorPlugin.INSTANCE.getString("_UI_LayersEditorFilenameExtensions").split("\\s*,\\s*"))); //$NON-NLS-1$ //$NON-NLS-2$
-
-	/**
-	 * A formatted list of supported file extensions, suitable for display.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public static final String FORMATTED_FILE_EXTENSIONS =
-		LayersEditorPlugin.INSTANCE.getString("_UI_LayersEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-
-	/**
-	 * This caches an instance of the model package.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected LayersPackage layersPackage = LayersPackage.eINSTANCE;
-
-	/**
-	 * This caches an instance of the model factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected LayersFactory layersFactory = layersPackage.getLayersFactory();
-
-	/**
-	 * This is the file creation page.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected LayersModelWizardNewFileCreationPage newFileCreationPage;
-
-	/**
-	 * This is the initial object creation page.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected LayersModelWizardInitialObjectCreationPage initialObjectCreationPage;
-
-	/**
-	 * Remember the selection during initialization for populating the default container.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected IStructuredSelection selection;
-
-	/**
-	 * Remember the workbench during initialization.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected IWorkbench workbench;
-
-	/**
-	 * Caches the names of the types that can be created as the root object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected List<String> initialObjectNames;
-
-	/**
-	 * This just records the information.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void init(IWorkbench workbench, IStructuredSelection selection) {
-		this.workbench = workbench;
-		this.selection = selection;
-		setWindowTitle(LayersEditorPlugin.INSTANCE.getString("_UI_Wizard_label")); //$NON-NLS-1$
-		setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(LayersEditorPlugin.INSTANCE.getImage("full/wizban/NewLayers"))); //$NON-NLS-1$
-	}
-
-	/**
-	 * Returns the names of the types that can be created as the root object.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected Collection<String> getInitialObjectNames() {
-		if (initialObjectNames == null) {
-			initialObjectNames = new ArrayList<String>();
-			for (EClassifier eClassifier : layersPackage.getEClassifiers()) {
-				if (eClassifier instanceof EClass) {
-					EClass eClass = (EClass)eClassifier;
-					if (!eClass.isAbstract()) {
-						initialObjectNames.add(eClass.getName());
-					}
-				}
-			}
-			Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());
-		}
-		return initialObjectNames;
-	}
-
-	/**
-	 * Create a new model.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected EObject createInitialModel() {
-		EClass eClass = (EClass)layersPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
-		EObject rootObject = layersFactory.create(eClass);
-		return rootObject;
-	}
-
-	/**
-	 * Do the work after everything is specified.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean performFinish() {
-		try {
-			// Remember the file.
-			//
-			final IFile modelFile = getModelFile();
-
-			// Do the work within an operation.
-			//
-			WorkspaceModifyOperation operation =
-				new WorkspaceModifyOperation() {
-					@Override
-					protected void execute(IProgressMonitor progressMonitor) {
-						try {
-							// Create a resource set
-							//
-							ResourceSet resourceSet = new ResourceSetImpl();
-
-							// Get the URI of the model file.
-							//
-							URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);
-
-							// Create a resource for this file.
-							//
-							Resource resource = resourceSet.createResource(fileURI);
-
-							// Add the initial model object to the contents.
-							//
-							EObject rootObject = createInitialModel();
-							if (rootObject != null) {
-								resource.getContents().add(rootObject);
-							}
-
-							// Save the contents of the resource to the file system.
-							//
-							Map<Object, Object> options = new HashMap<Object, Object>();
-							options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());
-							resource.save(options);
-						}
-						catch (Exception exception) {
-							LayersEditorPlugin.INSTANCE.log(exception);
-						}
-						finally {
-							progressMonitor.done();
-						}
-					}
-				};
-
-			getContainer().run(false, false, operation);
-
-			// Select the new file resource in the current view.
-			//
-			IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
-			IWorkbenchPage page = workbenchWindow.getActivePage();
-			final IWorkbenchPart activePart = page.getActivePart();
-			if (activePart instanceof ISetSelectionTarget) {
-				final ISelection targetSelection = new StructuredSelection(modelFile);
-				getShell().getDisplay().asyncExec
-					(new Runnable() {
-						 public void run() {
-							 ((ISetSelectionTarget)activePart).selectReveal(targetSelection);
-						 }
-					 });
-			}
-
-			// Open an editor on the new file.
-			//
-			try {
-				page.openEditor
-					(new FileEditorInput(modelFile),
-					 workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());					 	 
-			}
-			catch (PartInitException exception) {
-				MessageDialog.openError(workbenchWindow.getShell(), LayersEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage()); //$NON-NLS-1$
-				return false;
-			}
-
-			return true;
-		}
-		catch (Exception exception) {
-			LayersEditorPlugin.INSTANCE.log(exception);
-			return false;
-		}
-	}
-
-	/**
-	 * This is the one page of the wizard.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public class LayersModelWizardNewFileCreationPage extends WizardNewFileCreationPage {
-		/**
-		 * Pass in the selection.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		public LayersModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {
-			super(pageId, selection);
-		}
-
-		/**
-		 * The framework calls this to see if the file is correct.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		@Override
-		protected boolean validatePage() {
-			if (super.validatePage()) {
-				String extension = new Path(getFileName()).getFileExtension();
-				if (extension == null || !FILE_EXTENSIONS.contains(extension)) {
-					String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension"; //$NON-NLS-1$ //$NON-NLS-2$
-					setErrorMessage(LayersEditorPlugin.INSTANCE.getString(key, new Object [] { FORMATTED_FILE_EXTENSIONS }));
-					return false;
-				}
-				return true;
-			}
-			return false;
-		}
-
-		/**
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		public IFile getModelFile() {
-			return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));
-		}
-	}
-
-	/**
-	 * This is the page where the type of object to create is selected.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public class LayersModelWizardInitialObjectCreationPage extends WizardPage {
-		/**
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		protected Combo initialObjectField;
-
-		/**
-		 * @generated
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 */
-		protected List<String> encodings;
-
-		/**
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		protected Combo encodingField;
-
-		/**
-		 * Pass in the selection.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		public LayersModelWizardInitialObjectCreationPage(String pageId) {
-			super(pageId);
-		}
-
-		/**
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		public void createControl(Composite parent) {
-			Composite composite = new Composite(parent, SWT.NONE); {
-				GridLayout layout = new GridLayout();
-				layout.numColumns = 1;
-				layout.verticalSpacing = 12;
-				composite.setLayout(layout);
-
-				GridData data = new GridData();
-				data.verticalAlignment = GridData.FILL;
-				data.grabExcessVerticalSpace = true;
-				data.horizontalAlignment = GridData.FILL;
-				composite.setLayoutData(data);
-			}
-
-			Label containerLabel = new Label(composite, SWT.LEFT);
-			{
-				containerLabel.setText(LayersEditorPlugin.INSTANCE.getString("_UI_ModelObject")); //$NON-NLS-1$
-
-				GridData data = new GridData();
-				data.horizontalAlignment = GridData.FILL;
-				containerLabel.setLayoutData(data);
-			}
-
-			initialObjectField = new Combo(composite, SWT.BORDER);
-			{
-				GridData data = new GridData();
-				data.horizontalAlignment = GridData.FILL;
-				data.grabExcessHorizontalSpace = true;
-				initialObjectField.setLayoutData(data);
-			}
-
-			for (String objectName : getInitialObjectNames()) {
-				initialObjectField.add(getLabel(objectName));
-			}
-
-			if (initialObjectField.getItemCount() == 1) {
-				initialObjectField.select(0);
-			}
-			initialObjectField.addModifyListener(validator);
-
-			Label encodingLabel = new Label(composite, SWT.LEFT);
-			{
-				encodingLabel.setText(LayersEditorPlugin.INSTANCE.getString("_UI_XMLEncoding")); //$NON-NLS-1$
-
-				GridData data = new GridData();
-				data.horizontalAlignment = GridData.FILL;
-				encodingLabel.setLayoutData(data);
-			}
-			encodingField = new Combo(composite, SWT.BORDER);
-			{
-				GridData data = new GridData();
-				data.horizontalAlignment = GridData.FILL;
-				data.grabExcessHorizontalSpace = true;
-				encodingField.setLayoutData(data);
-			}
-
-			for (String encoding : getEncodings()) {
-				encodingField.add(encoding);
-			}
-
-			encodingField.select(0);
-			encodingField.addModifyListener(validator);
-
-			setPageComplete(validatePage());
-			setControl(composite);
-		}
-
-		/**
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		protected ModifyListener validator =
-			new ModifyListener() {
-				public void modifyText(ModifyEvent e) {
-					setPageComplete(validatePage());
-				}
-			};
-
-		/**
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		protected boolean validatePage() {
-			return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());
-		}
-
-		/**
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		@Override
-		public void setVisible(boolean visible) {
-			super.setVisible(visible);
-			if (visible) {
-				if (initialObjectField.getItemCount() == 1) {
-					initialObjectField.clearSelection();
-					encodingField.setFocus();
-				}
-				else {
-					encodingField.clearSelection();
-					initialObjectField.setFocus();
-				}
-			}
-		}
-
-		/**
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		public String getInitialObjectName() {
-			String label = initialObjectField.getText();
-
-			for (String name : getInitialObjectNames()) {
-				if (getLabel(name).equals(label)) {
-					return name;
-				}
-			}
-			return null;
-		}
-
-		/**
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		public String getEncoding() {
-			return encodingField.getText();
-		}
-
-		/**
-		 * Returns the label for the specified type name.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		protected String getLabel(String typeName) {
-			try {
-				return LayersEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type"); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-			catch(MissingResourceException mre) {
-				LayersEditorPlugin.INSTANCE.log(mre);
-			}
-			return typeName;
-		}
-
-		/**
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		protected Collection<String> getEncodings() {
-			if (encodings == null) {
-				encodings = new ArrayList<String>();
-				for (StringTokenizer stringTokenizer = new StringTokenizer(LayersEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens(); ) //$NON-NLS-1$
-				{
-					encodings.add(stringTokenizer.nextToken());
-				}
-			}
-			return encodings;
-		}
-	}
-
-	/**
-	 * The framework calls this to create the contents of the wizard.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-		@Override
-	public void addPages() {
-		// Create a page, set the title, and the initial model file name.
-		//
-		newFileCreationPage = new LayersModelWizardNewFileCreationPage("Whatever", selection); //$NON-NLS-1$
-		newFileCreationPage.setTitle(LayersEditorPlugin.INSTANCE.getString("_UI_LayersModelWizard_label")); //$NON-NLS-1$
-		newFileCreationPage.setDescription(LayersEditorPlugin.INSTANCE.getString("_UI_LayersModelWizard_description")); //$NON-NLS-1$
-		newFileCreationPage.setFileName(LayersEditorPlugin.INSTANCE.getString("_UI_LayersEditorFilenameDefaultBase") + "." + FILE_EXTENSIONS.get(0)); //$NON-NLS-1$ //$NON-NLS-2$
-		addPage(newFileCreationPage);
-
-		// Try and get the resource selection to determine a current directory for the file dialog.
-		//
-		if (selection != null && !selection.isEmpty()) {
-			// Get the resource...
-			//
-			Object selectedElement = selection.iterator().next();
-			if (selectedElement instanceof IResource) {
-				// Get the resource parent, if its a file.
-				//
-				IResource selectedResource = (IResource)selectedElement;
-				if (selectedResource.getType() == IResource.FILE) {
-					selectedResource = selectedResource.getParent();
-				}
-
-				// This gives us a directory...
-				//
-				if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {
-					// Set this for the container.
-					//
-					newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());
-
-					// Make up a unique new name here.
-					//
-					String defaultModelBaseFilename = LayersEditorPlugin.INSTANCE.getString("_UI_LayersEditorFilenameDefaultBase"); //$NON-NLS-1$
-					String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);
-					String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension; //$NON-NLS-1$
-					for (int i = 1; ((IContainer)selectedResource).findMember(modelFilename) != null; ++i) {
-						modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension; //$NON-NLS-1$
-					}
-					newFileCreationPage.setFileName(modelFilename);
-				}
-			}
-		}
-		initialObjectCreationPage = new LayersModelWizardInitialObjectCreationPage("Whatever2"); //$NON-NLS-1$
-		initialObjectCreationPage.setTitle(LayersEditorPlugin.INSTANCE.getString("_UI_LayersModelWizard_label")); //$NON-NLS-1$
-		initialObjectCreationPage.setDescription(LayersEditorPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description")); //$NON-NLS-1$
-		addPage(initialObjectCreationPage);
-	}
-
-	/**
-	 * Get the file from the page.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public IFile getModelFile() {
-		return newFileCreationPage.getModelFile();
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/presentation/custom/CustomLayersEditor.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/presentation/custom/CustomLayersEditor.java
new file mode 100755
index 0000000..ca6f291
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/presentation/custom/CustomLayersEditor.java
@@ -0,0 +1,60 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.presentation.custom;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.presentation.LayersEditor;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Menu;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomLayersEditor extends LayersEditor {
+
+	/**
+	 * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	protected void createContextMenuFor(StructuredViewer viewer) {
+		MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
+		contextMenu.add(new Separator("additions")); //$NON-NLS-1$
+		contextMenu.setRemoveAllWhenShown(true);
+		contextMenu.addMenuListener(this);
+		Menu menu = contextMenu.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		// getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		String menuId = "org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.diagram.ui.contextmenu";
+		getSite().registerContextMenu(menuId, contextMenu, new UnwrappingSelectionProvider(viewer));
+
+		int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+		Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance(), LocalSelectionTransfer.getTransfer(), FileTransfer.getInstance() };
+		viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+		viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+	}
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/.classpath b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/.classpath
index c68522b..50aae14 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/.classpath
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src-gen"/>
 	<classpathentry kind="src" path="src"/>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/.settings/org.eclipse.jdt.core.prefs b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/.settings/org.eclipse.jdt.core.prefs
index 94d61f0..b3aa6d6 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/.settings/org.eclipse.jdt.core.prefs
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/.settings/org.eclipse.jdt.core.prefs
@@ -1,10 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.8
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/META-INF/MANIFEST.MF b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/META-INF/MANIFEST.MF
index ea7d3d1..a5761f6 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/META-INF/MANIFEST.MF
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/META-INF/MANIFEST.MF
@@ -1,16 +1,16 @@
 Manifest-Version: 1.0
-Require-Bundle: org.eclipse.core.runtime;resolution:=optional;x-installation:=greedy,
- org.eclipse.emf.ecore;visibility:=reexport,
- org.eclipse.gmf.runtime.notation;visibility:=reexport,
- org.eclipse.emf.ecore.xmi;bundle-version="2.9.0",
- org.eclipse.uml2.uml;bundle-version="4.1.0",
- org.eclipse.ocl.ecore;bundle-version="3.3.0",
- org.eclipse.emf.query.ocl;bundle-version="2.0.0",
+Require-Bundle: org.eclipse.core.runtime;resolution:=optional;x-installation:=greedy;bundle-version="[3.15.0,4.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.15.0,3.0.0)",
+ org.eclipse.gmf.runtime.notation;bundle-version="[1.9.0,2.0.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.15.0,3.0.0)",
+ org.eclipse.uml2.uml;bundle-version="[5.4.0,6.0.0)",
+ org.eclipse.ocl.ecore;bundle-version="[3.10.0,4.0.0)",
  com.google.guava;bundle-version="21.0.0",
- org.eclipse.papyrus.infra.core.log;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.gmfdiag.css.model;bundle-version="1.2.0";visibility:=reexport,
- org.eclipse.papyrus.infra.gmfdiag.css,
- org.eclipse.papyrus.infra.gmfdiag.css.properties
+ org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.css.model;bundle-version="[1.3.0,2.0.0)";visibility:=reexport,
+ org.eclipse.papyrus.infra.gmfdiag.css;bundle-version="[2.3.0,3.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.css.properties;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.emf;bundle-version="[1.0.0,2.0.0)"
 Export-Package: org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig,
  org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl,
  org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.util,
@@ -18,8 +18,10 @@
  org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command,
  org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers,
  org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl,
+ org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom,
  org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.util,
- org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.notifier
+ org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.notifier,
+ org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.util
 Bundle-Vendor: %providerName
 Bundle-ActivationPolicy: lazy
 Bundle-ClassPath: .
@@ -29,4 +31,5 @@
 Bundle-ManifestVersion: 2
 Bundle-Activator: org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.Activator
 Bundle-SymbolicName: org.eclipse.papyrus.infra.gmfdiag.layers.model;singleton:=true
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Automatic-Module-Name: org.eclipse.papyrus.infra.gmfdiag.layers.model
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.ecore b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.ecore
index f85ed10..6a923bc 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.ecore
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.ecore
@@ -211,31 +211,12 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Type" abstract="true" eSuperTypes="#//FolderElement">
     <eOperations name="createInstance" ordered="false" lowerBound="1" eType="#//TypeInstance"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="metamodel" ordered="false"
-        lowerBound="1" eType="#//Metamodel"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
         eType="#//String"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
         lowerBound="1" eType="#//String"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Metamodel" eSuperTypes="#//FolderElement">
-    <eOperations name="getEPackage" ordered="false" lowerBound="1" eType="#//EPackage"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
-        eType="#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
-        lowerBound="1" eType="#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nsuri" ordered="false"
-        lowerBound="1" eType="#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="pluginID" ordered="false"
-        lowerBound="1" eType="#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="ePackageInstanceName" ordered="false"
-        lowerBound="1" eType="#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isTypeValid" ordered="false"
-        lowerBound="1" eType="#//boolean"/>
-  </eClassifiers>
   <eClassifiers xsi:type="ecore:EDataType" name="String" instanceClassName="java.lang.String"/>
-  <eClassifiers xsi:type="ecore:EDataType" name="boolean" instanceClassName="boolean"/>
-  <eClassifiers xsi:type="ecore:EDataType" name="EPackage" instanceClassName="org.eclipse.emf.ecore.EPackage"/>
   <eClassifiers xsi:type="ecore:EClass" name="TypeInstance" abstract="true" eSuperTypes="#//ComputePropertyValueCommandItf">
     <eOperations name="setValueFromString" ordered="false" lowerBound="1">
       <eParameters name="value" ordered="false" lowerBound="1" eType="#//String"/>
@@ -339,7 +320,7 @@
       <eParameters name="operatorName" ordered="false" lowerBound="1" eType="#//String"/>
       <eParameters name="layerDescriptorName" ordered="false" lowerBound="1" eType="#//String"/>
     </eOperations>
-    <eOperations name="createLayerOperator" ordered="false" lowerBound="1" eType="#//AbstractLayerOperator"
+    <eOperations name="createLayerOperator" ordered="false" lowerBound="1" eType="#//LayerOperator"
         eExceptions="#//LayersException">
       <eParameters name="layerOperatorID" ordered="false" lowerBound="1" eType="#//String"/>
     </eOperations>
@@ -350,7 +331,7 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="propertyCollectionSize"
         ordered="false" lowerBound="1" eType="#//int"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="defaultOperator" ordered="false"
-        lowerBound="1" eType="#//DefaultPropertyOperator" changeable="false" transient="true"/>
+        lowerBound="1" eType="#//PropertyOperator" changeable="false" transient="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="LayerOperatorDescriptor">
     <eOperations name="getPropertyOperator" ordered="false" lowerBound="1" eType="#//PropertyOperator"
@@ -361,10 +342,10 @@
       <eParameters name="property" ordered="false" lowerBound="1" eType="#//Property"/>
       <eParameters name="operator" ordered="false" lowerBound="1" eType="#//PropertyOperator"/>
     </eOperations>
-    <eOperations name="createLayerOperator" ordered="false" lowerBound="1" eType="#//AbstractLayerOperator"/>
+    <eOperations name="createLayerOperator" ordered="false" lowerBound="1" eType="#//LayerOperator"/>
     <eOperations name="setPropertyCollectionSize" ordered="false" lowerBound="1">
       <eParameters name="size" ordered="false" lowerBound="1" eType="#//int"/>
-      <eParameters name="defaultPropertyOperator" ordered="false" lowerBound="1" eType="#//DefaultPropertyOperator"/>
+      <eParameters name="defaultPropertyOperator" ordered="false" lowerBound="1" eType="#//PropertyOperator"/>
     </eOperations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="propertyOperators" upperBound="-1"
         eType="#//PropertyOperator" transient="true"/>
@@ -376,22 +357,26 @@
         eType="#//ComputePropertyValueCommand" eExceptions="#//LayersException">
       <eParameters name="property" upperBound="-1" eType="#//ComputePropertyValueCommand"/>
     </eOperations>
+    <eOperations name="resetOperatorInstance" ordered="false" lowerBound="1" eExceptions="#//LayersException"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
         eType="#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="classname" ordered="false"
+        lowerBound="1" eType="#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="operatorInstance" ordered="false"
+        lowerBound="1" eType="#//PropertyOperator"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="classBundleID" ordered="false"
+        lowerBound="1" eType="#//String"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EDataType" name="ComputePropertyValueCommand" instanceClassName="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand"/>
-  <eClassifiers xsi:type="ecore:EClass" name="AbstractLayerOperator" abstract="true"
-      eSuperTypes="#//LayerOperator">
+  <eClassifiers xsi:type="ecore:EClass" name="LayerOperator" abstract="true" eSuperTypes="#//LayerExpression #//LayersContainer">
     <eOperations name="isDescriptorSet" ordered="false" lowerBound="1" eType="#//boolean"/>
     <eOperations name="resetDescriptor" ordered="false" lowerBound="1"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="layerOperatorDescriptor"
-        ordered="false" lowerBound="1" eType="#//LayerOperatorDescriptor" transient="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="layerOperatorDescriptorName"
-        ordered="false" lowerBound="1" eType="#//String"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="LayerOperator" abstract="true" eSuperTypes="#//LayerExpression #//LayersContainer">
     <eStructuralFeatures xsi:type="ecore:EReference" name="layers" upperBound="-1"
         eType="#//LayerExpression" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="layerOperatorDescriptorName"
+        ordered="false" lowerBound="1" eType="#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="layerOperatorDescriptor"
+        ordered="false" lowerBound="1" eType="#//LayerOperatorDescriptor"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="LayersContainer" abstract="true" interface="true">
     <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -401,7 +386,7 @@
       <eParameters name="layer" ordered="false" lowerBound="1" eType="#//LayerExpression"/>
     </eOperations>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="DefaultPropertyOperator" eSuperTypes="#//PropertyOperator"/>
+  <eClassifiers xsi:type="ecore:EDataType" name="boolean" instanceClassName="boolean"/>
   <eClassifiers xsi:type="ecore:EEnum" name="LayerState">
     <eLiterals name="detached"/>
     <eLiterals name="attached" value="1"/>
@@ -445,29 +430,25 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
         eType="#//String"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EDataType" name="Object" instanceClassName="java.lang.Object"/>
-  <eClassifiers xsi:type="ecore:EClass" name="IntInstance" eSuperTypes="#//TypeInstance">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" ordered="false"
-        lowerBound="1" eType="#//int"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="BooleanInstance" eSuperTypes="#//TypeInstance">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" ordered="false"
+  <eClassifiers xsi:type="ecore:EClass" name="Metamodel" eSuperTypes="#//FolderElement">
+    <eOperations name="getEPackage" ordered="false" lowerBound="1" eType="#//EPackage"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+        eType="#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
+        lowerBound="1" eType="#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nsuri" ordered="false"
+        lowerBound="1" eType="#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="pluginID" ordered="false"
+        lowerBound="1" eType="#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="ePackageInstanceName" ordered="false"
+        lowerBound="1" eType="#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isTypeValid" ordered="false"
         lowerBound="1" eType="#//boolean"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="StringInstance" eSuperTypes="#//TypeInstance">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" ordered="false"
-        lowerBound="1" eType="#//String"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="IntType" eSuperTypes="#//Type"/>
-  <eClassifiers xsi:type="ecore:EClass" name="BooleanType" eSuperTypes="#//Type"/>
-  <eClassifiers xsi:type="ecore:EClass" name="StringType" eSuperTypes="#//Type"/>
-  <eClassifiers xsi:type="ecore:EClass" name="CustomType" eSuperTypes="#//Type">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="classifier" ordered="false"
-        lowerBound="1" eType="#//String"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="TopLayerOperator" eSuperTypes="#//AbstractLayerOperator"/>
-  <eClassifiers xsi:type="ecore:EClass" name="StackedLayerOperator" eSuperTypes="#//AbstractLayerOperator"/>
-  <eClassifiers xsi:type="ecore:EClass" name="CustomLayerOperator" eSuperTypes="#//LayerOperator"/>
+  <eClassifiers xsi:type="ecore:EDataType" name="EPackage" instanceClassName="org.eclipse.emf.ecore.EPackage"/>
+  <eClassifiers xsi:type="ecore:EDataType" name="Object" instanceClassName="java.lang.Object"/>
+  <eClassifiers xsi:type="ecore:EClass" name="TopLayerOperator" eSuperTypes="#//LayerOperator"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StackedLayerOperator" eSuperTypes="#//LayerOperator"/>
   <eClassifiers xsi:type="ecore:EClass" name="PropertyIndex">
     <eStructuralFeatures xsi:type="ecore:EReference" name="property" ordered="false"
         lowerBound="1" eType="#//Property"/>
@@ -481,103 +462,17 @@
         eType="#//String"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="SimpleLayerDescriptor" eSuperTypes="#//LayerDescriptor"/>
-  <eClassifiers xsi:type="ecore:EClass" name="RegExpLayerDescriptor" eSuperTypes="#//LayerDescriptor"/>
   <eClassifiers xsi:type="ecore:EClass" name="NullInstance" eSuperTypes="#//TypeInstance">
     <eOperations name="getInstance" ordered="false" lowerBound="1" eType="#//NullInstance"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="RegExpLayer" eSuperTypes="#//AbstractLayer">
-    <eOperations name="activate" ordered="false" lowerBound="1">
-      <eParameters name="newParentLayer" ordered="false" lowerBound="1" eType="#//AbstractLayerOperator"/>
-    </eOperations>
-    <eOperations name="deactivate" ordered="false" lowerBound="1">
-      <eParameters name="oldParentLayer" ordered="false" lowerBound="1" eType="#//AbstractLayerOperator"/>
-    </eOperations>
-    <eOperations name="isDerivedView" ordered="false" lowerBound="1" eType="#//boolean"
-        eExceptions="#//LayersException">
-      <eParameters name="view" ordered="false" lowerBound="1" eType="ecore:EClass platform:/plugin/org.eclipse.gmf.runtime.notation/model/notation.ecore#//View"/>
-    </eOperations>
-    <eOperations name="attachDerivedView" ordered="false" lowerBound="1" eExceptions="#//LayersException">
-      <eParameters name="view" ordered="false" lowerBound="1" eType="ecore:EClass platform:/plugin/org.eclipse.gmf.runtime.notation/model/notation.ecore#//View"/>
-    </eOperations>
-    <eOperations name="attachDerivedViews" ordered="false" lowerBound="1" eExceptions="#//LayersException">
-      <eParameters name="views" ordered="false" upperBound="-1" eType="ecore:EClass platform:/plugin/org.eclipse.gmf.runtime.notation/model/notation.ecore#//View"/>
-    </eOperations>
-    <eOperations name="attachDerivedViews" ordered="false" lowerBound="1" eExceptions="#//LayersException"/>
-    <eOperations name="lookupDerivedViews" ordered="false" upperBound="-1" eType="ecore:EClass platform:/plugin/org.eclipse.gmf.runtime.notation/model/notation.ecore#//View"
-        eExceptions="#//LayersException">
-      <eParameters name="views" ordered="false" upperBound="-1" eType="ecore:EClass platform:/plugin/org.eclipse.gmf.runtime.notation/model/notation.ecore#//View"/>
-    </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="expr" ordered="false" lowerBound="1"
-        eType="#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="language" ordered="false"
-        lowerBound="1" eType="#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDomainChangedEventDependant"
-        ordered="false" lowerBound="1" eType="#//boolean"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="domainChangedEventLevel"
-        ordered="false" lowerBound="1" eType="#//EventLevel"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isDiagramChangedEventDependant"
-        ordered="false" lowerBound="1" eType="#//boolean"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="diagramChangedEventLevel"
-        ordered="false" lowerBound="1" eType="#//EventLevel"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="expressionContextObjectType"
-        ordered="false" lowerBound="1" eType="#//String"/>
-  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Layer" eSuperTypes="#//AbstractLayer"/>
+  <eClassifiers xsi:type="ecore:EClass" name="NullPropertySetter" eSuperTypes="#//PropertySetter"/>
+  <eClassifiers xsi:type="ecore:EClass" name="TopLayerOperatorDescriptor" eSuperTypes="#//LayerOperatorDescriptor"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StackedLayerOperatorDescriptor" eSuperTypes="#//LayerOperatorDescriptor"/>
   <eClassifiers xsi:type="ecore:EEnum" name="EventLevel">
     <eLiterals name="level1"/>
     <eLiterals name="allLevels" value="-1"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Layer" eSuperTypes="#//AbstractLayer"/>
-  <eClassifiers xsi:type="ecore:EClass" name="Color" eSuperTypes="#//Type"/>
-  <eClassifiers xsi:type="ecore:EClass" name="ColorInstance" eSuperTypes="#//TypeInstance">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" ordered="false"
-        lowerBound="1" eType="#//int"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FillInstance" eSuperTypes="#//TypeInstance">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="transparency" ordered="false"
-        lowerBound="1" eType="#//int"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="fillColor" ordered="false"
-        lowerBound="1" eType="#//ColorInstance" containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Fill" eSuperTypes="#//Type"/>
-  <eClassifiers xsi:type="ecore:EClass" name="FillPropertySetter" eSuperTypes="#//PropertySetter"/>
-  <eClassifiers xsi:type="ecore:EClass" name="IsValidPropertySetter" eSuperTypes="#//PropertySetter"/>
-  <eClassifiers xsi:type="ecore:EClass" name="NullPropertySetter" eSuperTypes="#//PropertySetter"/>
-  <eClassifiers xsi:type="ecore:EClass" name="LineType" eSuperTypes="#//Type"/>
-  <eClassifiers xsi:type="ecore:EClass" name="LineInstance" eSuperTypes="#//TypeInstance">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="lineColor" ordered="false"
-        lowerBound="1" eType="#//int"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="lineWith" ordered="false"
-        lowerBound="1" eType="#//int"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="LinePropertySetter" eSuperTypes="#//PropertySetter"/>
-  <eClassifiers xsi:type="ecore:EClass" name="FontPropertySetter" eSuperTypes="#//PropertySetter"/>
-  <eClassifiers xsi:type="ecore:EClass" name="FontInstance" eSuperTypes="#//TypeInstance">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fontColor" ordered="false"
-        lowerBound="1" eType="#//int" defaultValueLiteral="15053796"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fontName" ordered="false"
-        lowerBound="1" eType="#//String" defaultValueLiteral="Segoe UI"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fontHeigh" ordered="false"
-        lowerBound="1" eType="#//int" defaultValueLiteral="9"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="bold" ordered="false" lowerBound="1"
-        eType="#//boolean" defaultValueLiteral="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FontType" eSuperTypes="#//Type"/>
-  <eClassifiers xsi:type="ecore:EClass" name="IsVisiblePropertySetter" eSuperTypes="#//PropertySetter"/>
-  <eClassifiers xsi:type="ecore:EClass" name="TopLayerOperatorDescriptor" eSuperTypes="#//LayerOperatorDescriptor"/>
-  <eClassifiers xsi:type="ecore:EClass" name="StackedLayerOperatorDescriptor" eSuperTypes="#//LayerOperatorDescriptor"/>
-  <eClassifiers xsi:type="ecore:EClass" name="CustomPropertyOperator" eSuperTypes="#//PropertyOperator">
-    <eOperations name="resetOperatorInstance" ordered="false" lowerBound="1" eExceptions="#//LayersException"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="classname" ordered="false"
-        lowerBound="1" eType="#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operatorInstance" ordered="false"
-        lowerBound="1" eType="#//CustomPropertyOpertorInstance"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="classBundleID" ordered="false"
-        lowerBound="1" eType="#//String"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EDataType" name="CustomPropertyOpertorInstance" instanceClassName="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance"/>
-  <eClassifiers xsi:type="ecore:EClass" name="AndStackedLayerOperatorDescriptor" eSuperTypes="#//StackedLayerOperatorDescriptor"/>
-  <eClassifiers xsi:type="ecore:EClass" name="OrStackedLayerOperatorDescriptor" eSuperTypes="#//StackedLayerOperatorDescriptor"/>
-  <eClassifiers xsi:type="ecore:EClass" name="IsAbstractUmlSetter" eSuperTypes="#//PropertySetter"/>
   <eClassifiers xsi:type="ecore:EClass" name="AllViewsDerivedLayer" eSuperTypes="#//AbstractLayer"/>
   <eClassifiers xsi:type="ecore:EClass" name="CSSPropertySetter" eSuperTypes="#//PropertySetter"/>
   <eClassifiers xsi:type="ecore:EClass" name="CSSType" eSuperTypes="#//Type"/>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.genmodel b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.genmodel
index fc13522..76b31bb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.genmodel
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.genmodel
@@ -2,12 +2,12 @@
 <genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:genmodel="http://www.eclipse.org/uml2/2.2.0/GenModel"
     copyrightText="Copyright (c) 2013, 2017 CEA LIST &amp; LIFL &#xD;&#xA;&#xD;&#xA;All rights reserved. This program and the accompanying materials&#xD;&#xA;are made available under the terms of the Eclipse Public License v1.0&#xD;&#xA;which accompanies this distribution, and is available at&#xD;&#xA;http://www.eclipse.org/legal/epl-v10.html&#xD;&#xA;&#xD;&#xA;Contributors:&#xD;&#xA;  Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation&#xD;&#xA;  Quentin Le Menez quentin.lemenez@cea.fr&#xD;&#xA;"
-    modelDirectory="/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen" editDirectory="/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen"
-    editorDirectory="org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen"
+    modelDirectory="/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen" creationIcons="false"
+    editDirectory="/org.eclipse.papyrus.infra.gmfdiag.layers.model.edit/src-gen" editorDirectory="org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen"
     modelPluginID="org.eclipse.papyrus.infra.gmfdiag.layers.model" modelName="Layers"
     editPluginClass="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersEditPlugin"
     editorPluginClass="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.presentation.LayersEditorPlugin"
-    nonNLSMarkers="true" testsDirectory="/org.eclipse.papyrus.infra.gmfdiag.layers.model.tests/src-gen"
+    nonNLSMarkers="true" suppressEMFTypes="true" testsDirectory="/org.eclipse.papyrus.infra.gmfdiag.layers.model.tests/src-gen"
     testSuiteClass="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.tests.LayersAllTests"
     importerID="org.eclipse.uml2.uml.ecore.importer" complianceLevel="6.0" copyrightFields="false"
     providerRootExtendsClass="" editPluginID="org.eclipse.papyrus.infra.gmfdiag.layers.model.edit"
@@ -39,7 +39,9 @@
   </genAnnotations>
   <foreignModel>layers.uml</foreignModel>
   <genPackages xsi:type="genmodel:GenPackage" prefix="Layers" basePackage="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model"
-      disposableProviderFactory="true" ecorePackage="layers.ecore#/">
+      disposableProviderFactory="true" generateExampleClass="false" multipleEditorPages="false"
+      generateModelWizard="false" extensibleProviderFactory="true" childCreationExtenders="true"
+      ecorePackage="layers.ecore#/">
     <genEnums xsi:type="genmodel:GenEnum" typeSafeEnumCompatible="false" ecoreEnum="layers.ecore#//LayerState">
       <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="layers.ecore#//LayerState/detached"/>
       <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="layers.ecore#//LayerState/attached"/>
@@ -49,15 +51,14 @@
       <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="layers.ecore#//EventLevel/allLevels"/>
     </genEnums>
     <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="layers.ecore#//String"/>
-    <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="layers.ecore#//boolean"/>
-    <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="layers.ecore#//EPackage"/>
     <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="layers.ecore#//LayersException"/>
     <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="layers.ecore#//int"/>
     <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="layers.ecore#//BadStateException"/>
     <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="layers.ecore#//NotFoundException"/>
     <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="layers.ecore#//ComputePropertyValueCommand"/>
+    <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="layers.ecore#//boolean"/>
+    <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="layers.ecore#//EPackage"/>
     <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="layers.ecore#//Object"/>
-    <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="layers.ecore#//CustomPropertyOpertorInstance"/>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//LayerNamedStyle">
       <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
           createChild="true" ecoreFeature="ecore:EReference layers.ecore#//LayerNamedStyle/layersStack"/>
@@ -185,21 +186,10 @@
       <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//Property/createInstance"/>
     </genClasses>
     <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="layers.ecore#//Type">
-      <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
-          propertySortChoices="true" ecoreFeature="ecore:EReference layers.ecore#//Type/metamodel"/>
       <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Type/name"/>
       <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Type/description"/>
       <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//Type/createInstance"/>
     </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//Metamodel">
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Metamodel/name"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Metamodel/description"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Metamodel/nsuri"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Metamodel/pluginID"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Metamodel/ePackageInstanceName"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Metamodel/isTypeValid"/>
-      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//Metamodel/getEPackage"/>
-    </genClasses>
     <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="layers.ecore#//TypeInstance">
       <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//TypeInstance/setValueFromString">
         <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="layers.ecore#//TypeInstance/setValueFromString/value"/>
@@ -311,27 +301,28 @@
     </genClasses>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//PropertyOperator">
       <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//PropertyOperator/name"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//PropertyOperator/classname"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EReference layers.ecore#//PropertyOperator/operatorInstance"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//PropertyOperator/classBundleID"/>
       <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//PropertyOperator/getComputePropertyValueCommand">
         <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="layers.ecore#//PropertyOperator/getComputePropertyValueCommand/property"/>
       </genOperations>
-    </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="layers.ecore#//AbstractLayerOperator">
-      <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
-          propertySortChoices="true" ecoreFeature="ecore:EReference layers.ecore#//AbstractLayerOperator/layerOperatorDescriptor"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//AbstractLayerOperator/layerOperatorDescriptorName"/>
-      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//AbstractLayerOperator/isDescriptorSet"/>
-      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//AbstractLayerOperator/resetDescriptor"/>
+      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//PropertyOperator/resetOperatorInstance"/>
     </genClasses>
     <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="layers.ecore#//LayerOperator">
       <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
           createChild="true" ecoreFeature="ecore:EReference layers.ecore#//LayerOperator/layers"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//LayerOperator/layerOperatorDescriptorName"/>
+      <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+          propertySortChoices="true" ecoreFeature="ecore:EReference layers.ecore#//LayerOperator/layerOperatorDescriptor"/>
+      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//LayerOperator/isDescriptorSet"/>
+      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//LayerOperator/resetDescriptor"/>
     </genClasses>
     <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="layers.ecore#//LayersContainer">
       <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//LayersContainer/addLayer">
         <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="layers.ecore#//LayersContainer/addLayer/layer"/>
       </genOperations>
     </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//DefaultPropertyOperator"/>
     <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="layers.ecore#//AbstractLayer">
       <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
           propertySortChoices="true" ecoreFeature="ecore:EReference layers.ecore#//AbstractLayer/propertyValues"/>
@@ -366,24 +357,17 @@
           createChild="true" ecoreFeature="ecore:EReference layers.ecore#//Folder/elements"/>
       <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Folder/name"/>
     </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//IntInstance">
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//IntInstance/value"/>
-    </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//BooleanInstance">
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//BooleanInstance/value"/>
-    </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//StringInstance">
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//StringInstance/value"/>
-    </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//IntType"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//BooleanType"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//StringType"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//CustomType">
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//CustomType/classifier"/>
+    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//Metamodel">
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Metamodel/name"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Metamodel/description"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Metamodel/nsuri"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Metamodel/pluginID"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Metamodel/ePackageInstanceName"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//Metamodel/isTypeValid"/>
+      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//Metamodel/getEPackage"/>
     </genClasses>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//TopLayerOperator"/>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//StackedLayerOperator"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//CustomLayerOperator"/>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//PropertyIndex">
       <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
           propertySortChoices="true" ecoreFeature="ecore:EReference layers.ecore#//PropertyIndex/property"/>
@@ -395,78 +379,13 @@
       <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//StringToPropertyIndexMap/key"/>
     </genClasses>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//SimpleLayerDescriptor"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//RegExpLayerDescriptor"/>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//NullInstance">
       <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//NullInstance/getInstance"/>
     </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//RegExpLayer">
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//RegExpLayer/expr"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//RegExpLayer/language"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//RegExpLayer/isDomainChangedEventDependant"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//RegExpLayer/domainChangedEventLevel"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//RegExpLayer/isDiagramChangedEventDependant"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//RegExpLayer/diagramChangedEventLevel"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//RegExpLayer/expressionContextObjectType"/>
-      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//RegExpLayer/activate">
-        <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="layers.ecore#//RegExpLayer/activate/newParentLayer"/>
-      </genOperations>
-      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//RegExpLayer/deactivate">
-        <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="layers.ecore#//RegExpLayer/deactivate/oldParentLayer"/>
-      </genOperations>
-      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//RegExpLayer/isDerivedView">
-        <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="layers.ecore#//RegExpLayer/isDerivedView/view"/>
-      </genOperations>
-      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//RegExpLayer/attachDerivedView">
-        <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="layers.ecore#//RegExpLayer/attachDerivedView/view"/>
-      </genOperations>
-      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//RegExpLayer/attachDerivedViews">
-        <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="layers.ecore#//RegExpLayer/attachDerivedViews/views"/>
-      </genOperations>
-      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//RegExpLayer/attachDerivedViews.1"/>
-      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//RegExpLayer/lookupDerivedViews">
-        <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="layers.ecore#//RegExpLayer/lookupDerivedViews/views"/>
-      </genOperations>
-    </genClasses>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//Layer"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//Color"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//ColorInstance">
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//ColorInstance/value"/>
-    </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//FillInstance">
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//FillInstance/transparency"/>
-      <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
-          createChild="true" ecoreFeature="ecore:EReference layers.ecore#//FillInstance/fillColor"/>
-    </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//Fill"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//FillPropertySetter"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//IsValidPropertySetter"/>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//NullPropertySetter"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//LineType"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//LineInstance">
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//LineInstance/lineColor"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//LineInstance/lineWith"/>
-    </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//LinePropertySetter"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//FontPropertySetter"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//FontInstance">
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//FontInstance/fontColor"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//FontInstance/fontName"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//FontInstance/fontHeigh"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//FontInstance/bold"/>
-    </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//FontType"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//IsVisiblePropertySetter"/>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//TopLayerOperatorDescriptor"/>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//StackedLayerOperatorDescriptor"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//CustomPropertyOperator">
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//CustomPropertyOperator/classname"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//CustomPropertyOperator/operatorInstance"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute layers.ecore#//CustomPropertyOperator/classBundleID"/>
-      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="layers.ecore#//CustomPropertyOperator/resetOperatorInstance"/>
-    </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//AndStackedLayerOperatorDescriptor"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//OrStackedLayerOperatorDescriptor"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//IsAbstractUmlSetter"/>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//AllViewsDerivedLayer"/>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//CSSPropertySetter"/>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="layers.ecore#//CSSType"/>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.notation b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.notation
index 9e2ee84..8ceeae0 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.notation
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.notation
@@ -546,27 +546,27 @@
       <element xmi:type="uml:Class" href="layers.uml#_T5we4AkdEeOnVqX9VcfeWQ"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-jCeEQw_EeOjX-JbGFEH7w" x="440" y="520" width="221"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_L2tYYK5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_L2tYYa5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_L2t_cK5qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <children xmi:type="notation:Shape" xmi:id="_7mzZc72jEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_7mzZdL2jEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_7m5gEL2jEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:Class" href="notation/notation.uml#_AziHercnEeKeLJDBCBPhPw"/>
       </styles>
       <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_L2tYYq5qEeeUVoYywick3g" x="230" y="-24"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7mzZdb2jEeiAtaR2zBJhAQ" x="1300" y="20"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_L5veQK5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_L5veQa5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_L5veQ65qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <children xmi:type="notation:Shape" xmi:id="_7pKJ4L2jEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_7pKJ4b2jEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_7pKJ472jEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:Class" href="notation/notation.uml#_AziHhrcnEeKeLJDBCBPhPw"/>
       </styles>
       <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_L5veQq5qEeeUVoYywick3g" x="860" y="384"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7pKJ4r2jEeiAtaR2zBJhAQ" x="1740" y="380"/>
     </children>
     <styles xmi:type="notation:DiagramStyle" xmi:id="_mmXS0bcqEeK8_t7Rpq6ZJA"/>
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_K_Yu0K5qEeeUVoYywick3g" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
       <owner xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     </styles>
-    <styles xmi:type="notation:StringValueStyle" xmi:id="_K_xJUK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.3.0"/>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_K_xJUK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <element xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     <edges xmi:type="notation:Connector" xmi:id="_0PIOkLcqEeK8_t7Rpq6ZJA" type="Generalization_Edge" source="_yPB_ELcqEeK8_t7Rpq6ZJA" target="_xbaJwLcqEeK8_t7Rpq6ZJA" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_0PIOk7cqEeK8_t7Rpq6ZJA" type="Generalization_StereotypeLabel">
@@ -931,25 +931,25 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FEh1IAxAEeOjX-JbGFEH7w" id="(0.3091557669441142,1.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FEh1IQxAEeOjX-JbGFEH7w" id="(0.36199095022624433,0.0)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_L2t_ca5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_xbaJwLcqEeK8_t7Rpq6ZJA" target="_L2tYYK5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_L2t_cq5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_L2umgq5qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <edges xmi:type="notation:Connector" xmi:id="_7m5gEb2jEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_xbaJwLcqEeK8_t7Rpq6ZJA" target="_7mzZc72jEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_7m5gEr2jEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_7m5gFr2jEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:Class" href="notation/notation.uml#_AziHercnEeKeLJDBCBPhPw"/>
       </styles>
       <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_L2t_c65qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_L2umgK5qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_L2umga5qEeeUVoYywick3g"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7m5gE72jEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7m5gFL2jEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7m5gFb2jEeiAtaR2zBJhAQ"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_L5veRK5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_di3-ENkhEeKQqZMBCFd2Uw" target="_L5veQK5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_L5veRa5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_L5veSa5qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <edges xmi:type="notation:Connector" xmi:id="_7pKw8L2jEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_di3-ENkhEeKQqZMBCFd2Uw" target="_7pKJ4L2jEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_7pKw8b2jEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_7pKw9b2jEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:Class" href="notation/notation.uml#_AziHhrcnEeKeLJDBCBPhPw"/>
       </styles>
       <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_L5veRq5qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_L5veR65qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_L5veSK5qEeeUVoYywick3g"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7pKw8r2jEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7pKw872jEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7pKw9L2jEeiAtaR2zBJhAQ"/>
     </edges>
   </notation:Diagram>
   <notation:Diagram xmi:id="_y-BQANa7EeKPiuTfpuvqHA" type="PapyrusUMLClassDiagram" name="LayersExpression" measurementUnit="Pixel">
@@ -1279,41 +1279,6 @@
       <element xmi:type="uml:Class" href="layers.uml#_HoKjcNjjEeKQqZMBCFd2Uw"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Hoi98djjEeKQqZMBCFd2Uw" x="360" y="480" width="121" height="101"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_WunlMNjjEeKQqZMBCFd2Uw" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wutr0NjjEeKQqZMBCFd2Uw" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Wutr0djjEeKQqZMBCFd2Uw" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wutr0tjjEeKQqZMBCFd2Uw" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Wutr09jjEeKQqZMBCFd2Uw" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wutr1NjjEeKQqZMBCFd2Uw" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Wutr1djjEeKQqZMBCFd2Uw" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_Wutr1tjjEeKQqZMBCFd2Uw" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_Wutr19jjEeKQqZMBCFd2Uw" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_Wutr2NjjEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_Wutr2djjEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_Wutr2tjjEeKQqZMBCFd2Uw"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wutr29jjEeKQqZMBCFd2Uw"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_Wutr3NjjEeKQqZMBCFd2Uw" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_Wutr3djjEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_Wutr3tjjEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_Wutr39jjEeKQqZMBCFd2Uw"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wutr4NjjEeKQqZMBCFd2Uw"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_Wutr4djjEeKQqZMBCFd2Uw" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_Wutr4tjjEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_Wutr49jjEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_Wutr5NjjEeKQqZMBCFd2Uw"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wutr5djjEeKQqZMBCFd2Uw"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LL3rpq5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LL3rp65qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_WuVRUNjjEeKQqZMBCFd2Uw"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WunlMdjjEeKQqZMBCFd2Uw" x="440" y="660" width="161" height="101"/>
-    </children>
     <children xmi:type="notation:Shape" xmi:id="_gqpJcNjjEeKQqZMBCFd2Uw" type="Class_Shape" fontName="Segoe UI" lineColor="0">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_gqvQENjjEeKQqZMBCFd2Uw" source="ShadowFigure">
         <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_gqvQEdjjEeKQqZMBCFd2Uw" key="ShadowFigure_Value" value="false"/>
@@ -1347,7 +1312,7 @@
         <layoutConstraint xmi:type="notation:Location" xmi:id="_LL3rqa5qEeeUVoYywick3g" y="5"/>
       </children>
       <element xmi:type="uml:Class" href="layers.uml#_gqW1kNjjEeKQqZMBCFd2Uw"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gqpJcdjjEeKQqZMBCFd2Uw" x="580" y="820" width="101" height="101"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gqpJcdjjEeKQqZMBCFd2Uw" x="460" y="660" width="101" height="101"/>
     </children>
     <children xmi:type="notation:Shape" xmi:id="_wpUMoNjjEeKQqZMBCFd2Uw" type="Class_Shape" fontName="Segoe UI" lineColor="0">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wpUMotjjEeKQqZMBCFd2Uw" source="ShadowFigure">
@@ -1382,42 +1347,7 @@
         <layoutConstraint xmi:type="notation:Location" xmi:id="_LL3rq65qEeeUVoYywick3g" y="5"/>
       </children>
       <element xmi:type="uml:Class" href="layers.uml#_wpB4wNjjEeKQqZMBCFd2Uw"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wpUModjjEeKQqZMBCFd2Uw" x="360" y="820" width="161" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_1xfAUNjjEeKQqZMBCFd2Uw" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_1xfnYNjjEeKQqZMBCFd2Uw" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_1xfnYdjjEeKQqZMBCFd2Uw" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_1xgOcNjjEeKQqZMBCFd2Uw" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_1xgOcdjjEeKQqZMBCFd2Uw" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_1xgOctjjEeKQqZMBCFd2Uw" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_1xgOc9jjEeKQqZMBCFd2Uw" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_1xgOdNjjEeKQqZMBCFd2Uw" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_1xgOddjjEeKQqZMBCFd2Uw" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_1xgOdtjjEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_1xgOd9jjEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_1xgOeNjjEeKQqZMBCFd2Uw"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1xgOedjjEeKQqZMBCFd2Uw"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_1xgOetjjEeKQqZMBCFd2Uw" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_1xgOe9jjEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_1xgOfNjjEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_1xgOfdjjEeKQqZMBCFd2Uw"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1xgOftjjEeKQqZMBCFd2Uw"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_1xgOf9jjEeKQqZMBCFd2Uw" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_1xgOgNjjEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_1xgOgdjjEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_1xgOgtjjEeKQqZMBCFd2Uw"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1xgOg9jjEeKQqZMBCFd2Uw"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LL3rrK5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LL3rra5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_1xJCENjjEeKQqZMBCFd2Uw"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1xfAUdjjEeKQqZMBCFd2Uw" x="220" y="660" width="161" height="101"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wpUModjjEeKQqZMBCFd2Uw" x="240" y="660" width="161" height="101"/>
     </children>
     <children xmi:type="notation:Shape" xmi:id="_zT_qYNt5EeKwptaAAanMDg" type="Class_Shape" fontName="Segoe UI" lineColor="0">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zT_qYtt5EeKwptaAAanMDg" source="ShadowFigure">
@@ -1454,97 +1384,6 @@
       <element xmi:type="uml:Class" href="layers.uml#_325AENt0EeKQqZMBCFd2Uw"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zT_qYdt5EeKwptaAAanMDg" x="680" y="20" width="241" height="81"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_z-jdcOHTEeKCZbxNW-U3VQ" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_z-jdcuHTEeKCZbxNW-U3VQ" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_z-jdc-HTEeKCZbxNW-U3VQ" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_z-jddOHTEeKCZbxNW-U3VQ" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_z-jddeHTEeKCZbxNW-U3VQ" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_z-jdduHTEeKCZbxNW-U3VQ" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_z-jdd-HTEeKCZbxNW-U3VQ" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_z-jdeOHTEeKCZbxNW-U3VQ" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_z-jdeeHTEeKCZbxNW-U3VQ" type="Class_AttributeCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_BnajsBZ1EeOZwp016gnCFQ" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_Bm93wBZ1EeOZwp016gnCFQ"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_BnajsRZ1EeOZwp016gnCFQ"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_FqR8MBZ1EeOZwp016gnCFQ" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_Fp_BQBZ1EeOZwp016gnCFQ"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_FqR8MRZ1EeOZwp016gnCFQ"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_NA_bwFCkEeO_9LQ4jZWm3w" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_NAa0AFCkEeO_9LQ4jZWm3w"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_NA_bwVCkEeO_9LQ4jZWm3w"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_X_qIwVCkEeO_9LQ4jZWm3w" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_X_qIwFCkEeO_9LQ4jZWm3w"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_X_qIwlCkEeO_9LQ4jZWm3w"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_uJr68VCkEeO_9LQ4jZWm3w" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_uJr68FCkEeO_9LQ4jZWm3w"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_uJr68lCkEeO_9LQ4jZWm3w"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_y220sVCkEeO_9LQ4jZWm3w" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_y220sFCkEeO_9LQ4jZWm3w"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_y220slCkEeO_9LQ4jZWm3w"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_sPbYQVClEeO_9LQ4jZWm3w" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_sPbYQFClEeO_9LQ4jZWm3w"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_sPbYQlClEeO_9LQ4jZWm3w"/>
-        </children>
-        <styles xmi:type="notation:TitleStyle" xmi:id="_z-jdeuHTEeKCZbxNW-U3VQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_z-jde-HTEeKCZbxNW-U3VQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_z-jdfOHTEeKCZbxNW-U3VQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z-jdfeHTEeKCZbxNW-U3VQ"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_z-jdfuHTEeKCZbxNW-U3VQ" type="Class_OperationCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_kKAqgBZ0EeOZwp016gnCFQ" type="Operation_ClassOperationLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Operation" href="layers.uml#_kI0XsBZ0EeOZwp016gnCFQ"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_kKAqgRZ0EeOZwp016gnCFQ"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_lphVcBZ0EeOZwp016gnCFQ" type="Operation_ClassOperationLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Operation" href="layers.uml#_lpOagBZ0EeOZwp016gnCFQ"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_lphVcRZ0EeOZwp016gnCFQ"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_pKeTsBZ0EeOZwp016gnCFQ" type="Operation_ClassOperationLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Operation" href="layers.uml#_pKKxsBZ0EeOZwp016gnCFQ"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_pKeTsRZ0EeOZwp016gnCFQ"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_KMaIAFVJEeOah7Z-UYdQAA" type="Operation_ClassOperationLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Operation" href="layers.uml#_EnH6gFVJEeOah7Z-UYdQAA"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_KMaIAVVJEeOah7Z-UYdQAA" x="75" y="65"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_lLHxMFVJEeOah7Z-UYdQAA" type="Operation_ClassOperationLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Operation" href="layers.uml#_Y5m8QFVJEeOah7Z-UYdQAA"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_lLHxMVVJEeOah7Z-UYdQAA" x="99" y="81"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_KnlysFVKEeOah7Z-UYdQAA" type="Operation_ClassOperationLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Operation" href="layers.uml#_m3jd0FVJEeOah7Z-UYdQAA"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_KnlysVVKEeOah7Z-UYdQAA" x="112" y="101"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_ZojQcFVKEeOah7Z-UYdQAA" type="Operation_ClassOperationLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Operation" href="layers.uml#_Lwc4MFVKEeOah7Z-UYdQAA"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_ZojQcVVKEeOah7Z-UYdQAA" x="23" y="122"/>
-        </children>
-        <styles xmi:type="notation:TitleStyle" xmi:id="_z-jdf-HTEeKCZbxNW-U3VQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_z-jdgOHTEeKCZbxNW-U3VQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_z-jdgeHTEeKCZbxNW-U3VQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z-jdguHTEeKCZbxNW-U3VQ"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_z-jdg-HTEeKCZbxNW-U3VQ" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_z-jdhOHTEeKCZbxNW-U3VQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_z-jdheHTEeKCZbxNW-U3VQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_z-jdhuHTEeKCZbxNW-U3VQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z-jdh-HTEeKCZbxNW-U3VQ"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LL45wq5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LL45w65qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_z9aN8OHTEeKCZbxNW-U3VQ"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z-jdceHTEeKCZbxNW-U3VQ" x="1080" y="780" width="341" height="301"/>
-    </children>
     <children xmi:type="notation:Shape" xmi:id="__1eoIOHTEeKCZbxNW-U3VQ" type="Class_Shape" fontName="Segoe UI" lineColor="0">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="__1eoIuHTEeKCZbxNW-U3VQ" source="ShadowFigure">
         <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="__1eoI-HTEeKCZbxNW-U3VQ" key="ShadowFigure_Value" value="false"/>
@@ -1609,7 +1448,7 @@
         <layoutConstraint xmi:type="notation:Location" xmi:id="_LL45x65qEeeUVoYywick3g" y="5"/>
       </children>
       <element xmi:type="uml:Enumeration" href="layers.uml#_7cWpgFVHEeOah7Z-UYdQAA"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7c7RQVVHEeOah7Z-UYdQAA" x="580" y="940" width="101" height="101"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7c7RQVVHEeOah7Z-UYdQAA" x="600" y="660" width="101" height="101"/>
     </children>
     <children xmi:type="notation:Shape" xmi:id="_ft-hUWtpEeOlpfB_tZS-QA" type="Class_Shape" fontName="Segoe UI" lineColor="0">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ft-hU2tpEeOlpfB_tZS-QA" source="ShadowFigure">
@@ -1688,19 +1527,19 @@
       <element xmi:type="uml:Interface" href="layers.uml#_RopgYHpGEeOlpfB_tZS-QA"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_RopgYnpGEeOlpfB_tZS-QA" x="40" y="480" width="181" height="101"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_XUdOEK5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_XUdOEa5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_XUdOE65qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <children xmi:type="notation:Shape" xmi:id="_h-XxQL2kEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_h-XxQb2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_h-YYUL2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:Class" href="layers.uml#_vMMQsNjKEeKgkM6XJF9t4A"/>
       </styles>
       <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XUdOEq5qEeeUVoYywick3g" x="1160" y="510"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_h-XxQr2kEeiAtaR2zBJhAQ" x="1700" y="660"/>
     </children>
     <styles xmi:type="notation:DiagramStyle" xmi:id="_y-BQAda7EeKPiuTfpuvqHA"/>
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_LL2dgK5qEeeUVoYywick3g" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
       <owner xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     </styles>
-    <styles xmi:type="notation:StringValueStyle" xmi:id="_LMZQEK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.3.0"/>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_LMZQEK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <element xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     <edges xmi:type="notation:Connector" xmi:id="_5ZBIENa8EeKPiuTfpuvqHA" type="Association_Edge" source="_52F7ENa7EeKPiuTfpuvqHA" target="_AjwF4Na8EeKPiuTfpuvqHA" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_5ZKSANa8EeKPiuTfpuvqHA" visible="false" type="Association_StereotypeLabel">
@@ -1848,49 +1687,27 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OJm3MNjjEeKQqZMBCFd2Uw" id="(0.6611570247933884,0.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OJm3MdjjEeKQqZMBCFd2Uw" id="(0.27739251040221913,1.0)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_zMPcYNjjEeKQqZMBCFd2Uw" type="Generalization_Edge" source="_wpUMoNjjEeKQqZMBCFd2Uw" target="_WunlMNjjEeKQqZMBCFd2Uw" lineColor="0">
+    <edges xmi:type="notation:Connector" xmi:id="_zMPcYNjjEeKQqZMBCFd2Uw" type="Generalization_Edge" source="_wpUMoNjjEeKQqZMBCFd2Uw" target="_Hoi98NjjEeKQqZMBCFd2Uw" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_zMPcY9jjEeKQqZMBCFd2Uw" type="Generalization_StereotypeLabel">
         <styles xmi:type="notation:BooleanValueStyle" xmi:id="_2j9gsK9fEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
         <layoutConstraint xmi:type="notation:Location" xmi:id="_zMPcZNjjEeKQqZMBCFd2Uw" x="1" y="38"/>
       </children>
       <styles xmi:type="notation:FontStyle" xmi:id="_zMPcYdjjEeKQqZMBCFd2Uw" fontName="Segoe UI"/>
       <element xmi:type="uml:Generalization" href="layers.uml#_zL9IgNjjEeKQqZMBCFd2Uw"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_zMPcYtjjEeKQqZMBCFd2Uw" points="[420, 820, -643984, -643984]$[420, 800, -643984, -643984]$[500, 800, -643984, -643984]$[500, 761, -643984, -643984]"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_zMPcYtjjEeKQqZMBCFd2Uw" points="[300, 660, -643984, -643984]$[300, 618, -643984, -643984]$[400, 618, -643984, -643984]$[400, 581, -643984, -643984]"/>
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zMVjANjjEeKQqZMBCFd2Uw" id="(0.37267080745341613,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zMVjAdjjEeKQqZMBCFd2Uw" id="(0.37267080745341613,1.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zMVjAdjjEeKQqZMBCFd2Uw" id="(0.3305785123966942,1.0)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_zpCtINjjEeKQqZMBCFd2Uw" type="Generalization_Edge" source="_gqpJcNjjEeKQqZMBCFd2Uw" target="_WunlMNjjEeKQqZMBCFd2Uw" lineColor="0">
+    <edges xmi:type="notation:Connector" xmi:id="_zpCtINjjEeKQqZMBCFd2Uw" type="Generalization_Edge" source="_gqpJcNjjEeKQqZMBCFd2Uw" target="_Hoi98NjjEeKQqZMBCFd2Uw" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_zpIzwNjjEeKQqZMBCFd2Uw" type="Generalization_StereotypeLabel">
         <styles xmi:type="notation:BooleanValueStyle" xmi:id="_3LxuoK9fEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
         <layoutConstraint xmi:type="notation:Location" xmi:id="_zpIzwdjjEeKQqZMBCFd2Uw" x="-1" y="37"/>
       </children>
       <styles xmi:type="notation:FontStyle" xmi:id="_zpCtIdjjEeKQqZMBCFd2Uw" fontName="Segoe UI"/>
       <element xmi:type="uml:Generalization" href="layers.uml#_zoqSoNjjEeKQqZMBCFd2Uw"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_zpCtItjjEeKQqZMBCFd2Uw" points="[620, 820, -643984, -643984]$[620, 800, -643984, -643984]$[540, 800, -643984, -643984]$[540, 761, -643984, -643984]"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_zpCtItjjEeKQqZMBCFd2Uw" points="[500, 660, -643984, -643984]$[500, 620, -643984, -643984]$[400, 620, -643984, -643984]$[420, 581, -643984, -643984]"/>
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zpIzwtjjEeKQqZMBCFd2Uw" id="(0.39603960396039606,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zpIzw9jjEeKQqZMBCFd2Uw" id="(0.6211180124223602,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_0mKcsNjjEeKQqZMBCFd2Uw" type="Generalization_Edge" source="_WunlMNjjEeKQqZMBCFd2Uw" target="_Hoi98NjjEeKQqZMBCFd2Uw" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_0mLq0NjjEeKQqZMBCFd2Uw" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_3A_a8K9fEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_0mLq0djjEeKQqZMBCFd2Uw" x="-1" y="38"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_0mKcsdjjEeKQqZMBCFd2Uw" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_0lwNANjjEeKQqZMBCFd2Uw"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0mKcstjjEeKQqZMBCFd2Uw" points="[520, 640, -643984, -643984]$[520, 620, -643984, -643984]$[420, 620, -643984, -643984]$[420, 581, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0mOuINjjEeKQqZMBCFd2Uw" id="(0.4968944099378882,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0mPVMNjjEeKQqZMBCFd2Uw" id="(0.49586776859504134,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_4cX5QNjjEeKQqZMBCFd2Uw" type="Generalization_Edge" source="_1xfAUNjjEeKQqZMBCFd2Uw" target="_Hoi98NjjEeKQqZMBCFd2Uw" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_4cX5Q9jjEeKQqZMBCFd2Uw" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_3BdVAK9fEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_4cX5RNjjEeKQqZMBCFd2Uw" x="1" y="58"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_4cX5QdjjEeKQqZMBCFd2Uw" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_4b_ewNjjEeKQqZMBCFd2Uw"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_4cX5QtjjEeKQqZMBCFd2Uw" points="[300, 640, -643984, -643984]$[300, 620, -643984, -643984]$[400, 620, -643984, -643984]$[400, 581, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4cd_4NjjEeKQqZMBCFd2Uw" id="(0.4968944099378882,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4cd_4djjEeKQqZMBCFd2Uw" id="(0.3305785123966942,1.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zpIzw9jjEeKQqZMBCFd2Uw" id="(0.3305785123966942,1.0)"/>
     </edges>
     <edges xmi:type="notation:Connector" xmi:id="_endM4NjnEeKQqZMBCFd2Uw" type="Association_Edge" source="_Hoi98NjjEeKQqZMBCFd2Uw" target="_9IsT4NjiEeKQqZMBCFd2Uw" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_endM49jnEeKQqZMBCFd2Uw" visible="false" type="Association_StereotypeLabel">
@@ -1934,17 +1751,6 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_18n5gNt5EeKwptaAAanMDg" id="(0.47156726768377255,0.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_18n5gdt5EeKwptaAAanMDg" id="(0.4979253112033195,1.0)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_R9IxEOHUEeKCZbxNW-U3VQ" type="Generalization_Edge" source="_z-jdcOHTEeKCZbxNW-U3VQ" target="_52F7ENa7EeKPiuTfpuvqHA" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_R9IxE-HUEeKCZbxNW-U3VQ" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_25z04K9fEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_R9IxFOHUEeKCZbxNW-U3VQ" y="39"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_R9IxEeHUEeKCZbxNW-U3VQ" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_R8qP8OHUEeKCZbxNW-U3VQ"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_R9IxEuHUEeKCZbxNW-U3VQ" points="[1149, 801, -643984, -643984]$[936, 650, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_R9O3sOHUEeKCZbxNW-U3VQ" id="(0.41055718475073316,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_R9O3seHUEeKCZbxNW-U3VQ" id="(0.5673758865248227,1.0)"/>
-    </edges>
     <edges xmi:type="notation:Connector" xmi:id="_anKh8OHUEeKCZbxNW-U3VQ" type="Generalization_Edge" source="__1eoIOHTEeKCZbxNW-U3VQ" target="_52F7ENa7EeKPiuTfpuvqHA" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_anQokOHUEeKCZbxNW-U3VQ" type="Generalization_StereotypeLabel">
         <styles xmi:type="notation:BooleanValueStyle" xmi:id="_3CDK4K9fEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
@@ -2038,15 +1844,15 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LMQtM65qEeeUVoYywick3g"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LMRUQK5qEeeUVoYywick3g"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_XUdOFK5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_vMekkNjKEeKgkM6XJF9t4A" target="_XUdOEK5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_XUdOFa5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_XUd1Iq5qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <edges xmi:type="notation:Connector" xmi:id="_h-YYUb2kEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_vMekkNjKEeKgkM6XJF9t4A" target="_h-XxQL2kEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_h-YYUr2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_h-YYVr2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:Class" href="layers.uml#_vMMQsNjKEeKgkM6XJF9t4A"/>
       </styles>
       <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_XUdOFq5qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_XUd1IK5qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_XUd1Ia5qEeeUVoYywick3g"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_h-YYU72kEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_h-YYVL2kEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_h-YYVb2kEeiAtaR2zBJhAQ"/>
     </edges>
   </notation:Diagram>
   <notation:Diagram xmi:id="_C_qusNa8EeKPiuTfpuvqHA" type="PapyrusUMLClassDiagram" name="property values" measurementUnit="Pixel">
@@ -2156,27 +1962,27 @@
       <element xmi:type="uml:Interface" href="layers.uml#_XZJOcO8UEeK0p4PkXjd-_Q"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XZo9se8UEeK0p4PkXjd-_Q" x="260" y="160" width="241" height="121"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_LPwGEK5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_LPwGEa5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LPzJYK5qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:Interface" href="layers.uml#_XZJOcO8UEeK0p4PkXjd-_Q"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LPwGEq5qEeeUVoYywick3g" x="200" y="100"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_btyl065qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_btyl1K5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_btzM4K5qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <children xmi:type="notation:Shape" xmi:id="_iKbQT72kEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_iKbQUL2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iKbQUr2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_Qeyn4O7GEeK0p4PkXjd-_Q"/>
       </styles>
       <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_btyl1a5qEeeUVoYywick3g" x="584" y="66"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iKbQUb2kEeiAtaR2zBJhAQ" x="240" y="20"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_iKtkMb2kEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_iKtkMr2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iKtkNL2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Interface" href="layers.uml#_XZJOcO8UEeK0p4PkXjd-_Q"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iKtkM72kEeiAtaR2zBJhAQ" x="460" y="160"/>
     </children>
     <styles xmi:type="notation:DiagramStyle" xmi:id="_C_qusda8EeKPiuTfpuvqHA"/>
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_LPtCwK5qEeeUVoYywick3g" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
       <owner xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     </styles>
-    <styles xmi:type="notation:StringValueStyle" xmi:id="_LP2MsK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.3.0"/>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_LP2MsK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <element xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     <edges xmi:type="notation:Connector" xmi:id="_g3VDUO8YEeK0p4PkXjd-_Q" type="InterfaceRealization_Edge" source="_EH9zgNa8EeKPiuTfpuvqHA" target="_XZo9sO8UEeK0p4PkXjd-_Q" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_g3WRcO8YEeK0p4PkXjd-_Q" visible="false" type="InterfaceRealization_StereotypeLabel">
@@ -2193,25 +1999,25 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_g3bJ8O8YEeK0p4PkXjd-_Q" id="(1.0,0.49586776859504134)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_g3bJ8e8YEeK0p4PkXjd-_Q" id="(0.0,0.49586776859504134)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_LPzJYa5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_XZo9sO8UEeK0p4PkXjd-_Q" target="_LPwGEK5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_LPzJYq5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LPzJZq5qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:Interface" href="layers.uml#_XZJOcO8UEeK0p4PkXjd-_Q"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LPzJY65qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LPzJZK5qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LPzJZa5qEeeUVoYywick3g"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_btzM4a5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_VpXS4O8UEeK0p4PkXjd-_Q" target="_btyl065qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_btzM4q5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_btzM5q5qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <edges xmi:type="notation:Connector" xmi:id="_iKbQU72kEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_VpXS4O8UEeK0p4PkXjd-_Q" target="_iKbQT72kEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_iKbQVL2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iKhW4b2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_Qeyn4O7GEeK0p4PkXjd-_Q"/>
       </styles>
       <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_btzM465qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_btzM5K5qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_btzM5a5qEeeUVoYywick3g"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_iKbQVb2kEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iKbQVr2kEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iKhW4L2kEeiAtaR2zBJhAQ"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_iKtkNb2kEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_XZo9sO8UEeK0p4PkXjd-_Q" target="_iKtkMb2kEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_iKzqwL2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iKzqxL2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Interface" href="layers.uml#_XZJOcO8UEeK0p4PkXjd-_Q"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_iKzqwb2kEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iKzqwr2kEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iKzqw72kEeiAtaR2zBJhAQ"/>
     </edges>
   </notation:Diagram>
   <notation:Diagram xmi:id="_QLWs4Na8EeKPiuTfpuvqHA" type="PapyrusUMLClassDiagram" name="datatypes" measurementUnit="Pixel">
@@ -2389,119 +2195,119 @@
       <element xmi:type="uml:PrimitiveType" href="layers.uml#_Qeyn4O7GEeK0p4PkXjd-_Q"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QfRJAe7GEeK0p4PkXjd-_Q" x="360" y="180" width="241" height="101"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_LRucAq5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_LRucA65qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LRucBa5qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_SuHkkNa8EeKPiuTfpuvqHA"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LRucBK5qEeeUVoYywick3g" x="200" y="100"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_LRwROK5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_LRwROa5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LRwRO65qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_TqqsYNa8EeKPiuTfpuvqHA"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LRwROq5qEeeUVoYywick3g" x="200" y="100"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_LRyGbK5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_LRyGba5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LRyGb65qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_c1QNsNheEeKgkM6XJF9t4A"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LRyGbq5qEeeUVoYywick3g" x="200" y="100"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_LR3l-K5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_LR3l-a5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LR3l-65qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_lVnFMNheEeKgkM6XJF9t4A"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LR3l-q5qEeeUVoYywick3g" x="200" y="100"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_LR-Tpq5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_LR-Tp65qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LR-Tqa5qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_Qeyn4O7GEeK0p4PkXjd-_Q"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LR-TqK5qEeeUVoYywick3g" x="200" y="100"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_b5NLoK5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_b5NLoa5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_b5NLo65qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <children xmi:type="notation:Shape" xmi:id="_iT9my72kEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_iT9mzL2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iT9mzr2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
       </styles>
       <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_b5NLoq5qEeeUVoYywick3g" x="236" y="30"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iT9mzb2kEeiAtaR2zBJhAQ" x="240" y="20"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_iUWBQL2kEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_iUWBQb2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iUWBQ72kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_SuHkkNa8EeKPiuTfpuvqHA"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iUWBQr2kEeiAtaR2zBJhAQ" x="380" y="20"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_iUiOj72kEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_iUiOkL2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iUiOkr2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_TqqsYNa8EeKPiuTfpuvqHA"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iUiOkb2kEeiAtaR2zBJhAQ" x="540" y="20"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_iU0ib72kEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_iU0icL2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iU0icr2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_c1QNsNheEeKgkM6XJF9t4A"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iU0icb2kEeiAtaR2zBJhAQ" x="240" y="180"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_iVG2Q72kEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_iVG2RL2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iVG2Rr2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_lVnFMNheEeKgkM6XJF9t4A"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iVG2Rb2kEeiAtaR2zBJhAQ" x="400" y="180"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_iVTDib2kEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_iVTDir2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iVTDjL2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_Qeyn4O7GEeK0p4PkXjd-_Q"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iVTDi72kEeiAtaR2zBJhAQ" x="560" y="180"/>
     </children>
     <styles xmi:type="notation:DiagramStyle" xmi:id="_QLWs4da8EeKPiuTfpuvqHA"/>
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_LRmgMK5qEeeUVoYywick3g" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
       <owner xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     </styles>
-    <styles xmi:type="notation:StringValueStyle" xmi:id="_LSClEK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.3.0"/>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_LSClEK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <element xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
-    <edges xmi:type="notation:Connector" xmi:id="_LRucBq5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_SukQgNa8EeKPiuTfpuvqHA" target="_LRucAq5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_LRucB65qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LRvDEK5qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_SuHkkNa8EeKPiuTfpuvqHA"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LRucCK5qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LRucCa5qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LRucCq5qEeeUVoYywick3g"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_LRw4QK5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_Tq9nUNa8EeKPiuTfpuvqHA" target="_LRwROK5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_LRw4Qa5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LRw4Ra5qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_TqqsYNa8EeKPiuTfpuvqHA"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LRw4Qq5qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LRw4Q65qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LRw4RK5qEeeUVoYywick3g"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_LRytcK5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_c1uu0NheEeKgkM6XJF9t4A" target="_LRyGbK5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_LRytca5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LR1wwK5qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_c1QNsNheEeKgkM6XJF9t4A"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LRytcq5qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LRytc65qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LRytdK5qEeeUVoYywick3g"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_LR3l_K5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_lV_fsNheEeKgkM6XJF9t4A" target="_LR3l-K5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_LR3l_a5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LR6pQq5qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_lVnFMNheEeKgkM6XJF9t4A"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LR3l_q5qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LR6pQK5qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LR6pQa5qEeeUVoYywick3g"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_LR-Tqq5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_QfRJAO7GEeK0p4PkXjd-_Q" target="_LR-Tpq5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_LR-Tq65qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LR-Tr65qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_Qeyn4O7GEeK0p4PkXjd-_Q"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LR-TrK5qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LR-Tra5qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LR-Trq5qEeeUVoYywick3g"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_b5NLpK5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_RJ_fYNa8EeKPiuTfpuvqHA" target="_b5NLoK5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_b5NLpa5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_b5NLqa5qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <edges xmi:type="notation:Connector" xmi:id="_iT9mz72kEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_RJ_fYNa8EeKPiuTfpuvqHA" target="_iT9my72kEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_iT9m0L2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iT9m1L2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
       </styles>
       <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_b5NLpq5qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_b5NLp65qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_b5NLqK5qEeeUVoYywick3g"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_iT9m0b2kEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iT9m0r2kEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iT9m072kEeiAtaR2zBJhAQ"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_iUWBRL2kEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_SukQgNa8EeKPiuTfpuvqHA" target="_iUWBQL2kEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_iUWBRb2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iUWBSb2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_SuHkkNa8EeKPiuTfpuvqHA"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_iUWBRr2kEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iUWBR72kEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iUWBSL2kEeiAtaR2zBJhAQ"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_iUiOk72kEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_Tq9nUNa8EeKPiuTfpuvqHA" target="_iUiOj72kEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_iUiOlL2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iUiOmL2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_TqqsYNa8EeKPiuTfpuvqHA"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_iUiOlb2kEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iUiOlr2kEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iUiOl72kEeiAtaR2zBJhAQ"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_iU0ic72kEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_c1uu0NheEeKgkM6XJF9t4A" target="_iU0ib72kEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_iU0idL2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iU0ieL2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_c1QNsNheEeKgkM6XJF9t4A"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_iU0idb2kEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iU0idr2kEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iU0id72kEeiAtaR2zBJhAQ"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_iVG2R72kEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_lV_fsNheEeKgkM6XJF9t4A" target="_iVG2Q72kEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_iVG2SL2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iVG2TL2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_lVnFMNheEeKgkM6XJF9t4A"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_iVG2Sb2kEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iVG2Sr2kEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iVG2S72kEeiAtaR2zBJhAQ"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_iVTDjb2kEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_QfRJAO7GEeK0p4PkXjd-_Q" target="_iVTDib2kEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_iVTDjr2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_iVTDkr2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#_Qeyn4O7GEeK0p4PkXjd-_Q"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_iVTDj72kEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iVTDkL2kEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iVTDkb2kEeiAtaR2zBJhAQ"/>
     </edges>
   </notation:Diagram>
   <notation:Diagram xmi:id="_XXUswNhbEeKgkM6XJF9t4A" type="PapyrusUMLClassDiagram" name="Property" measurementUnit="Pixel">
@@ -2744,267 +2550,6 @@
       <element xmi:type="uml:Class" href="layers.uml#_ggM80NhbEeKgkM6XJF9t4A"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_RF_msdhdEeKgkM6XJF9t4A" x="640" y="20" width="281"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_6SDikNhhEeKgkM6XJF9t4A" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_6SDikthhEeKgkM6XJF9t4A" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6SDik9hhEeKgkM6XJF9t4A" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_6SDilNhhEeKgkM6XJF9t4A" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6SDildhhEeKgkM6XJF9t4A" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_6SDilthhEeKgkM6XJF9t4A" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6SDil9hhEeKgkM6XJF9t4A" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_6SDimNhhEeKgkM6XJF9t4A" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_6SDimdhhEeKgkM6XJF9t4A" type="Class_AttributeCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_HJqRsNhjEeKgkM6XJF9t4A" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_HJX90NhjEeKgkM6XJF9t4A"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_HJqRsdhjEeKgkM6XJF9t4A"/>
-        </children>
-        <styles xmi:type="notation:TitleStyle" xmi:id="_6SDimthhEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_6SDim9hhEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_6SDinNhhEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6SDindhhEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_6SDinthhEeKgkM6XJF9t4A" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_6SDin9hhEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_6SDioNhhEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_6SDiodhhEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6SDiothhEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_6SDio9hhEeKgkM6XJF9t4A" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_6SDipNhhEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_6SDipdhhEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_6SDipthhEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6SDip9hhEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LS3Ecq5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LS3Ec65qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_6RrIENhhEeKgkM6XJF9t4A"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6SDikdhhEeKgkM6XJF9t4A" x="280" y="720" width="121" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_-zGr4NhhEeKgkM6XJF9t4A" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_-zGr4thhEeKgkM6XJF9t4A" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-zGr49hhEeKgkM6XJF9t4A" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_-zGr5NhhEeKgkM6XJF9t4A" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-zGr5dhhEeKgkM6XJF9t4A" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_-zGr5thhEeKgkM6XJF9t4A" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-zGr59hhEeKgkM6XJF9t4A" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_-zGr6NhhEeKgkM6XJF9t4A" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_-zGr6dhhEeKgkM6XJF9t4A" type="Class_AttributeCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_lMxgANhjEeKgkM6XJF9t4A" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_lMfMINhjEeKgkM6XJF9t4A"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_lMxgAdhjEeKgkM6XJF9t4A"/>
-        </children>
-        <styles xmi:type="notation:TitleStyle" xmi:id="_-zGr6thhEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_-zGr69hhEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_-zGr7NhhEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-zGr7dhhEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_-zGr7thhEeKgkM6XJF9t4A" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_-zGr79hhEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_-zGr8NhhEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_-zGr8dhhEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-zGr8thhEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_-zGr89hhEeKgkM6XJF9t4A" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_-zGr9NhhEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_-zGr9dhhEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_-zGr9thhEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-zGr99hhEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LS3EdK5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LS3Eda5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_-yuRYNhhEeKgkM6XJF9t4A"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-zGr4dhhEeKgkM6XJF9t4A" x="440" y="720" width="141" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_CxJOwNhiEeKgkM6XJF9t4A" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_CxJOwthiEeKgkM6XJF9t4A" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_CxJOw9hiEeKgkM6XJF9t4A" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_CxJOxNhiEeKgkM6XJF9t4A" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_CxJOxdhiEeKgkM6XJF9t4A" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_CxJOxthiEeKgkM6XJF9t4A" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_CxJOx9hiEeKgkM6XJF9t4A" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_CxPVYNhiEeKgkM6XJF9t4A" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_CxPVYdhiEeKgkM6XJF9t4A" type="Class_AttributeCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_oRl74NhjEeKgkM6XJF9t4A" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_oRNhYNhjEeKgkM6XJF9t4A"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_oRl74dhjEeKgkM6XJF9t4A"/>
-        </children>
-        <styles xmi:type="notation:TitleStyle" xmi:id="_CxPVYthiEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_CxPVY9hiEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_CxPVZNhiEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CxPVZdhiEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_CxPVZthiEeKgkM6XJF9t4A" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_CxPVZ9hiEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_CxPVaNhiEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_CxPVadhiEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CxPVathiEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_CxPVa9hiEeKgkM6XJF9t4A" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_CxPVbNhiEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_CxPVbdhiEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_CxPVbthiEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CxPVb9hiEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LS3Edq5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LS3Ed65qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_Cww0QNhiEeKgkM6XJF9t4A"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CxJOwdhiEeKgkM6XJF9t4A" x="620" y="720" width="141" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_6xipANhjEeKgkM6XJF9t4A" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_6xipAthjEeKgkM6XJF9t4A" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6xipA9hjEeKgkM6XJF9t4A" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_6xipBNhjEeKgkM6XJF9t4A" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6xipBdhjEeKgkM6XJF9t4A" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_6xipBthjEeKgkM6XJF9t4A" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6xipB9hjEeKgkM6XJF9t4A" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_6xipCNhjEeKgkM6XJF9t4A" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_6xipCdhjEeKgkM6XJF9t4A" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_6xipCthjEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_6xipC9hjEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_6xipDNhjEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6xipDdhjEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_6xipDthjEeKgkM6XJF9t4A" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_6xipD9hjEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_6xipENhjEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_6xipEdhjEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6xipEthjEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_6xipE9hjEeKgkM6XJF9t4A" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_6xipFNhjEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_6xipFdhjEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_6xipFthjEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6xipF9hjEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LS3EeK5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LS3Eea5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_6xEH4NhjEeKgkM6XJF9t4A"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6xipAdhjEeKgkM6XJF9t4A" x="440" y="420" width="101" height="81"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="__i1NwNhjEeKgkM6XJF9t4A" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="__i7UYNhjEeKgkM6XJF9t4A" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="__i7UYdhjEeKgkM6XJF9t4A" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="__i7UYthjEeKgkM6XJF9t4A" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="__i7UY9hjEeKgkM6XJF9t4A" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="__i7UZNhjEeKgkM6XJF9t4A" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="__i7UZdhjEeKgkM6XJF9t4A" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="__i7UZthjEeKgkM6XJF9t4A" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="__i7UZ9hjEeKgkM6XJF9t4A" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="__i7UaNhjEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="__i7UadhjEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="__i7UathjEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="__i7Ua9hjEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="__i7UbNhjEeKgkM6XJF9t4A" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="__i7UbdhjEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="__i7UbthjEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="__i7Ub9hjEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="__i7UcNhjEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="__i7UcdhjEeKgkM6XJF9t4A" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="__i7UcthjEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="__i7Uc9hjEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="__i7UdNhjEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="__i7UddhjEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LS3Eeq5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LS3Ee65qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#__iczQNhjEeKgkM6XJF9t4A"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="__i1NwdhjEeKgkM6XJF9t4A" x="560" y="420" width="101" height="81"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_E4NXANhkEeKgkM6XJF9t4A" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_E4NXAthkEeKgkM6XJF9t4A" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_E4NXA9hkEeKgkM6XJF9t4A" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_E4NXBNhkEeKgkM6XJF9t4A" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_E4NXBdhkEeKgkM6XJF9t4A" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_E4NXBthkEeKgkM6XJF9t4A" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_E4NXB9hkEeKgkM6XJF9t4A" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_E4NXCNhkEeKgkM6XJF9t4A" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_E4NXCdhkEeKgkM6XJF9t4A" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_E4NXCthkEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_E4NXC9hkEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_E4NXDNhkEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_E4NXDdhkEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_E4NXDthkEeKgkM6XJF9t4A" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_E4NXD9hkEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_E4NXENhkEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_E4NXEdhkEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_E4NXEthkEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_E4NXE9hkEeKgkM6XJF9t4A" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_E4NXFNhkEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_E4NXFdhkEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_E4NXFthkEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_E4NXF9hkEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LS3EfK5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LS3Efa5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_E308gNhkEeKgkM6XJF9t4A"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_E4NXAdhkEeKgkM6XJF9t4A" x="680" y="420" width="101" height="81"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_J6bTsNhkEeKgkM6XJF9t4A" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_J6bTsthkEeKgkM6XJF9t4A" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_J6bTs9hkEeKgkM6XJF9t4A" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_J6bTtNhkEeKgkM6XJF9t4A" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_J6bTtdhkEeKgkM6XJF9t4A" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_J6bTtthkEeKgkM6XJF9t4A" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_J6bTt9hkEeKgkM6XJF9t4A" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_J6bTuNhkEeKgkM6XJF9t4A" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_J6bTudhkEeKgkM6XJF9t4A" type="Class_AttributeCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_U0-VsNhkEeKgkM6XJF9t4A" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_U0l7MNhkEeKgkM6XJF9t4A"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_U0-VsdhkEeKgkM6XJF9t4A"/>
-        </children>
-        <styles xmi:type="notation:TitleStyle" xmi:id="_J6bTuthkEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_J6bTu9hkEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_J6bTvNhkEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_J6bTvdhkEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_J6bTvthkEeKgkM6XJF9t4A" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_J6bTv9hkEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_J6bTwNhkEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_J6bTwdhkEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_J6bTwthkEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_J6bTw9hkEeKgkM6XJF9t4A" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_J6bTxNhkEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_J6bTxdhkEeKgkM6XJF9t4A"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_J6bTxthkEeKgkM6XJF9t4A"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_J6bTx9hkEeKgkM6XJF9t4A"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LS3Efq5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LS3Ef65qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_J6C5MNhkEeKgkM6XJF9t4A"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_J6bTsdhkEeKgkM6XJF9t4A" x="920" y="420" width="161" height="81"/>
-    </children>
     <children xmi:type="notation:Shape" xmi:id="_agYdYNxWEeKwptaAAanMDg" type="Class_Shape" fontName="Segoe UI" lineColor="0">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_agekANxWEeKwptaAAanMDg" source="ShadowFigure">
         <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_agekAdxWEeKwptaAAanMDg" key="ShadowFigure_Value" value="false"/>
@@ -3130,11 +2675,45 @@
       <element xmi:type="uml:Interface" href="pathmap://STYLESHEETS/StyleSheets.uml#_SV34ANBHEeeeIb5NcUL5SQ"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9I7T8dBYEee6_PI6xaXFIg" x="1020" y="640" width="101" height="101"/>
     </children>
+    <children xmi:type="notation:Shape" xmi:id="_jXGewKU6EeiVgsJY_OrQeg" type="Class_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_jXMlYKU6EeiVgsJY_OrQeg" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_jXMlYaU6EeiVgsJY_OrQeg" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_jXMlYqU6EeiVgsJY_OrQeg" y="15"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_jXMlY6U6EeiVgsJY_OrQeg" type="Class_AttributeCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_pAQfoKU6EeiVgsJY_OrQeg" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="layers.uml#_0Omb9HVZEeipp8d5W3Vl9g"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_pAQfoaU6EeiVgsJY_OrQeg"/>
+        </children>
+        <children xmi:type="notation:Shape" xmi:id="_pbr3YKU6EeiVgsJY_OrQeg" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="layers.uml#_0Omb9XVZEeipp8d5W3Vl9g"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_pbr3YaU6EeiVgsJY_OrQeg"/>
+        </children>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_jXMlZKU6EeiVgsJY_OrQeg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_jXMlZaU6EeiVgsJY_OrQeg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_jXMlZqU6EeiVgsJY_OrQeg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jXMlZ6U6EeiVgsJY_OrQeg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_jXMlaKU6EeiVgsJY_OrQeg" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_jXMlaaU6EeiVgsJY_OrQeg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_jXMlaqU6EeiVgsJY_OrQeg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_jXMla6U6EeiVgsJY_OrQeg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jXMlbKU6EeiVgsJY_OrQeg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_jXMlbaU6EeiVgsJY_OrQeg" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_jXMlbqU6EeiVgsJY_OrQeg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_jXMlb6U6EeiVgsJY_OrQeg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_jXMlcKU6EeiVgsJY_OrQeg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jXMlcaU6EeiVgsJY_OrQeg"/>
+      </children>
+      <element xmi:type="uml:Class" href="layers.uml#_0Omb8nVZEeipp8d5W3Vl9g"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jXGewaU6EeiVgsJY_OrQeg" x="420" y="720" width="181" height="101"/>
+    </children>
     <styles xmi:type="notation:DiagramStyle" xmi:id="_XXUswdhbEeKgkM6XJF9t4A"/>
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_LS2dYK5qEeeUVoYywick3g" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
       <owner xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     </styles>
-    <styles xmi:type="notation:StringValueStyle" xmi:id="_LS45oK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.3.0"/>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_LS45oK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <element xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     <edges xmi:type="notation:Connector" xmi:id="_L2wXINhcEeKgkM6XJF9t4A" type="Association_Edge" source="_bHaTMNhbEeKgkM6XJF9t4A" target="_EoeLgNhcEeKgkM6XJF9t4A" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_L2wXI9hcEeKgkM6XJF9t4A" visible="false" type="Association_StereotypeLabel">
@@ -3198,37 +2777,6 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_O7nPQNhcEeKgkM6XJF9t4A" id="(0.4975124378109453,1.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_O7nPQdhcEeKgkM6XJF9t4A" id="(0.4986149584487535,0.0)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_khaTANhcEeKgkM6XJF9t4A" type="Association_Edge" source="_J6bTsNhkEeKgkM6XJF9t4A" target="_I4Ip4NhcEeKgkM6XJF9t4A" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_khaTA9hcEeKgkM6XJF9t4A" visible="false" type="Association_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_aXJ0EK9cEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_khaTBNhcEeKgkM6XJF9t4A" x="1" y="-18"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_khaTBdhcEeKgkM6XJF9t4A" visible="false" type="Association_NameLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_aXkDwK9cEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_khaTBthcEeKgkM6XJF9t4A" x="-1" y="20"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_khaTB9hcEeKgkM6XJF9t4A" visible="false" type="Association_TargetRoleLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_aYGPQK9cEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_khaTCNhcEeKgkM6XJF9t4A" x="15" y="-17"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_khaTCdhcEeKgkM6XJF9t4A" type="Association_SourceRoleLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_aYXVAK9cEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_khaTCthcEeKgkM6XJF9t4A" x="-26" y="19"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_khaTC9hcEeKgkM6XJF9t4A" visible="false" type="Association_SourceMultiplicityLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_aYuhYK9cEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_khaTDNhcEeKgkM6XJF9t4A" x="13" y="20"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_khaTDdhcEeKgkM6XJF9t4A" type="Association_TargetMultiplicityLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_aZEfoK9cEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_khaTDthcEeKgkM6XJF9t4A" x="-26" y="-15"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_khaTAdhcEeKgkM6XJF9t4A" fontName="Segoe UI"/>
-      <element xmi:type="uml:Association" href="layers.uml#_khB4gNhcEeKgkM6XJF9t4A"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_khaTAthcEeKgkM6XJF9t4A" points="[1061, 440, -643984, -643984]$[1180, 440, -643984, -643984]$[1180, 381, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_khmgQNhcEeKgkM6XJF9t4A" id="(1.0,0.24691358024691357)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_khmgQdhcEeKgkM6XJF9t4A" id="(0.4979253112033195,1.0)"/>
-    </edges>
     <edges xmi:type="notation:Connector" xmi:id="_YRoG8NhdEeKgkM6XJF9t4A" type="Generalization_Edge" source="_bHaTMNhbEeKgkM6XJF9t4A" target="_RF_msNhdEeKgkM6XJF9t4A" lineColor="0">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_rVv64NW2EeeK7fKfT_QGQw" source="PapyrusCSSForceValue">
         <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_rVwh8NW2EeeK7fKfT_QGQw" key="routing" value="true"/>
@@ -3271,104 +2819,6 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7u0_ZdhdEeKgkM6XJF9t4A" id="(0.4979253112033195,0.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7u7GANhdEeKgkM6XJF9t4A" id="(0.498220640569395,1.0)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_g5zEYNhiEeKgkM6XJF9t4A" type="Generalization_Edge" source="_6SDikNhhEeKgkM6XJF9t4A" target="_bvJBkNhbEeKgkM6XJF9t4A" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_l7Q9QNW4Eee0RrZFirrqqw" source="PapyrusCSSForceValue">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_l7Q9QdW4Eee0RrZFirrqqw" key="routing" value="true"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_g5zEY9hiEeKgkM6XJF9t4A" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_aajGUK9cEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_g5zEZNhiEeKgkM6XJF9t4A" x="427" y="-14"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_g5zEYdhiEeKgkM6XJF9t4A" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_g5ap4NhiEeKgkM6XJF9t4A"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_g5zEYthiEeKgkM6XJF9t4A" points="[340, 720, -643984, -643984]$[340, 680, -643984, -643984]$[240, 680, -643984, -643984]$[240, 641, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_g55LANhiEeKgkM6XJF9t4A" id="(0.49586776859504134,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_g55LAdhiEeKgkM6XJF9t4A" id="(0.4986149584487535,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_klsuYNhiEeKgkM6XJF9t4A" type="Generalization_Edge" source="_-zGr4NhhEeKgkM6XJF9t4A" target="_bvJBkNhbEeKgkM6XJF9t4A" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_l7Q9QtW4Eee0RrZFirrqqw" source="PapyrusCSSForceValue">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_l7Q9Q9W4Eee0RrZFirrqqw" key="routing" value="true"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_klsuY9hiEeKgkM6XJF9t4A" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_afAIgK9cEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_klsuZNhiEeKgkM6XJF9t4A" x="421" y="-55"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_klsuYdhiEeKgkM6XJF9t4A" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_klghINhiEeKgkM6XJF9t4A"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_klsuYthiEeKgkM6XJF9t4A" points="[500, 720, -643984, -643984]$[500, 680, -643984, -643984]$[240, 680, -643984, -643984]$[240, 641, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kly1ANhiEeKgkM6XJF9t4A" id="(0.425531914893617,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kly1AdhiEeKgkM6XJF9t4A" id="(0.4986149584487535,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_mlyW0NhiEeKgkM6XJF9t4A" type="Generalization_Edge" source="_CxJOwNhiEeKgkM6XJF9t4A" target="_bvJBkNhbEeKgkM6XJF9t4A" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_l7Q9RNW4Eee0RrZFirrqqw" source="PapyrusCSSForceValue">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_l7Q9RdW4Eee0RrZFirrqqw" key="routing" value="true"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_mlyW09hiEeKgkM6XJF9t4A" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_abMmkK9cEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_mlyW1NhiEeKgkM6XJF9t4A" x="415" y="-77"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_mlyW0dhiEeKgkM6XJF9t4A" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_mlgC8NhiEeKgkM6XJF9t4A"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mlyW0thiEeKgkM6XJF9t4A" points="[680, 720, -643984, -643984]$[680, 680, -643984, -643984]$[240, 680, -643984, -643984]$[240, 641, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ml4dcNhiEeKgkM6XJF9t4A" id="(0.425531914893617,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ml4dcdhiEeKgkM6XJF9t4A" id="(0.4986149584487535,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_n32JsNhkEeKgkM6XJF9t4A" type="Generalization_Edge" source="_6xipANhjEeKgkM6XJF9t4A" target="_EoeLgNhcEeKgkM6XJF9t4A" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vTtTUNW4Eee0RrZFirrqqw" source="PapyrusCSSForceValue">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vTt6YNW4Eee0RrZFirrqqw" key="routing" value="true"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_n38QUNhkEeKgkM6XJF9t4A" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_aim2IK9cEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_n38QUdhkEeKgkM6XJF9t4A" x="-99" y="38"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_n32JsdhkEeKgkM6XJF9t4A" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_n3p8cNhkEeKgkM6XJF9t4A"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_n32JsthkEeKgkM6XJF9t4A" points="[500, 420, -643984, -643984]$[500, 380, -643984, -643984]$[780, 380, -643984, -643984]$[780, 341, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n38QUthkEeKgkM6XJF9t4A" id="(0.594059405940594,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n38QU9hkEeKgkM6XJF9t4A" id="(0.4979253112033195,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_rg2QsNhkEeKgkM6XJF9t4A" type="Generalization_Edge" source="__i1NwNhjEeKgkM6XJF9t4A" target="_EoeLgNhcEeKgkM6XJF9t4A" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vTuhcNW4Eee0RrZFirrqqw" source="PapyrusCSSForceValue">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vTuhcdW4Eee0RrZFirrqqw" key="routing" value="true"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_rg23wNhkEeKgkM6XJF9t4A" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_abgvoK9cEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_rg23wdhkEeKgkM6XJF9t4A" x="-100" y="39"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_rg2QsdhkEeKgkM6XJF9t4A" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_rgmZENhkEeKgkM6XJF9t4A"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_rg2QsthkEeKgkM6XJF9t4A" points="[600, 420, -643984, -643984]$[600, 380, -643984, -643984]$[780, 380, -643984, -643984]$[780, 341, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rg7JMNhkEeKgkM6XJF9t4A" id="(0.39603960396039606,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rg7JMdhkEeKgkM6XJF9t4A" id="(0.4979253112033195,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_tdN2wNhkEeKgkM6XJF9t4A" type="Generalization_Edge" source="_E4NXANhkEeKgkM6XJF9t4A" target="_EoeLgNhcEeKgkM6XJF9t4A" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vTuhctW4Eee0RrZFirrqqw" source="PapyrusCSSForceValue">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vTuhc9W4Eee0RrZFirrqqw" key="routing" value="true"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_tdN2w9hkEeKgkM6XJF9t4A" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_aa32cK9cEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_tdN2xNhkEeKgkM6XJF9t4A" y="39"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_tdN2wdhkEeKgkM6XJF9t4A" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_tdBpgNhkEeKgkM6XJF9t4A"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_tdN2wthkEeKgkM6XJF9t4A" points="[740, 420, -643984, -643984]$[740, 380, -643984, -643984]$[780, 380, -643984, -643984]$[780, 341, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tdT9YNhkEeKgkM6XJF9t4A" id="(0.594059405940594,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tdT9YdhkEeKgkM6XJF9t4A" id="(0.4979253112033195,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_wLqaANhkEeKgkM6XJF9t4A" type="Generalization_Edge" source="_J6bTsNhkEeKgkM6XJF9t4A" target="_EoeLgNhcEeKgkM6XJF9t4A" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vTvIgNW4Eee0RrZFirrqqw" source="PapyrusCSSForceValue">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vTvIgdW4Eee0RrZFirrqqw" key="routing" value="true"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_wLqaA9hkEeKgkM6XJF9t4A" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_aZYBoK9cEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_wLqaBNhkEeKgkM6XJF9t4A" x="-1" y="38"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_wLqaAdhkEeKgkM6XJF9t4A" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_wLYGINhkEeKgkM6XJF9t4A"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wLqaAthkEeKgkM6XJF9t4A" points="[960, 420, -643984, -643984]$[960, 380, -643984, -643984]$[780, 380, -643984, -643984]$[780, 341, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wLqaBdhkEeKgkM6XJF9t4A" id="(0.2484472049689441,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wLqaBthkEeKgkM6XJF9t4A" id="(0.4979253112033195,1.0)"/>
-    </edges>
     <edges xmi:type="notation:Connector" xmi:id="_drg8oNxWEeKwptaAAanMDg" type="Generalization_Edge" source="_agYdYNxWEeKwptaAAanMDg" target="_bvJBkNhbEeKgkM6XJF9t4A" lineColor="0">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_l7QWMNW4Eee0RrZFirrqqw" source="PapyrusCSSForceValue">
         <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_l7QWMdW4Eee0RrZFirrqqw" key="routing" value="true"/>
@@ -3411,6 +2861,17 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iE0yUM-FEeep-sEmK3jrig" id="(0.3314917127071823,0.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iE0yUc-FEeep-sEmK3jrig" id="(0.4986149584487535,1.0)"/>
     </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_kDcnYKU6EeiVgsJY_OrQeg" type="Generalization_Edge" source="_jXGewKU6EeiVgsJY_OrQeg" target="_bvJBkNhbEeKgkM6XJF9t4A">
+      <children xmi:type="notation:DecorationNode" xmi:id="_kDdOcKU6EeiVgsJY_OrQeg" type="Generalization_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_kcZ58KU6EeiVgsJY_OrQeg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_kDdOcaU6EeiVgsJY_OrQeg" x="-1" y="38"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_kDcnYaU6EeiVgsJY_OrQeg"/>
+      <element xmi:type="uml:Generalization" href="layers.uml#_0Omb83VZEeipp8d5W3Vl9g"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_kDcnYqU6EeiVgsJY_OrQeg" points="[520, 720, -643984, -643984]$[520, 680, -643984, -643984]$[240, 680, -643984, -643984]$[240, 641, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kdKu8KU6EeiVgsJY_OrQeg" id="(0.5524861878453039,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kdKu8aU6EeiVgsJY_OrQeg" id="(0.4986149584487535,1.0)"/>
+    </edges>
   </notation:Diagram>
   <notation:Diagram xmi:id="_ePKuUNhbEeKgkM6XJF9t4A" type="PapyrusUMLClassDiagram" name="packages" measurementUnit="Pixel">
     <children xmi:type="notation:Shape" xmi:id="_fBRgsNhbEeKgkM6XJF9t4A" type="Class_Shape" fontName="Segoe UI" lineColor="0">
@@ -3491,7 +2952,7 @@
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_LTv1QK5qEeeUVoYywick3g" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
       <owner xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     </styles>
-    <styles xmi:type="notation:StringValueStyle" xmi:id="_LTxqcK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.3.0"/>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_LTxqcK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <element xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     <edges xmi:type="notation:Connector" xmi:id="_jtwd8NhbEeKgkM6XJF9t4A" type="Association_Edge" source="_fBRgsNhbEeKgkM6XJF9t4A" target="_gglXUNhbEeKgkM6XJF9t4A" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_jtwd89hbEeKgkM6XJF9t4A" visible="false" type="Association_StereotypeLabel">
@@ -3771,27 +3232,27 @@
       <element xmi:type="uml:Class" href="layers.uml#_-vaacNa7EeKPiuTfpuvqHA"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_o64RUe-MEeK0p4PkXjd-_Q" x="100" y="480" width="141" height="121"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_cl5SgK5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_cl5Sga5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_cl5Sg65qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <children xmi:type="notation:Shape" xmi:id="_hhY6UL2kEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_hhY6Ub2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_hhY6U72kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:Class" href="layers.uml#_vMMQsNjKEeKgkM6XJF9t4A"/>
       </styles>
       <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cl5Sgq5qEeeUVoYywick3g" x="800" y="414"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hhY6Ur2kEeiAtaR2zBJhAQ" x="480" y="480"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_cmNbkK5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_cmNbka5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_cmNbk65qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <children xmi:type="notation:Shape" xmi:id="_hh87AL2kEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_hh87Ab2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_hh87A72kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
       </styles>
       <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cmNbkq5qEeeUVoYywick3g" x="800" y="576"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hh87Ar2kEeiAtaR2zBJhAQ" x="620" y="20"/>
     </children>
     <styles xmi:type="notation:DiagramStyle" xmi:id="_Dtu4wdjkEeKQqZMBCFd2Uw"/>
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_LUv60K5qEeeUVoYywick3g" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
       <owner xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     </styles>
-    <styles xmi:type="notation:StringValueStyle" xmi:id="_LUxI8K5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.3.0"/>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_LUxI8K5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <element xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     <edges xmi:type="notation:Connector" xmi:id="_Uv-40NjkEeKQqZMBCFd2Uw" type="Association_Edge" source="_Uvsk8NjkEeKQqZMBCFd2Uw" target="_UvyrkNjkEeKQqZMBCFd2Uw" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_Uv-409jkEeKQqZMBCFd2Uw" visible="false" type="Association_StereotypeLabel">
@@ -3948,25 +3409,25 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rFKXkO-MEeK0p4PkXjd-_Q" id="(0.22160664819944598,1.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rFK-oO-MEeK0p4PkXjd-_Q" id="(0.5673758865248227,0.0)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_cl5ShK5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_blTK0NjkEeKQqZMBCFd2Uw" target="_cl5SgK5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_cl5Sha5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_cl5Sia5qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <edges xmi:type="notation:Connector" xmi:id="_hhY6VL2kEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_blTK0NjkEeKQqZMBCFd2Uw" target="_hhY6UL2kEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_hhY6Vb2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_hhZhYL2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:Class" href="layers.uml#_vMMQsNjKEeKgkM6XJF9t4A"/>
       </styles>
       <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_cl5Shq5qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cl5Sh65qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cl5SiK5qEeeUVoYywick3g"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_hhY6Vr2kEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hhY6V72kEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hhY6WL2kEeiAtaR2zBJhAQ"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_cmNblK5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_1pN_sNjkEeKQqZMBCFd2Uw" target="_cmNbkK5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_cmNbla5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_cmNbma5qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <edges xmi:type="notation:Connector" xmi:id="_hh87BL2kEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_1pN_sNjkEeKQqZMBCFd2Uw" target="_hh87AL2kEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_hh87Bb2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_hh9iEr2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
       </styles>
       <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_cmNblq5qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cmNbl65qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cmNbmK5qEeeUVoYywick3g"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_hh87Br2kEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hh9iEL2kEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hh9iEb2kEeiAtaR2zBJhAQ"/>
     </edges>
   </notation:Diagram>
   <notation:Diagram xmi:id="_-aAtoNjpEeKQqZMBCFd2Uw" type="PapyrusUMLClassDiagram" name="Registries" measurementUnit="Pixel">
@@ -4364,57 +3825,6 @@
       <element xmi:type="uml:Class" href="layers.uml#_xhwY8NqCEeKQqZMBCFd2Uw"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xiCs0dqCEeKQqZMBCFd2Uw" x="40" y="420" width="161"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_z5FcsNqCEeKQqZMBCFd2Uw" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_z5FcstqCEeKQqZMBCFd2Uw" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_z5Fcs9qCEeKQqZMBCFd2Uw" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_z5FctNqCEeKQqZMBCFd2Uw" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_z5FctdqCEeKQqZMBCFd2Uw" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_z5FcttqCEeKQqZMBCFd2Uw" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_z5Fct9qCEeKQqZMBCFd2Uw" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_z5FcuNqCEeKQqZMBCFd2Uw" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_z5FcudqCEeKQqZMBCFd2Uw" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_z5FcutqCEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_z5Fcu9qCEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_z5FcvNqCEeKQqZMBCFd2Uw"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z5FcvdqCEeKQqZMBCFd2Uw"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_z5FcvtqCEeKQqZMBCFd2Uw" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_z5Fcv9qCEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_z5FcwNqCEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_z5FcwdqCEeKQqZMBCFd2Uw"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z5FcwtqCEeKQqZMBCFd2Uw"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_z5Fcw9qCEeKQqZMBCFd2Uw" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_z5FcxNqCEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_z5FcxdqCEeKQqZMBCFd2Uw"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_z5FcxtqCEeKQqZMBCFd2Uw"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z5Fcx9qCEeKQqZMBCFd2Uw"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LVYNAq5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LVYNA65qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_z4m7kNqCEeKQqZMBCFd2Uw"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z5FcsdqCEeKQqZMBCFd2Uw" x="240" y="420" width="161"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_LVeTk65qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_LVeTlK5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LVeTlq5qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:Class" href="layers.uml#_hgu_wNjqEeKQqZMBCFd2Uw"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LVeTla5qEeeUVoYywick3g" x="200" y="100"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_LVhW6q5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_LVhW665qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LVh98K5qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:Class" href="layers.uml#_P4xeANj_EeKQqZMBCFd2Uw"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LVhW7K5qEeeUVoYywick3g" x="200" y="100"/>
-    </children>
     <children xmi:type="notation:Shape" xmi:id="_dh8rEK5qEeeUVoYywick3g" type="StereotypeComment">
       <styles xmi:type="notation:TitleStyle" xmi:id="_dh8rEa5qEeeUVoYywick3g"/>
       <styles xmi:type="notation:EObjectValueStyle" xmi:id="_dh8rE65qEeeUVoYywick3g" name="BASE_ELEMENT">
@@ -4423,11 +3833,27 @@
       <element xsi:nil="true"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dh8rEq5qEeeUVoYywick3g" x="446" y="180"/>
     </children>
+    <children xmi:type="notation:Shape" xmi:id="_i0bPkb2kEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_i0bPkr2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_i0bPlL2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="layers.uml#_hgu_wNjqEeKQqZMBCFd2Uw"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_i0bPk72kEeiAtaR2zBJhAQ" x="1320" y="240"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_i0tjcb2kEeiAtaR2zBJhAQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_i0tjcr2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_i0tjdL2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="layers.uml#_P4xeANj_EeKQqZMBCFd2Uw"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_i0tjc72kEeiAtaR2zBJhAQ" x="720" y="600"/>
+    </children>
     <styles xmi:type="notation:DiagramStyle" xmi:id="_-aAtodjpEeKQqZMBCFd2Uw"/>
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_LVXl4K5qEeeUVoYywick3g" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
       <owner xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     </styles>
-    <styles xmi:type="notation:StringValueStyle" xmi:id="_LVlBQK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.3.0"/>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_LVlBQK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <element xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     <edges xmi:type="notation:Connector" xmi:id="_NV6sQNjqEeKQqZMBCFd2Uw" type="Association_Edge" source="_Atmg4NjqEeKQqZMBCFd2Uw" target="_ERoBQNjqEeKQqZMBCFd2Uw" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_NV6sQ9jqEeKQqZMBCFd2Uw" visible="false" type="Association_StereotypeLabel">
@@ -4719,17 +4145,6 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3e3QldqCEeKQqZMBCFd2Uw" id="(0.37267080745341613,0.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3e3QltqCEeKQqZMBCFd2Uw" id="(0.3314917127071823,1.0)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_5SH98NqCEeKQqZMBCFd2Uw" type="Generalization_Edge" source="_z5FcsNqCEeKQqZMBCFd2Uw" target="_a8fcQNqCEeKQqZMBCFd2Uw" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_5SH989qCEeKQqZMBCFd2Uw" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_kEsDsK6IEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_5SH99NqCEeKQqZMBCFd2Uw" x="-1" y="38"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_5SH98dqCEeKQqZMBCFd2Uw" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_5RvjcNqCEeKQqZMBCFd2Uw"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_5SH98tqCEeKQqZMBCFd2Uw" points="[340, 420, -643984, -643984]$[340, 380, -643984, -643984]$[240, 380, -643984, -643984]$[240, 300, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5SOEkNqCEeKQqZMBCFd2Uw" id="(0.6211180124223602,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5SOEkdqCEeKQqZMBCFd2Uw" id="(0.6629834254143646,1.0)"/>
-    </edges>
     <edges xmi:type="notation:Connector" xmi:id="_LVcebK5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_RruhsA2qEeOjX-JbGFEH7w" target="_LVceaK5qEeeUVoYywick3g">
       <styles xmi:type="notation:FontStyle" xmi:id="_LVceba5qEeeUVoYywick3g"/>
       <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LVceca5qEeeUVoYywick3g" name="BASE_ELEMENT">
@@ -4740,25 +4155,25 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LVceb65qEeeUVoYywick3g"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LVcecK5qEeeUVoYywick3g"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_LVeTl65qEeeUVoYywick3g" type="StereotypeCommentLink" source="_hhHaQNjqEeKQqZMBCFd2Uw" target="_LVeTk65qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_LVeTmK5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LVfhsK5qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <edges xmi:type="notation:Connector" xmi:id="_i0bPlb2kEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_hhHaQNjqEeKQqZMBCFd2Uw" target="_i0bPkb2kEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_i0bPlr2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_i0bPmr2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:Class" href="layers.uml#_hgu_wNjqEeKQqZMBCFd2Uw"/>
       </styles>
       <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LVeTma5qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LVeTmq5qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LVeTm65qEeeUVoYywick3g"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_i0bPl72kEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_i0bPmL2kEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_i0bPmb2kEeiAtaR2zBJhAQ"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_LVh98a5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_P5J4gNj_EeKQqZMBCFd2Uw" target="_LVhW6q5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_LVh98q5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LVh99q5qEeeUVoYywick3g" name="BASE_ELEMENT">
+    <edges xmi:type="notation:Connector" xmi:id="_i0tjdb2kEeiAtaR2zBJhAQ" type="StereotypeCommentLink" source="_P5J4gNj_EeKQqZMBCFd2Uw" target="_i0tjcb2kEeiAtaR2zBJhAQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_i0tjdr2kEeiAtaR2zBJhAQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_i0tjer2kEeiAtaR2zBJhAQ" name="BASE_ELEMENT">
         <eObjectValue xmi:type="uml:Class" href="layers.uml#_P4xeANj_EeKQqZMBCFd2Uw"/>
       </styles>
       <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LVh9865qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LVh99K5qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LVh99a5qEeeUVoYywick3g"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_i0tjd72kEeiAtaR2zBJhAQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_i0tjeL2kEeiAtaR2zBJhAQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_i0tjeb2kEeiAtaR2zBJhAQ"/>
     </edges>
   </notation:Diagram>
   <notation:Diagram xmi:id="_gSkRsNxGEeKwptaAAanMDg" type="PapyrusUMLClassDiagram" name="exceptions" measurementUnit="Pixel">
@@ -4877,7 +4292,7 @@
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_LWRk0K5qEeeUVoYywick3g" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
       <owner xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     </styles>
-    <styles xmi:type="notation:StringValueStyle" xmi:id="_LWY5kK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.3.0"/>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_LWY5kK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <element xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     <edges xmi:type="notation:Connector" xmi:id="_ox-G8NxGEeKwptaAAanMDg" type="Generalization_Edge" source="_k-76MNxGEeKwptaAAanMDg" target="_iYyXUNxGEeKwptaAAanMDg" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_ox_VENxGEeKwptaAAanMDg" type="Generalization_StereotypeLabel">
@@ -5003,443 +4418,12 @@
       <element xmi:type="uml:Class" href="layers.uml#_EoL3oNhcEeKgkM6XJF9t4A"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tBcQYeT_EeKSDdPH_NXL-g" x="260" y="400" width="241" height="101"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_tjX4wOT_EeKSDdPH_NXL-g" type="Class_Shape" fontName="Segoe UI" fillColor="15053796" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_tjX4wuT_EeKSDdPH_NXL-g" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_tjX4w-T_EeKSDdPH_NXL-g" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_tjX4xOT_EeKSDdPH_NXL-g" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_tjX4xeT_EeKSDdPH_NXL-g" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_tjX4xuT_EeKSDdPH_NXL-g" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_tjX4x-T_EeKSDdPH_NXL-g" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_tjX4yOT_EeKSDdPH_NXL-g" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_tjX4yeT_EeKSDdPH_NXL-g" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_tjX4yuT_EeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_tjX4y-T_EeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_tjX4zOT_EeKSDdPH_NXL-g"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tjX4zeT_EeKSDdPH_NXL-g"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_tjX4zuT_EeKSDdPH_NXL-g" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_tjX4z-T_EeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_tjX40OT_EeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_tjX40eT_EeKSDdPH_NXL-g"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tjX40uT_EeKSDdPH_NXL-g"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_tjX40-T_EeKSDdPH_NXL-g" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_tjX41OT_EeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_tjX41eT_EeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_tjX41uT_EeKSDdPH_NXL-g"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tjX41-T_EeKSDdPH_NXL-g"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LXRqZK5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LXRqZa5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_ti_eQOT_EeKSDdPH_NXL-g"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tjX4weT_EeKSDdPH_NXL-g" x="260" y="560"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_vkxIwOT_EeKSDdPH_NXL-g" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vkxIwuT_EeKSDdPH_NXL-g" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vkxIw-T_EeKSDdPH_NXL-g" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vkxIxOT_EeKSDdPH_NXL-g" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vkxIxeT_EeKSDdPH_NXL-g" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vkxIxuT_EeKSDdPH_NXL-g" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vkxIx-T_EeKSDdPH_NXL-g" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_vkxIyOT_EeKSDdPH_NXL-g" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_vkxIyeT_EeKSDdPH_NXL-g" type="Class_AttributeCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_VwHpgOUAEeKSDdPH_NXL-g" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_Q8HvAOUAEeKSDdPH_NXL-g"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_VwHpgeUAEeKSDdPH_NXL-g" x="15"/>
-        </children>
-        <styles xmi:type="notation:TitleStyle" xmi:id="_vkxIyuT_EeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_vkxIy-T_EeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_vkxIzOT_EeKSDdPH_NXL-g"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vkxIzeT_EeKSDdPH_NXL-g"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_vkxIzuT_EeKSDdPH_NXL-g" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_vkxIz-T_EeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_vkxI0OT_EeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_vkxI0eT_EeKSDdPH_NXL-g"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vkxI0uT_EeKSDdPH_NXL-g"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_vkxI0-T_EeKSDdPH_NXL-g" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_vkxI1OT_EeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_vkxI1eT_EeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_vkxI1uT_EeKSDdPH_NXL-g"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vkxI1-T_EeKSDdPH_NXL-g"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LXRqZq5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LXRqZ65qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_vkSnoOT_EeKSDdPH_NXL-g"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vkxIweT_EeKSDdPH_NXL-g" x="260" y="180" width="121" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_fMVFQOUAEeKSDdPH_NXL-g" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_fMVFQuUAEeKSDdPH_NXL-g" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_fMVFQ-UAEeKSDdPH_NXL-g" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_fMVFROUAEeKSDdPH_NXL-g" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_fMVFReUAEeKSDdPH_NXL-g" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_fMVFRuUAEeKSDdPH_NXL-g" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_fMVFR-UAEeKSDdPH_NXL-g" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_fMVFSOUAEeKSDdPH_NXL-g" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_fMVFSeUAEeKSDdPH_NXL-g" type="Class_AttributeCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_p9Xl8OUAEeKSDdPH_NXL-g" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_nVngkOUAEeKSDdPH_NXL-g"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_p9Xl8eUAEeKSDdPH_NXL-g" x="39" y="11"/>
-        </children>
-        <styles xmi:type="notation:TitleStyle" xmi:id="_fMVFSuUAEeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_fMVFS-UAEeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_fMVFTOUAEeKSDdPH_NXL-g"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fMVFTeUAEeKSDdPH_NXL-g"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_fMVFTuUAEeKSDdPH_NXL-g" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_fMVFT-UAEeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_fMVFUOUAEeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_fMVFUeUAEeKSDdPH_NXL-g"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fMVFUuUAEeKSDdPH_NXL-g"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_fMVFU-UAEeKSDdPH_NXL-g" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_fMVFVOUAEeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_fMVFVeUAEeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_fMVFVuUAEeKSDdPH_NXL-g"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fMVFV-UAEeKSDdPH_NXL-g"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LXRqaK5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LXRqaa5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_fL2kIOUAEeKSDdPH_NXL-g"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fMVFQeUAEeKSDdPH_NXL-g" x="40" y="180" width="161" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_gsWtkOUAEeKSDdPH_NXL-g" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_gsWtkuUAEeKSDdPH_NXL-g" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_gsWtk-UAEeKSDdPH_NXL-g" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_gsWtlOUAEeKSDdPH_NXL-g" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_gsc0MOUAEeKSDdPH_NXL-g" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_gsc0MeUAEeKSDdPH_NXL-g" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_gsc0MuUAEeKSDdPH_NXL-g" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_gsc0M-UAEeKSDdPH_NXL-g" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_gsc0NOUAEeKSDdPH_NXL-g" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_gsc0NeUAEeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_gsc0NuUAEeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_gsc0N-UAEeKSDdPH_NXL-g"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gsc0OOUAEeKSDdPH_NXL-g"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_gsc0OeUAEeKSDdPH_NXL-g" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_gsc0OuUAEeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_gsc0O-UAEeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_gsc0POUAEeKSDdPH_NXL-g"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gsc0PeUAEeKSDdPH_NXL-g"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_gsc0PuUAEeKSDdPH_NXL-g" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_gsc0P-UAEeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_gsc0QOUAEeKSDdPH_NXL-g"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_gsc0QeUAEeKSDdPH_NXL-g"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gsc0QuUAEeKSDdPH_NXL-g"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LXRqaq5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LXRqa65qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_gsEZsOUAEeKSDdPH_NXL-g"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gsWtkeUAEeKSDdPH_NXL-g" x="120" y="560"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_Rn740O-YEeK0p4PkXjd-_Q" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Rn740u-YEeK0p4PkXjd-_Q" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Rn740--YEeK0p4PkXjd-_Q" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Rn741O-YEeK0p4PkXjd-_Q" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Rn741e-YEeK0p4PkXjd-_Q" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Rn741u-YEeK0p4PkXjd-_Q" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Rn741--YEeK0p4PkXjd-_Q" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_Rn742O-YEeK0p4PkXjd-_Q" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_Rn742e-YEeK0p4PkXjd-_Q" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_Rn742u-YEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_Rn742--YEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_Rn743O-YEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Rn743e-YEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_Rn743u-YEeK0p4PkXjd-_Q" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_Rn743--YEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_Rn744O-YEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_Rn744e-YEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Rn744u-YEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_Rn744--YEeK0p4PkXjd-_Q" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_Rn745O-YEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_Rn745e-YEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_Rn745u-YEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Rn745--YEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LXRqbK5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LXRqba5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_RnjeUO-YEeK0p4PkXjd-_Q"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Rn740e-YEeK0p4PkXjd-_Q" x="400" y="560"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_ZHO78O-YEeK0p4PkXjd-_Q" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ZHO78u-YEeK0p4PkXjd-_Q" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ZHO78--YEeK0p4PkXjd-_Q" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ZHO79O-YEeK0p4PkXjd-_Q" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ZHO79e-YEeK0p4PkXjd-_Q" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ZHO79u-YEeK0p4PkXjd-_Q" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ZHO79--YEeK0p4PkXjd-_Q" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_ZHO7-O-YEeK0p4PkXjd-_Q" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_ZHO7-e-YEeK0p4PkXjd-_Q" type="Class_AttributeCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_vpscQO-YEeK0p4PkXjd-_Q" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_vpaIYO-YEeK0p4PkXjd-_Q"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_vpscQe-YEeK0p4PkXjd-_Q"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_yrtbwO-YEeK0p4PkXjd-_Q" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_yrVBQO-YEeK0p4PkXjd-_Q"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_yrtbwe-YEeK0p4PkXjd-_Q"/>
-        </children>
-        <styles xmi:type="notation:TitleStyle" xmi:id="_ZHO7-u-YEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_ZHO7---YEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_ZHO7_O-YEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZHO7_e-YEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_ZHO7_u-YEeK0p4PkXjd-_Q" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_ZHO7_--YEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_ZHO8AO-YEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_ZHO8Ae-YEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZHO8Au-YEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_ZHO8A--YEeK0p4PkXjd-_Q" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_ZHO8BO-YEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_ZHO8Be-YEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_ZHO8Bu-YEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZHO8B--YEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LXRqbq5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LXRqb65qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_ZGwa0O-YEeK0p4PkXjd-_Q"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZHO78e-YEeK0p4PkXjd-_Q" x="420" y="180" width="141" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_Ot3I0O-iEeK0p4PkXjd-_Q" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Ot3I0u-iEeK0p4PkXjd-_Q" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Ot3I0--iEeK0p4PkXjd-_Q" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Ot3I1O-iEeK0p4PkXjd-_Q" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Ot3I1e-iEeK0p4PkXjd-_Q" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Ot3I1u-iEeK0p4PkXjd-_Q" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Ot3I1--iEeK0p4PkXjd-_Q" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_Ot3I2O-iEeK0p4PkXjd-_Q" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_Ot3I2e-iEeK0p4PkXjd-_Q" type="Class_AttributeCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_XmGU0O-iEeK0p4PkXjd-_Q" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_Xlt6UO-iEeK0p4PkXjd-_Q"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_XmGU0e-iEeK0p4PkXjd-_Q"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_bEXygO-iEeK0p4PkXjd-_Q" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_bD8UsO-iEeK0p4PkXjd-_Q"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_bEXyge-iEeK0p4PkXjd-_Q"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_eqEG0O-iEeK0p4PkXjd-_Q" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_epxy8O-iEeK0p4PkXjd-_Q"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_eqEG0e-iEeK0p4PkXjd-_Q"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_indJcO-iEeK0p4PkXjd-_Q" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_inEu8O-iEeK0p4PkXjd-_Q"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_indJce-iEeK0p4PkXjd-_Q"/>
-        </children>
-        <styles xmi:type="notation:TitleStyle" xmi:id="_Ot3I2u-iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_Ot3I2--iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_Ot3I3O-iEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ot3I3e-iEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_Ot3I3u-iEeK0p4PkXjd-_Q" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_Ot3I3--iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_Ot3I4O-iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_Ot3I4e-iEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ot3I4u-iEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_Ot3I4--iEeK0p4PkXjd-_Q" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_Ot3I5O-iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_Ot3I5e-iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_Ot3I5u-iEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ot3I5--iEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LXRqcK5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LXRqca5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_OtShEO-iEeK0p4PkXjd-_Q"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ot3I0e-iEeK0p4PkXjd-_Q" x="600" y="180" width="161" height="141"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_Q7FOUO-iEeK0p4PkXjd-_Q" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Q7FOUu-iEeK0p4PkXjd-_Q" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Q7FOU--iEeK0p4PkXjd-_Q" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Q7FOVO-iEeK0p4PkXjd-_Q" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Q7FOVe-iEeK0p4PkXjd-_Q" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Q7FOVu-iEeK0p4PkXjd-_Q" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Q7FOV--iEeK0p4PkXjd-_Q" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_Q7FOWO-iEeK0p4PkXjd-_Q" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_Q7FOWe-iEeK0p4PkXjd-_Q" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_Q7FOWu-iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_Q7FOW--iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_Q7FOXO-iEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q7FOXe-iEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_Q7FOXu-iEeK0p4PkXjd-_Q" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_Q7FOX--iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_Q7FOYO-iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_Q7FOYe-iEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q7FOYu-iEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_Q7FOY--iEeK0p4PkXjd-_Q" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_Q7FOZO-iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_Q7FOZe-iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_Q7FOZu-iEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q7FOZ--iEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LXRqcq5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LXRqc65qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_Q6ta4O-iEeK0p4PkXjd-_Q"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q7FOUe-iEeK0p4PkXjd-_Q" x="540" y="560"/>
-    </children>
     <styles xmi:type="notation:DiagramStyle" xmi:id="_j4XzEeT_EeKSDdPH_NXL-g"/>
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_LXRDUK5qEeeUVoYywick3g" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
       <owner xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     </styles>
-    <styles xmi:type="notation:StringValueStyle" xmi:id="_LXS4gK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.3.0"/>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_LXS4gK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <element xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
-    <edges xmi:type="notation:Connector" xmi:id="_YC914OUAEeKSDdPH_NXL-g" type="Generalization_Edge" source="_vkxIwOT_EeKSDdPH_NXL-g" target="_ruaiQOT_EeKSDdPH_NXL-g" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_YDD8gOUAEeKSDdPH_NXL-g" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_gWOnMK6DEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_YDD8geUAEeKSDdPH_NXL-g" x="1" y="37"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_YC914eUAEeKSDdPH_NXL-g" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_YCxooOUAEeKSDdPH_NXL-g"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YC914uUAEeKSDdPH_NXL-g" points="[325, 167, -643984, -643984]$[314, 132, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YDD8guUAEeKSDdPH_NXL-g" id="(0.49586776859504134,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YDD8g-UAEeKSDdPH_NXL-g" id="(0.22675736961451248,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_Y03M4OUAEeKSDdPH_NXL-g" type="Generalization_Edge" source="_tjX4wOT_EeKSDdPH_NXL-g" target="_tBcQYOT_EeKSDdPH_NXL-g" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_Y09TgOUAEeKSDdPH_NXL-g" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="__1xzwK6CEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_Y09TgeUAEeKSDdPH_NXL-g" x="-1" y="39"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_Y03M4eUAEeKSDdPH_NXL-g" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_Y0k5AOUAEeKSDdPH_NXL-g"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Y03M4uUAEeKSDdPH_NXL-g" points="[298, 573, -643984, -643984]$[336, 496, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Y09TguUAEeKSDdPH_NXL-g" id="(0.6,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Y09Tg-UAEeKSDdPH_NXL-g" id="(0.24896265560165975,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_iqWrUOUAEeKSDdPH_NXL-g" type="Generalization_Edge" source="_gsWtkOUAEeKSDdPH_NXL-g" target="_tBcQYOT_EeKSDdPH_NXL-g" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_iqcx8OUAEeKSDdPH_NXL-g" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="__2EusK6CEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_iqcx8eUAEeKSDdPH_NXL-g" y="19"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_iqWrUeUAEeKSDdPH_NXL-g" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_ip-Q0OUAEeKSDdPH_NXL-g"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_iqWrUuUAEeKSDdPH_NXL-g" points="[160, 580, -643984, -643984]$[160, 540, -643984, -643984]$[280, 540, -643984, -643984]$[280, 501, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iqgcUOUAEeKSDdPH_NXL-g" id="(0.4,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iqgcUeUAEeKSDdPH_NXL-g" id="(0.08298755186721991,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_jXrEUOUAEeKSDdPH_NXL-g" type="Generalization_Edge" source="_fMVFQOUAEeKSDdPH_NXL-g" target="_ruaiQOT_EeKSDdPH_NXL-g" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_jXrEU-UAEeKSDdPH_NXL-g" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_gWhiIK6DEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_jXrEVOUAEeKSDdPH_NXL-g" x="1" y="19"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_jXrEUeUAEeKSDdPH_NXL-g" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_jXYwcOUAEeKSDdPH_NXL-g"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jXrEUuUAEeKSDdPH_NXL-g" points="[100, 200, -643984, -643984]$[100, 160, -643984, -643984]$[240, 160, -643984, -643984]$[240, 120, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jXrEVeUAEeKSDdPH_NXL-g" id="(0.37267080745341613,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jXrEVuUAEeKSDdPH_NXL-g" id="(0.045351473922902494,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_uUewIOUAEeKSDdPH_NXL-g" type="Association_Edge" source="_fMVFQOUAEeKSDdPH_NXL-g" target="_vkxIwOT_EeKSDdPH_NXL-g" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_uUfXMOUAEeKSDdPH_NXL-g" visible="false" type="Association_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_m_jEkK6DEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_uUfXMeUAEeKSDdPH_NXL-g" y="-20"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_uUfXMuUAEeKSDdPH_NXL-g" visible="false" type="Association_NameLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_nAL9wK6DEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_uUfXM-UAEeKSDdPH_NXL-g" y="20"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_uUf-QOUAEeKSDdPH_NXL-g" visible="false" type="Association_TargetRoleLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_nAffwK6DEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_uUf-QeUAEeKSDdPH_NXL-g" x="14" y="-20"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_uUf-QuUAEeKSDdPH_NXL-g" type="Association_SourceRoleLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_nAyasK6DEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_uUf-Q-UAEeKSDdPH_NXL-g" x="-4" y="27"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_uUf-ROUAEeKSDdPH_NXL-g" visible="false" type="Association_SourceMultiplicityLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_nA7koK6DEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_uUf-ReUAEeKSDdPH_NXL-g" x="14" y="20"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_uUf-RuUAEeKSDdPH_NXL-g" type="Association_TargetMultiplicityLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_nBFVoK6DEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_uUf-R-UAEeKSDdPH_NXL-g" x="-13" y="-20"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_uUewIeUAEeKSDdPH_NXL-g" fontName="Segoe UI"/>
-      <element xmi:type="uml:Association" href="layers.uml#_uTre4OUAEeKSDdPH_NXL-g"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_uUewIuUAEeKSDdPH_NXL-g" points="[200, 221, -643984, -643984]$[262, 219, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uUohIOUAEeKSDdPH_NXL-g" id="(1.0,0.39603960396039606)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uUohIeUAEeKSDdPH_NXL-g" id="(0.0,0.39603960396039606)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_UJZI8O-YEeK0p4PkXjd-_Q" type="Generalization_Edge" source="_Rn740O-YEeK0p4PkXjd-_Q" target="_tBcQYOT_EeKSDdPH_NXL-g" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_UJZI8--YEeK0p4PkXjd-_Q" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="__2N4oK6CEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_UJZI9O-YEeK0p4PkXjd-_Q" x="1" y="39"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_UJZI8e-YEeK0p4PkXjd-_Q" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_UJAucO-YEeK0p4PkXjd-_Q"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UJZI8u-YEeK0p4PkXjd-_Q" points="[440, 570, -643984, -643984]$[428, 498, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UJfPkO-YEeK0p4PkXjd-_Q" id="(0.4,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UJfPke-YEeK0p4PkXjd-_Q" id="(0.7468879668049793,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_ikHGEO-YEeK0p4PkXjd-_Q" type="Generalization_Edge" source="_ZHO78O-YEeK0p4PkXjd-_Q" target="_ruaiQOT_EeKSDdPH_NXL-g" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_ikHGE--YEeK0p4PkXjd-_Q" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_gWqsEK6DEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_ikHGFO-YEeK0p4PkXjd-_Q" x="-1" y="39"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_ikHGEe-YEeK0p4PkXjd-_Q" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_ijurkO-YEeK0p4PkXjd-_Q"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ikHGEu-YEeK0p4PkXjd-_Q" points="[500, 174, -643984, -643984]$[520, 129, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ikNMsO-YEeK0p4PkXjd-_Q" id="(0.5673758865248227,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ikNMse-YEeK0p4PkXjd-_Q" id="(0.6349206349206349,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_UKjbAO-iEeK0p4PkXjd-_Q" type="Generalization_Edge" source="_Q7FOUO-iEeK0p4PkXjd-_Q" target="_tBcQYOT_EeKSDdPH_NXL-g" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_UKjbA--iEeK0p4PkXjd-_Q" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="__2haoK6CEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_UKjbBO-iEeK0p4PkXjd-_Q" x="-1" y="39"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_UKjbAe-iEeK0p4PkXjd-_Q" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_UKLAgO-iEeK0p4PkXjd-_Q"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UKjbAu-iEeK0p4PkXjd-_Q" points="[580, 580, -643984, -643984]$[580, 540, -643984, -643984]$[480, 540, -643984, -643984]$[420, 501, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UKjbBe-iEeK0p4PkXjd-_Q" id="(0.4,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UKjbBu-iEeK0p4PkXjd-_Q" id="(0.9128630705394191,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_VIS1oO-iEeK0p4PkXjd-_Q" type="Generalization_Edge" source="_Ot3I0O-iEeK0p4PkXjd-_Q" target="_ruaiQOT_EeKSDdPH_NXL-g" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_VIY8QO-iEeK0p4PkXjd-_Q" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_gW-OEK6DEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_VIY8Qe-iEeK0p4PkXjd-_Q" y="39"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_VIS1oe-iEeK0p4PkXjd-_Q" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_VH6bIO-iEeK0p4PkXjd-_Q"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VIS1ou-iEeK0p4PkXjd-_Q" points="[720, 180, -643984, -643984]$[720, 160, -643984, -643984]$[640, 160, -643984, -643984]$[640, 120, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VId0wO-iEeK0p4PkXjd-_Q" id="(0.7453416149068323,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VId0we-iEeK0p4PkXjd-_Q" id="(0.9523809523809523,1.0)"/>
-    </edges>
   </notation:Diagram>
   <notation:Diagram xmi:id="_UCFqMO3vEeKwLp35IbAIig" type="PapyrusUMLClassDiagram" name="PropertySetter" measurementUnit="Pixel">
     <children xmi:type="notation:Shape" xmi:id="_aL5hEO3vEeKwLp35IbAIig" type="Class_Shape" fontName="Segoe UI" lineColor="0">
@@ -5602,76 +4586,6 @@
       <element xmi:type="uml:Class" href="layers.uml#_-vaacNa7EeKPiuTfpuvqHA"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_28aOse5VEeK0p4PkXjd-_Q" x="940" y="440" width="101" height="101"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_R-02sO5XEeK0p4PkXjd-_Q" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_R-02su5XEeK0p4PkXjd-_Q" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_R-02s-5XEeK0p4PkXjd-_Q" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_R-02tO5XEeK0p4PkXjd-_Q" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_R-02te5XEeK0p4PkXjd-_Q" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_R-02tu5XEeK0p4PkXjd-_Q" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_R-02t-5XEeK0p4PkXjd-_Q" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_R-02uO5XEeK0p4PkXjd-_Q" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_R-02ue5XEeK0p4PkXjd-_Q" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_R-02uu5XEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_R-02u-5XEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_R-02vO5XEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_R-02ve5XEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_R-02vu5XEeK0p4PkXjd-_Q" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_R-02v-5XEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_R-02wO5XEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_R-02we5XEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_R-02wu5XEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_R-02w-5XEeK0p4PkXjd-_Q" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_R-02xO5XEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_R-02xe5XEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_R-02xu5XEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_R-02x-5XEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LYnHKa5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LYnHKq5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_R-WVkO5XEeK0p4PkXjd-_Q"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_R-02se5XEeK0p4PkXjd-_Q" x="40" y="640" width="101" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_UfT2cO5XEeK0p4PkXjd-_Q" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UfT2cu5XEeK0p4PkXjd-_Q" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_UfT2c-5XEeK0p4PkXjd-_Q" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UfT2dO5XEeK0p4PkXjd-_Q" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_UfT2de5XEeK0p4PkXjd-_Q" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UfT2du5XEeK0p4PkXjd-_Q" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_UfT2d-5XEeK0p4PkXjd-_Q" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_UfT2eO5XEeK0p4PkXjd-_Q" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_UfT2ee5XEeK0p4PkXjd-_Q" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_UfT2eu5XEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_UfT2e-5XEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_UfT2fO5XEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UfT2fe5XEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_UfT2fu5XEeK0p4PkXjd-_Q" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_UfT2f-5XEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_UfT2gO5XEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_UfT2ge5XEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UfT2gu5XEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_UfT2g-5XEeK0p4PkXjd-_Q" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_UfT2hO5XEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_UfT2he5XEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_UfT2hu5XEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UfT2h-5XEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LYnuMK5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LYnuMa5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_Ue7b8O5XEeK0p4PkXjd-_Q"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UfT2ce5XEeK0p4PkXjd-_Q" x="320" y="640" width="121" height="101"/>
-    </children>
     <children xmi:type="notation:Shape" xmi:id="_JSk6cO5mEeK0p4PkXjd-_Q" type="Class_Shape" fontName="Segoe UI" lineColor="0">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_JSk6cu5mEeK0p4PkXjd-_Q" source="ShadowFigure">
         <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_JSk6c-5mEeK0p4PkXjd-_Q" key="ShadowFigure_Value" value="false"/>
@@ -5746,154 +4660,6 @@
       <element xmi:type="uml:Class" href="layers.uml#_-z_6YO5zEeK0p4PkXjd-_Q"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-0YU4e5zEeK0p4PkXjd-_Q" x="800" y="640" width="101" height="101"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_JhQv0O-cEeK0p4PkXjd-_Q" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_JhQv0u-cEeK0p4PkXjd-_Q" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_JhQv0--cEeK0p4PkXjd-_Q" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_JhQv1O-cEeK0p4PkXjd-_Q" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_JhQv1e-cEeK0p4PkXjd-_Q" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_JhQv1u-cEeK0p4PkXjd-_Q" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_JhQv1--cEeK0p4PkXjd-_Q" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_JhQv2O-cEeK0p4PkXjd-_Q" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_JhQv2e-cEeK0p4PkXjd-_Q" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_JhQv2u-cEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_JhQv2--cEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_JhQv3O-cEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JhQv3e-cEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_JhQv3u-cEeK0p4PkXjd-_Q" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_JhQv3--cEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_JhQv4O-cEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_JhQv4e-cEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JhQv4u-cEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_JhQv4--cEeK0p4PkXjd-_Q" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_JhQv5O-cEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_JhQv5e-cEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_JhQv5u-cEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JhQv5--cEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LYnuNq5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LYnuN65qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_JgyOsO-cEeK0p4PkXjd-_Q"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JhQv0e-cEeK0p4PkXjd-_Q" x="180" y="640" width="101" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_GwJEUO-iEeK0p4PkXjd-_Q" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_GwJEUu-iEeK0p4PkXjd-_Q" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GwJEU--iEeK0p4PkXjd-_Q" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_GwJEVO-iEeK0p4PkXjd-_Q" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GwJEVe-iEeK0p4PkXjd-_Q" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_GwJEVu-iEeK0p4PkXjd-_Q" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GwJEV--iEeK0p4PkXjd-_Q" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_GwJEWO-iEeK0p4PkXjd-_Q" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_GwJEWe-iEeK0p4PkXjd-_Q" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_GwJEWu-iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_GwJEW--iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_GwJEXO-iEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GwJEXe-iEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_GwJEXu-iEeK0p4PkXjd-_Q" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_GwJEX--iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_GwJEYO-iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_GwJEYe-iEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GwJEYu-iEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_GwJEY--iEeK0p4PkXjd-_Q" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_GwJEZO-iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_GwJEZe-iEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_GwJEZu-iEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GwJEZ--iEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LYnuOK5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LYnuOa5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_Gvwp0O-iEeK0p4PkXjd-_Q"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GwJEUe-iEeK0p4PkXjd-_Q" x="480" y="640" width="121" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_xaib4O-lEeK0p4PkXjd-_Q" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_xajqAO-lEeK0p4PkXjd-_Q" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_xak4IO-lEeK0p4PkXjd-_Q" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_xak4Ie-lEeK0p4PkXjd-_Q" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_xak4Iu-lEeK0p4PkXjd-_Q" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_xak4I--lEeK0p4PkXjd-_Q" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_xak4JO-lEeK0p4PkXjd-_Q" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_xak4Je-lEeK0p4PkXjd-_Q" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_xalfMO-lEeK0p4PkXjd-_Q" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_xalfMe-lEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_xalfMu-lEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_xalfM--lEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xalfNO-lEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_xalfNe-lEeK0p4PkXjd-_Q" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_xalfNu-lEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_xalfN--lEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_xalfOO-lEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xalfOe-lEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_xalfOu-lEeK0p4PkXjd-_Q" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_xalfO--lEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_xalfPO-lEeK0p4PkXjd-_Q"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_xalfPe-lEeK0p4PkXjd-_Q"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xalfPu-lEeK0p4PkXjd-_Q"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LYnuOq5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LYnuO65qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_xZ-bMO-lEeK0p4PkXjd-_Q"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xaib4e-lEeK0p4PkXjd-_Q" x="640" y="640" width="121" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_XyHrUBZ1EeOZwp016gnCFQ" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XyHrUhZ1EeOZwp016gnCFQ" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_XyHrUxZ1EeOZwp016gnCFQ" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XyHrVBZ1EeOZwp016gnCFQ" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_XyHrVRZ1EeOZwp016gnCFQ" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XyHrVhZ1EeOZwp016gnCFQ" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_XyHrVxZ1EeOZwp016gnCFQ" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_XyHrWBZ1EeOZwp016gnCFQ" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_XyHrWRZ1EeOZwp016gnCFQ" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_XyHrWhZ1EeOZwp016gnCFQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_XyHrWxZ1EeOZwp016gnCFQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_XyHrXBZ1EeOZwp016gnCFQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XyHrXRZ1EeOZwp016gnCFQ"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_XyHrXhZ1EeOZwp016gnCFQ" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_XyHrXxZ1EeOZwp016gnCFQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_XyHrYBZ1EeOZwp016gnCFQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_XyHrYRZ1EeOZwp016gnCFQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XyHrYhZ1EeOZwp016gnCFQ"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_XyHrYxZ1EeOZwp016gnCFQ" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_XyHrZBZ1EeOZwp016gnCFQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_XyHrZRZ1EeOZwp016gnCFQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_XyHrZhZ1EeOZwp016gnCFQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XyHrZxZ1EeOZwp016gnCFQ"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LYnuPK5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LYnuPa5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_Xxh1cBZ1EeOZwp016gnCFQ"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XyHrURZ1EeOZwp016gnCFQ" x="940" y="640" width="121" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_LYqxgK5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_LYqxga5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LYqxg65qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:Class" href="layers.uml#_JSMf8O5mEeK0p4PkXjd-_Q"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LYqxgq5qEeeUVoYywick3g" x="200" y="100"/>
-    </children>
     <children xmi:type="notation:Shape" xmi:id="_DFt10M-FEeep-sEmK3jrig" type="Class_Shape">
       <children xmi:type="notation:DecorationNode" xmi:id="_DF2YsM-FEeep-sEmK3jrig" type="Class_NameLabel"/>
       <children xmi:type="notation:DecorationNode" xmi:id="_DF2Ysc-FEeep-sEmK3jrig" type="Class_FloatingNameLabel">
@@ -5920,11 +4686,45 @@
       <element xmi:type="uml:Class" href="layers.uml#_DEE3EM-FEeep-sEmK3jrig"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DFt10c-FEeep-sEmK3jrig" x="1100" y="640"/>
     </children>
+    <children xmi:type="notation:Shape" xmi:id="_sA3w8KU6EeiVgsJY_OrQeg" type="Class_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_sA3w8qU6EeiVgsJY_OrQeg" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_sA3w86U6EeiVgsJY_OrQeg" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_sA3w9KU6EeiVgsJY_OrQeg" y="15"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_sA3w9aU6EeiVgsJY_OrQeg" type="Class_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_sA3w9qU6EeiVgsJY_OrQeg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_sA3w96U6EeiVgsJY_OrQeg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_sA3w-KU6EeiVgsJY_OrQeg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sA3w-aU6EeiVgsJY_OrQeg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_sA3w-qU6EeiVgsJY_OrQeg" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_sA3w-6U6EeiVgsJY_OrQeg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_sA3w_KU6EeiVgsJY_OrQeg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_sA3w_aU6EeiVgsJY_OrQeg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sA3w_qU6EeiVgsJY_OrQeg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_sA3w_6U6EeiVgsJY_OrQeg" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_sA3xAKU6EeiVgsJY_OrQeg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_sA3xAaU6EeiVgsJY_OrQeg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_sA3xAqU6EeiVgsJY_OrQeg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sA3xA6U6EeiVgsJY_OrQeg"/>
+      </children>
+      <element xmi:type="uml:Class" href="layers.uml#_0OlN0HVZEeipp8d5W3Vl9g"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sA3w8aU6EeiVgsJY_OrQeg" x="560" y="640" width="141" height="101"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_Tu0X0b2jEeiOA5QgX2jOSg" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_Tu0X0r2jEeiOA5QgX2jOSg"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Tu0X1L2jEeiOA5QgX2jOSg" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="layers.uml#_JSMf8O5mEeK0p4PkXjd-_Q"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Tu0X072jEeiOA5QgX2jOSg" x="920" y="200"/>
+    </children>
     <styles xmi:type="notation:DiagramStyle" xmi:id="_UCFqMe3vEeKwLp35IbAIig"/>
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_LYnHIK5qEeeUVoYywick3g" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
       <owner xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     </styles>
-    <styles xmi:type="notation:StringValueStyle" xmi:id="_LYsmsK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.3.0"/>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_LYsmsK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <element xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     <edges xmi:type="notation:Connector" xmi:id="_aMR7kO3vEeKwLp35IbAIig" type="Association_Edge" source="_aL5hEO3vEeKwLp35IbAIig" target="_aMFuUO3vEeKwLp35IbAIig" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_aMR7k-3vEeKwLp35IbAIig" visible="false" type="Association_StereotypeLabel">
@@ -6019,34 +4819,6 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4D_h0O5VEeK0p4PkXjd-_Q" id="(1.0,0.39603960396039606)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4D_h0e5VEeK0p4PkXjd-_Q" id="(0.0,0.39603960396039606)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_Y9OMMO5XEeK0p4PkXjd-_Q" type="Generalization_Edge" source="_R-02sO5XEeK0p4PkXjd-_Q" target="_fyt_oO3vEeKwLp35IbAIig" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5dnNcNW2EeeK7fKfT_QGQw" source="PapyrusCSSForceValue">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5dnNcdW2EeeK7fKfT_QGQw" key="routing" value="true"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_Y9US0O5XEeK0p4PkXjd-_Q" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_4hUVYK6HEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_Y9US0e5XEeK0p4PkXjd-_Q" x="-8" y="77"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_Y9OMMe5XEeK0p4PkXjd-_Q" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_Y8pkcO5XEeK0p4PkXjd-_Q"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Y9OMMu5XEeK0p4PkXjd-_Q" points="[80, 640, -643984, -643984]$[80, 600, -643984, -643984]$[540, 600, -643984, -643984]$[540, 541, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Y9US0u5XEeK0p4PkXjd-_Q" id="(0.39603960396039606,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Y9US0-5XEeK0p4PkXjd-_Q" id="(0.49916805324459235,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_ZyK3MO5XEeK0p4PkXjd-_Q" type="Generalization_Edge" source="_UfT2cO5XEeK0p4PkXjd-_Q" target="_fyt_oO3vEeKwLp35IbAIig" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5dmmYtW2EeeK7fKfT_QGQw" source="PapyrusCSSForceValue">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5dmmY9W2EeeK7fKfT_QGQw" key="routing" value="true"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_ZyK3M-5XEeK0p4PkXjd-_Q" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_5VWaYK6HEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_ZyK3NO5XEeK0p4PkXjd-_Q" x="-167" y="101"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_ZyK3Me5XEeK0p4PkXjd-_Q" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_ZxycsO5XEeK0p4PkXjd-_Q"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZyK3Mu5XEeK0p4PkXjd-_Q" points="[400, 640, -643984, -643984]$[400, 600, -643984, -643984]$[540, 600, -643984, -643984]$[540, 541, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZyXEcO5XEeK0p4PkXjd-_Q" id="(0.6611570247933884,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZyXEce5XEeK0p4PkXjd-_Q" id="(0.49916805324459235,1.0)"/>
-    </edges>
     <edges xmi:type="notation:Connector" xmi:id="_QgWvwO5mEeK0p4PkXjd-_Q" type="Association_Edge" source="_JSk6cO5mEeK0p4PkXjd-_Q" target="_fyt_oO3vEeKwLp35IbAIig" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_QgX94O5mEeK0p4PkXjd-_Q" visible="false" type="Association_StereotypeLabel">
         <styles xmi:type="notation:BooleanValueStyle" xmi:id="_kKC6QK6HEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
@@ -6123,72 +4895,6 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_CpSw8O50EeK0p4PkXjd-_Q" id="(0.594059405940594,0.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_CpSw8e50EeK0p4PkXjd-_Q" id="(0.49916805324459235,1.0)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_QK9AoO-cEeK0p4PkXjd-_Q" type="Generalization_Edge" source="_JhQv0O-cEeK0p4PkXjd-_Q" target="_fyt_oO3vEeKwLp35IbAIig" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5dmmZNW2EeeK7fKfT_QGQw" source="PapyrusCSSForceValue">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5dmmZdW2EeeK7fKfT_QGQw" key="routing" value="true"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_QK-OwO-cEeK0p4PkXjd-_Q" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_5BY8kK6HEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_QK-Owe-cEeK0p4PkXjd-_Q" x="-16" y="75"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_QK9nsO-cEeK0p4PkXjd-_Q" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_QKhi0O-cEeK0p4PkXjd-_Q"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_QK9nse-cEeK0p4PkXjd-_Q" points="[220, 640, -643984, -643984]$[220, 600, -643984, -643984]$[540, 600, -643984, -643984]$[540, 541, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_QLCgMO-cEeK0p4PkXjd-_Q" id="(0.39603960396039606,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_QLCgMe-cEeK0p4PkXjd-_Q" id="(0.49916805324459235,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_LuSZUO-iEeK0p4PkXjd-_Q" type="Generalization_Edge" source="_GwJEUO-iEeK0p4PkXjd-_Q" target="_fyt_oO3vEeKwLp35IbAIig" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5dmmYNW2EeeK7fKfT_QGQw" source="PapyrusCSSForceValue">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5dmmYdW2EeeK7fKfT_QGQw" key="routing" value="true"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LuSZU--iEeK0p4PkXjd-_Q" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_520IsK6HEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LuSZVO-iEeK0p4PkXjd-_Q" x="-159" y="64"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_LuSZUe-iEeK0p4PkXjd-_Q" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_LuAFcO-iEeK0p4PkXjd-_Q"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LuSZUu-iEeK0p4PkXjd-_Q"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LuYf8O-iEeK0p4PkXjd-_Q" id="(0.49586776859504134,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LuYf8e-iEeK0p4PkXjd-_Q" id="(0.4825291181364393,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_02FVsO-lEeK0p4PkXjd-_Q" type="Generalization_Edge" source="_xaib4O-lEeK0p4PkXjd-_Q" target="_fyt_oO3vEeKwLp35IbAIig" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5dl_VNW2EeeK7fKfT_QGQw" source="PapyrusCSSForceValue">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5dl_VdW2EeeK7fKfT_QGQw" key="routing" value="true"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_02LcUO-lEeK0p4PkXjd-_Q" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_wso4IK6HEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_02LcUe-lEeK0p4PkXjd-_Q" x="-4" y="32"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_02FVse-lEeK0p4PkXjd-_Q" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_01zB0O-lEeK0p4PkXjd-_Q"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_02FVsu-lEeK0p4PkXjd-_Q" points="[680, 640, -643984, -643984]$[680, 600, -643984, -643984]$[540, 600, -643984, -643984]$[540, 541, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_02LcUu-lEeK0p4PkXjd-_Q" id="(0.3305785123966942,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_02LcU--lEeK0p4PkXjd-_Q" id="(0.49916805324459235,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_a9MgMBZ1EeOZwp016gnCFQ" type="Generalization_Edge" source="_XyHrUBZ1EeOZwp016gnCFQ" target="_fyt_oO3vEeKwLp35IbAIig" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5dkxMNW2EeeK7fKfT_QGQw" source="PapyrusCSSForceValue">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5dlYQNW2EeeK7fKfT_QGQw" key="routing" value="true"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_a9MgMxZ1EeOZwp016gnCFQ" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_wTHk4K6HEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_a9MgNBZ1EeOZwp016gnCFQ" x="-121" y="43"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_a9MgMRZ1EeOZwp016gnCFQ" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_a8mqUBZ1EeOZwp016gnCFQ"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_a9MgMhZ1EeOZwp016gnCFQ" points="[1000, 640, -643984, -643984]$[1000, 600, -643984, -643984]$[540, 600, -643984, -643984]$[540, 541, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_a9MgNRZ1EeOZwp016gnCFQ" id="(0.49586776859504134,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_a9MgNhZ1EeOZwp016gnCFQ" id="(0.49916805324459235,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_LYqxhK5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_JSk6cO5mEeK0p4PkXjd-_Q" target="_LYqxgK5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_LYqxha5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LYqxia5qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:Class" href="layers.uml#_JSMf8O5mEeK0p4PkXjd-_Q"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LYqxhq5qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LYqxh65qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LYqxiK5qEeeUVoYywick3g"/>
-    </edges>
     <edges xmi:type="notation:Connector" xmi:id="_FGlhYM-FEeep-sEmK3jrig" type="Generalization_Edge" source="_DFt10M-FEeep-sEmK3jrig" target="_fyt_oO3vEeKwLp35IbAIig">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5dl_UNW2EeeK7fKfT_QGQw" source="PapyrusCSSForceValue">
         <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5dl_UdW2EeeK7fKfT_QGQw" key="routing" value="true"/>
@@ -6203,55 +4909,29 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FIcikM-FEeep-sEmK3jrig" id="(0.6837606837606838,0.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FIcikc-FEeep-sEmK3jrig" id="(0.49916805324459235,1.0)"/>
     </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_shDs4KU6EeiVgsJY_OrQeg" type="Generalization_Edge" source="_sA3w8KU6EeiVgsJY_OrQeg" target="_fyt_oO3vEeKwLp35IbAIig">
+      <children xmi:type="notation:DecorationNode" xmi:id="_shDs46U6EeiVgsJY_OrQeg" type="Generalization_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_tq5p0KU6EeiVgsJY_OrQeg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_shDs5KU6EeiVgsJY_OrQeg" y="39"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_shDs4aU6EeiVgsJY_OrQeg"/>
+      <element xmi:type="uml:Generalization" href="layers.uml#_0OlN0XVZEeipp8d5W3Vl9g"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_shDs4qU6EeiVgsJY_OrQeg" points="[640, 654, -643984, -643984]$[640, 600, -643984, -643984]$[540, 600, -643984, -643984]$[540, 541, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tqZ6kKU6EeiVgsJY_OrQeg" id="(0.5673758865248227,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tNU9AKU6EeiVgsJY_OrQeg" id="(0.49916805324459235,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_Tu0X1b2jEeiOA5QgX2jOSg" type="StereotypeCommentLink" source="_JSk6cO5mEeK0p4PkXjd-_Q" target="_Tu0X0b2jEeiOA5QgX2jOSg">
+      <styles xmi:type="notation:FontStyle" xmi:id="_Tu0X1r2jEeiOA5QgX2jOSg"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Tu0X2r2jEeiOA5QgX2jOSg" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="layers.uml#_JSMf8O5mEeK0p4PkXjd-_Q"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Tu0X172jEeiOA5QgX2jOSg" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Tu0X2L2jEeiOA5QgX2jOSg"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Tu0X2b2jEeiOA5QgX2jOSg"/>
+    </edges>
   </notation:Diagram>
   <notation:Diagram xmi:id="_Up8U8P91EeKlldop5b2mtw" type="PapyrusUMLClassDiagram" name="LayerOperators" measurementUnit="Pixel">
-    <children xmi:type="notation:Shape" xmi:id="_mqw8QAkcEeOnVqX9VcfeWQ" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_mq3C4AkcEeOnVqX9VcfeWQ" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mq3C4QkcEeOnVqX9VcfeWQ" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_mq9JgAkcEeOnVqX9VcfeWQ" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mq9JgQkcEeOnVqX9VcfeWQ" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_mq9JggkcEeOnVqX9VcfeWQ" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mq9JgwkcEeOnVqX9VcfeWQ" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_mq9JhAkcEeOnVqX9VcfeWQ" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_mq9JhQkcEeOnVqX9VcfeWQ" type="Class_AttributeCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_FKWlwAw_EeOjX-JbGFEH7w" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#__XEYgAw-EeOjX-JbGFEH7w"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_FKWlwQw_EeOjX-JbGFEH7w" x="85" y="11"/>
-        </children>
-        <styles xmi:type="notation:TitleStyle" xmi:id="_mq9JhgkcEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_mq9JhwkcEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_mq9JiAkcEeOnVqX9VcfeWQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mq9JiQkcEeOnVqX9VcfeWQ"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_mq9JigkcEeOnVqX9VcfeWQ" type="Class_OperationCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_Dh-88AxDEeOjX-JbGFEH7w" type="Operation_ClassOperationLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Operation" href="layers.uml#_Dhl7YAxDEeOjX-JbGFEH7w"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_Dh-88QxDEeOjX-JbGFEH7w"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_0VwJkA3SEeOjX-JbGFEH7w" type="Operation_ClassOperationLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Operation" href="layers.uml#_0VaLUA3SEeOjX-JbGFEH7w"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_0VwJkQ3SEeOjX-JbGFEH7w"/>
-        </children>
-        <styles xmi:type="notation:TitleStyle" xmi:id="_mq9JiwkcEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_mq9JjAkcEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_mq9JjQkcEeOnVqX9VcfeWQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mq9JjgkcEeOnVqX9VcfeWQ"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_mq9JjwkcEeOnVqX9VcfeWQ" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_mq9JkAkcEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_mq9JkQkcEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_mq9JkgkcEeOnVqX9VcfeWQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mq9JkwkcEeOnVqX9VcfeWQ"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LZeCwa5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LZeCwq5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_WuVRUNjjEeKQqZMBCFd2Uw"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mqw8QQkcEeOnVqX9VcfeWQ" x="40" y="360" width="261" height="141"/>
-    </children>
     <children xmi:type="notation:Shape" xmi:id="_GLILsAkdEeOnVqX9VcfeWQ" type="Class_Shape" fontName="Segoe UI" lineColor="0">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_GLILsgkdEeOnVqX9VcfeWQ" source="ShadowFigure">
         <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GLILswkdEeOnVqX9VcfeWQ" key="ShadowFigure_Value" value="false"/>
@@ -6398,6 +5078,18 @@
           <element xmi:type="uml:Property" href="layers.uml#_8J3zEAklEeOnVqX9VcfeWQ"/>
           <layoutConstraint xmi:type="notation:Location" xmi:id="_AmaP0QkmEeOnVqX9VcfeWQ" x="78" y="14"/>
         </children>
+        <children xmi:type="notation:Shape" xmi:id="_Of3mgLy6EeiViahAib_JMw" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="layers.uml#_MI1TILy5EeiViahAib_JMw"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_Of3mgby6EeiViahAib_JMw"/>
+        </children>
+        <children xmi:type="notation:Shape" xmi:id="_OgdcYLy6EeiViahAib_JMw" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="layers.uml#_SdHUoLy5EeiViahAib_JMw"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_OgdcYby6EeiViahAib_JMw"/>
+        </children>
+        <children xmi:type="notation:Shape" xmi:id="_OhNDQLy6EeiViahAib_JMw" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="layers.uml#_5VRRALy5EeiViahAib_JMw"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_OhNDQby6EeiViahAib_JMw"/>
+        </children>
         <styles xmi:type="notation:TitleStyle" xmi:id="_wlZj-gkdEeOnVqX9VcfeWQ"/>
         <styles xmi:type="notation:SortingStyle" xmi:id="_wlZj-wkdEeOnVqX9VcfeWQ"/>
         <styles xmi:type="notation:FilteringStyle" xmi:id="_wlZj_AkdEeOnVqX9VcfeWQ"/>
@@ -6408,6 +5100,10 @@
           <element xmi:type="uml:Operation" href="layers.uml#_WKdZYAkhEeOnVqX9VcfeWQ"/>
           <layoutConstraint xmi:type="notation:Location" xmi:id="_oF32EQkhEeOnVqX9VcfeWQ" x="77" y="23"/>
         </children>
+        <children xmi:type="notation:Shape" xmi:id="_PTjGMLy6EeiViahAib_JMw" type="Operation_ClassOperationLabel">
+          <element xmi:type="uml:Operation" href="layers.uml#_-H7uwLy5EeiViahAib_JMw"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_PTjGMby6EeiViahAib_JMw"/>
+        </children>
         <styles xmi:type="notation:TitleStyle" xmi:id="_wlZj_wkdEeOnVqX9VcfeWQ"/>
         <styles xmi:type="notation:SortingStyle" xmi:id="_wlZkAAkdEeOnVqX9VcfeWQ"/>
         <styles xmi:type="notation:FilteringStyle" xmi:id="_wlZkAQkdEeOnVqX9VcfeWQ"/>
@@ -6423,42 +5119,7 @@
         <layoutConstraint xmi:type="notation:Location" xmi:id="_LZep1a5qEeeUVoYywick3g" y="5"/>
       </children>
       <element xmi:type="uml:Class" href="layers.uml#_wk7C0AkdEeOnVqX9VcfeWQ"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wlZj8QkdEeOnVqX9VcfeWQ" x="1160" y="360" width="261" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_G-_bIAkpEeOnVqX9VcfeWQ" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_G-_bIgkpEeOnVqX9VcfeWQ" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_G-_bIwkpEeOnVqX9VcfeWQ" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_G-_bJAkpEeOnVqX9VcfeWQ" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_G-_bJQkpEeOnVqX9VcfeWQ" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_G-_bJgkpEeOnVqX9VcfeWQ" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_G-_bJwkpEeOnVqX9VcfeWQ" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_G-_bKAkpEeOnVqX9VcfeWQ" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_G-_bKQkpEeOnVqX9VcfeWQ" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_G-_bKgkpEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_G-_bKwkpEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_G-_bLAkpEeOnVqX9VcfeWQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G-_bLQkpEeOnVqX9VcfeWQ"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_G-_bLgkpEeOnVqX9VcfeWQ" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_G-_bLwkpEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_G-_bMAkpEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_G-_bMQkpEeOnVqX9VcfeWQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G-_bMgkpEeOnVqX9VcfeWQ"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_G-_bMwkpEeOnVqX9VcfeWQ" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_G-_bNAkpEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_G-_bNQkpEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_G-_bNgkpEeOnVqX9VcfeWQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G-_bNwkpEeOnVqX9VcfeWQ"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LZep1q5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LZep165qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_G-g6AAkpEeOnVqX9VcfeWQ"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G-_bIQkpEeOnVqX9VcfeWQ" x="1160" y="560" width="141" height="121"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wlZj8QkdEeOnVqX9VcfeWQ" x="1160" y="360" width="261" height="181"/>
     </children>
     <children xmi:type="notation:Shape" xmi:id="_ELjJgAkxEeOnVqX9VcfeWQ" type="Class_Shape" fontName="Segoe UI" lineColor="0">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ELjJggkxEeOnVqX9VcfeWQ" source="ShadowFigure">
@@ -6530,201 +5191,50 @@
       <element xmi:type="uml:Class" href="layers.uml#_Hxsw0AkxEeOnVqX9VcfeWQ"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HyFLUQkxEeOnVqX9VcfeWQ" x="660" y="560" width="221" height="101"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_muS64AnsEeOnVqX9VcfeWQ" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_muS64gnsEeOnVqX9VcfeWQ" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_muS64wnsEeOnVqX9VcfeWQ" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_muS65AnsEeOnVqX9VcfeWQ" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_muS65QnsEeOnVqX9VcfeWQ" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_muS65gnsEeOnVqX9VcfeWQ" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_muS65wnsEeOnVqX9VcfeWQ" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_muS66AnsEeOnVqX9VcfeWQ" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_muS66QnsEeOnVqX9VcfeWQ" type="Class_AttributeCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_zQxkAAnsEeOnVqX9VcfeWQ" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_yEySAAnsEeOnVqX9VcfeWQ"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_zQxkAQnsEeOnVqX9VcfeWQ" x="59" y="4"/>
+    <children xmi:type="notation:Shape" xmi:id="_dBdTMLUQEeiPJeGnZrmqWw" type="Class_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_dBd6QLUQEeiPJeGnZrmqWw" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_dBd6QbUQEeiPJeGnZrmqWw" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_dBd6QrUQEeiPJeGnZrmqWw" y="15"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_dBd6Q7UQEeiPJeGnZrmqWw" type="Class_AttributeCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_leZDQLUQEeiPJeGnZrmqWw" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="layers.uml#__XEYgAw-EeOjX-JbGFEH7w"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_leZDQbUQEeiPJeGnZrmqWw"/>
         </children>
-        <children xmi:type="notation:Shape" xmi:id="_XTyfQAntEeOnVqX9VcfeWQ" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_XTdvIAntEeOnVqX9VcfeWQ"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_XTyfQQntEeOnVqX9VcfeWQ"/>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_dBd6RLUQEeiPJeGnZrmqWw"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_dBd6RbUQEeiPJeGnZrmqWw"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_dBd6RrUQEeiPJeGnZrmqWw"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dBd6R7UQEeiPJeGnZrmqWw"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_dBd6SLUQEeiPJeGnZrmqWw" type="Class_OperationCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_klY-sLUQEeiPJeGnZrmqWw" type="Operation_ClassOperationLabel">
+          <element xmi:type="uml:Operation" href="layers.uml#_Dhl7YAxDEeOjX-JbGFEH7w"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_klY-sbUQEeiPJeGnZrmqWw"/>
         </children>
-        <children xmi:type="notation:Shape" xmi:id="_uNebYA3gEeOjX-JbGFEH7w" type="Property_ClassAttributeLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Property" href="layers.uml#_XwmlsA3gEeOjX-JbGFEH7w"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_uNebYQ3gEeOjX-JbGFEH7w" x="54" y="45"/>
+        <children xmi:type="notation:Shape" xmi:id="_kl58ELUQEeiPJeGnZrmqWw" type="Operation_ClassOperationLabel">
+          <element xmi:type="uml:Operation" href="layers.uml#_0VaLUA3SEeOjX-JbGFEH7w"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_kl58EbUQEeiPJeGnZrmqWw"/>
         </children>
-        <styles xmi:type="notation:TitleStyle" xmi:id="_muS66gnsEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_muS66wnsEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_muS67AnsEeOnVqX9VcfeWQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_muS67QnsEeOnVqX9VcfeWQ"/>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_dBd6SbUQEeiPJeGnZrmqWw"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_dBd6SrUQEeiPJeGnZrmqWw"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_dBd6S7UQEeiPJeGnZrmqWw"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dBd6TLUQEeiPJeGnZrmqWw"/>
       </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_muS67gnsEeOnVqX9VcfeWQ" type="Class_OperationCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_vb3hIA3gEeOjX-JbGFEH7w" type="Operation_ClassOperationLabel" fontName="Segoe UI" lineColor="0">
-          <element xmi:type="uml:Operation" href="layers.uml#_vbiJ8A3gEeOjX-JbGFEH7w"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_vb3hIQ3gEeOjX-JbGFEH7w"/>
-        </children>
-        <styles xmi:type="notation:TitleStyle" xmi:id="_muS67wnsEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_muS68AnsEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_muS68QnsEeOnVqX9VcfeWQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_muS68gnsEeOnVqX9VcfeWQ"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_dBd6TbUQEeiPJeGnZrmqWw" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_dBd6TrUQEeiPJeGnZrmqWw"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_dBd6T7UQEeiPJeGnZrmqWw"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_dBd6ULUQEeiPJeGnZrmqWw"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dBd6UbUQEeiPJeGnZrmqWw"/>
       </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_muS68wnsEeOnVqX9VcfeWQ" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_muS69AnsEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_muS69QnsEeOnVqX9VcfeWQ"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_muS69gnsEeOnVqX9VcfeWQ"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_muS69wnsEeOnVqX9VcfeWQ"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LZep3K5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LZep3a5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_mt6gYAnsEeOnVqX9VcfeWQ"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_muS64QnsEeOnVqX9VcfeWQ" x="1360" y="560" width="221" height="121"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_G71l8AxJEeOjX-JbGFEH7w" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_G71l8gxJEeOjX-JbGFEH7w" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_G71l8wxJEeOjX-JbGFEH7w" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_G71l9AxJEeOjX-JbGFEH7w" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_G71l9QxJEeOjX-JbGFEH7w" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_G71l9gxJEeOjX-JbGFEH7w" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_G71l9wxJEeOjX-JbGFEH7w" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_G71l-AxJEeOjX-JbGFEH7w" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_G71l-QxJEeOjX-JbGFEH7w" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_G71l-gxJEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_G71l-wxJEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_G71l_AxJEeOjX-JbGFEH7w"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G71l_QxJEeOjX-JbGFEH7w"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_G71l_gxJEeOjX-JbGFEH7w" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_G71l_wxJEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_G71mAAxJEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_G71mAQxJEeOjX-JbGFEH7w"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G71mAgxJEeOjX-JbGFEH7w"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_G71mAwxJEeOjX-JbGFEH7w" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_G71mBAxJEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_G71mBQxJEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_G71mBgxJEeOjX-JbGFEH7w"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G71mBwxJEeOjX-JbGFEH7w"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LZep3q5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LZep365qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_G7XE0AxJEeOjX-JbGFEH7w"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G71l8QxJEeOjX-JbGFEH7w" x="800" y="720" width="241" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_LU3bsAxJEeOjX-JbGFEH7w" type="Class_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_LU3bsgxJEeOjX-JbGFEH7w" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LU3bswxJEeOjX-JbGFEH7w" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_LU3btAxJEeOjX-JbGFEH7w" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LU3btQxJEeOjX-JbGFEH7w" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_LU3btgxJEeOjX-JbGFEH7w" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LU3btwxJEeOjX-JbGFEH7w" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LU3buAxJEeOjX-JbGFEH7w" type="Class_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_LU3buQxJEeOjX-JbGFEH7w" type="Class_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_LU3bugxJEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_LU3buwxJEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_LU3bvAxJEeOjX-JbGFEH7w"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LU3bvQxJEeOjX-JbGFEH7w"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_LU3bvgxJEeOjX-JbGFEH7w" type="Class_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_LU3bvwxJEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_LU3bwAxJEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_LU3bwQxJEeOjX-JbGFEH7w"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LU3bwgxJEeOjX-JbGFEH7w"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="_LU3bwwxJEeOjX-JbGFEH7w" type="Class_NestedClassifierCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="_LU3bxAxJEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="_LU3bxQxJEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="_LU3bxgxJEeOjX-JbGFEH7w"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LU3bxwxJEeOjX-JbGFEH7w"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LZep4K5qEeeUVoYywick3g" type="Class_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LZep4a5qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:Class" href="layers.uml#_LUfBMAxJEeOjX-JbGFEH7w"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LU3bsQxJEeOjX-JbGFEH7w" x="520" y="720" width="241" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="__Arl4AxLEeOjX-JbGFEH7w" type="PrimitiveType_Shape" fontName="Segoe UI" lineColor="0">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="__AsM8AxLEeOjX-JbGFEH7w" source="ShadowFigure">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="__As0AAxLEeOjX-JbGFEH7w" key="ShadowFigure_Value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="__As0AQxLEeOjX-JbGFEH7w" source="displayNameLabelIcon">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="__As0AgxLEeOjX-JbGFEH7w" key="displayNameLabelIcon_value" value="false"/>
-      </eAnnotations>
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="__As0AwxLEeOjX-JbGFEH7w" source="QualifiedName">
-        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="__As0BAxLEeOjX-JbGFEH7w" key="QualifiedNameDepth" value="1000"/>
-      </eAnnotations>
-      <children xmi:type="notation:DecorationNode" xmi:id="__As0BQxLEeOjX-JbGFEH7w" type="PrimitiveType_NameLabel"/>
-      <children xmi:type="notation:BasicCompartment" xmi:id="__As0BgxLEeOjX-JbGFEH7w" type="PrimitiveType_AttributeCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="__As0BwxLEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="__As0CAxLEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="__As0CQxLEeOjX-JbGFEH7w"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="__As0CgxLEeOjX-JbGFEH7w"/>
-      </children>
-      <children xmi:type="notation:BasicCompartment" xmi:id="__AtbEAxLEeOjX-JbGFEH7w" type="PrimitiveType_OperationCompartment">
-        <styles xmi:type="notation:TitleStyle" xmi:id="__AtbEQxLEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:SortingStyle" xmi:id="__AtbEgxLEeOjX-JbGFEH7w"/>
-        <styles xmi:type="notation:FilteringStyle" xmi:id="__AtbEwxLEeOjX-JbGFEH7w"/>
-        <layoutConstraint xmi:type="notation:Bounds" xmi:id="__AtbFAxLEeOjX-JbGFEH7w"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_LZep4q5qEeeUVoYywick3g" type="PrimitiveType_FloatingNameLabel">
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LZep465qEeeUVoYywick3g" y="5"/>
-      </children>
-      <element xmi:type="uml:PrimitiveType" href="layers.uml#__ADTwAxLEeOjX-JbGFEH7w"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="__Arl4QxLEeOjX-JbGFEH7w" x="1480" y="360" width="241" height="101"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_LZjiXK5qEeeUVoYywick3g" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_LZjiXa5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LZkJYK5qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#__ADTwAxLEeOjX-JbGFEH7w"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LZjiXq5qEeeUVoYywick3g" x="200" y="100"/>
+      <element xmi:type="uml:Class" href="layers.uml#_HoKjcNjjEeKQqZMBCFd2Uw"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dBdTMbUQEeiPJeGnZrmqWw" x="80" y="360" width="261" height="141"/>
     </children>
     <styles xmi:type="notation:DiagramStyle" xmi:id="_Up8U8f91EeKlldop5b2mtw"/>
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_LZeCwK5qEeeUVoYywick3g" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
       <owner xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     </styles>
-    <styles xmi:type="notation:StringValueStyle" xmi:id="_LZl-kK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.3.0"/>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_LZl-kK5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <element xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
-    <edges xmi:type="notation:Connector" xmi:id="_KTjZoAkdEeOnVqX9VcfeWQ" type="Association_Edge" source="_mqw8QAkcEeOnVqX9VcfeWQ" target="_GLILsAkdEeOnVqX9VcfeWQ" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_KTknwAkdEeOnVqX9VcfeWQ" visible="false" type="Association_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_M1vNoK6EEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_KTlO0AkdEeOnVqX9VcfeWQ" x="1" y="-18"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_KTlO0QkdEeOnVqX9VcfeWQ" visible="false" type="Association_NameLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_M2LSgK6EEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_KTlO0gkdEeOnVqX9VcfeWQ" y="19"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_KTlO0wkdEeOnVqX9VcfeWQ" visible="false" type="Association_TargetRoleLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_M2e0gK6EEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_KTlO1AkdEeOnVqX9VcfeWQ" x="28" y="-18"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_KTlO1QkdEeOnVqX9VcfeWQ" type="Association_SourceRoleLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_M2xvcK6EEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_KTl14AkdEeOnVqX9VcfeWQ" x="-74" y="7"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_KTl14QkdEeOnVqX9VcfeWQ" visible="false" type="Association_SourceMultiplicityLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_M3EqYK6EEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_KTl14gkdEeOnVqX9VcfeWQ" x="28" y="19"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_KTl14wkdEeOnVqX9VcfeWQ" type="Association_TargetMultiplicityLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_M3XlUK6EEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_KTl15AkdEeOnVqX9VcfeWQ" x="-15" y="-13"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_KTjZoQkdEeOnVqX9VcfeWQ" fontName="Segoe UI"/>
-      <element xmi:type="uml:Association" href="layers.uml#_KSvhUAkdEeOnVqX9VcfeWQ"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_KTjZogkdEeOnVqX9VcfeWQ" points="[306, 426, -643984, -643984]$[440, 420, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_KTyqMAkdEeOnVqX9VcfeWQ" id="(1.0,0.425531914893617)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_KTyqMQkdEeOnVqX9VcfeWQ" id="(0.0,0.425531914893617)"/>
-    </edges>
     <edges xmi:type="notation:Connector" xmi:id="_X849IAkdEeOnVqX9VcfeWQ" type="Association_Edge" source="_T6PAAAkdEeOnVqX9VcfeWQ" target="_GLILsAkdEeOnVqX9VcfeWQ" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_X849IwkdEeOnVqX9VcfeWQ" visible="false" type="Association_StereotypeLabel">
         <styles xmi:type="notation:BooleanValueStyle" xmi:id="_I_q7AK6EEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
@@ -6816,18 +5326,7 @@
       <element xmi:type="uml:Association" href="layers.uml#_5x5vwAkdEeOnVqX9VcfeWQ"/>
       <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_5yYQ4gkdEeOnVqX9VcfeWQ" points="[990, 420, -643984, -643984]$[1157, 420, -643984, -643984]"/>
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5ykeIAkdEeOnVqX9VcfeWQ" id="(1.0,0.425531914893617)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5ykeIQkdEeOnVqX9VcfeWQ" id="(0.0,0.594059405940594)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_LBOhgAkpEeOnVqX9VcfeWQ" type="Generalization_Edge" source="_G-_bIAkpEeOnVqX9VcfeWQ" target="_wlZj8AkdEeOnVqX9VcfeWQ" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_LBOhgwkpEeOnVqX9VcfeWQ" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_RzgIIK6EEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_LBOhhAkpEeOnVqX9VcfeWQ" x="1" y="38"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_LBOhgQkpEeOnVqX9VcfeWQ" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_LAjzIAkpEeOnVqX9VcfeWQ"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LBOhggkpEeOnVqX9VcfeWQ" points="[1249, 552, -643984, -643984]$[1194, 470, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LBUoIAkpEeOnVqX9VcfeWQ" id="(0.5673758865248227,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LBUoIQkpEeOnVqX9VcfeWQ" id="(0.3065134099616858,1.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5ykeIQkdEeOnVqX9VcfeWQ" id="(0.0,0.3314917127071823)"/>
     </edges>
     <edges xmi:type="notation:Connector" xmi:id="_OOdY4AkxEeOnVqX9VcfeWQ" type="Generalization_Edge" source="_ELjJgAkxEeOnVqX9VcfeWQ" target="_GLILsAkdEeOnVqX9VcfeWQ" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_OOdY4wkxEeOnVqX9VcfeWQ" type="Generalization_StereotypeLabel">
@@ -6851,39 +5350,6 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PRWZQAkxEeOnVqX9VcfeWQ" id="(0.36199095022624433,0.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PRWZQQkxEeOnVqX9VcfeWQ" id="(0.5545286506469501,1.0)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_SfzL0AntEeOnVqX9VcfeWQ" type="Generalization_Edge" source="_muS64AnsEeOnVqX9VcfeWQ" target="_wlZj8AkdEeOnVqX9VcfeWQ" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_Sf0Z8AntEeOnVqX9VcfeWQ" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_Rz80EK6EEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_Sf0Z8QntEeOnVqX9VcfeWQ" x="-1" y="38"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_SfzL0QntEeOnVqX9VcfeWQ" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_SfZjMAntEeOnVqX9VcfeWQ"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_SfzL0gntEeOnVqX9VcfeWQ" points="[1460, 560, -643984, -643984]$[1460, 500, -643984, -643984]$[1360, 500, -643984, -643984]$[1360, 461, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Sf4EUAntEeOnVqX9VcfeWQ" id="(0.45248868778280543,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Sf4EUQntEeOnVqX9VcfeWQ" id="(0.7662835249042146,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_TziRIAxJEeOjX-JbGFEH7w" type="Generalization_Edge" source="_LU3bsAxJEeOjX-JbGFEH7w" target="_HyFLUAkxEeOnVqX9VcfeWQ" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_TziRIwxJEeOjX-JbGFEH7w" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_al-qYK6EEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_TziRJAxJEeOjX-JbGFEH7w" y="40"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_TziRIQxJEeOjX-JbGFEH7w" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_TzDwAAxJEeOjX-JbGFEH7w"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_TziRIgxJEeOjX-JbGFEH7w" points="[700, 720, -643984, -643984]$[720, 661, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_TzoXwAxJEeOjX-JbGFEH7w" id="(0.8298755186721992,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_TzoXwQxJEeOjX-JbGFEH7w" id="(0.27149321266968324,1.0)"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_UrLDwAxJEeOjX-JbGFEH7w" type="Generalization_Edge" source="_G71l8AxJEeOjX-JbGFEH7w" target="_HyFLUAkxEeOnVqX9VcfeWQ" lineColor="0">
-      <children xmi:type="notation:DecorationNode" xmi:id="_UrLDwwxJEeOjX-JbGFEH7w" type="Generalization_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_amRlUK6EEeeUVoYywick3g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_UrRKYAxJEeOjX-JbGFEH7w" y="40"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_UrLDwQxJEeOjX-JbGFEH7w" fontName="Segoe UI"/>
-      <element xmi:type="uml:Generalization" href="layers.uml#_Uq4v4AxJEeOjX-JbGFEH7w"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UrLDwgxJEeOjX-JbGFEH7w" points="[848, 720, -643984, -643984]$[840, 661, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UrRKYQxJEeOjX-JbGFEH7w" id="(0.16597510373443983,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UrRKYgxJEeOjX-JbGFEH7w" id="(0.8144796380090498,1.0)"/>
-    </edges>
     <edges xmi:type="notation:Connector" xmi:id="_LZhGFK5qEeeUVoYywick3g" type="StereotypeCommentLink" source="_rUDAsA2fEeOjX-JbGFEH7w" target="_LZhGEK5qEeeUVoYywick3g">
       <styles xmi:type="notation:FontStyle" xmi:id="_LZhGFa5qEeeUVoYywick3g"/>
       <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LZhGGa5qEeeUVoYywick3g" name="BASE_ELEMENT">
@@ -6894,15 +5360,30 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LZhGF65qEeeUVoYywick3g"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LZhGGK5qEeeUVoYywick3g"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_LZkJYa5qEeeUVoYywick3g" type="StereotypeCommentLink" source="__Arl4AxLEeOjX-JbGFEH7w" target="_LZjiXK5qEeeUVoYywick3g">
-      <styles xmi:type="notation:FontStyle" xmi:id="_LZkJYq5qEeeUVoYywick3g"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LZkJZq5qEeeUVoYywick3g" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:PrimitiveType" href="layers.uml#__ADTwAxLEeOjX-JbGFEH7w"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LZkJY65qEeeUVoYywick3g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LZkJZK5qEeeUVoYywick3g"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LZkJZa5qEeeUVoYywick3g"/>
+    <edges xmi:type="notation:Connector" xmi:id="_gG4MALUQEeiPJeGnZrmqWw" type="Association_Edge" source="_dBdTMLUQEeiPJeGnZrmqWw" target="_GLILsAkdEeOnVqX9VcfeWQ">
+      <children xmi:type="notation:DecorationNode" xmi:id="_gG4MA7UQEeiPJeGnZrmqWw" type="Association_StereotypeLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_gG4MBLUQEeiPJeGnZrmqWw" y="-20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_gG4MBbUQEeiPJeGnZrmqWw" type="Association_NameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_gG4MBrUQEeiPJeGnZrmqWw" y="20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_gG4MB7UQEeiPJeGnZrmqWw" type="Association_TargetRoleLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_gG4MCLUQEeiPJeGnZrmqWw" y="-20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_gG4MCbUQEeiPJeGnZrmqWw" type="Association_SourceRoleLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_gG4MCrUQEeiPJeGnZrmqWw" y="20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_gG4MC7UQEeiPJeGnZrmqWw" type="Association_SourceMultiplicityLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_gG4MDLUQEeiPJeGnZrmqWw" y="20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_gG4MDbUQEeiPJeGnZrmqWw" type="Association_TargetMultiplicityLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_gG4MDrUQEeiPJeGnZrmqWw" y="-20"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_gG4MAbUQEeiPJeGnZrmqWw"/>
+      <element xmi:type="uml:Association" href="layers.uml#_gF7JwLUQEeiPJeGnZrmqWw"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gG4MArUQEeiPJeGnZrmqWw" points="[280, 360, -643984, -643984]$[520, 501, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gHoZ8LUQEeiPJeGnZrmqWw" id="(1.0,0.5673758865248227)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gHoZ8bUQEeiPJeGnZrmqWw" id="(0.0,0.5673758865248227)"/>
     </edges>
   </notation:Diagram>
   <notation:Diagram xmi:id="_Vjf6UHbuEeOlpfB_tZS-QA" type="PapyrusUMLClassDiagram" name="LayersStack" measurementUnit="Pixel">
@@ -7229,7 +5710,7 @@
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_LNxwIK5qEeeUVoYywick3g" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
       <owner xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     </styles>
-    <styles xmi:type="notation:StringValueStyle" xmi:id="_LODc8K5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.3.0"/>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_LODc8K5qEeeUVoYywick3g" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <element xmi:type="uml:Model" href="layers.uml#_gAOFQLcqEeK8_t7Rpq6ZJA"/>
     <edges xmi:type="notation:Connector" xmi:id="_bGfpC3buEeOlpfB_tZS-QA" type="Generalization_Edge" source="_bGfrN3buEeOlpfB_tZS-QA" target="_bGfo0HbuEeOlpfB_tZS-QA" lineColor="0">
       <children xmi:type="notation:DecorationNode" xmi:id="_bGfpDHbuEeOlpfB_tZS-QA" type="Generalization_StereotypeLabel">
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.uml b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.uml
index 6b9ff5c..5ded82f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.uml
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layers.uml
@@ -1,117 +1,117 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Ecore="http://www.eclipse.org/uml2/schemas/Ecore/5" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http://www.eclipse.org/uml2/schemas/Ecore/5 pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA">
   <uml:Model xmi:id="_gAOFQLcqEeK8_t7Rpq6ZJA" name="Layers" URI="">
-    <ownedComment xmi:id="_7_dC4HbuEeOlpfB_tZS-QA" annotatedElement="_gAOFQLcqEeK8_t7Rpq6ZJA">
+    <ownedComment xmi:type="uml:Comment" xmi:id="_7_dC4HbuEeOlpfB_tZS-QA" annotatedElement="_gAOFQLcqEeK8_t7Rpq6ZJA">
       <body>Start the LayesStack.&#xD;
 This method should be called after the LayersStack creation. It is not called from the constructor, because &#xD;
 the initialisation can differ if the LayersStack is created by the user or by EMF after a reloading.&#xD;
 </body>
     </ownedComment>
-    <packageImport xmi:id="_uhlc8LcqEeK8_t7Rpq6ZJA">
+    <packageImport xmi:type="uml:PackageImport" xmi:id="_uhlc8LcqEeK8_t7Rpq6ZJA">
       <importedPackage xmi:type="uml:Model" href="notation/notation.uml#_AziHILcnEeKeLJDBCBPhPw"/>
     </packageImport>
-    <packageImport xmi:id="_7C5bkNBYEee6_PI6xaXFIg">
+    <packageImport xmi:type="uml:PackageImport" xmi:id="_7C5bkNBYEee6_PI6xaXFIg">
       <importedPackage xmi:type="uml:Model" href="pathmap://STYLESHEETS/StyleSheets.uml#_MeGMUNBHEeeeIb5NcUL5SQ"/>
     </packageImport>
     <packagedElement xmi:type="uml:Class" xmi:id="_yN_dQLcqEeK8_t7Rpq6ZJA" name="LayerNamedStyle">
-      <generalization xmi:id="_0NyKwLcqEeK8_t7Rpq6ZJA">
+      <generalization xmi:type="uml:Generalization" xmi:id="_0NyKwLcqEeK8_t7Rpq6ZJA">
         <general xmi:type="uml:Class" href="notation/notation.uml#_AziHercnEeKeLJDBCBPhPw"/>
       </generalization>
-      <ownedAttribute xmi:id="_jWHHANa7EeKPiuTfpuvqHA" name="layersStack" type="_gT0asNa7EeKPiuTfpuvqHA" aggregation="composite" association="_jWQ4ANa7EeKPiuTfpuvqHA">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_jWHHANa7EeKPiuTfpuvqHA" name="layersStack" type="_gT0asNa7EeKPiuTfpuvqHA" aggregation="composite" association="_jWQ4ANa7EeKPiuTfpuvqHA">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_jWHHAda7EeKPiuTfpuvqHA"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_jWHHAta7EeKPiuTfpuvqHA" value="*"/>
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_OyQ5QL1xEeKKJJ5BmR3W3Q" name="String"/>
     <packagedElement xmi:type="uml:Class" xmi:id="_eNnjMNa7EeKPiuTfpuvqHA" name="LayerDescriptor">
-      <ownedAttribute xmi:id="_iiUlMNqCEeKQqZMBCFd2Uw" name="propertyRegistry" type="_8OefoNjoEeKQqZMBCFd2Uw" association="_iim5ENqCEeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_iiUlMNqCEeKQqZMBCFd2Uw" name="propertyRegistry" type="_8OefoNjoEeKQqZMBCFd2Uw" association="_iim5ENqCEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_iiUlMdqCEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_iiUlMtqCEeKQqZMBCFd2Uw" value="1"/>
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_gT0asNa7EeKPiuTfpuvqHA" name="LayersStack">
-      <ownedAttribute xmi:id="_cHaqsNbGEeKPiuTfpuvqHA" name="layers" type="_9IaAANjiEeKQqZMBCFd2Uw" aggregation="composite" association="_cHkbsNbGEeKPiuTfpuvqHA">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_cHaqsNbGEeKPiuTfpuvqHA" name="layers" type="_9IaAANjiEeKQqZMBCFd2Uw" aggregation="composite" association="_cHkbsNbGEeKPiuTfpuvqHA">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_cHaqsdbGEeKPiuTfpuvqHA"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_cHaqstbGEeKPiuTfpuvqHA" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_ctvjINjwEeKQqZMBCFd2Uw" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_ctvjINjwEeKQqZMBCFd2Uw" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ctvjIdjwEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ctvjItjwEeKQqZMBCFd2Uw" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_ctvjI9jwEeKQqZMBCFd2Uw">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_ct7wYNjwEeKQqZMBCFd2Uw" name="description" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_ct7wYNjwEeKQqZMBCFd2Uw" name="description" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ct7wYdjwEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ct7wYtjwEeKQqZMBCFd2Uw" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_ct7wY9jwEeKQqZMBCFd2Uw">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_hQIS8NkhEeKQqZMBCFd2Uw" name="diagram" association="_hQam0NkhEeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_hQIS8NkhEeKQqZMBCFd2Uw" name="diagram" association="_hQam0NkhEeKQqZMBCFd2Uw">
         <type xmi:type="uml:Class" href="notation/notation.uml#_AziHhrcnEeKeLJDBCBPhPw"/>
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_hQIS8dkhEeKQqZMBCFd2Uw"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_hQIS8tkhEeKQqZMBCFd2Uw" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_c5OEgHl8EeOlpfB_tZS-QA" name="state" visibility="public" type="_8__xgHltEeOlpfB_tZS-QA" isUnique="false">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_c5OEgHl8EeOlpfB_tZS-QA" name="state" visibility="public" type="_8__xgHltEeOlpfB_tZS-QA" isUnique="false">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_c5OEgXl8EeOlpfB_tZS-QA" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_c5OEgnl8EeOlpfB_tZS-QA" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_c5OEg3l8EeOlpfB_tZS-QA" name="detached" value="detached"/>
       </ownedAttribute>
-      <interfaceRealization xmi:id="_2bk1oHpGEeOlpfB_tZS-QA" name="InterfaceRealization1" client="_gT0asNa7EeKPiuTfpuvqHA" supplier="_RopgYHpGEeOlpfB_tZS-QA" contract="_RopgYHpGEeOlpfB_tZS-QA"/>
-      <ownedOperation xmi:id="_8H1xgO70EeK0p4PkXjd-_Q" name="getComputePropertyValueCommand" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_8H1xge70EeK0p4PkXjd-_Q">
+      <interfaceRealization xmi:type="uml:InterfaceRealization" xmi:id="_2bk1oHpGEeOlpfB_tZS-QA" name="InterfaceRealization1" client="_gT0asNa7EeKPiuTfpuvqHA" supplier="_RopgYHpGEeOlpfB_tZS-QA" contract="_RopgYHpGEeOlpfB_tZS-QA"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_8H1xgO70EeK0p4PkXjd-_Q" name="getComputePropertyValueCommand" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_8H1xge70EeK0p4PkXjd-_Q">
           <body>Get the ComputePropertyValueCommands for the specified views and Property.&#xD;
 @return A list of Command allowing to get the value of the property for each view. The list contains null if no command is available for a View.</body>
         </ownedComment>
-        <ownedParameter xmi:id="_8H1xgu70EeK0p4PkXjd-_Q" name="view">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_8H1xgu70EeK0p4PkXjd-_Q" name="view">
           <type xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
         </ownedParameter>
-        <ownedParameter xmi:id="_8H1xg-70EeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
-        <ownedParameter xmi:id="_8H1xhO70EeK0p4PkXjd-_Q" name="result" type="_Qeyn4O7GEeK0p4PkXjd-_Q" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_8H1xg-70EeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_8H1xhO70EeK0p4PkXjd-_Q" name="result" type="_Qeyn4O7GEeK0p4PkXjd-_Q" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_8IAJkO70EeK0p4PkXjd-_Q" name="getPropertiesComputePropertyValueCommand" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_8IAJke70EeK0p4PkXjd-_Q">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_8IAJkO70EeK0p4PkXjd-_Q" name="getPropertiesComputePropertyValueCommand" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_8IAJke70EeK0p4PkXjd-_Q">
           <body>Get the ComputePropertyValueCommands for the specified view and Properties.&#xD;
 @return A list of Command allowing to get the value of the properties for the specified view. The list contains null if no command is available for a property.</body>
         </ownedComment>
-        <ownedParameter xmi:id="_8IAJku70EeK0p4PkXjd-_Q" name="view">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_8IAJku70EeK0p4PkXjd-_Q" name="view">
           <type xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
         </ownedParameter>
-        <ownedParameter xmi:id="_8IAJk-70EeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA" isOrdered="true" direction="inout">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_8IAJk-70EeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA" isOrdered="true" direction="inout">
           <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_8IAJlO70EeK0p4PkXjd-_Q" value="1"/>
           <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_8IAJle70EeK0p4PkXjd-_Q" value="*"/>
         </ownedParameter>
-        <ownedParameter xmi:id="_8IAJlu70EeK0p4PkXjd-_Q" name="result" type="_Qeyn4O7GEeK0p4PkXjd-_Q" isOrdered="true" direction="return">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_8IAJlu70EeK0p4PkXjd-_Q" name="result" type="_Qeyn4O7GEeK0p4PkXjd-_Q" isOrdered="true" direction="return">
           <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_8IAJl-70EeK0p4PkXjd-_Q"/>
           <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_8IAJmO70EeK0p4PkXjd-_Q" value="*"/>
         </ownedParameter>
       </ownedOperation>
-      <ownedOperation xmi:id="_8ILIsO70EeK0p4PkXjd-_Q" name="getViewsComputePropertyValueCommand" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_8ILIse70EeK0p4PkXjd-_Q">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_8ILIsO70EeK0p4PkXjd-_Q" name="getViewsComputePropertyValueCommand" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_8ILIse70EeK0p4PkXjd-_Q">
           <body>Get the ComputePropertyValueCommands for the specified view and Property.&#xD;
 @return the Command allowing to get the value, or null.</body>
         </ownedComment>
-        <ownedParameter xmi:id="_8ILIsu70EeK0p4PkXjd-_Q" name="view" isOrdered="true" direction="inout">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_8ILIsu70EeK0p4PkXjd-_Q" name="view" isOrdered="true" direction="inout">
           <type xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
           <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_8ILIs-70EeK0p4PkXjd-_Q"/>
           <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_8ILItO70EeK0p4PkXjd-_Q" value="*"/>
         </ownedParameter>
-        <ownedParameter xmi:id="_8ILIte70EeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
-        <ownedParameter xmi:id="_8ILItu70EeK0p4PkXjd-_Q" name="result" type="_Qeyn4O7GEeK0p4PkXjd-_Q" isOrdered="true" direction="return">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_8ILIte70EeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_8ILItu70EeK0p4PkXjd-_Q" name="result" type="_Qeyn4O7GEeK0p4PkXjd-_Q" isOrdered="true" direction="return">
           <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_8ILIt-70EeK0p4PkXjd-_Q"/>
           <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_8ILIuO70EeK0p4PkXjd-_Q" value="*"/>
         </ownedParameter>
       </ownedOperation>
-      <ownedOperation xmi:id="_rQGJoHbuEeOlpfB_tZS-QA" name="startAfterCreation"/>
-      <ownedOperation xmi:id="_9n-f4HbuEeOlpfB_tZS-QA" name="attachLayers" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_Go6U4HbvEeOlpfB_tZS-QA" annotatedElement="_9n-f4HbuEeOlpfB_tZS-QA">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_rQGJoHbuEeOlpfB_tZS-QA" name="startAfterCreation"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_9n-f4HbuEeOlpfB_tZS-QA" name="attachLayers" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_Go6U4HbvEeOlpfB_tZS-QA" annotatedElement="_9n-f4HbuEeOlpfB_tZS-QA">
           <body>Start the LayersStack after a reloading by EMF. This method should be explicitly called after a reloading.&#xD;
 The method usually start the layer behaviors.</body>
         </ownedComment>
       </ownedOperation>
-      <ownedOperation xmi:id="_RnmmUHl8EeOlpfB_tZS-QA" name="attach" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_RnmmUXl8EeOlpfB_tZS-QA" annotatedElement="_RnmmUHl8EeOlpfB_tZS-QA">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_RnmmUHl8EeOlpfB_tZS-QA" name="attach" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_RnmmUXl8EeOlpfB_tZS-QA" annotatedElement="_RnmmUHl8EeOlpfB_tZS-QA">
           <body>Try to attach this Layer. If successful, the state go to &quot;attached&quot;. Otherwise, an exception is thrown.&#xD;
 A Layer can be attached if its required attributes are set.&#xD;
 Required attributes:&#xD;
@@ -125,35 +125,35 @@
 If this Layer is successfully attached, then attach subLayers.</body>
         </ownedComment>
       </ownedOperation>
-      <ownedOperation xmi:id="_RnmmUnl8EeOlpfB_tZS-QA" name="detach" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_RnmmU3l8EeOlpfB_tZS-QA" annotatedElement="_RnmmUnl8EeOlpfB_tZS-QA">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_RnmmUnl8EeOlpfB_tZS-QA" name="detach" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_RnmmU3l8EeOlpfB_tZS-QA" annotatedElement="_RnmmUnl8EeOlpfB_tZS-QA">
           <body>Detach the Layer. The state go to &quot;detached&quot;.&#xD;
 Associated behavior are stopped.</body>
         </ownedComment>
       </ownedOperation>
-      <ownedOperation xmi:id="_RnmmVHl8EeOlpfB_tZS-QA" name="enterAttachedState" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_RnmmVXl8EeOlpfB_tZS-QA" annotatedElement="_RnmmVHl8EeOlpfB_tZS-QA">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_RnmmVHl8EeOlpfB_tZS-QA" name="enterAttachedState" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_RnmmVXl8EeOlpfB_tZS-QA" annotatedElement="_RnmmVHl8EeOlpfB_tZS-QA">
           <body>This method is called by the class immediately after entering in attached state.&#xD;
 The methodcan be used to start the layer behaviors.</body>
         </ownedComment>
       </ownedOperation>
-      <ownedOperation xmi:id="_RnmmVnl8EeOlpfB_tZS-QA" name="exitAttachedState">
-        <ownedComment xmi:id="_RnmmV3l8EeOlpfB_tZS-QA" annotatedElement="_RnmmVnl8EeOlpfB_tZS-QA">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_RnmmVnl8EeOlpfB_tZS-QA" name="exitAttachedState">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_RnmmV3l8EeOlpfB_tZS-QA" annotatedElement="_RnmmVnl8EeOlpfB_tZS-QA">
           <body>This method is called just before this Layer leave the attached state.&#xD;
 </body>
         </ownedComment>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_jWQ4ANa7EeKPiuTfpuvqHA" name="layerNamedStyle_layerStack_1" memberEnd="_jWQ4Ada7EeKPiuTfpuvqHA _jWHHANa7EeKPiuTfpuvqHA">
-      <ownedEnd xmi:id="_jWQ4Ada7EeKPiuTfpuvqHA" name="layerNamedStyle" type="_yN_dQLcqEeK8_t7Rpq6ZJA" association="_jWQ4ANa7EeKPiuTfpuvqHA">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_jWQ4Ada7EeKPiuTfpuvqHA" name="layerNamedStyle" type="_yN_dQLcqEeK8_t7Rpq6ZJA" association="_jWQ4ANa7EeKPiuTfpuvqHA">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_jWQ4Ata7EeKPiuTfpuvqHA" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_jWQ4A9a7EeKPiuTfpuvqHA" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_51zAINa7EeKPiuTfpuvqHA" name="AbstractLayer" isAbstract="true">
-      <generalization xmi:id="__ujk4NjMEeKgkM6XJF9t4A" general="_9IaAANjiEeKQqZMBCFd2Uw"/>
-      <ownedAttribute xmi:id="_5YkcINa8EeKPiuTfpuvqHA" name="propertyValues" type="_AjTZ8Na8EeKPiuTfpuvqHA" isOrdered="true" isUnique="false" association="_5YuNINa8EeKPiuTfpuvqHA">
-        <ownedComment xmi:id="_yAlZYNkWEeKQqZMBCFd2Uw">
+      <generalization xmi:type="uml:Generalization" xmi:id="__ujk4NjMEeKgkM6XJF9t4A" general="_9IaAANjiEeKQqZMBCFd2Uw"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_5YkcINa8EeKPiuTfpuvqHA" name="propertyValues" type="_AjTZ8Na8EeKPiuTfpuvqHA" isOrdered="true" isUnique="false" association="_5YuNINa8EeKPiuTfpuvqHA">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_yAlZYNkWEeKQqZMBCFd2Uw">
           <body>An ordered list of references onvalue instances.&#xD;
 This list is used to access instances by indexes.&#xD;
 Elements are set in the list when they are attached to the layer. A null element mean that the property at the specified index is not attached.&#xD;
@@ -162,78 +162,78 @@
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_5YkcIda8EeKPiuTfpuvqHA"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_5YkcIta8EeKPiuTfpuvqHA" value="*"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_A1bYQNjLEeKgkM6XJF9t4A" name="propertyValueMap" type="_vMMQsNjKEeKgkM6XJF9t4A" aggregation="composite" association="_A1nlgNjLEeKgkM6XJF9t4A">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_A1bYQNjLEeKgkM6XJF9t4A" name="propertyValueMap" type="_vMMQsNjKEeKgkM6XJF9t4A" aggregation="composite" association="_A1nlgNjLEeKgkM6XJF9t4A">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_A1bYQdjLEeKgkM6XJF9t4A"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_A1bYQtjLEeKgkM6XJF9t4A" value="*"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_LA8SkNjiEeKQqZMBCFd2Uw" name="layerDescriptor" type="_eNnjMNa7EeKPiuTfpuvqHA" association="_LBIf0NjiEeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_LA8SkNjiEeKQqZMBCFd2Uw" name="layerDescriptor" type="_eNnjMNa7EeKPiuTfpuvqHA" association="_LBIf0NjiEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_LA8SkdjiEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_LA8SktjiEeKQqZMBCFd2Uw" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_3qy14NjkEeKQqZMBCFd2Uw" name="views" association="_3q_DINjkEeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_3qy14NjkEeKQqZMBCFd2Uw" name="views" association="_3q_DINjkEeKQqZMBCFd2Uw">
         <type xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_3qy14djkEeKQqZMBCFd2Uw"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_3qy14tjkEeKQqZMBCFd2Uw" value="*"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_rEPKgO-MEeK0p4PkXjd-_Q" name="attachedProperties" type="_-vaacNa7EeKPiuTfpuvqHA" aggregation="composite" isDerived="true" association="_rEb-0O-MEeK0p4PkXjd-_Q">
-        <ownedComment xmi:id="_0zHqoO-MEeK0p4PkXjd-_Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_rEPKgO-MEeK0p4PkXjd-_Q" name="attachedProperties" type="_-vaacNa7EeKPiuTfpuvqHA" aggregation="composite" isDerived="true" association="_rEb-0O-MEeK0p4PkXjd-_Q">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_0zHqoO-MEeK0p4PkXjd-_Q">
           <body>Return the list of Property (descriptors) attached to the Layer.&#xD;
 This is a derived transient list.</body>
         </ownedComment>
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rEPKge-MEeK0p4PkXjd-_Q"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rEPKgu-MEeK0p4PkXjd-_Q" value="*"/>
       </ownedAttribute>
-      <ownedOperation xmi:id="_gfah8OKIEeKOWoLMe41Aew" name="addPropertyInstance" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_zzrA4OKIEeKOWoLMe41Aew">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_gfah8OKIEeKOWoLMe41Aew" name="addPropertyInstance" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_zzrA4OKIEeKOWoLMe41Aew">
           <body>Add the specified property to the map of property.</body>
         </ownedComment>
-        <ownedParameter xmi:id="_ocu90OKIEeKOWoLMe41Aew" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
-        <ownedParameter xmi:id="_9j3nQOKWEeKOWoLMe41Aew" name="result" type="_AjTZ8Na8EeKPiuTfpuvqHA" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_ocu90OKIEeKOWoLMe41Aew" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_9j3nQOKWEeKOWoLMe41Aew" name="result" type="_AjTZ8Na8EeKPiuTfpuvqHA" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_sJkb8OKIEeKOWoLMe41Aew" name="removePropertyInstance">
-        <ownedParameter xmi:id="_sJkb8eKIEeKOWoLMe41Aew" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_sJkb8OKIEeKOWoLMe41Aew" name="removePropertyInstance">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_sJkb8eKIEeKOWoLMe41Aew" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_ldtfkOKWEeKOWoLMe41Aew" name="getPropertyInstance" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_ldtfkeKWEeKOWoLMe41Aew">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_ldtfkOKWEeKOWoLMe41Aew" name="getPropertyInstance" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_ldtfkeKWEeKOWoLMe41Aew">
           <body>Add the specified property to the map of property.</body>
         </ownedComment>
-        <ownedParameter xmi:id="_ldtfkuKWEeKOWoLMe41Aew" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
-        <ownedParameter xmi:id="_voU5cOKWEeKOWoLMe41Aew" name="result" type="_AjTZ8Na8EeKPiuTfpuvqHA" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_ldtfkuKWEeKOWoLMe41Aew" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_voU5cOKWEeKOWoLMe41Aew" name="result" type="_AjTZ8Na8EeKPiuTfpuvqHA" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_IR-vwOKXEeKOWoLMe41Aew" name="getPropertyInstance" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_IR-vweKXEeKOWoLMe41Aew">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_IR-vwOKXEeKOWoLMe41Aew" name="getPropertyInstance" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_IR-vweKXEeKOWoLMe41Aew">
           <body>Add the specified property to the map of property.</body>
         </ownedComment>
-        <ownedParameter xmi:id="_IR-vwuKXEeKOWoLMe41Aew" name="property" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
-        <ownedParameter xmi:id="_IR-vw-KXEeKOWoLMe41Aew" name="result" type="_AjTZ8Na8EeKPiuTfpuvqHA" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_IR-vwuKXEeKOWoLMe41Aew" name="property" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_IR-vw-KXEeKOWoLMe41Aew" name="result" type="_AjTZ8Na8EeKPiuTfpuvqHA" direction="return"/>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_-vaacNa7EeKPiuTfpuvqHA" name="Property">
-      <generalization xmi:id="_YRb5sNhdEeKgkM6XJF9t4A" general="_ggM80NhbEeKgkM6XJF9t4A"/>
-      <ownedAttribute xmi:id="_L2FowNhcEeKgkM6XJF9t4A" name="type" type="_EoL3oNhcEeKgkM6XJF9t4A" association="_L2X8oNhcEeKgkM6XJF9t4A">
+      <generalization xmi:type="uml:Generalization" xmi:id="_YRb5sNhdEeKgkM6XJF9t4A" general="_ggM80NhbEeKgkM6XJF9t4A"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_L2FowNhcEeKgkM6XJF9t4A" name="type" type="_EoL3oNhcEeKgkM6XJF9t4A" association="_L2X8oNhcEeKgkM6XJF9t4A">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_L2FowdhcEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_L2FowthcEeKgkM6XJF9t4A" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_O62aQNhcEeKgkM6XJF9t4A" name="defaultValue" type="_AjTZ8Na8EeKPiuTfpuvqHA" aggregation="composite" association="_O7IuINhcEeKgkM6XJF9t4A">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_O62aQNhcEeKgkM6XJF9t4A" name="defaultValue" type="_AjTZ8Na8EeKPiuTfpuvqHA" aggregation="composite" association="_O7IuINhcEeKgkM6XJF9t4A">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_O62aQdhcEeKgkM6XJF9t4A"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_O62aQthcEeKgkM6XJF9t4A" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_sdWO0NhcEeKgkM6XJF9t4A" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_sdWO0NhcEeKgkM6XJF9t4A" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_utwLMNhcEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ut8YcNhcEeKgkM6XJF9t4A" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_uunG0NhcEeKgkM6XJF9t4A">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_hT9qINhdEeKgkM6XJF9t4A" name="description" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_hT9qINhdEeKgkM6XJF9t4A" name="description" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_j92dgNhdEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_j-CqwNhdEeKgkM6XJF9t4A" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_j-tZINhdEeKgkM6XJF9t4A">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_HjktUO3qEeKwLp35IbAIig" name="index" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA">
-        <ownedComment xmi:id="_OHvk8O3qEeKwLp35IbAIig">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_HjktUO3qEeKwLp35IbAIig" name="index" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_OHvk8O3qEeKwLp35IbAIig">
           <body>Index of the property in the arrays of the application.&#xD;
 The index is used by the application to access property in arrays.&#xD;
 Each property has a unique index. This is the application responsability to maintain the index.&#xD;
@@ -246,45 +246,45 @@
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_LHPoYO3qEeKwLp35IbAIig" value="1"/>
         <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_Bic9oO-FEeK0p4PkXjd-_Q" value="-1"/>
       </ownedAttribute>
-      <ownedOperation xmi:id="_9LLeENhcEeKgkM6XJF9t4A" name="createInstance" raisedException="_KG7HMNxMEeKwptaAAanMDg">
-        <ownedParameter xmi:id="_HPKEcNhdEeKgkM6XJF9t4A" name="return" type="_AjTZ8Na8EeKPiuTfpuvqHA" direction="return"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_9LLeENhcEeKgkM6XJF9t4A" name="createInstance" raisedException="_KG7HMNxMEeKwptaAAanMDg">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_HPKEcNhdEeKgkM6XJF9t4A" name="return" type="_AjTZ8Na8EeKPiuTfpuvqHA" direction="return"/>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_AjTZ8Na8EeKPiuTfpuvqHA" name="TypeInstance" isAbstract="true">
-      <interfaceRealization xmi:id="_g2QFQO8YEeK0p4PkXjd-_Q" name="InterfaceRealization1" client="_AjTZ8Na8EeKPiuTfpuvqHA" supplier="_XZJOcO8UEeK0p4PkXjd-_Q" contract="_XZJOcO8UEeK0p4PkXjd-_Q"/>
-      <ownedOperation xmi:id="_ZFFKAEczEeOEBJ2PxFQgyQ" name="setValueFromString">
-        <ownedComment xmi:id="_ghl-4EczEeOEBJ2PxFQgyQ">
+      <interfaceRealization xmi:type="uml:InterfaceRealization" xmi:id="_g2QFQO8YEeK0p4PkXjd-_Q" name="InterfaceRealization1" client="_AjTZ8Na8EeKPiuTfpuvqHA" supplier="_XZJOcO8UEeK0p4PkXjd-_Q" contract="_XZJOcO8UEeK0p4PkXjd-_Q"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_ZFFKAEczEeOEBJ2PxFQgyQ" name="setValueFromString">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_ghl-4EczEeOEBJ2PxFQgyQ">
           <body>Set the value of the instance from the porvided String.&#xD;
 Actually, only simple values are accepted.&#xD;
 TODO Allows complexe values, using a well defined syntax ?</body>
         </ownedComment>
-        <ownedParameter xmi:id="_fODTYEczEeOEBJ2PxFQgyQ" name="value" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_fODTYEczEeOEBJ2PxFQgyQ" name="value" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_oJwUAEc8EeOEBJ2PxFQgyQ" name="setValueFromInstance">
-        <ownedParameter xmi:id="_tVpxIEc8EeOEBJ2PxFQgyQ" name="value" type="_AjTZ8Na8EeKPiuTfpuvqHA"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_oJwUAEc8EeOEBJ2PxFQgyQ" name="setValueFromInstance">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_tVpxIEc8EeOEBJ2PxFQgyQ" name="value" type="_AjTZ8Na8EeKPiuTfpuvqHA"/>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_SuHkkNa8EeKPiuTfpuvqHA" name="int"/>
     <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_TqqsYNa8EeKPiuTfpuvqHA" name="boolean"/>
     <packagedElement xmi:type="uml:Association" xmi:id="_5YuNINa8EeKPiuTfpuvqHA" name="layer_propertyValue_1" memberEnd="_5YuNIda8EeKPiuTfpuvqHA _5YkcINa8EeKPiuTfpuvqHA">
-      <ownedEnd xmi:id="_5YuNIda8EeKPiuTfpuvqHA" name="layer" type="_51zAINa7EeKPiuTfpuvqHA" association="_5YuNINa8EeKPiuTfpuvqHA">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_5YuNIda8EeKPiuTfpuvqHA" name="layer" type="_51zAINa7EeKPiuTfpuvqHA" association="_5YuNINa8EeKPiuTfpuvqHA">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_5YuNIta8EeKPiuTfpuvqHA" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_5YuNI9a8EeKPiuTfpuvqHA" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_cHkbsNbGEeKPiuTfpuvqHA" name="layersStack_layer_1" memberEnd="_cHkbsdbGEeKPiuTfpuvqHA _cHaqsNbGEeKPiuTfpuvqHA">
-      <ownedEnd xmi:id="_cHkbsdbGEeKPiuTfpuvqHA" name="layersStack" type="_gT0asNa7EeKPiuTfpuvqHA" association="_cHkbsNbGEeKPiuTfpuvqHA">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_cHkbsdbGEeKPiuTfpuvqHA" name="layersStack" type="_gT0asNa7EeKPiuTfpuvqHA" association="_cHkbsNbGEeKPiuTfpuvqHA">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_cHkbstbGEeKPiuTfpuvqHA" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_cHkbs9bGEeKPiuTfpuvqHA" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_fAmyUNhbEeKgkM6XJF9t4A" name="Folder">
-      <generalization xmi:id="_6l23ENhbEeKgkM6XJF9t4A" general="_ggM80NhbEeKgkM6XJF9t4A"/>
-      <ownedAttribute xmi:id="_js_o8NhbEeKgkM6XJF9t4A" name="elements" type="_ggM80NhbEeKgkM6XJF9t4A" aggregation="composite" association="_jtR80NhbEeKgkM6XJF9t4A">
+      <generalization xmi:type="uml:Generalization" xmi:id="_6l23ENhbEeKgkM6XJF9t4A" general="_ggM80NhbEeKgkM6XJF9t4A"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_js_o8NhbEeKgkM6XJF9t4A" name="elements" type="_ggM80NhbEeKgkM6XJF9t4A" aggregation="composite" association="_jtR80NhbEeKgkM6XJF9t4A">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_js_o8dhbEeKgkM6XJF9t4A"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_js_o8thbEeKgkM6XJF9t4A" value="*"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_pSIZkNhoEeKgkM6XJF9t4A" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_pSIZkNhoEeKgkM6XJF9t4A" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r_ILUNhoEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r_afMNhoEeKgkM6XJF9t4A" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_sALUMNhoEeKgkM6XJF9t4A">
@@ -294,74 +294,70 @@
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_ggM80NhbEeKgkM6XJF9t4A" name="FolderElement" isAbstract="true"/>
     <packagedElement xmi:type="uml:Association" xmi:id="_jtR80NhbEeKgkM6XJF9t4A" name="package_packageableElement_1" memberEnd="_jtR80dhbEeKgkM6XJF9t4A _js_o8NhbEeKgkM6XJF9t4A">
-      <ownedEnd xmi:id="_jtR80dhbEeKgkM6XJF9t4A" name="folder" type="_fAmyUNhbEeKgkM6XJF9t4A" association="_jtR80NhbEeKgkM6XJF9t4A">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_jtR80dhbEeKgkM6XJF9t4A" name="folder" type="_fAmyUNhbEeKgkM6XJF9t4A" association="_jtR80NhbEeKgkM6XJF9t4A">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_jtR80thbEeKgkM6XJF9t4A"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_jtR809hbEeKgkM6XJF9t4A" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_EoL3oNhcEeKgkM6XJF9t4A" name="Type" isAbstract="true">
-      <generalization xmi:id="_5T84YNhdEeKgkM6XJF9t4A" general="_ggM80NhbEeKgkM6XJF9t4A"/>
-      <ownedAttribute xmi:id="_kg7x4NhcEeKgkM6XJF9t4A" name="metamodel" type="_I3wPYNhcEeKgkM6XJF9t4A" association="_khB4gNhcEeKgkM6XJF9t4A">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_kg7x4dhcEeKgkM6XJF9t4A" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_kg7x4thcEeKgkM6XJF9t4A" value="1"/>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="_oTs44NhcEeKgkM6XJF9t4A" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <generalization xmi:type="uml:Generalization" xmi:id="_5T84YNhdEeKgkM6XJF9t4A" general="_ggM80NhbEeKgkM6XJF9t4A"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_oTs44NhcEeKgkM6XJF9t4A" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rDya4NhcEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rD-oINhcEeKgkM6XJF9t4A" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_rEpWgNhcEeKgkM6XJF9t4A">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_kquxoNhdEeKgkM6XJF9t4A" name="description" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_kquxoNhdEeKgkM6XJF9t4A" name="description" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_m6-9ANhdEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_m7RQ4NhdEeKgkM6XJF9t4A" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_m77_QNhdEeKgkM6XJF9t4A">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedOperation xmi:id="_VRDxkNhgEeKgkM6XJF9t4A" name="createInstance">
-        <ownedParameter xmi:id="_VRDxkdhgEeKgkM6XJF9t4A" name="return" type="_AjTZ8Na8EeKPiuTfpuvqHA" direction="return"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_VRDxkNhgEeKgkM6XJF9t4A" name="createInstance">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_VRDxkdhgEeKgkM6XJF9t4A" name="return" type="_AjTZ8Na8EeKPiuTfpuvqHA" direction="return"/>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_I3wPYNhcEeKgkM6XJF9t4A" name="Metamodel">
-      <generalization xmi:id="_7uWeQNhdEeKgkM6XJF9t4A" general="_ggM80NhbEeKgkM6XJF9t4A"/>
-      <ownedAttribute xmi:id="_r6aEYNhdEeKgkM6XJF9t4A" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <generalization xmi:type="uml:Generalization" xmi:id="_7uWeQNhdEeKgkM6XJF9t4A" general="_ggM80NhbEeKgkM6XJF9t4A"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_r6aEYNhdEeKgkM6XJF9t4A" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_u3drYNhdEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_u3p4oNhdEeKgkM6XJF9t4A" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_u4UnANhdEeKgkM6XJF9t4A">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_vhv-gNhdEeKgkM6XJF9t4A" name="description" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_vhv-gNhdEeKgkM6XJF9t4A" name="description" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_xtI4ANhdEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_xtbL4NhdEeKgkM6XJF9t4A" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_xuF6QNhdEeKgkM6XJF9t4A">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_i5nR8NhgEeKgkM6XJF9t4A" name="nsuri" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_i5nR8NhgEeKgkM6XJF9t4A" name="nsuri" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_llQY0NhgEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_llcmENhgEeKgkM6XJF9t4A" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_lmHUcNhgEeKgkM6XJF9t4A">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_mR_jANhgEeKgkM6XJF9t4A" name="pluginID" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_mR_jANhgEeKgkM6XJF9t4A" name="pluginID" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_o2xM4NhgEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_o3DgwNhgEeKgkM6XJF9t4A" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_o3uPINhgEeKgkM6XJF9t4A">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_pkeAYNhgEeKgkM6XJF9t4A" name="ePackageInstanceName" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_pkeAYNhgEeKgkM6XJF9t4A" name="ePackageInstanceName" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_uXcAINhgEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_uXoNYNhgEeKgkM6XJF9t4A" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_uYZCYNhgEeKgkM6XJF9t4A">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="__MsGANhgEeKgkM6XJF9t4A" name="isTypeValid" visibility="public" type="_TqqsYNa8EeKPiuTfpuvqHA">
-        <ownedComment xmi:id="_Eu5xYNhhEeKgkM6XJF9t4A">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="__MsGANhgEeKgkM6XJF9t4A" name="isTypeValid" visibility="public" type="_TqqsYNa8EeKPiuTfpuvqHA">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_Eu5xYNhhEeKgkM6XJF9t4A">
           <body>Flag indicating if the type is valide, ie if the type can be instancied with the provided values.&#xD;
 This flag is set automatically by the class. The class listen to the modifications of nsuri, pluginID and ePAckageInstance. &#xD;
 When one of these property is modified, the class check if the type can be instanciated. Set the flag accordingly.</body>
@@ -372,93 +368,33 @@
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedOperation xmi:id="_K3KQcNheEeKgkM6XJF9t4A" name="getEPackage">
-        <ownedParameter xmi:id="_SDWKUNheEeKgkM6XJF9t4A" name="return" type="_lVnFMNheEeKgkM6XJF9t4A" direction="return"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_K3KQcNheEeKgkM6XJF9t4A" name="getEPackage">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_SDWKUNheEeKgkM6XJF9t4A" name="return" type="_lVnFMNheEeKgkM6XJF9t4A" direction="return"/>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_L2X8oNhcEeKgkM6XJF9t4A" name="propertyDescriptor_type_1" memberEnd="_L2X8odhcEeKgkM6XJF9t4A _L2FowNhcEeKgkM6XJF9t4A">
-      <ownedEnd xmi:id="_L2X8odhcEeKgkM6XJF9t4A" name="propertyDescriptor" type="_-vaacNa7EeKPiuTfpuvqHA" association="_L2X8oNhcEeKgkM6XJF9t4A">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_L2X8odhcEeKgkM6XJF9t4A" name="propertyDescriptor" type="_-vaacNa7EeKPiuTfpuvqHA" association="_L2X8oNhcEeKgkM6XJF9t4A">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_L2X8othcEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_L2X8o9hcEeKgkM6XJF9t4A" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_O7IuINhcEeKgkM6XJF9t4A" name="propertyDescriptor_propertyValue_1" memberEnd="_O7IuIdhcEeKgkM6XJF9t4A _O62aQNhcEeKgkM6XJF9t4A">
-      <ownedEnd xmi:id="_O7IuIdhcEeKgkM6XJF9t4A" name="propertyDescriptor" type="_-vaacNa7EeKPiuTfpuvqHA" association="_O7IuINhcEeKgkM6XJF9t4A">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_O7IuIdhcEeKgkM6XJF9t4A" name="propertyDescriptor" type="_-vaacNa7EeKPiuTfpuvqHA" association="_O7IuINhcEeKgkM6XJF9t4A">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_O7IuIthcEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_O7IuI9hcEeKgkM6XJF9t4A" value="1"/>
       </ownedEnd>
     </packagedElement>
-    <packagedElement xmi:type="uml:Association" xmi:id="_khB4gNhcEeKgkM6XJF9t4A" name="type_metamodel_1" memberEnd="_khB4gdhcEeKgkM6XJF9t4A _kg7x4NhcEeKgkM6XJF9t4A">
-      <ownedEnd xmi:id="_khB4gdhcEeKgkM6XJF9t4A" name="type" type="_J6C5MNhkEeKgkM6XJF9t4A" association="_khB4gNhcEeKgkM6XJF9t4A">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_khB4gthcEeKgkM6XJF9t4A" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_khB4g9hcEeKgkM6XJF9t4A" value="1"/>
-      </ownedEnd>
-    </packagedElement>
     <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_c1QNsNheEeKgkM6XJF9t4A" name="Object"/>
     <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_lVnFMNheEeKgkM6XJF9t4A" name="EPackage"/>
-    <packagedElement xmi:type="uml:Class" xmi:id="_6RrIENhhEeKgkM6XJF9t4A" name="IntInstance">
-      <generalization xmi:id="_g5ap4NhiEeKgkM6XJF9t4A" general="_AjTZ8Na8EeKPiuTfpuvqHA"/>
-      <ownedAttribute xmi:id="_HJX90NhjEeKgkM6XJF9t4A" name="value" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_kY2vwNhjEeKgkM6XJF9t4A" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_kZC9ANhjEeKgkM6XJF9t4A" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_kZtrYNhjEeKgkM6XJF9t4A">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_-yuRYNhhEeKgkM6XJF9t4A" name="BooleanInstance">
-      <generalization xmi:id="_klghINhiEeKgkM6XJF9t4A" general="_AjTZ8Na8EeKPiuTfpuvqHA"/>
-      <ownedAttribute xmi:id="_lMfMINhjEeKgkM6XJF9t4A" name="value" visibility="public" type="_TqqsYNa8EeKPiuTfpuvqHA">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ngE_YNhjEeKgkM6XJF9t4A" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ngRMoNhjEeKgkM6XJF9t4A" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_ng77ANhjEeKgkM6XJF9t4A">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_Cww0QNhiEeKgkM6XJF9t4A" name="StringInstance">
-      <generalization xmi:id="_mlgC8NhiEeKgkM6XJF9t4A" general="_AjTZ8Na8EeKPiuTfpuvqHA"/>
-      <ownedAttribute xmi:id="_oRNhYNhjEeKgkM6XJF9t4A" name="value" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_qxBywNhjEeKgkM6XJF9t4A" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_qxOAANhjEeKgkM6XJF9t4A" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_qx4uYNhjEeKgkM6XJF9t4A">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_6xEH4NhjEeKgkM6XJF9t4A" name="IntType">
-      <generalization xmi:id="_n3p8cNhkEeKgkM6XJF9t4A" general="_EoL3oNhcEeKgkM6XJF9t4A"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="__iczQNhjEeKgkM6XJF9t4A" name="BooleanType">
-      <generalization xmi:id="_rgmZENhkEeKgkM6XJF9t4A" general="_EoL3oNhcEeKgkM6XJF9t4A"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_E308gNhkEeKgkM6XJF9t4A" name="StringType">
-      <generalization xmi:id="_tdBpgNhkEeKgkM6XJF9t4A" general="_EoL3oNhcEeKgkM6XJF9t4A"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_J6C5MNhkEeKgkM6XJF9t4A" name="CustomType">
-      <ownedComment xmi:id="_08frwNhkEeKgkM6XJF9t4A">
-        <body>A CustomType is used to refer to a type defined in an external metamodel.&#xD;
-The classifier specify the name of the type defined in a ECore metamodel. The metamodel property is used&#xD;
-to specify the ECore metamodel containing  the type referenced.</body>
-      </ownedComment>
-      <generalization xmi:id="_wLYGINhkEeKgkM6XJF9t4A" general="_EoL3oNhcEeKgkM6XJF9t4A"/>
-      <ownedAttribute xmi:id="_U0l7MNhkEeKgkM6XJF9t4A" name="classifier" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_V7OMENhkEeKgkM6XJF9t4A" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_V7aZUNhkEeKgkM6XJF9t4A" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_V8FHsNhkEeKgkM6XJF9t4A">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-    </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_vMMQsNjKEeKgkM6XJF9t4A" name="StringToTypeInstanceMap">
-      <ownedAttribute xmi:id="_1B8jINjKEeKgkM6XJF9t4A" name="key" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_1B8jINjKEeKgkM6XJF9t4A" name="key" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_3hw0gNjKEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_3h9BwNjKEeKgkM6XJF9t4A" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_3it2wNjKEeKgkM6XJF9t4A">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_4f0_QNjKEeKgkM6XJF9t4A" name="value" visibility="public" type="_AjTZ8Na8EeKPiuTfpuvqHA" aggregation="composite">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_4f0_QNjKEeKgkM6XJF9t4A" name="value" visibility="public" type="_AjTZ8Na8EeKPiuTfpuvqHA" aggregation="composite">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_8Z8rcNjKEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_8aJfwNjKEeKgkM6XJF9t4A" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_8a6UwNjKEeKgkM6XJF9t4A">
@@ -467,106 +403,106 @@
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_A1nlgNjLEeKgkM6XJF9t4A" name="layer_stringToTypeInstanceMap_1" memberEnd="_A1nlgdjLEeKgkM6XJF9t4A _A1bYQNjLEeKgkM6XJF9t4A">
-      <ownedEnd xmi:id="_A1nlgdjLEeKgkM6XJF9t4A" name="layer" type="_51zAINa7EeKPiuTfpuvqHA" association="_A1nlgNjLEeKgkM6XJF9t4A">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_A1nlgdjLEeKgkM6XJF9t4A" name="layer" type="_51zAINa7EeKPiuTfpuvqHA" association="_A1nlgNjLEeKgkM6XJF9t4A">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_A1nlgtjLEeKgkM6XJF9t4A" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_A1nlg9jLEeKgkM6XJF9t4A" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_DN8s0NjhEeKQqZMBCFd2Uw" name="LayersStackApplication">
-      <ownedComment xmi:id="_K6hW8NjhEeKQqZMBCFd2Uw">
+      <ownedComment xmi:type="uml:Comment" xmi:id="_K6hW8NjhEeKQqZMBCFd2Uw">
         <body>This represent the root of LayerStack.&#xD;
 All model with LayerStack has an instance of this class as root.&#xD;
 This class allows to find the associated registries : PropertyRegistry, LayerDescriptorRegistry</body>
       </ownedComment>
-      <generalization xmi:id="_bwKaMNjoEeKQqZMBCFd2Uw" general="_ggM80NhbEeKgkM6XJF9t4A"/>
-      <ownedAttribute xmi:id="_aj6GoNjhEeKQqZMBCFd2Uw" name="layersStacks" type="_gT0asNa7EeKPiuTfpuvqHA" aggregation="composite" association="_akGT4NjhEeKQqZMBCFd2Uw">
+      <generalization xmi:type="uml:Generalization" xmi:id="_bwKaMNjoEeKQqZMBCFd2Uw" general="_ggM80NhbEeKgkM6XJF9t4A"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_aj6GoNjhEeKQqZMBCFd2Uw" name="layersStacks" type="_gT0asNa7EeKPiuTfpuvqHA" aggregation="composite" association="_akGT4NjhEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_aj6GodjhEeKQqZMBCFd2Uw"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_aj6GotjhEeKQqZMBCFd2Uw" value="*"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_DYWsYNjpEeKQqZMBCFd2Uw" name="layerStackRegistry" type="_uMYd4NjoEeKQqZMBCFd2Uw" aggregation="composite" association="_DYi5oNjpEeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_DYWsYNjpEeKQqZMBCFd2Uw" name="layerStackRegistry" type="_uMYd4NjoEeKQqZMBCFd2Uw" aggregation="composite" association="_DYi5oNjpEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_DYWsYdjpEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_DYWsYtjpEeKQqZMBCFd2Uw" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_EEc9YNjpEeKQqZMBCFd2Uw" name="propertyRegistry" type="_8OefoNjoEeKQqZMBCFd2Uw" aggregation="composite" association="_EEjEANjpEeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_EEc9YNjpEeKQqZMBCFd2Uw" name="propertyRegistry" type="_8OefoNjoEeKQqZMBCFd2Uw" aggregation="composite" association="_EEjEANjpEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_EEc9YdjpEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_EEc9YtjpEeKQqZMBCFd2Uw" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_5rptsNqBEeKQqZMBCFd2Uw" name="layerDescriptorRegistry" type="_zYGE8NqBEeKQqZMBCFd2Uw" aggregation="composite" association="_5r8BkNqBEeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_5rptsNqBEeKQqZMBCFd2Uw" name="layerDescriptorRegistry" type="_zYGE8NqBEeKQqZMBCFd2Uw" aggregation="composite" association="_5r8BkNqBEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_5rptsdqBEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_5rptstqBEeKQqZMBCFd2Uw" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_wRCXENt2EeKQqZMBCFd2Uw" name="factory" type="_IOwJ4Nt2EeKQqZMBCFd2Uw" aggregation="composite" association="_wROkUNt2EeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_wRCXENt2EeKQqZMBCFd2Uw" name="factory" type="_IOwJ4Nt2EeKQqZMBCFd2Uw" aggregation="composite" association="_wROkUNt2EeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_wRCXEdt2EeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_wRCXEtt2EeKQqZMBCFd2Uw" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_3F7c4O3uEeKwLp35IbAIig" name="propertySetterRegistry" type="_q85OgO3uEeKwLp35IbAIig" aggregation="composite" association="_3GHqIO3uEeKwLp35IbAIig">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_3F7c4O3uEeKwLp35IbAIig" name="propertySetterRegistry" type="_q85OgO3uEeKwLp35IbAIig" aggregation="composite" association="_3GHqIO3uEeKwLp35IbAIig">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_3F7c4e3uEeKwLp35IbAIig"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_3F7c4u3uEeKwLp35IbAIig" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_FDc3EAxAEeOjX-JbGFEH7w" name="layerOperatorDescriptorRegistry" type="_T5we4AkdEeOnVqX9VcfeWQ" aggregation="composite" association="_FDpEUAxAEeOjX-JbGFEH7w">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_FDc3EAxAEeOjX-JbGFEH7w" name="layerOperatorDescriptorRegistry" type="_T5we4AkdEeOnVqX9VcfeWQ" aggregation="composite" association="_FDpEUAxAEeOjX-JbGFEH7w">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_FDc3EQxAEeOjX-JbGFEH7w"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_FDc3EgxAEeOjX-JbGFEH7w" value="1"/>
       </ownedAttribute>
-      <ownedOperation xmi:id="_jo2R4NjhEeKQqZMBCFd2Uw" name="getLayersStackFor">
-        <ownedParameter xmi:id="_3TxkYNjhEeKQqZMBCFd2Uw" name="diagram">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_jo2R4NjhEeKQqZMBCFd2Uw" name="getLayersStackFor">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_3TxkYNjhEeKQqZMBCFd2Uw" name="diagram">
           <type xmi:type="uml:Class" href="notation/notation.uml#_AziHhrcnEeKeLJDBCBPhPw"/>
         </ownedParameter>
-        <ownedParameter xmi:id="_8X93ANjhEeKQqZMBCFd2Uw" name="return" type="_gT0asNa7EeKPiuTfpuvqHA" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_8X93ANjhEeKQqZMBCFd2Uw" name="return" type="_gT0asNa7EeKPiuTfpuvqHA" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_8QO3kN0kEeKwptaAAanMDg" name="removeLayersStackFor">
-        <ownedParameter xmi:id="_8QO3kd0kEeKwptaAAanMDg" name="diagram">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_8QO3kN0kEeKwptaAAanMDg" name="removeLayersStackFor">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_8QO3kd0kEeKwptaAAanMDg" name="diagram">
           <type xmi:type="uml:Class" href="notation/notation.uml#_AziHhrcnEeKeLJDBCBPhPw"/>
         </ownedParameter>
       </ownedOperation>
-      <ownedOperation xmi:id="_H4FrgN0lEeKwptaAAanMDg" name="isLayersStackAttachedFor">
-        <ownedParameter xmi:id="_H4Frgd0lEeKwptaAAanMDg" name="diagram">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_H4FrgN0lEeKwptaAAanMDg" name="isLayersStackAttachedFor">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_H4Frgd0lEeKwptaAAanMDg" name="diagram">
           <type xmi:type="uml:Class" href="notation/notation.uml#_AziHhrcnEeKeLJDBCBPhPw"/>
         </ownedParameter>
-        <ownedParameter xmi:id="_H4Frgt0lEeKwptaAAanMDg" name="return" type="_TqqsYNa8EeKPiuTfpuvqHA" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_H4Frgt0lEeKwptaAAanMDg" name="return" type="_TqqsYNa8EeKPiuTfpuvqHA" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_ZJ8N0N0lEeKwptaAAanMDg" name="createLayersStackFor">
-        <ownedParameter xmi:id="_ZJ8N0d0lEeKwptaAAanMDg" name="diagram">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_ZJ8N0N0lEeKwptaAAanMDg" name="createLayersStackFor">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_ZJ8N0d0lEeKwptaAAanMDg" name="diagram">
           <type xmi:type="uml:Class" href="notation/notation.uml#_AziHhrcnEeKeLJDBCBPhPw"/>
         </ownedParameter>
-        <ownedParameter xmi:id="_ZJ8N0t0lEeKwptaAAanMDg" name="return" type="_gT0asNa7EeKPiuTfpuvqHA" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_ZJ8N0t0lEeKwptaAAanMDg" name="return" type="_gT0asNa7EeKPiuTfpuvqHA" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_ZdgqEN0lEeKwptaAAanMDg" name="lookupLayersStackFor" raisedException="_k-dZENxGEeKwptaAAanMDg">
-        <ownedParameter xmi:id="_ZdgqEd0lEeKwptaAAanMDg" name="diagram">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_ZdgqEN0lEeKwptaAAanMDg" name="lookupLayersStackFor" raisedException="_k-dZENxGEeKwptaAAanMDg">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_ZdgqEd0lEeKwptaAAanMDg" name="diagram">
           <type xmi:type="uml:Class" href="notation/notation.uml#_AziHhrcnEeKeLJDBCBPhPw"/>
         </ownedParameter>
-        <ownedParameter xmi:id="_ZdgqEt0lEeKwptaAAanMDg" name="return" type="_gT0asNa7EeKPiuTfpuvqHA" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_ZdgqEt0lEeKwptaAAanMDg" name="return" type="_gT0asNa7EeKPiuTfpuvqHA" direction="return"/>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_akGT4NjhEeKQqZMBCFd2Uw" name="layersStackApplication_layersStack_1" memberEnd="_akGT4djhEeKQqZMBCFd2Uw _aj6GoNjhEeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_akGT4djhEeKQqZMBCFd2Uw" name="layersStackApplication" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="_akGT4NjhEeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_akGT4djhEeKQqZMBCFd2Uw" name="layersStackApplication" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="_akGT4NjhEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_akGT4tjhEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_akGT49jhEeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_LBIf0NjiEeKQqZMBCFd2Uw" name="layer_layerDescriptor_1" memberEnd="_LBIf0djiEeKQqZMBCFd2Uw _LA8SkNjiEeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_LBIf0djiEeKQqZMBCFd2Uw" name="layer" type="_51zAINa7EeKPiuTfpuvqHA" association="_LBIf0NjiEeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_LBIf0djiEeKQqZMBCFd2Uw" name="layer" type="_51zAINa7EeKPiuTfpuvqHA" association="_LBIf0NjiEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_LBIf0tjiEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_LBIf09jiEeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_9IaAANjiEeKQqZMBCFd2Uw" name="LayerExpression" isAbstract="true">
-      <generalization xmi:id="_18JYYNt5EeKwptaAAanMDg" general="_325AENt0EeKQqZMBCFd2Uw"/>
-      <ownedAttribute xmi:id="_AWx_gNjuEeKQqZMBCFd2Uw" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <generalization xmi:type="uml:Generalization" xmi:id="_18JYYNt5EeKwptaAAanMDg" general="_325AENt0EeKQqZMBCFd2Uw"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_AWx_gNjuEeKQqZMBCFd2Uw" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AWx_gdjuEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AWx_gtjuEeKQqZMBCFd2Uw" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_AWx_g9juEeKQqZMBCFd2Uw">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_AW-MwNjuEeKQqZMBCFd2Uw" name="description" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_AW-MwNjuEeKQqZMBCFd2Uw" name="description" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AW-MwdjuEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AW-MwtjuEeKQqZMBCFd2Uw" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_AW-Mw9juEeKQqZMBCFd2Uw">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_mCUIAAxEEeOjX-JbGFEH7w" name="isLayerEnabledInternal" visibility="public" type="_TqqsYNa8EeKPiuTfpuvqHA" isReadOnly="true" isDerived="true">
-        <ownedComment xmi:id="_unSZwAxEEeOjX-JbGFEH7w">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_mCUIAAxEEeOjX-JbGFEH7w" name="isLayerEnabledInternal" visibility="public" type="_TqqsYNa8EeKPiuTfpuvqHA" isReadOnly="true" isDerived="true">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_unSZwAxEEeOjX-JbGFEH7w">
           <body>Return true if the Layer is enabled (participate to the diagram), or false if it is not enabled.&#xD;
 This is a derieved property.&#xD;
 This flag is used internally to check if the layer is enabled. It is used by operation computing command. If the flag return false, no command is returned.&#xD;
@@ -578,8 +514,8 @@
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_qaozIAxEEeOjX-JbGFEH7w" name="isLayerEnabled" visibility="public" type="_TqqsYNa8EeKPiuTfpuvqHA">
-        <ownedComment xmi:id="_-aGyQAxEEeOjX-JbGFEH7w">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_qaozIAxEEeOjX-JbGFEH7w" name="isLayerEnabled" visibility="public" type="_TqqsYNa8EeKPiuTfpuvqHA">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_-aGyQAxEEeOjX-JbGFEH7w">
           <body>Is the user enabled this layer ?&#xD;
 Return true if the user enable this layer, false if the user disable this layer.&#xD;
 When the user disable a layer, the isEnable property also return false.</body>
@@ -588,8 +524,8 @@
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_tBHGIAxEEeOjX-JbGFEH7w" value="1"/>
         <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_hvDRIAxGEeOjX-JbGFEH7w" value="true"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_xcbgQGQ7EeOlpfB_tZS-QA" name="isBranchEnabled" visibility="public" type="_TqqsYNa8EeKPiuTfpuvqHA">
-        <ownedComment xmi:id="_egbT0GQ8EeOlpfB_tZS-QA" annotatedElement="_xcbgQGQ7EeOlpfB_tZS-QA">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_xcbgQGQ7EeOlpfB_tZS-QA" name="isBranchEnabled" visibility="public" type="_TqqsYNa8EeKPiuTfpuvqHA">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_egbT0GQ8EeOlpfB_tZS-QA" annotatedElement="_xcbgQGQ7EeOlpfB_tZS-QA">
           <body>Is the branch from this node to the root enabled ?&#xD;
 A branch is enabled if all node of the branch are enabled.&#xD;
 In other world, if an ancestor node is disable, the branch is disabled.&#xD;
@@ -599,83 +535,83 @@
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_xcbgQ2Q7EeOlpfB_tZS-QA" value="1"/>
         <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_xcbgRGQ7EeOlpfB_tZS-QA" value="true"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_PznBcGQ5EeOlpfB_tZS-QA" name="owningLayersStack" type="_gT0asNa7EeKPiuTfpuvqHA" association="_PznBc2Q5EeOlpfB_tZS-QA">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_PznBcGQ5EeOlpfB_tZS-QA" name="owningLayersStack" type="_gT0asNa7EeKPiuTfpuvqHA" association="_PznBc2Q5EeOlpfB_tZS-QA">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PznBcWQ5EeOlpfB_tZS-QA"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_PznBcmQ5EeOlpfB_tZS-QA" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_E2soAHluEeOlpfB_tZS-QA" name="state" visibility="public" type="_8__xgHltEeOlpfB_tZS-QA" isUnique="false">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_E2soAHluEeOlpfB_tZS-QA" name="state" visibility="public" type="_8__xgHltEeOlpfB_tZS-QA" isUnique="false">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ISCtgHluEeOlpfB_tZS-QA" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ISCtgXluEeOlpfB_tZS-QA" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_QPjWoHluEeOlpfB_tZS-QA" name="detached" value="detached"/>
       </ownedAttribute>
-      <ownedOperation xmi:id="_VdSFsO7HEeK0p4PkXjd-_Q" name="getComputePropertyValueCommand" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_CI71QO7JEeK0p4PkXjd-_Q">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_VdSFsO7HEeK0p4PkXjd-_Q" name="getComputePropertyValueCommand" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_CI71QO7JEeK0p4PkXjd-_Q">
           <body>Get the ComputePropertyValueCommands for the specified views and Property.&#xD;
 @return A list of Command allowing to get the value of the property for each view. The list contains null if no command is available for a View.</body>
         </ownedComment>
-        <ownedParameter xmi:id="_kPANkO7HEeK0p4PkXjd-_Q" name="view">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_kPANkO7HEeK0p4PkXjd-_Q" name="view">
           <type xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
         </ownedParameter>
-        <ownedParameter xmi:id="_pVVOMO7HEeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
-        <ownedParameter xmi:id="_vwTtkO7HEeK0p4PkXjd-_Q" name="result" type="_Qeyn4O7GEeK0p4PkXjd-_Q" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_pVVOMO7HEeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_vwTtkO7HEeK0p4PkXjd-_Q" name="result" type="_Qeyn4O7GEeK0p4PkXjd-_Q" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_xfz8UO7HEeK0p4PkXjd-_Q" name="getViewsComputePropertyValueCommand" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_QUzeEO7JEeK0p4PkXjd-_Q">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_xfz8UO7HEeK0p4PkXjd-_Q" name="getViewsComputePropertyValueCommand" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_QUzeEO7JEeK0p4PkXjd-_Q">
           <body>Get the ComputePropertyValueCommands for the specified view and Property.&#xD;
 @return the Command allowing to get the value, or null.</body>
         </ownedComment>
-        <ownedParameter xmi:id="_xfz8Ue7HEeK0p4PkXjd-_Q" name="view" isOrdered="true" direction="inout">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_xfz8Ue7HEeK0p4PkXjd-_Q" name="view" isOrdered="true" direction="inout">
           <type xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
           <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_SKx9sO7IEeK0p4PkXjd-_Q"/>
           <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_SLGGwO7IEeK0p4PkXjd-_Q" value="*"/>
         </ownedParameter>
-        <ownedParameter xmi:id="_xfz8Uu7HEeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
-        <ownedParameter xmi:id="_xfz8U-7HEeK0p4PkXjd-_Q" name="result" type="_Qeyn4O7GEeK0p4PkXjd-_Q" isOrdered="true" direction="return">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_xfz8Uu7HEeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_xfz8U-7HEeK0p4PkXjd-_Q" name="result" type="_Qeyn4O7GEeK0p4PkXjd-_Q" isOrdered="true" direction="return">
           <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_T3aeoO7IEeK0p4PkXjd-_Q"/>
           <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_T31VYO7IEeK0p4PkXjd-_Q" value="*"/>
         </ownedParameter>
       </ownedOperation>
-      <ownedOperation xmi:id="_x2PfUO7HEeK0p4PkXjd-_Q" name="getPropertiesComputePropertyValueCommand" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_Q2rcEO7JEeK0p4PkXjd-_Q">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_x2PfUO7HEeK0p4PkXjd-_Q" name="getPropertiesComputePropertyValueCommand" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_Q2rcEO7JEeK0p4PkXjd-_Q">
           <body>Get the ComputePropertyValueCommands for the specified view and Properties.&#xD;
 @return A list of Command allowing to get the value of the properties for the specified view. The list contains null if no command is available for a property.</body>
         </ownedComment>
-        <ownedParameter xmi:id="_x2PfUe7HEeK0p4PkXjd-_Q" name="view">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_x2PfUe7HEeK0p4PkXjd-_Q" name="view">
           <type xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
         </ownedParameter>
-        <ownedParameter xmi:id="_x2PfUu7HEeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA" isOrdered="true" direction="inout">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_x2PfUu7HEeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA" isOrdered="true" direction="inout">
           <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_a3kHoO7IEeK0p4PkXjd-_Q" value="1"/>
           <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_a32bgO7IEeK0p4PkXjd-_Q" value="*"/>
         </ownedParameter>
-        <ownedParameter xmi:id="_x2PfU-7HEeK0p4PkXjd-_Q" name="result" type="_Qeyn4O7GEeK0p4PkXjd-_Q" isOrdered="true" direction="return">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_x2PfU-7HEeK0p4PkXjd-_Q" name="result" type="_Qeyn4O7GEeK0p4PkXjd-_Q" isOrdered="true" direction="return">
           <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_coyNoO7IEeK0p4PkXjd-_Q"/>
           <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_cpKoIO7IEeK0p4PkXjd-_Q" value="*"/>
         </ownedParameter>
       </ownedOperation>
-      <ownedOperation xmi:id="_Ps2L4GUaEeOlpfB_tZS-QA" name="attachToLayersStack">
-        <ownedComment xmi:id="_nC1a4GUaEeOlpfB_tZS-QA" annotatedElement="_Ps2L4GUaEeOlpfB_tZS-QA">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_Ps2L4GUaEeOlpfB_tZS-QA" name="attachToLayersStack">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_nC1a4GUaEeOlpfB_tZS-QA" annotatedElement="_Ps2L4GUaEeOlpfB_tZS-QA">
           <body>Method called to specify that this Layer should be initialized for the specified LayerStack.&#xD;
 Init this Layer for the specified LayersStack.&#xD;
 This method is called by the LayersStack when it detect that tha layer is attached to it.&#xD;
 </body>
         </ownedComment>
-        <ownedParameter xmi:id="_cr5cQGUaEeOlpfB_tZS-QA" name="owningLayersStack" type="_gT0asNa7EeKPiuTfpuvqHA"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_cr5cQGUaEeOlpfB_tZS-QA" name="owningLayersStack" type="_gT0asNa7EeKPiuTfpuvqHA"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_kzSSwGUdEeOlpfB_tZS-QA" name="getLayersStack" raisedException="_k-dZENxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_04NH4GUdEeOlpfB_tZS-QA" annotatedElement="_kzSSwGUdEeOlpfB_tZS-QA">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_kzSSwGUdEeOlpfB_tZS-QA" name="getLayersStack" raisedException="_k-dZENxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_04NH4GUdEeOlpfB_tZS-QA" annotatedElement="_kzSSwGUdEeOlpfB_tZS-QA">
           <body>A checked version of getOwningLayersStack.&#xD;
 </body>
         </ownedComment>
-        <ownedParameter xmi:id="_r3jmwGUdEeOlpfB_tZS-QA" name="layersStack" type="_gT0asNa7EeKPiuTfpuvqHA" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_r3jmwGUdEeOlpfB_tZS-QA" name="layersStack" type="_gT0asNa7EeKPiuTfpuvqHA" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_YeJ4IHbvEeOlpfB_tZS-QA" name="enterAttachedState" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_YeJ4IXbvEeOlpfB_tZS-QA" annotatedElement="_YeJ4IHbvEeOlpfB_tZS-QA">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_YeJ4IHbvEeOlpfB_tZS-QA" name="enterAttachedState" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_YeJ4IXbvEeOlpfB_tZS-QA" annotatedElement="_YeJ4IHbvEeOlpfB_tZS-QA">
           <body>This method is called by the class immediately after entering in attached state.&#xD;
 The methodcan be used to start the layer behaviors.</body>
         </ownedComment>
       </ownedOperation>
-      <ownedOperation xmi:id="_VTcHQHluEeOlpfB_tZS-QA" name="attach" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_tUEZQHlvEeOlpfB_tZS-QA" annotatedElement="_VTcHQHluEeOlpfB_tZS-QA">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_VTcHQHluEeOlpfB_tZS-QA" name="attach" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_tUEZQHlvEeOlpfB_tZS-QA" annotatedElement="_VTcHQHluEeOlpfB_tZS-QA">
           <body>Try to attach this Layer. If successful, the state go to &quot;attached&quot;. Otherwise, an exception is thrown.&#xD;
 A Layer can be attached if its required attributes are set.&#xD;
 Required attributes:&#xD;
@@ -689,35 +625,27 @@
 If this Layer is successfully attached, then attach subLayers.</body>
         </ownedComment>
       </ownedOperation>
-      <ownedOperation xmi:id="_XeS1QHluEeOlpfB_tZS-QA" name="detach" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_yitoYHlvEeOlpfB_tZS-QA" annotatedElement="_XeS1QHluEeOlpfB_tZS-QA">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_XeS1QHluEeOlpfB_tZS-QA" name="detach" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_yitoYHlvEeOlpfB_tZS-QA" annotatedElement="_XeS1QHluEeOlpfB_tZS-QA">
           <body>Detach the Layer. The state go to &quot;detached&quot;.&#xD;
 Associated behavior are stopped.</body>
         </ownedComment>
       </ownedOperation>
-      <ownedOperation xmi:id="_XNTkMHl0EeOlpfB_tZS-QA" name="exitAttachedState">
-        <ownedComment xmi:id="_e9TVwHl0EeOlpfB_tZS-QA" annotatedElement="_XNTkMHl0EeOlpfB_tZS-QA">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_XNTkMHl0EeOlpfB_tZS-QA" name="exitAttachedState">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_e9TVwHl0EeOlpfB_tZS-QA" annotatedElement="_XNTkMHl0EeOlpfB_tZS-QA">
           <body>This method is called just before this Layer leave the attached state.&#xD;
 </body>
         </ownedComment>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_HoKjcNjjEeKQqZMBCFd2Uw" name="LayerOperator" isAbstract="true">
-      <generalization xmi:id="_OJCPcNjjEeKQqZMBCFd2Uw" general="_9IaAANjiEeKQqZMBCFd2Uw"/>
-      <ownedAttribute xmi:id="_emyegNjnEeKQqZMBCFd2Uw" name="layers" type="_9IaAANjiEeKQqZMBCFd2Uw" isOrdered="true" aggregation="composite" association="_em-rwNjnEeKQqZMBCFd2Uw">
+      <generalization xmi:type="uml:Generalization" xmi:id="_OJCPcNjjEeKQqZMBCFd2Uw" general="_9IaAANjiEeKQqZMBCFd2Uw"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_emyegNjnEeKQqZMBCFd2Uw" name="layers" type="_9IaAANjiEeKQqZMBCFd2Uw" isOrdered="true" aggregation="composite" association="_em-rwNjnEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_emyegdjnEeKQqZMBCFd2Uw"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_emyegtjnEeKQqZMBCFd2Uw" value="*"/>
       </ownedAttribute>
-      <interfaceRealization xmi:id="_0RxQgHpGEeOlpfB_tZS-QA" name="InterfaceRealization1" client="_HoKjcNjjEeKQqZMBCFd2Uw" supplier="_RopgYHpGEeOlpfB_tZS-QA" contract="_RopgYHpGEeOlpfB_tZS-QA"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_WuVRUNjjEeKQqZMBCFd2Uw" name="AbstractLayerOperator" isAbstract="true">
-      <generalization xmi:id="_0lwNANjjEeKQqZMBCFd2Uw" general="_HoKjcNjjEeKQqZMBCFd2Uw"/>
-      <ownedAttribute xmi:id="_KSjUEAkdEeOnVqX9VcfeWQ" name="layerOperatorDescriptor" type="_GKddUAkdEeOnVqX9VcfeWQ" association="_KSvhUAkdEeOnVqX9VcfeWQ">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_KSjUEQkdEeOnVqX9VcfeWQ" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_KSjUEgkdEeOnVqX9VcfeWQ" value="1"/>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="__XEYgAw-EeOjX-JbGFEH7w" name="layerOperatorDescriptorName" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
-        <ownedComment xmi:id="_GnIFwAw_EeOjX-JbGFEH7w">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="__XEYgAw-EeOjX-JbGFEH7w" name="layerOperatorDescriptorName" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_GnIFwAw_EeOjX-JbGFEH7w">
           <body>The name of the associated descriptor.&#xD;
 This name is persisted with the  LayerOperator. The descriptor is not persisted.&#xD;
 The name is used to retrieve the Descriptor from the LayerOperatorDescriptorRegistry, when the application object is set. </body>
@@ -728,14 +656,19 @@
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedOperation xmi:id="_Dhl7YAxDEeOjX-JbGFEH7w" name="isDescriptorSet">
-        <ownedComment xmi:id="_LWD9QAxDEeOjX-JbGFEH7w">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_gF7Jw7UQEeiPJeGnZrmqWw" name="layerOperatorDescriptor" type="_GKddUAkdEeOnVqX9VcfeWQ" association="_gF7JwLUQEeiPJeGnZrmqWw">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_gF7w0LUQEeiPJeGnZrmqWw" value="1"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_gF7w0bUQEeiPJeGnZrmqWw" value="1"/>
+      </ownedAttribute>
+      <interfaceRealization xmi:type="uml:InterfaceRealization" xmi:id="_0RxQgHpGEeOlpfB_tZS-QA" name="InterfaceRealization1" client="_HoKjcNjjEeKQqZMBCFd2Uw" supplier="_RopgYHpGEeOlpfB_tZS-QA" contract="_RopgYHpGEeOlpfB_tZS-QA"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_Dhl7YAxDEeOjX-JbGFEH7w" name="isDescriptorSet">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_LWD9QAxDEeOjX-JbGFEH7w">
           <body>Return true if the Descriptor is set. Return false otherwise.</body>
         </ownedComment>
-        <ownedParameter xmi:id="_KE53YAxDEeOjX-JbGFEH7w" name="return" type="_TqqsYNa8EeKPiuTfpuvqHA" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_KE53YAxDEeOjX-JbGFEH7w" name="return" type="_TqqsYNa8EeKPiuTfpuvqHA" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_0VaLUA3SEeOjX-JbGFEH7w" name="resetDescriptor">
-        <ownedComment xmi:id="_4IMgcA3SEeOjX-JbGFEH7w">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_0VaLUA3SEeOjX-JbGFEH7w" name="resetDescriptor">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_4IMgcA3SEeOjX-JbGFEH7w">
           <body>Reset the descriptor accordingly to the descriptor name.&#xD;
 The descriptor is resseted only if the ::application and ::layerOperatorDescriptorName are set.&#xD;
 Nothing is done if one of the attribute is not set.&#xD;
@@ -744,38 +677,35 @@
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_gqW1kNjjEeKQqZMBCFd2Uw" name="TopLayerOperator">
-      <generalization xmi:id="_zoqSoNjjEeKQqZMBCFd2Uw" general="_WuVRUNjjEeKQqZMBCFd2Uw"/>
+      <generalization xmi:type="uml:Generalization" xmi:id="_zoqSoNjjEeKQqZMBCFd2Uw" general="_HoKjcNjjEeKQqZMBCFd2Uw"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_wpB4wNjjEeKQqZMBCFd2Uw" name="StackedLayerOperator">
-      <generalization xmi:id="_zL9IgNjjEeKQqZMBCFd2Uw" general="_WuVRUNjjEeKQqZMBCFd2Uw"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_1xJCENjjEeKQqZMBCFd2Uw" name="CustomLayerOperator">
-      <generalization xmi:id="_4b_ewNjjEeKQqZMBCFd2Uw" general="_HoKjcNjjEeKQqZMBCFd2Uw"/>
+      <generalization xmi:type="uml:Generalization" xmi:id="_zL9IgNjjEeKQqZMBCFd2Uw" general="_HoKjcNjjEeKQqZMBCFd2Uw"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_3q_DINjkEeKQqZMBCFd2Uw" name="layer_view_1" memberEnd="_3q_DIdjkEeKQqZMBCFd2Uw _3qy14NjkEeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_3q_DIdjkEeKQqZMBCFd2Uw" name="layer" type="_51zAINa7EeKPiuTfpuvqHA" association="_3q_DINjkEeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_3q_DIdjkEeKQqZMBCFd2Uw" name="layer" type="_51zAINa7EeKPiuTfpuvqHA" association="_3q_DINjkEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_3q_DItjkEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_3q_DI9jkEeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_em-rwNjnEeKQqZMBCFd2Uw" name="layerOperator_layerExpression_1" memberEnd="_em-rwdjnEeKQqZMBCFd2Uw _emyegNjnEeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_em-rwdjnEeKQqZMBCFd2Uw" name="layerOperator" type="_HoKjcNjjEeKQqZMBCFd2Uw" association="_em-rwNjnEeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_em-rwdjnEeKQqZMBCFd2Uw" name="layerOperator" type="_HoKjcNjjEeKQqZMBCFd2Uw" association="_em-rwNjnEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_em-rwtjnEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_em-rw9jnEeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_uMYd4NjoEeKQqZMBCFd2Uw" name="LayerStackDescriptorRegistry"/>
     <packagedElement xmi:type="uml:Class" xmi:id="_8OefoNjoEeKQqZMBCFd2Uw" name="PropertyRegistry">
-      <ownedAttribute xmi:id="_NVP94NjqEeKQqZMBCFd2Uw" name="properties" type="_-vaacNa7EeKPiuTfpuvqHA" isOrdered="true" aggregation="composite" association="_NVcLINjqEeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_NVP94NjqEeKQqZMBCFd2Uw" name="properties" type="_-vaacNa7EeKPiuTfpuvqHA" isOrdered="true" aggregation="composite" association="_NVcLINjqEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_NVP94djqEeKQqZMBCFd2Uw"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_NVP94tjqEeKQqZMBCFd2Uw" value="*"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_JhvqgNj_EeKQqZMBCFd2Uw" name="typeRegistry" type="_tLip8Nj-EeKQqZMBCFd2Uw" aggregation="composite" association="_Jh73wNj_EeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_JhvqgNj_EeKQqZMBCFd2Uw" name="typeRegistry" type="_tLip8Nj-EeKQqZMBCFd2Uw" aggregation="composite" association="_Jh73wNj_EeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Jhvqgdj_EeKQqZMBCFd2Uw"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Jhvqgtj_EeKQqZMBCFd2Uw" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_RrX8YA2qEeOjX-JbGFEH7w" name="propertiesCount" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA" isReadOnly="true" isDerived="true">
-        <ownedComment xmi:id="_p3RfsA2qEeOjX-JbGFEH7w">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_RrX8YA2qEeOjX-JbGFEH7w" name="propertiesCount" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA" isReadOnly="true" isDerived="true">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_p3RfsA2qEeOjX-JbGFEH7w">
           <body>The number of registered properties.&#xD;
 This is a value derived from the internal list of properties.</body>
         </ownedComment>
@@ -785,42 +715,42 @@
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedOperation xmi:id="_1X6RoNkCEeKQqZMBCFd2Uw" name="getPropertyIndex" raisedException="_k-dZENxGEeKwptaAAanMDg">
-        <ownedParameter xmi:id="__hV_wNkCEeKQqZMBCFd2Uw" name="propertyName" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
-        <ownedParameter xmi:id="_F2HJcNkDEeKQqZMBCFd2Uw" name="return" type="_SuHkkNa8EeKPiuTfpuvqHA" direction="return"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_1X6RoNkCEeKQqZMBCFd2Uw" name="getPropertyIndex" raisedException="_k-dZENxGEeKwptaAAanMDg">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="__hV_wNkCEeKQqZMBCFd2Uw" name="propertyName" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_F2HJcNkDEeKQqZMBCFd2Uw" name="return" type="_SuHkkNa8EeKPiuTfpuvqHA" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_dcjjAOT7EeKSDdPH_NXL-g" name="getProperty" raisedException="_k-dZENxGEeKwptaAAanMDg">
-        <ownedParameter xmi:id="_dcjjAeT7EeKSDdPH_NXL-g" name="propertyName" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
-        <ownedParameter xmi:id="_dcjjAuT7EeKSDdPH_NXL-g" name="return" type="_-vaacNa7EeKPiuTfpuvqHA" direction="return"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_dcjjAOT7EeKSDdPH_NXL-g" name="getProperty" raisedException="_k-dZENxGEeKwptaAAanMDg">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_dcjjAeT7EeKSDdPH_NXL-g" name="propertyName" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_dcjjAuT7EeKSDdPH_NXL-g" name="return" type="_-vaacNa7EeKPiuTfpuvqHA" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_Klpz4A3LEeOjX-JbGFEH7w" name="addProperty">
-        <ownedComment xmi:id="_RE4hIA3LEeOjX-JbGFEH7w">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_Klpz4A3LEeOjX-JbGFEH7w" name="addProperty">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_RE4hIA3LEeOjX-JbGFEH7w">
           <body>Add the property to the registry.&#xD;
 Also set the index of the property.&#xD;
 Do nothing if a Property with the same name already exist.&#xD;
 Note: a Property can not be retrieved from the registry (the operation is not supported by the application).</body>
         </ownedComment>
-        <ownedParameter xmi:id="_P1PeMA3LEeOjX-JbGFEH7w" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_P1PeMA3LEeOjX-JbGFEH7w" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_DYi5oNjpEeKQqZMBCFd2Uw" name="layersStackApplication_layerStackRegistry_1" memberEnd="_DYi5odjpEeKQqZMBCFd2Uw _DYWsYNjpEeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_DYi5odjpEeKQqZMBCFd2Uw" name="layersStackApplication" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="_DYi5oNjpEeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_DYi5odjpEeKQqZMBCFd2Uw" name="layersStackApplication" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="_DYi5oNjpEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_DYi5otjpEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_DYi5o9jpEeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_EEjEANjpEeKQqZMBCFd2Uw" name="layersStackApplication_propertyRegistry_1" memberEnd="_EEjEAdjpEeKQqZMBCFd2Uw _EEc9YNjpEeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_EEjEAdjpEeKQqZMBCFd2Uw" name="layersStackApplication" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="_EEjEANjpEeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_EEjEAdjpEeKQqZMBCFd2Uw" name="layersStackApplication" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="_EEjEANjpEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_EEjEAtjpEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_EEjEA9jpEeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_ItBOgNjqEeKQqZMBCFd2Uw" name="PropertyIndex">
-      <ownedAttribute xmi:id="_ZcvUINjqEeKQqZMBCFd2Uw" name="property" type="_-vaacNa7EeKPiuTfpuvqHA" association="_ZdBoANjqEeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_ZcvUINjqEeKQqZMBCFd2Uw" name="property" type="_-vaacNa7EeKPiuTfpuvqHA" association="_ZdBoANjqEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ZcvUIdjqEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ZcvUItjqEeKQqZMBCFd2Uw" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_j-DE0NjsEeKQqZMBCFd2Uw" name="index" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_j-DE0NjsEeKQqZMBCFd2Uw" name="index" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_lYYU0NjsEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_lYqosNjsEeKQqZMBCFd2Uw" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_lZbdsNjsEeKQqZMBCFd2Uw">
@@ -829,23 +759,23 @@
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_NVcLINjqEeKQqZMBCFd2Uw" name="propertyRegistry_property_1" memberEnd="_NVcLIdjqEeKQqZMBCFd2Uw _NVP94NjqEeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_NVcLIdjqEeKQqZMBCFd2Uw" name="propertyRegistry" type="_8OefoNjoEeKQqZMBCFd2Uw" association="_NVcLINjqEeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_NVcLIdjqEeKQqZMBCFd2Uw" name="propertyRegistry" type="_8OefoNjoEeKQqZMBCFd2Uw" association="_NVcLINjqEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_NVcLItjqEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_NVcLI9jqEeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_ZdBoANjqEeKQqZMBCFd2Uw" name="propertyIndex_property_1" memberEnd="_ZdBoAdjqEeKQqZMBCFd2Uw _ZcvUINjqEeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_ZdBoAdjqEeKQqZMBCFd2Uw" name="propertyIndex" type="_ItBOgNjqEeKQqZMBCFd2Uw" association="_ZdBoANjqEeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_ZdBoAdjqEeKQqZMBCFd2Uw" name="propertyIndex" type="_ItBOgNjqEeKQqZMBCFd2Uw" association="_ZdBoANjqEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ZdBoAtjqEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ZdBoA9jqEeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_hgu_wNjqEeKQqZMBCFd2Uw" name="StringToPropertyIndexMap">
-      <ownedAttribute xmi:id="_mzbocNjqEeKQqZMBCFd2Uw" name="value" type="_ItBOgNjqEeKQqZMBCFd2Uw" aggregation="composite" association="_mzt8UNjqEeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_mzbocNjqEeKQqZMBCFd2Uw" name="value" type="_ItBOgNjqEeKQqZMBCFd2Uw" aggregation="composite" association="_mzt8UNjqEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_mzbocdjqEeKQqZMBCFd2Uw"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_mzboctjqEeKQqZMBCFd2Uw" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_fQXNsNjsEeKQqZMBCFd2Uw" name="key" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_fQXNsNjsEeKQqZMBCFd2Uw" name="key" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_hC3tINjsEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_hDKoENjsEeKQqZMBCFd2Uw" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_hD5A0NjsEeKQqZMBCFd2Uw">
@@ -854,35 +784,35 @@
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_mzt8UNjqEeKQqZMBCFd2Uw" name="stringToPropertyIndexMap_propertyIndex_1" memberEnd="_mzt8UdjqEeKQqZMBCFd2Uw _mzbocNjqEeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_mzt8UdjqEeKQqZMBCFd2Uw" name="stringToPropertyIndexMap" type="_hgu_wNjqEeKQqZMBCFd2Uw" association="_mzt8UNjqEeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_mzt8UdjqEeKQqZMBCFd2Uw" name="stringToPropertyIndexMap" type="_hgu_wNjqEeKQqZMBCFd2Uw" association="_mzt8UNjqEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_mzt8UtjqEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_mzt8U9jqEeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_tLip8Nj-EeKQqZMBCFd2Uw" name="TypeRegistry">
-      <ownedAttribute xmi:id="_2az14Nj-EeKQqZMBCFd2Uw" name="types" type="_P4xeANj_EeKQqZMBCFd2Uw" aggregation="composite" association="_2bADINj-EeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_2az14Nj-EeKQqZMBCFd2Uw" name="types" type="_P4xeANj_EeKQqZMBCFd2Uw" aggregation="composite" association="_2bADINj-EeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_2az14dj-EeKQqZMBCFd2Uw"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_2az14tj-EeKQqZMBCFd2Uw" value="*"/>
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_2bADINj-EeKQqZMBCFd2Uw" name="typeRegistry_type_1" memberEnd="_2bADIdj-EeKQqZMBCFd2Uw _2az14Nj-EeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_2bADIdj-EeKQqZMBCFd2Uw" name="typeRegistry" type="_tLip8Nj-EeKQqZMBCFd2Uw" association="_2bADINj-EeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_2bADIdj-EeKQqZMBCFd2Uw" name="typeRegistry" type="_tLip8Nj-EeKQqZMBCFd2Uw" association="_2bADINj-EeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_2bADItj-EeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_2bADI9j-EeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_Jh73wNj_EeKQqZMBCFd2Uw" name="propertyRegistry_typeRegistry_1" memberEnd="_Jh73wdj_EeKQqZMBCFd2Uw _JhvqgNj_EeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_Jh73wdj_EeKQqZMBCFd2Uw" name="propertyRegistry" type="_8OefoNjoEeKQqZMBCFd2Uw" association="_Jh73wNj_EeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_Jh73wdj_EeKQqZMBCFd2Uw" name="propertyRegistry" type="_8OefoNjoEeKQqZMBCFd2Uw" association="_Jh73wNj_EeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Jh73wtj_EeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Jh73w9j_EeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_P4xeANj_EeKQqZMBCFd2Uw" name="StringToTypeMap">
-      <ownedAttribute xmi:id="_U05ZwNj_EeKQqZMBCFd2Uw" name="value" type="_EoL3oNhcEeKgkM6XJF9t4A" aggregation="composite" association="_U1FnANj_EeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_U05ZwNj_EeKQqZMBCFd2Uw" name="value" type="_EoL3oNhcEeKgkM6XJF9t4A" aggregation="composite" association="_U1FnANj_EeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_U05Zwdj_EeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_U05Zwtj_EeKQqZMBCFd2Uw" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_kaf1oNj_EeKQqZMBCFd2Uw" name="key" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_kaf1oNj_EeKQqZMBCFd2Uw" name="key" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_lxSCYNj_EeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_lxkWQNj_EeKQqZMBCFd2Uw" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_lyPEoNj_EeKQqZMBCFd2Uw">
@@ -891,65 +821,62 @@
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_U1FnANj_EeKQqZMBCFd2Uw" name="stringToTypeMap_type_1" memberEnd="_U1FnAdj_EeKQqZMBCFd2Uw _U05ZwNj_EeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_U1FnAdj_EeKQqZMBCFd2Uw" name="stringToTypeMap" type="_P4xeANj_EeKQqZMBCFd2Uw" association="_U1FnANj_EeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_U1FnAdj_EeKQqZMBCFd2Uw" name="stringToTypeMap" type="_P4xeANj_EeKQqZMBCFd2Uw" association="_U1FnANj_EeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_U1FnAtj_EeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_U1FnA9j_EeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_hQam0NkhEeKQqZMBCFd2Uw" name="layersStack_diagram_1" memberEnd="_hQam0dkhEeKQqZMBCFd2Uw _hQIS8NkhEeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_hQam0dkhEeKQqZMBCFd2Uw" name="layersStack" type="_gT0asNa7EeKPiuTfpuvqHA" association="_hQam0NkhEeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_hQam0dkhEeKQqZMBCFd2Uw" name="layersStack" type="_gT0asNa7EeKPiuTfpuvqHA" association="_hQam0NkhEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_hQam0tkhEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_hQam09khEeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_zYGE8NqBEeKQqZMBCFd2Uw" name="LayerDescriptorRegistry">
-      <ownedAttribute xmi:id="_TzkRwNqCEeKQqZMBCFd2Uw" name="layerDescriptors" type="_eNnjMNa7EeKPiuTfpuvqHA" aggregation="composite" association="_Tz2loNqCEeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_TzkRwNqCEeKQqZMBCFd2Uw" name="layerDescriptors" type="_eNnjMNa7EeKPiuTfpuvqHA" aggregation="composite" association="_Tz2loNqCEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_TzkRwdqCEeKQqZMBCFd2Uw"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_TzkRwtqCEeKQqZMBCFd2Uw" value="*"/>
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_5r8BkNqBEeKQqZMBCFd2Uw" name="layersStackApplication_layerDescriptorRegistry_1" memberEnd="_5r8BkdqBEeKQqZMBCFd2Uw _5rptsNqBEeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_5r8BkdqBEeKQqZMBCFd2Uw" name="layersStackApplication" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="_5r8BkNqBEeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_5r8BkdqBEeKQqZMBCFd2Uw" name="layersStackApplication" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="_5r8BkNqBEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_5r8BktqBEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_5r8Bk9qBEeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_Tz2loNqCEeKQqZMBCFd2Uw" name="layerDescriptorRegistry_layerDescriptor_1" memberEnd="_Tz2lodqCEeKQqZMBCFd2Uw _TzkRwNqCEeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_Tz2lodqCEeKQqZMBCFd2Uw" name="layerDescriptorRegistry" type="_zYGE8NqBEeKQqZMBCFd2Uw" association="_Tz2loNqCEeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_Tz2lodqCEeKQqZMBCFd2Uw" name="layerDescriptorRegistry" type="_zYGE8NqBEeKQqZMBCFd2Uw" association="_Tz2loNqCEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Tz2lotqCEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Tz2lo9qCEeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_iim5ENqCEeKQqZMBCFd2Uw" name="layerDescriptor_propertyRegistry_1" memberEnd="_iim5EdqCEeKQqZMBCFd2Uw _iiUlMNqCEeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="_iim5EdqCEeKQqZMBCFd2Uw" name="layerDescriptor" type="_eNnjMNa7EeKPiuTfpuvqHA" association="_iim5ENqCEeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_iim5EdqCEeKQqZMBCFd2Uw" name="layerDescriptor" type="_eNnjMNa7EeKPiuTfpuvqHA" association="_iim5ENqCEeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_iim5EtqCEeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_iim5E9qCEeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_xhwY8NqCEeKQqZMBCFd2Uw" name="SimpleLayerDescriptor">
-      <generalization xmi:id="_3ee2ENqCEeKQqZMBCFd2Uw" general="_eNnjMNa7EeKPiuTfpuvqHA"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_z4m7kNqCEeKQqZMBCFd2Uw" name="RegExpLayerDescriptor">
-      <generalization xmi:id="_5RvjcNqCEeKQqZMBCFd2Uw" general="_eNnjMNa7EeKPiuTfpuvqHA"/>
+      <generalization xmi:type="uml:Generalization" xmi:id="_3ee2ENqCEeKQqZMBCFd2Uw" general="_eNnjMNa7EeKPiuTfpuvqHA"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_325AENt0EeKQqZMBCFd2Uw" name="ApplicationDependantElement" isAbstract="true">
-      <ownedComment xmi:id="_KjtrkNt1EeKQqZMBCFd2Uw">
+      <ownedComment xmi:type="uml:Comment" xmi:id="_KjtrkNt1EeKQqZMBCFd2Uw">
         <body>Base class for elements depending on the LayerStackApplication.&#xD;
 This class carry a referenceto the Application.</body>
       </ownedComment>
-      <ownedAttribute xmi:id="__rXB8Nt0EeKQqZMBCFd2Uw" name="application" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="__rpV0Nt0EeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="__rXB8Nt0EeKQqZMBCFd2Uw" name="application" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="__rpV0Nt0EeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="__rXB8dt0EeKQqZMBCFd2Uw"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="__rXB8tt0EeKQqZMBCFd2Uw" value="1"/>
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="__rpV0Nt0EeKQqZMBCFd2Uw" name="applicationDependantElement_layersStackApplication_1" memberEnd="__rpV0dt0EeKQqZMBCFd2Uw __rXB8Nt0EeKQqZMBCFd2Uw">
-      <ownedEnd xmi:id="__rpV0dt0EeKQqZMBCFd2Uw" name="applicationDependantElement" type="_325AENt0EeKQqZMBCFd2Uw" association="__rpV0Nt0EeKQqZMBCFd2Uw">
+      <ownedEnd xmi:type="uml:Property" xmi:id="__rpV0dt0EeKQqZMBCFd2Uw" name="applicationDependantElement" type="_325AENt0EeKQqZMBCFd2Uw" association="__rpV0Nt0EeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="__rpV0tt0EeKQqZMBCFd2Uw" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="__rpV09t0EeKQqZMBCFd2Uw" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_IOwJ4Nt2EeKQqZMBCFd2Uw" name="LayerApplicationFactory">
-      <ownedAttribute xmi:id="_wROkUdt2EeKQqZMBCFd2Uw" name="application" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="_wROkUNt2EeKQqZMBCFd2Uw">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_wROkUdt2EeKQqZMBCFd2Uw" name="application" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="_wROkUNt2EeKQqZMBCFd2Uw">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_wROkUtt2EeKQqZMBCFd2Uw"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_wROkU9t2EeKQqZMBCFd2Uw" value="1"/>
       </ownedAttribute>
@@ -957,377 +884,169 @@
     <packagedElement xmi:type="uml:Association" xmi:id="_wROkUNt2EeKQqZMBCFd2Uw" name="layersStackApplication_layerApplicationFactory_1" memberEnd="_wROkUdt2EeKQqZMBCFd2Uw _wRCXENt2EeKQqZMBCFd2Uw"/>
     <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_iYKFMNxGEeKwptaAAanMDg" name="LayersException"/>
     <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_k-dZENxGEeKwptaAAanMDg" name="NotFoundException">
-      <generalization xmi:id="_oxlscNxGEeKwptaAAanMDg" general="_iYKFMNxGEeKwptaAAanMDg"/>
+      <generalization xmi:type="uml:Generalization" xmi:id="_oxlscNxGEeKwptaAAanMDg" general="_iYKFMNxGEeKwptaAAanMDg"/>
     </packagedElement>
     <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_KG7HMNxMEeKwptaAAanMDg" name="BadStateException">
-      <generalization xmi:id="_ShHsUNxMEeKwptaAAanMDg" general="_iYKFMNxGEeKwptaAAanMDg"/>
+      <generalization xmi:type="uml:Generalization" xmi:id="_ShHsUNxMEeKwptaAAanMDg" general="_iYKFMNxGEeKwptaAAanMDg"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_agAC4NxWEeKwptaAAanMDg" name="NullInstance">
-      <generalization xmi:id="_drCbgNxWEeKwptaAAanMDg" general="_AjTZ8Na8EeKPiuTfpuvqHA"/>
-      <ownedOperation xmi:id="_OU7XsNxXEeKwptaAAanMDg" name="getInstance" isStatic="true">
-        <ownedParameter xmi:id="_WSaLoNxXEeKwptaAAanMDg" type="_agAC4NxWEeKwptaAAanMDg" direction="return"/>
-      </ownedOperation>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_z9aN8OHTEeKCZbxNW-U3VQ" name="RegExpLayer">
-      <generalization xmi:id="_R8qP8OHUEeKCZbxNW-U3VQ" general="_51zAINa7EeKPiuTfpuvqHA"/>
-      <ownedAttribute xmi:id="_Bm93wBZ1EeOZwp016gnCFQ" name="expr" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_DqoYoBZ1EeOZwp016gnCFQ" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Dq76oBZ1EeOZwp016gnCFQ" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_Dr0rcBZ1EeOZwp016gnCFQ">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="_Fp_BQBZ1EeOZwp016gnCFQ" name="language" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_H11NwBZ1EeOZwp016gnCFQ" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_H2IIsBZ1EeOZwp016gnCFQ" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_H3BgkBZ1EeOZwp016gnCFQ">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="_NAa0AFCkEeO_9LQ4jZWm3w" name="isDomainChangedEventDependant" visibility="public" type="_TqqsYNa8EeKPiuTfpuvqHA">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_TxFPgFCkEeO_9LQ4jZWm3w" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_TxFPgVCkEeO_9LQ4jZWm3w" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_TxFPglCkEeO_9LQ4jZWm3w">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="_X_qIwFCkEeO_9LQ4jZWm3w" name="domainChangedEventLevel" visibility="public" type="_7cWpgFVHEeOah7Z-UYdQAA">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rnnm0FCkEeO_9LQ4jZWm3w" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rnnm0VCkEeO_9LQ4jZWm3w" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_rnnm0lCkEeO_9LQ4jZWm3w">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="_uJr68FCkEeO_9LQ4jZWm3w" name="isDiagramChangedEventDependant" visibility="public" type="_TqqsYNa8EeKPiuTfpuvqHA">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ua2jcFCkEeO_9LQ4jZWm3w" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ua8qEFCkEeO_9LQ4jZWm3w" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_ua8qEVCkEeO_9LQ4jZWm3w">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="_y220sFCkEeO_9LQ4jZWm3w" name="diagramChangedEventLevel" visibility="public" type="_7cWpgFVHEeOah7Z-UYdQAA">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_1VR-8FCkEeO_9LQ4jZWm3w" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_1VR-8VCkEeO_9LQ4jZWm3w" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_1VR-8lCkEeO_9LQ4jZWm3w">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="_sPbYQFClEeO_9LQ4jZWm3w" name="expressionContextObjectType" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_wnnggFClEeO_9LQ4jZWm3w" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_wnnggVClEeO_9LQ4jZWm3w" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_wnngglClEeO_9LQ4jZWm3w">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-      <ownedOperation xmi:id="_kI0XsBZ0EeOZwp016gnCFQ" name="activate">
-        <ownedParameter xmi:id="_Ifv3ABaBEeOZwp016gnCFQ" name="newParentLayer" type="_WuVRUNjjEeKQqZMBCFd2Uw"/>
-      </ownedOperation>
-      <ownedOperation xmi:id="_lpOagBZ0EeOZwp016gnCFQ" name="deactivate">
-        <ownedParameter xmi:id="_MZS7cBaBEeOZwp016gnCFQ" name="oldParentLayer" type="_WuVRUNjjEeKQqZMBCFd2Uw"/>
-      </ownedOperation>
-      <ownedOperation xmi:id="_pKKxsBZ0EeOZwp016gnCFQ" name="isDerivedView" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedParameter xmi:id="_-UwgIBZ0EeOZwp016gnCFQ" name="res" type="_TqqsYNa8EeKPiuTfpuvqHA" direction="return">
-          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_LLUi4BZ1EeOZwp016gnCFQ" value="1"/>
-          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_LLnd0BZ1EeOZwp016gnCFQ" value="1"/>
-        </ownedParameter>
-        <ownedParameter xmi:id="_0YIjYFVIEeOah7Z-UYdQAA" name="view">
-          <type xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
-        </ownedParameter>
-      </ownedOperation>
-      <ownedOperation xmi:id="_EnH6gFVJEeOah7Z-UYdQAA" name="attachDerivedView" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_Pusr4FVJEeOah7Z-UYdQAA">
-          <body>Attach the provided view to the Layer if the isDerivedView(view) return true for this view.</body>
-        </ownedComment>
-        <ownedParameter xmi:id="_EnH6hFVJEeOah7Z-UYdQAA" name="view">
-          <type xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
-        </ownedParameter>
-      </ownedOperation>
-      <ownedOperation xmi:id="_Y5m8QFVJEeOah7Z-UYdQAA" name="attachDerivedViews" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_Y5m8QVVJEeOah7Z-UYdQAA">
-          <body>For each view, attach it to the Layer if the isDerivedView(view) return true for the view.</body>
-        </ownedComment>
-        <ownedParameter xmi:id="_Y5m8QlVJEeOah7Z-UYdQAA" name="views">
-          <type xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
-          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_h3YvkFVJEeOah7Z-UYdQAA"/>
-          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_h3YvkVVJEeOah7Z-UYdQAA" value="*"/>
-        </ownedParameter>
-      </ownedOperation>
-      <ownedOperation xmi:id="_m3jd0FVJEeOah7Z-UYdQAA" name="attachDerivedViews" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_m3jd0VVJEeOah7Z-UYdQAA">
-          <body>Attach the views associated to the Diagram to this layer, if the isDerivedView(view) return true for the view.</body>
-        </ownedComment>
-      </ownedOperation>
-      <ownedOperation xmi:id="_Lwc4MFVKEeOah7Z-UYdQAA" name="lookupDerivedViews" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_Lwc4MVVKEeOah7Z-UYdQAA">
-          <body>Return the subcollection of views for which the expression return true.</body>
-        </ownedComment>
-        <ownedParameter xmi:id="_Lwc4MlVKEeOah7Z-UYdQAA" name="views">
-          <type xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
-          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Lwc4M1VKEeOah7Z-UYdQAA"/>
-          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Lwc4NFVKEeOah7Z-UYdQAA" value="*"/>
-        </ownedParameter>
-        <ownedParameter xmi:id="_X28v8FVKEeOah7Z-UYdQAA" name="res" direction="return">
-          <type xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
-          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_hTG1cFVXEeOeP67GJGKDkA"/>
-          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_hTG1cVVXEeOeP67GJGKDkA" value="*"/>
-        </ownedParameter>
+      <generalization xmi:type="uml:Generalization" xmi:id="_drCbgNxWEeKwptaAAanMDg" general="_AjTZ8Na8EeKPiuTfpuvqHA"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_OU7XsNxXEeKwptaAAanMDg" name="getInstance" isStatic="true">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_WSaLoNxXEeKwptaAAanMDg" type="_agAC4NxWEeKwptaAAanMDg" direction="return"/>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="__1GNoOHTEeKCZbxNW-U3VQ" name="Layer">
-      <generalization xmi:id="_am4OEOHUEeKCZbxNW-U3VQ" general="_51zAINa7EeKPiuTfpuvqHA"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_ti_eQOT_EeKSDdPH_NXL-g" name="Color">
-      <generalization xmi:id="_Y0k5AOUAEeKSDdPH_NXL-g" general="_EoL3oNhcEeKgkM6XJF9t4A"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_vkSnoOT_EeKSDdPH_NXL-g" name="ColorInstance">
-      <generalization xmi:id="_YCxooOUAEeKSDdPH_NXL-g" general="_AjTZ8Na8EeKPiuTfpuvqHA"/>
-      <ownedAttribute xmi:id="_Q8HvAOUAEeKSDdPH_NXL-g" name="value" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Q8HvAeUAEeKSDdPH_NXL-g" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Q8HvAuUAEeKSDdPH_NXL-g" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_Q8HvA-UAEeKSDdPH_NXL-g">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_fL2kIOUAEeKSDdPH_NXL-g" name="FillInstance">
-      <generalization xmi:id="_jXYwcOUAEeKSDdPH_NXL-g" general="_AjTZ8Na8EeKPiuTfpuvqHA"/>
-      <ownedAttribute xmi:id="_nVngkOUAEeKSDdPH_NXL-g" name="transparency" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_nVngkeUAEeKSDdPH_NXL-g" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_nVngkuUAEeKSDdPH_NXL-g" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_nVngk-UAEeKSDdPH_NXL-g">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="_uTht4OUAEeKSDdPH_NXL-g" name="fillColor" type="_vkSnoOT_EeKSDdPH_NXL-g" aggregation="composite" association="_uTre4OUAEeKSDdPH_NXL-g">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_uTht4eUAEeKSDdPH_NXL-g" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_uTht4uUAEeKSDdPH_NXL-g" value="1"/>
-      </ownedAttribute>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_gsEZsOUAEeKSDdPH_NXL-g" name="Fill">
-      <generalization xmi:id="_ip-Q0OUAEeKSDdPH_NXL-g" general="_EoL3oNhcEeKgkM6XJF9t4A"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Association" xmi:id="_uTre4OUAEeKSDdPH_NXL-g" name="fillInstance_colorInstance_1" memberEnd="_uTre4eUAEeKSDdPH_NXL-g _uTht4OUAEeKSDdPH_NXL-g">
-      <ownedEnd xmi:id="_uTre4eUAEeKSDdPH_NXL-g" name="fillInstance" type="_fL2kIOUAEeKSDdPH_NXL-g" association="_uTre4OUAEeKSDdPH_NXL-g">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_uTre4uUAEeKSDdPH_NXL-g" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_uTre4-UAEeKSDdPH_NXL-g" value="1"/>
-      </ownedEnd>
+      <generalization xmi:type="uml:Generalization" xmi:id="_am4OEOHUEeKCZbxNW-U3VQ" general="_51zAINa7EeKPiuTfpuvqHA"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_q85OgO3uEeKwLp35IbAIig" name="PropertySetterRegistry">
-      <ownedAttribute xmi:id="_3GHqIe3uEeKwLp35IbAIig" name="application" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="_3GHqIO3uEeKwLp35IbAIig">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_3GHqIe3uEeKwLp35IbAIig" name="application" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="_3GHqIO3uEeKwLp35IbAIig">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_3GHqIu3uEeKwLp35IbAIig"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_3GHqI-3uEeKwLp35IbAIig" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_iPT94O3vEeKwLp35IbAIig" name="propertySetters" type="_fyVlIO3vEeKwLp35IbAIig" isOrdered="true" association="_iPmRwO3vEeKwLp35IbAIig">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_iPT94O3vEeKwLp35IbAIig" name="propertySetters" type="_fyVlIO3vEeKwLp35IbAIig" isOrdered="true" association="_iPmRwO3vEeKwLp35IbAIig">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_iPT94e3vEeKwLp35IbAIig"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_iPT94u3vEeKwLp35IbAIig" value="*"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_hmejMO5mEeK0p4PkXjd-_Q" name="setterMap" type="_JSMf8O5mEeK0p4PkXjd-_Q" aggregation="composite" association="_hmkp0O5mEeK0p4PkXjd-_Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_hmejMO5mEeK0p4PkXjd-_Q" name="setterMap" type="_JSMf8O5mEeK0p4PkXjd-_Q" aggregation="composite" association="_hmkp0O5mEeK0p4PkXjd-_Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_hmejMe5mEeK0p4PkXjd-_Q"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_hmejMu5mEeK0p4PkXjd-_Q" value="*"/>
       </ownedAttribute>
-      <ownedOperation xmi:id="_L7LusO5WEeK0p4PkXjd-_Q" name="getPropertySetter" raisedException="_k-dZENxGEeKwptaAAanMDg">
-        <ownedParameter xmi:id="_Tr1nkO5WEeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
-        <ownedParameter xmi:id="_ZJbRoO5WEeK0p4PkXjd-_Q" name="return" type="_fyVlIO3vEeKwLp35IbAIig" direction="return"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_L7LusO5WEeK0p4PkXjd-_Q" name="getPropertySetter" raisedException="_k-dZENxGEeKwptaAAanMDg">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_Tr1nkO5WEeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_ZJbRoO5WEeK0p4PkXjd-_Q" name="return" type="_fyVlIO3vEeKwLp35IbAIig" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_fF4pAO5WEeK0p4PkXjd-_Q" name="getPropertySetter" raisedException="_k-dZENxGEeKwptaAAanMDg">
-        <ownedParameter xmi:id="_fF4pAe5WEeK0p4PkXjd-_Q" name="property" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
-        <ownedParameter xmi:id="_fF4pAu5WEeK0p4PkXjd-_Q" name="return" type="_fyVlIO3vEeKwLp35IbAIig" direction="return"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_fF4pAO5WEeK0p4PkXjd-_Q" name="getPropertySetter" raisedException="_k-dZENxGEeKwptaAAanMDg">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_fF4pAe5WEeK0p4PkXjd-_Q" name="property" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_fF4pAu5WEeK0p4PkXjd-_Q" name="return" type="_fyVlIO3vEeKwLp35IbAIig" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_mCwUgO5WEeK0p4PkXjd-_Q" name="addPropertySetter">
-        <ownedParameter xmi:id="_quPzQO5WEeK0p4PkXjd-_Q" name="setter" type="_fyVlIO3vEeKwLp35IbAIig"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_mCwUgO5WEeK0p4PkXjd-_Q" name="addPropertySetter">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_quPzQO5WEeK0p4PkXjd-_Q" name="setter" type="_fyVlIO3vEeKwLp35IbAIig"/>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_3GHqIO3uEeKwLp35IbAIig" name="layersStackApplication_propertySetterRegistry_1" memberEnd="_3GHqIe3uEeKwLp35IbAIig _3F7c4O3uEeKwLp35IbAIig"/>
     <packagedElement xmi:type="uml:Class" xmi:id="_fyVlIO3vEeKwLp35IbAIig" name="PropertySetter" isAbstract="true">
-      <ownedAttribute xmi:id="_4C8Y8O5VEeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA" association="_4DImMO5VEeK0p4PkXjd-_Q">
-        <ownedComment xmi:id="_ApRVkO5WEeK0p4PkXjd-_Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_4C8Y8O5VEeK0p4PkXjd-_Q" name="property" type="_-vaacNa7EeKPiuTfpuvqHA" association="_4DImMO5VEeK0p4PkXjd-_Q">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_ApRVkO5WEeK0p4PkXjd-_Q">
           <body>The property for which this setter is for.</body>
         </ownedComment>
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_4C8Y8e5VEeK0p4PkXjd-_Q"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_4C8Y8u5VEeK0p4PkXjd-_Q" value="1"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_p3vR8O5qEeK0p4PkXjd-_Q" name="propertyName" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_p3vR8O5qEeK0p4PkXjd-_Q" name="propertyName" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_scKWgO5qEeK0p4PkXjd-_Q" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_sccqYO5qEeK0p4PkXjd-_Q" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_sdl54O5qEeK0p4PkXjd-_Q">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedOperation xmi:id="_GOgVMO5VEeK0p4PkXjd-_Q" name="setValue">
-        <ownedParameter xmi:id="_P9Ky4O5VEeK0p4PkXjd-_Q" name="view">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_GOgVMO5VEeK0p4PkXjd-_Q" name="setValue">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_P9Ky4O5VEeK0p4PkXjd-_Q" name="view">
           <type xmi:type="uml:Class" href="notation/notation.uml#_AziHOrcnEeKeLJDBCBPhPw"/>
         </ownedParameter>
-        <ownedParameter xmi:id="_pXFBcO5VEeK0p4PkXjd-_Q" name="value" type="_AjTZ8Na8EeKPiuTfpuvqHA"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_pXFBcO5VEeK0p4PkXjd-_Q" name="value" type="_AjTZ8Na8EeKPiuTfpuvqHA"/>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_iPmRwO3vEeKwLp35IbAIig" name="propertySetterRegistry_propertySetter_1" memberEnd="_iPmRwe3vEeKwLp35IbAIig _iPT94O3vEeKwLp35IbAIig">
-      <ownedEnd xmi:id="_iPmRwe3vEeKwLp35IbAIig" name="propertySetterRegistry" type="_q85OgO3uEeKwLp35IbAIig" association="_iPmRwO3vEeKwLp35IbAIig">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_iPmRwe3vEeKwLp35IbAIig" name="propertySetterRegistry" type="_q85OgO3uEeKwLp35IbAIig" association="_iPmRwO3vEeKwLp35IbAIig">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_iPmRwu3vEeKwLp35IbAIig" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_iPmRw-3vEeKwLp35IbAIig" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_4DImMO5VEeK0p4PkXjd-_Q" name="propertySetter_property_1" memberEnd="_4DImMe5VEeK0p4PkXjd-_Q _4C8Y8O5VEeK0p4PkXjd-_Q">
-      <ownedEnd xmi:id="_4DImMe5VEeK0p4PkXjd-_Q" name="propertySetter" type="_fyVlIO3vEeKwLp35IbAIig" association="_4DImMO5VEeK0p4PkXjd-_Q">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_4DImMe5VEeK0p4PkXjd-_Q" name="propertySetter" type="_fyVlIO3vEeKwLp35IbAIig" association="_4DImMO5VEeK0p4PkXjd-_Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_4DImMu5VEeK0p4PkXjd-_Q" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_4DImM-5VEeK0p4PkXjd-_Q" value="1"/>
       </ownedEnd>
     </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_R-WVkO5XEeK0p4PkXjd-_Q" name="FillPropertySetter">
-      <generalization xmi:id="_Y8pkcO5XEeK0p4PkXjd-_Q" general="_fyVlIO3vEeKwLp35IbAIig"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_Ue7b8O5XEeK0p4PkXjd-_Q" name="IsValidPropertySetter">
-      <generalization xmi:id="_ZxycsO5XEeK0p4PkXjd-_Q" general="_fyVlIO3vEeKwLp35IbAIig"/>
-    </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_JSMf8O5mEeK0p4PkXjd-_Q" name="StringToPropertySetter">
-      <ownedAttribute xmi:id="_NBuFsO5mEeK0p4PkXjd-_Q" name="key" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_NBuFsO5mEeK0p4PkXjd-_Q" name="key" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PgE-gO5mEeK0p4PkXjd-_Q" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_PgdZAO5mEeK0p4PkXjd-_Q" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_Phgh4O5mEeK0p4PkXjd-_Q">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_QfjegO5mEeK0p4PkXjd-_Q" name="value" type="_fyVlIO3vEeKwLp35IbAIig" aggregation="composite" association="_QfvrwO5mEeK0p4PkXjd-_Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_QfjegO5mEeK0p4PkXjd-_Q" name="value" type="_fyVlIO3vEeKwLp35IbAIig" aggregation="composite" association="_QfvrwO5mEeK0p4PkXjd-_Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Qfjege5mEeK0p4PkXjd-_Q" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Qfjegu5mEeK0p4PkXjd-_Q" value="1"/>
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_QfvrwO5mEeK0p4PkXjd-_Q" name="stringToPropertySetter_propertySetter_1" memberEnd="_Qfvrwe5mEeK0p4PkXjd-_Q _QfjegO5mEeK0p4PkXjd-_Q">
-      <ownedEnd xmi:id="_Qfvrwe5mEeK0p4PkXjd-_Q" name="stringToPropertySetter" type="_JSMf8O5mEeK0p4PkXjd-_Q" association="_QfvrwO5mEeK0p4PkXjd-_Q">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_Qfvrwe5mEeK0p4PkXjd-_Q" name="stringToPropertySetter" type="_JSMf8O5mEeK0p4PkXjd-_Q" association="_QfvrwO5mEeK0p4PkXjd-_Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Qfvrwu5mEeK0p4PkXjd-_Q" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Qfvrw-5mEeK0p4PkXjd-_Q" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_hmkp0O5mEeK0p4PkXjd-_Q" name="propertySetterRegistry_stringToPropertySetter_1" memberEnd="_hmkp0e5mEeK0p4PkXjd-_Q _hmejMO5mEeK0p4PkXjd-_Q">
-      <ownedEnd xmi:id="_hmkp0e5mEeK0p4PkXjd-_Q" name="propertySetterRegistry" type="_q85OgO3uEeKwLp35IbAIig" association="_hmkp0O5mEeK0p4PkXjd-_Q">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_hmkp0e5mEeK0p4PkXjd-_Q" name="propertySetterRegistry" type="_q85OgO3uEeKwLp35IbAIig" association="_hmkp0O5mEeK0p4PkXjd-_Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_hmkp0u5mEeK0p4PkXjd-_Q" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_hmkp0-5mEeK0p4PkXjd-_Q" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_-z_6YO5zEeK0p4PkXjd-_Q" name="NullPropertySetter">
-      <generalization xmi:id="_Co0P0O50EeK0p4PkXjd-_Q" general="_fyVlIO3vEeKwLp35IbAIig"/>
+      <generalization xmi:type="uml:Generalization" xmi:id="_Co0P0O50EeK0p4PkXjd-_Q" general="_fyVlIO3vEeKwLp35IbAIig"/>
     </packagedElement>
     <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_Qeyn4O7GEeK0p4PkXjd-_Q" name="ComputePropertyValueCommand"/>
     <packagedElement xmi:type="uml:Interface" xmi:id="_XZJOcO8UEeK0p4PkXjd-_Q" name="ComputePropertyValueCommandItf">
-      <ownedOperation xmi:id="_uYMx4O8ZEeK0p4PkXjd-_Q" name="getCmdValue" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_f0BhUO8aEeK0p4PkXjd-_Q">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_uYMx4O8ZEeK0p4PkXjd-_Q" name="getCmdValue" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_f0BhUO8aEeK0p4PkXjd-_Q">
           <body>	 * Execute the command and return the computed value.&#xD;
 	 * Compute the value of the Property, and return it.&#xD;
 	 * @return The computed value of the Property.&#xD;
 </body>
         </ownedComment>
-        <ownedParameter xmi:id="_zjYdUO8ZEeK0p4PkXjd-_Q" type="_AjTZ8Na8EeKPiuTfpuvqHA" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_zjYdUO8ZEeK0p4PkXjd-_Q" type="_AjTZ8Na8EeKPiuTfpuvqHA" direction="return"/>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_rEb-0O-MEeK0p4PkXjd-_Q" name="abstractLayer_property_1" memberEnd="_rEb-0e-MEeK0p4PkXjd-_Q _rEPKgO-MEeK0p4PkXjd-_Q">
-      <ownedEnd xmi:id="_rEb-0e-MEeK0p4PkXjd-_Q" name="abstractLayer" type="_51zAINa7EeKPiuTfpuvqHA" association="_rEb-0O-MEeK0p4PkXjd-_Q">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_rEb-0e-MEeK0p4PkXjd-_Q" name="abstractLayer" type="_51zAINa7EeKPiuTfpuvqHA" association="_rEb-0O-MEeK0p4PkXjd-_Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rEb-0u-MEeK0p4PkXjd-_Q" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rEb-0--MEeK0p4PkXjd-_Q" value="1"/>
       </ownedEnd>
     </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_RnjeUO-YEeK0p4PkXjd-_Q" name="LineType">
-      <generalization xmi:id="_UJAucO-YEeK0p4PkXjd-_Q" general="_EoL3oNhcEeKgkM6XJF9t4A"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_ZGwa0O-YEeK0p4PkXjd-_Q" name="LineInstance">
-      <generalization xmi:id="_ijurkO-YEeK0p4PkXjd-_Q" general="_AjTZ8Na8EeKPiuTfpuvqHA"/>
-      <ownedAttribute xmi:id="_vpaIYO-YEeK0p4PkXjd-_Q" name="lineColor" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_x1KOQO-YEeK0p4PkXjd-_Q" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_x1iowO-YEeK0p4PkXjd-_Q" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_x2frAO-YEeK0p4PkXjd-_Q">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="_yrVBQO-YEeK0p4PkXjd-_Q" name="lineWith" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_1JMK0O-YEeK0p4PkXjd-_Q" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_1JbbYO-YEeK0p4PkXjd-_Q" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_1KSXAO-YEeK0p4PkXjd-_Q">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_JgyOsO-cEeK0p4PkXjd-_Q" name="LinePropertySetter">
-      <generalization xmi:id="_QKhi0O-cEeK0p4PkXjd-_Q" general="_fyVlIO3vEeKwLp35IbAIig"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_Gvwp0O-iEeK0p4PkXjd-_Q" name="FontPropertySetter">
-      <generalization xmi:id="_LuAFcO-iEeK0p4PkXjd-_Q" general="_fyVlIO3vEeKwLp35IbAIig"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_OtShEO-iEeK0p4PkXjd-_Q" name="FontInstance">
-      <generalization xmi:id="_VH6bIO-iEeK0p4PkXjd-_Q" general="_AjTZ8Na8EeKPiuTfpuvqHA"/>
-      <ownedAttribute xmi:id="_Xlt6UO-iEeK0p4PkXjd-_Q" name="fontColor" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_aTOpcO-iEeK0p4PkXjd-_Q" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_aTnD8O-iEeK0p4PkXjd-_Q" value="1"/>
-        <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_vcdF8O-iEeK0p4PkXjd-_Q" value="15053796"/>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="_bD8UsO-iEeK0p4PkXjd-_Q" name="fontName" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_dY9rUO-iEeK0p4PkXjd-_Q" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_dZWF0O-iEeK0p4PkXjd-_Q" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_sZKUEO-iEeK0p4PkXjd-_Q" value="Segoe UI"/>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="_epxy8O-iEeK0p4PkXjd-_Q" name="fontHeigh" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_heIw8O-iEeK0p4PkXjd-_Q" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_hebE0O-iEeK0p4PkXjd-_Q" value="1"/>
-        <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_x9IS8O-iEeK0p4PkXjd-_Q" value="9"/>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="_inEu8O-iEeK0p4PkXjd-_Q" name="bold" visibility="public" type="_TqqsYNa8EeKPiuTfpuvqHA">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_k3zbcO-iEeK0p4PkXjd-_Q" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_k4L18O-iEeK0p4PkXjd-_Q" value="1"/>
-        <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_0K5LAO-iEeK0p4PkXjd-_Q" value="true"/>
-      </ownedAttribute>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_Q6ta4O-iEeK0p4PkXjd-_Q" name="FontType">
-      <generalization xmi:id="_UKLAgO-iEeK0p4PkXjd-_Q" general="_EoL3oNhcEeKgkM6XJF9t4A"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_xZ-bMO-lEeK0p4PkXjd-_Q" name="IsVisiblePropertySetter">
-      <generalization xmi:id="_01zB0O-lEeK0p4PkXjd-_Q" general="_fyVlIO3vEeKwLp35IbAIig"/>
-    </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_GKddUAkdEeOnVqX9VcfeWQ" name="LayerOperatorDescriptor">
-      <ownedAttribute xmi:id="_5xnb4AkdEeOnVqX9VcfeWQ" name="propertyOperators" type="_wk7C0AkdEeOnVqX9VcfeWQ" isOrdered="true" association="_5x5vwAkdEeOnVqX9VcfeWQ">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_5xnb4AkdEeOnVqX9VcfeWQ" name="propertyOperators" type="_wk7C0AkdEeOnVqX9VcfeWQ" isOrdered="true" association="_5x5vwAkdEeOnVqX9VcfeWQ">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_5xnb4QkdEeOnVqX9VcfeWQ"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_5xnb4gkdEeOnVqX9VcfeWQ" value="*"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_ysOUQAkiEeOnVqX9VcfeWQ" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_ysOUQAkiEeOnVqX9VcfeWQ" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_1AnYwAkiEeOnVqX9VcfeWQ" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_1A5soAkiEeOnVqX9VcfeWQ" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_1B2u4AkiEeOnVqX9VcfeWQ">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedOperation xmi:id="_w5x7sAkhEeOnVqX9VcfeWQ" name="getPropertyOperator" raisedException="_k-dZENxGEeKwptaAAanMDg">
-        <ownedParameter xmi:id="_C90I4AkiEeOnVqX9VcfeWQ" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
-        <ownedParameter xmi:id="_MNkdAAkiEeOnVqX9VcfeWQ" name="return" type="_wk7C0AkdEeOnVqX9VcfeWQ" direction="return"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_w5x7sAkhEeOnVqX9VcfeWQ" name="getPropertyOperator" raisedException="_k-dZENxGEeKwptaAAanMDg">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_C90I4AkiEeOnVqX9VcfeWQ" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_MNkdAAkiEeOnVqX9VcfeWQ" name="return" type="_wk7C0AkdEeOnVqX9VcfeWQ" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_TzuWEAkiEeOnVqX9VcfeWQ" name="setPropertyOperator">
-        <ownedParameter xmi:id="_boCm8AkiEeOnVqX9VcfeWQ" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
-        <ownedParameter xmi:id="_eeXT0AkiEeOnVqX9VcfeWQ" name="operator" type="_wk7C0AkdEeOnVqX9VcfeWQ"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_TzuWEAkiEeOnVqX9VcfeWQ" name="setPropertyOperator">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_boCm8AkiEeOnVqX9VcfeWQ" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_eeXT0AkiEeOnVqX9VcfeWQ" name="operator" type="_wk7C0AkdEeOnVqX9VcfeWQ"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_htp6UAkiEeOnVqX9VcfeWQ" name="createLayerOperator">
-        <ownedParameter xmi:id="_rwGPoAkiEeOnVqX9VcfeWQ" name="return" type="_WuVRUNjjEeKQqZMBCFd2Uw" direction="return"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_htp6UAkiEeOnVqX9VcfeWQ" name="createLayerOperator">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_rwGPoAkiEeOnVqX9VcfeWQ" name="return" type="_HoKjcNjjEeKQqZMBCFd2Uw" direction="return"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_oj_4UAkoEeOnVqX9VcfeWQ" name="setPropertyCollectionSize">
-        <ownedComment xmi:id="_x-5FcAkoEeOnVqX9VcfeWQ">
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_oj_4UAkoEeOnVqX9VcfeWQ" name="setPropertyCollectionSize">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_x-5FcAkoEeOnVqX9VcfeWQ">
           <body>Set the size of the property collection declared in the PropertyRegistry.&#xD;
 Setting the size allow to set the size of the lists indexed with Properties' index (like propertyOperators).</body>
         </ownedComment>
-        <ownedParameter xmi:id="_wdouEAkoEeOnVqX9VcfeWQ" name="size" type="_SuHkkNa8EeKPiuTfpuvqHA"/>
-        <ownedParameter xmi:id="_x2wVwAkrEeOnVqX9VcfeWQ" name="defaultPropertyOperator" type="_G-g6AAkpEeOnVqX9VcfeWQ"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_wdouEAkoEeOnVqX9VcfeWQ" name="size" type="_SuHkkNa8EeKPiuTfpuvqHA"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_x2wVwAkrEeOnVqX9VcfeWQ" name="defaultPropertyOperator" type="_wk7C0AkdEeOnVqX9VcfeWQ"/>
       </ownedOperation>
     </packagedElement>
-    <packagedElement xmi:type="uml:Association" xmi:id="_KSvhUAkdEeOnVqX9VcfeWQ" name="abstractLayerOperator_layerOperatorDescriptor_1" memberEnd="_KSvhUQkdEeOnVqX9VcfeWQ _KSjUEAkdEeOnVqX9VcfeWQ">
-      <ownedEnd xmi:id="_KSvhUQkdEeOnVqX9VcfeWQ" name="abstractLayerOperator" type="_WuVRUNjjEeKQqZMBCFd2Uw" association="_KSvhUAkdEeOnVqX9VcfeWQ">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_KSvhUgkdEeOnVqX9VcfeWQ" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_KSvhUwkdEeOnVqX9VcfeWQ" value="1"/>
-      </ownedEnd>
-    </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_T5we4AkdEeOnVqX9VcfeWQ" name="LayerOperatorDescriptorRegistry">
-      <ownedAttribute xmi:id="_X8IIIAkdEeOnVqX9VcfeWQ" name="descriptors" type="_GKddUAkdEeOnVqX9VcfeWQ" aggregation="composite" association="_X8acAAkdEeOnVqX9VcfeWQ">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_X8IIIAkdEeOnVqX9VcfeWQ" name="descriptors" type="_GKddUAkdEeOnVqX9VcfeWQ" aggregation="composite" association="_X8acAAkdEeOnVqX9VcfeWQ">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_X8IIIQkdEeOnVqX9VcfeWQ"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_X8IIIgkdEeOnVqX9VcfeWQ" value="*"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_31bcAAkdEeOnVqX9VcfeWQ" name="propertyOperators" type="_wk7C0AkdEeOnVqX9VcfeWQ" isOrdered="true" aggregation="composite" association="_31lNAAkdEeOnVqX9VcfeWQ">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_31bcAAkdEeOnVqX9VcfeWQ" name="propertyOperators" type="_wk7C0AkdEeOnVqX9VcfeWQ" isOrdered="true" aggregation="composite" association="_31lNAAkdEeOnVqX9VcfeWQ">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_31bcAQkdEeOnVqX9VcfeWQ"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_31bcAgkdEeOnVqX9VcfeWQ" value="*"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_TfMTsAkmEeOnVqX9VcfeWQ" name="propertyCollectionSize" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA">
-        <ownedComment xmi:id="_Z8ZnsAkmEeOnVqX9VcfeWQ">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_TfMTsAkmEeOnVqX9VcfeWQ" name="propertyCollectionSize" visibility="public" type="_SuHkkNa8EeKPiuTfpuvqHA">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_Z8ZnsAkmEeOnVqX9VcfeWQ">
           <body>This represents the number of Properties that are declared in the PrpertyRegistry.&#xD;
 This number is used to initialized the collections indexed by Properties' index &#xD;
 (like LayerOperatorDescriptor::propertyOperators).&#xD;
@@ -1340,8 +1059,8 @@
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_rTr0UA2fEeOjX-JbGFEH7w" name="defaultOperator" visibility="public" type="_G-g6AAkpEeOnVqX9VcfeWQ" isReadOnly="true">
-        <ownedComment xmi:id="_xzwPEA2fEeOjX-JbGFEH7w">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_rTr0UA2fEeOjX-JbGFEH7w" name="defaultOperator" visibility="public" type="_wk7C0AkdEeOnVqX9VcfeWQ" isReadOnly="true">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_xzwPEA2fEeOjX-JbGFEH7w">
           <body>The default Operator used when the propertiesListSize are set.</body>
         </ownedComment>
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_usAbAA2fEeOjX-JbGFEH7w" value="1"/>
@@ -1350,207 +1069,170 @@
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedOperation xmi:id="_ZjkYUAkjEeOnVqX9VcfeWQ" name="addLayerOperatorDescriptor">
-        <ownedParameter xmi:id="_kc_Y8AkjEeOnVqX9VcfeWQ" name="descriptor" type="_GKddUAkdEeOnVqX9VcfeWQ"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_ZjkYUAkjEeOnVqX9VcfeWQ" name="addLayerOperatorDescriptor">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_kc_Y8AkjEeOnVqX9VcfeWQ" name="descriptor" type="_GKddUAkdEeOnVqX9VcfeWQ"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_sQbgEAkjEeOnVqX9VcfeWQ" name="getLayerOperatorDescriptor" raisedException="_k-dZENxGEeKwptaAAanMDg">
-        <ownedParameter xmi:id="_sQbgEQkjEeOnVqX9VcfeWQ" name="descriptor" type="_GKddUAkdEeOnVqX9VcfeWQ" direction="return"/>
-        <ownedParameter xmi:id="_0hL1UAkjEeOnVqX9VcfeWQ" name="name" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_sQbgEAkjEeOnVqX9VcfeWQ" name="getLayerOperatorDescriptor" raisedException="_k-dZENxGEeKwptaAAanMDg">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_sQbgEQkjEeOnVqX9VcfeWQ" name="descriptor" type="_GKddUAkdEeOnVqX9VcfeWQ" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_0hL1UAkjEeOnVqX9VcfeWQ" name="name" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_6Ui7EAkjEeOnVqX9VcfeWQ" name="addPropertyOperator">
-        <ownedParameter xmi:id="__1tdkAkjEeOnVqX9VcfeWQ" name="operator" type="_wk7C0AkdEeOnVqX9VcfeWQ"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_6Ui7EAkjEeOnVqX9VcfeWQ" name="addPropertyOperator">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="__1tdkAkjEeOnVqX9VcfeWQ" name="operator" type="_wk7C0AkdEeOnVqX9VcfeWQ"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_HQzWIAkkEeOnVqX9VcfeWQ" name="getPropertyOperator" raisedException="_k-dZENxGEeKwptaAAanMDg">
-        <ownedParameter xmi:id="_HQzWIQkkEeOnVqX9VcfeWQ" name="operator" type="_wk7C0AkdEeOnVqX9VcfeWQ" direction="return"/>
-        <ownedParameter xmi:id="_M6KLUAkkEeOnVqX9VcfeWQ" name="name" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_HQzWIAkkEeOnVqX9VcfeWQ" name="getPropertyOperator" raisedException="_k-dZENxGEeKwptaAAanMDg">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_HQzWIQkkEeOnVqX9VcfeWQ" name="operator" type="_wk7C0AkdEeOnVqX9VcfeWQ" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_M6KLUAkkEeOnVqX9VcfeWQ" name="name" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_U3cyAAkkEeOnVqX9VcfeWQ" name="attachOperatorToDescriptor" raisedException="_k-dZENxGEeKwptaAAanMDg">
-        <ownedParameter xmi:id="_v9TU8A0JEeOjX-JbGFEH7w" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
-        <ownedParameter xmi:id="_csy9oAkkEeOnVqX9VcfeWQ" name="operatorName" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
-        <ownedParameter xmi:id="_hIyn0AkkEeOnVqX9VcfeWQ" name="layerDescriptorName" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_U3cyAAkkEeOnVqX9VcfeWQ" name="attachOperatorToDescriptor" raisedException="_k-dZENxGEeKwptaAAanMDg">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_v9TU8A0JEeOjX-JbGFEH7w" name="property" type="_-vaacNa7EeKPiuTfpuvqHA"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_csy9oAkkEeOnVqX9VcfeWQ" name="operatorName" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_hIyn0AkkEeOnVqX9VcfeWQ" name="layerDescriptorName" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
       </ownedOperation>
-      <ownedOperation xmi:id="_p1keQBKGEeO9e9pZ1EIGJg" name="createLayerOperator" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedParameter xmi:id="_p1keQRKGEeO9e9pZ1EIGJg" name="return" type="_WuVRUNjjEeKQqZMBCFd2Uw" direction="return"/>
-        <ownedParameter xmi:id="_vtq6EBKGEeO9e9pZ1EIGJg" name="layerOperatorID" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_p1keQBKGEeO9e9pZ1EIGJg" name="createLayerOperator" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_p1keQRKGEeO9e9pZ1EIGJg" name="return" type="_HoKjcNjjEeKQqZMBCFd2Uw" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_vtq6EBKGEeO9e9pZ1EIGJg" name="layerOperatorID" type="_OyQ5QL1xEeKKJJ5BmR3W3Q"/>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_X8acAAkdEeOnVqX9VcfeWQ" name="layerOperatorDescriptorRegistry_layerOperatorDescriptor_1" memberEnd="_X8acAQkdEeOnVqX9VcfeWQ _X8IIIAkdEeOnVqX9VcfeWQ">
-      <ownedEnd xmi:id="_X8acAQkdEeOnVqX9VcfeWQ" name="layerOperatorDescriptorRegistry" type="_T5we4AkdEeOnVqX9VcfeWQ" association="_X8acAAkdEeOnVqX9VcfeWQ">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_X8acAQkdEeOnVqX9VcfeWQ" name="layerOperatorDescriptorRegistry" type="_T5we4AkdEeOnVqX9VcfeWQ" association="_X8acAAkdEeOnVqX9VcfeWQ">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_X8acAgkdEeOnVqX9VcfeWQ" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_X8acAwkdEeOnVqX9VcfeWQ" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_wk7C0AkdEeOnVqX9VcfeWQ" name="PropertyOperator">
-      <ownedAttribute xmi:id="_8J3zEAklEeOnVqX9VcfeWQ" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_8J3zEAklEeOnVqX9VcfeWQ" name="name" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_8J3zEQklEeOnVqX9VcfeWQ" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_8J3zEgklEeOnVqX9VcfeWQ" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_8J3zEwklEeOnVqX9VcfeWQ">
           <value xsi:nil="true"/>
         </defaultValue>
       </ownedAttribute>
-      <ownedOperation xmi:id="_WKdZYAkhEeOnVqX9VcfeWQ" name="getComputePropertyValueCommand" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_WKdZYQkhEeOnVqX9VcfeWQ">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_MI1TILy5EeiViahAib_JMw" name="classname" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+        <defaultValue xmi:type="uml:LiteralString" xmi:id="_Qr6cwLy5EeiViahAib_JMw"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_SdHUoLy5EeiViahAib_JMw" name="operatorInstance" type="_wk7C0AkdEeOnVqX9VcfeWQ">
+        <defaultValue xmi:type="uml:LiteralString" xmi:id="_28D98Ly5EeiViahAib_JMw"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_5VRRALy5EeiViahAib_JMw" name="classBundleID" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+        <defaultValue xmi:type="uml:LiteralString" xmi:id="_81X6sLy5EeiViahAib_JMw"/>
+      </ownedAttribute>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_WKdZYAkhEeOnVqX9VcfeWQ" name="getComputePropertyValueCommand" raisedException="_iYKFMNxGEeKwptaAAanMDg">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_WKdZYQkhEeOnVqX9VcfeWQ">
           <body>Get the ComputePropertyValueCommands for the specified views and Property.&#xD;
 @return A list of Command allowing to get the value of the property for each view. The list contains null if no command is available for a View.</body>
         </ownedComment>
-        <ownedParameter xmi:id="_WKdZYwkhEeOnVqX9VcfeWQ" name="property" type="_Qeyn4O7GEeK0p4PkXjd-_Q" isOrdered="true">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_WKdZYwkhEeOnVqX9VcfeWQ" name="property" type="_Qeyn4O7GEeK0p4PkXjd-_Q" isOrdered="true">
           <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_lkDZkAkhEeOnVqX9VcfeWQ"/>
           <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_lkVtcAkhEeOnVqX9VcfeWQ" value="*"/>
         </ownedParameter>
-        <ownedParameter xmi:id="_WKdZZAkhEeOnVqX9VcfeWQ" name="result" type="_Qeyn4O7GEeK0p4PkXjd-_Q" direction="return"/>
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_WKdZZAkhEeOnVqX9VcfeWQ" name="result" type="_Qeyn4O7GEeK0p4PkXjd-_Q" direction="return"/>
       </ownedOperation>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_-H7uwLy5EeiViahAib_JMw" name="resetOperatorInstance" raisedException="_iYKFMNxGEeKwptaAAanMDg"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_31lNAAkdEeOnVqX9VcfeWQ" name="layerOperatorDescriptorRegistry_propertyOperator_1" memberEnd="_31lNAQkdEeOnVqX9VcfeWQ _31bcAAkdEeOnVqX9VcfeWQ">
-      <ownedEnd xmi:id="_31lNAQkdEeOnVqX9VcfeWQ" name="layerOperatorDescriptorRegistry" type="_T5we4AkdEeOnVqX9VcfeWQ" association="_31lNAAkdEeOnVqX9VcfeWQ">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_31lNAQkdEeOnVqX9VcfeWQ" name="layerOperatorDescriptorRegistry" type="_T5we4AkdEeOnVqX9VcfeWQ" association="_31lNAAkdEeOnVqX9VcfeWQ">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_31lNAgkdEeOnVqX9VcfeWQ" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_31lNAwkdEeOnVqX9VcfeWQ" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_5x5vwAkdEeOnVqX9VcfeWQ" name="layerOperatorDescriptor_propertyOperator_1" memberEnd="_5x5vwQkdEeOnVqX9VcfeWQ _5xnb4AkdEeOnVqX9VcfeWQ">
-      <ownedEnd xmi:id="_5x5vwQkdEeOnVqX9VcfeWQ" name="layerOperatorDescriptor" type="_GKddUAkdEeOnVqX9VcfeWQ" association="_5x5vwAkdEeOnVqX9VcfeWQ">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_5x5vwQkdEeOnVqX9VcfeWQ" name="layerOperatorDescriptor" type="_GKddUAkdEeOnVqX9VcfeWQ" association="_5x5vwAkdEeOnVqX9VcfeWQ">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_5x5vwgkdEeOnVqX9VcfeWQ" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_5x5vwwkdEeOnVqX9VcfeWQ" value="1"/>
       </ownedEnd>
     </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_G-g6AAkpEeOnVqX9VcfeWQ" name="DefaultPropertyOperator">
-      <ownedComment xmi:id="_MkVTAAkpEeOnVqX9VcfeWQ">
-        <body>This DefaultPropertyOperator works for any Property.&#xD;
-It returns the first value of the provided list.</body>
-      </ownedComment>
-      <generalization xmi:id="_LAjzIAkpEeOnVqX9VcfeWQ" general="_wk7C0AkdEeOnVqX9VcfeWQ"/>
-    </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_ELKvAAkxEeOnVqX9VcfeWQ" name="TopLayerOperatorDescriptor">
-      <generalization xmi:id="_ON-3wAkxEeOnVqX9VcfeWQ" general="_GKddUAkdEeOnVqX9VcfeWQ"/>
+      <generalization xmi:type="uml:Generalization" xmi:id="_ON-3wAkxEeOnVqX9VcfeWQ" general="_GKddUAkdEeOnVqX9VcfeWQ"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_Hxsw0AkxEeOnVqX9VcfeWQ" name="StackedLayerOperatorDescriptor">
-      <generalization xmi:id="_PQ9-wAkxEeOnVqX9VcfeWQ" general="_GKddUAkdEeOnVqX9VcfeWQ"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_mt6gYAnsEeOnVqX9VcfeWQ" name="CustomPropertyOperator">
-      <generalization xmi:id="_SfZjMAntEeOnVqX9VcfeWQ" general="_wk7C0AkdEeOnVqX9VcfeWQ"/>
-      <ownedAttribute xmi:id="_yEySAAnsEeOnVqX9VcfeWQ" name="classname" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_yEySAQnsEeOnVqX9VcfeWQ" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_yEySAgnsEeOnVqX9VcfeWQ" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_yEySAwnsEeOnVqX9VcfeWQ">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="_XTdvIAntEeOnVqX9VcfeWQ" name="operatorInstance" visibility="public" type="__ADTwAxLEeOjX-JbGFEH7w">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_cqOYcAntEeOnVqX9VcfeWQ" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_cqgsUAntEeOnVqX9VcfeWQ" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_crLasAntEeOnVqX9VcfeWQ">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-      <ownedAttribute xmi:id="_XwmlsA3gEeOjX-JbGFEH7w" name="classBundleID" visibility="public" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
-        <ownedComment xmi:id="_c4HSEA3gEeOjX-JbGFEH7w">
-          <body>Bundle ID of the class specified by classname.&#xD;
-This is generally the id of the plugin containing the class specified by classname.&#xD;
-This is required when the custom operator is defined by its classname, and the operator is not located in the current &#xD;
-plugin (ie the layer model plugin).&#xD;
-</body>
-        </ownedComment>
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_XwnMwA3gEeOjX-JbGFEH7w" value="1"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_XwnMwQ3gEeOjX-JbGFEH7w" value="1"/>
-        <defaultValue xmi:type="uml:LiteralString" xmi:id="_XwnMwg3gEeOjX-JbGFEH7w">
-          <value xsi:nil="true"/>
-        </defaultValue>
-      </ownedAttribute>
-      <ownedOperation xmi:id="_vbiJ8A3gEeOjX-JbGFEH7w" name="resetOperatorInstance" raisedException="_iYKFMNxGEeKwptaAAanMDg">
-        <ownedComment xmi:id="_y6QTkA3gEeOjX-JbGFEH7w">
-          <body>Set the operator instance from the classname and BundleID if and only if this two properties are set.</body>
-        </ownedComment>
-      </ownedOperation>
+      <generalization xmi:type="uml:Generalization" xmi:id="_PQ9-wAkxEeOnVqX9VcfeWQ" general="_GKddUAkdEeOnVqX9VcfeWQ"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_FDpEUAxAEeOjX-JbGFEH7w" name="layersStackApplication_layerOperatorDescriptorRegistry_1" memberEnd="_FDpEUQxAEeOjX-JbGFEH7w _FDc3EAxAEeOjX-JbGFEH7w">
-      <ownedEnd xmi:id="_FDpEUQxAEeOjX-JbGFEH7w" name="layersStackApplication" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="_FDpEUAxAEeOjX-JbGFEH7w">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_FDpEUQxAEeOjX-JbGFEH7w" name="layersStackApplication" type="_DN8s0NjhEeKQqZMBCFd2Uw" association="_FDpEUAxAEeOjX-JbGFEH7w">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_FDpEUgxAEeOjX-JbGFEH7w" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_FDpEUwxAEeOjX-JbGFEH7w" value="1"/>
       </ownedEnd>
     </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_G7XE0AxJEeOjX-JbGFEH7w" name="AndStackedLayerOperatorDescriptor">
-      <generalization xmi:id="_Uq4v4AxJEeOjX-JbGFEH7w" general="_Hxsw0AkxEeOnVqX9VcfeWQ"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:Class" xmi:id="_LUfBMAxJEeOjX-JbGFEH7w" name="OrStackedLayerOperatorDescriptor">
-      <generalization xmi:id="_TzDwAAxJEeOjX-JbGFEH7w" general="_Hxsw0AkxEeOnVqX9VcfeWQ"/>
-    </packagedElement>
-    <packagedElement xmi:type="uml:PrimitiveType" xmi:id="__ADTwAxLEeOjX-JbGFEH7w" name="CustomPropertyOpertorInstance"/>
-    <packagedElement xmi:type="uml:Class" xmi:id="_Xxh1cBZ1EeOZwp016gnCFQ" name="IsAbstractUmlSetter">
-      <generalization xmi:id="_a8mqUBZ1EeOZwp016gnCFQ" general="_fyVlIO3vEeKwLp35IbAIig"/>
-    </packagedElement>
     <packagedElement xmi:type="uml:Enumeration" xmi:id="_7cWpgFVHEeOah7Z-UYdQAA" name="EventLevel">
-      <ownedLiteral xmi:id="_ItnrQFVIEeOah7Z-UYdQAA" name="level1"/>
-      <ownedLiteral xmi:id="__fkAQFVHEeOah7Z-UYdQAA" name="allLevels">
+      <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_ItnrQFVIEeOah7Z-UYdQAA" name="level1"/>
+      <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="__fkAQFVHEeOah7Z-UYdQAA" name="allLevels">
         <specification xmi:type="uml:LiteralInteger" xmi:id="_gy8lIFVLEeOah7Z-UYdQAA" name="intValue" value="-1"/>
       </ownedLiteral>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_PznBc2Q5EeOlpfB_tZS-QA" name="layerExpression_layersStack_1" memberEnd="_PznBdGQ5EeOlpfB_tZS-QA _PznBcGQ5EeOlpfB_tZS-QA">
-      <ownedComment xmi:id="_KyI2MGQ6EeOlpfB_tZS-QA" annotatedElement="_PznBc2Q5EeOlpfB_tZS-QA">
+      <ownedComment xmi:type="uml:Comment" xmi:id="_KyI2MGQ6EeOlpfB_tZS-QA" annotatedElement="_PznBc2Q5EeOlpfB_tZS-QA">
         <body>The LayerStack owning this LayerExpression.&#xD;
 This property is set by the LayerStack when the LayerExpression is attach to a parent.&#xD;
 The LayerStack listen to node addition/removal.&#xD;
 During the load from the Resource, this property is set by the LayerStack calling &#xD;
 layerStackChanged().</body>
       </ownedComment>
-      <ownedEnd xmi:id="_PznBdGQ5EeOlpfB_tZS-QA" name="layerExpression" type="_9IaAANjiEeKQqZMBCFd2Uw" association="_PznBc2Q5EeOlpfB_tZS-QA">
+      <ownedEnd xmi:type="uml:Property" xmi:id="_PznBdGQ5EeOlpfB_tZS-QA" name="layerExpression" type="_9IaAANjiEeKQqZMBCFd2Uw" association="_PznBc2Q5EeOlpfB_tZS-QA">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PznBdWQ5EeOlpfB_tZS-QA" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_PznBdmQ5EeOlpfB_tZS-QA" value="1"/>
       </ownedEnd>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_ft-hUGtpEeOlpfB_tZS-QA" name="AllViewsDerivedLayer">
-      <generalization xmi:id="_p-dSoGtpEeOlpfB_tZS-QA" general="_51zAINa7EeKPiuTfpuvqHA"/>
+      <generalization xmi:type="uml:Generalization" xmi:id="_p-dSoGtpEeOlpfB_tZS-QA" general="_51zAINa7EeKPiuTfpuvqHA"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Enumeration" xmi:id="_8__xgHltEeOlpfB_tZS-QA" name="LayerState">
-      <ownedLiteral xmi:id="_AKMcoHluEeOlpfB_tZS-QA" name="detached"/>
-      <ownedLiteral xmi:id="_BUS4QHluEeOlpfB_tZS-QA" name="attached"/>
+      <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_AKMcoHluEeOlpfB_tZS-QA" name="detached"/>
+      <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_BUS4QHluEeOlpfB_tZS-QA" name="attached"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Interface" xmi:id="_RopgYHpGEeOlpfB_tZS-QA" name="LayersContainer">
-      <ownedComment xmi:id="_igIa4HpGEeOlpfB_tZS-QA" annotatedElement="_RopgYHpGEeOlpfB_tZS-QA">
+      <ownedComment xmi:type="uml:Comment" xmi:id="_igIa4HpGEeOlpfB_tZS-QA" annotatedElement="_RopgYHpGEeOlpfB_tZS-QA">
         <body>Layers implementing this interface can contains others layers.&#xD;
 The interface provide one method allowing to add a LayerExpression to the container.</body>
       </ownedComment>
-      <ownedOperation xmi:id="_jHtYQHpGEeOlpfB_tZS-QA" name="addLayer">
-        <ownedParameter xmi:id="_qpEQ4HpGEeOlpfB_tZS-QA" name="layer" type="_9IaAANjiEeKQqZMBCFd2Uw"/>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_jHtYQHpGEeOlpfB_tZS-QA" name="addLayer">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_qpEQ4HpGEeOlpfB_tZS-QA" name="layer" type="_9IaAANjiEeKQqZMBCFd2Uw"/>
       </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_DEE3EM-FEeep-sEmK3jrig" name="CSSPropertySetter">
-      <generalization xmi:id="_FFptQM-FEeep-sEmK3jrig" general="_fyVlIO3vEeKwLp35IbAIig"/>
+      <generalization xmi:type="uml:Generalization" xmi:id="_FFptQM-FEeep-sEmK3jrig" general="_fyVlIO3vEeKwLp35IbAIig"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_JqnGMM-FEeep-sEmK3jrig" name="CSSType">
-      <generalization xmi:id="_Lq474M-FEeep-sEmK3jrig" general="_EoL3oNhcEeKgkM6XJF9t4A"/>
+      <generalization xmi:type="uml:Generalization" xmi:id="_Lq474M-FEeep-sEmK3jrig" general="_EoL3oNhcEeKgkM6XJF9t4A"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_dxmCkM-FEeep-sEmK3jrig" name="CSSInstance">
-      <generalization xmi:id="_iC0nMM-FEeep-sEmK3jrig" general="_AjTZ8Na8EeKPiuTfpuvqHA"/>
-      <ownedAttribute xmi:id="_jnqeEM-FEeep-sEmK3jrig" name="stylesheet" aggregation="composite">
+      <generalization xmi:type="uml:Generalization" xmi:id="_iC0nMM-FEeep-sEmK3jrig" general="_AjTZ8Na8EeKPiuTfpuvqHA"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_jnqeEM-FEeep-sEmK3jrig" name="stylesheet" aggregation="composite">
         <type xmi:type="uml:Interface" href="pathmap://STYLESHEETS/StyleSheets.uml#_SV34ANBHEeeeIb5NcUL5SQ"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_cvND8Nm2Eeev9v2e6pD5eA" name="style" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_cvND8Nm2Eeev9v2e6pD5eA" name="style" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_wfCroNm2Eeev9v2e6pD5eA"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_wfO44Nm2Eeev9v2e6pD5eA" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_4YbCsNm2Eeev9v2e6pD5eA"/>
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_0OlN0HVZEeipp8d5W3Vl9g" name="CSSHidePropertySetter">
-      <generalization xmi:id="_0OlN0XVZEeipp8d5W3Vl9g" general="_fyVlIO3vEeKwLp35IbAIig"/>
+      <generalization xmi:type="uml:Generalization" xmi:id="_0OlN0XVZEeipp8d5W3Vl9g" general="_fyVlIO3vEeKwLp35IbAIig"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_0Omb8HVZEeipp8d5W3Vl9g" name="CSSHideType">
-      <generalization xmi:id="_0Omb8XVZEeipp8d5W3Vl9g" general="_EoL3oNhcEeKgkM6XJF9t4A"/>
+      <generalization xmi:type="uml:Generalization" xmi:id="_0Omb8XVZEeipp8d5W3Vl9g" general="_EoL3oNhcEeKgkM6XJF9t4A"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_0Omb8nVZEeipp8d5W3Vl9g" name="CSSHideInstance">
-      <generalization xmi:id="_0Omb83VZEeipp8d5W3Vl9g" general="_AjTZ8Na8EeKPiuTfpuvqHA"/>
-      <ownedAttribute xmi:id="_0Omb9HVZEeipp8d5W3Vl9g" name="stylesheet" aggregation="composite">
+      <generalization xmi:type="uml:Generalization" xmi:id="_0Omb83VZEeipp8d5W3Vl9g" general="_AjTZ8Na8EeKPiuTfpuvqHA"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_0Omb9HVZEeipp8d5W3Vl9g" name="stylesheet" aggregation="composite">
         <type xmi:type="uml:Interface" href="pathmap://STYLESHEETS/StyleSheets.uml#_SV34ANBHEeeeIb5NcUL5SQ"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_0Omb9XVZEeipp8d5W3Vl9g" name="style" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_0Omb9XVZEeipp8d5W3Vl9g" name="style" type="_OyQ5QL1xEeKKJJ5BmR3W3Q">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_0Omb9nVZEeipp8d5W3Vl9g"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_0Omb93VZEeipp8d5W3Vl9g" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_0Omb-HVZEeipp8d5W3Vl9g"/>
       </ownedAttribute>
     </packagedElement>
-    <profileApplication xmi:id="_X07z8LcsEeK8_t7Rpq6ZJA">
-      <eAnnotations xmi:id="_X2lZwLcsEeK8_t7Rpq6ZJA" source="http://www.eclipse.org/uml2/2.0.0/UML">
+    <packagedElement xmi:type="uml:Association" xmi:id="_gF7JwLUQEeiPJeGnZrmqWw" memberEnd="_gF7Jw7UQEeiPJeGnZrmqWw _gF7w0rUQEeiPJeGnZrmqWw">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_gF7JwbUQEeiPJeGnZrmqWw" source="org.eclipse.papyrus">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_gF7JwrUQEeiPJeGnZrmqWw" key="nature" value="UML_Nature"/>
+      </eAnnotations>
+      <ownedEnd xmi:type="uml:Property" xmi:id="_gF7w0rUQEeiPJeGnZrmqWw" name="layeroperator" type="_HoKjcNjjEeKQqZMBCFd2Uw" association="_gF7JwLUQEeiPJeGnZrmqWw"/>
+    </packagedElement>
+    <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_X07z8LcsEeK8_t7Rpq6ZJA">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_X2lZwLcsEeK8_t7Rpq6ZJA" source="http://www.eclipse.org/uml2/2.0.0/UML">
         <references xmi:type="ecore:EPackage" href="pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA"/>
       </eAnnotations>
-      <appliedProfile href="pathmap://UML_PROFILES/Ecore.profile.uml#_0"/>
+      <appliedProfile xmi:type="uml:Profile" href="pathmap://UML_PROFILES/Ecore.profile.uml#_0"/>
     </profileApplication>
   </uml:Model>
   <Ecore:EPackage xmi:id="_ZYU5ULcsEeK8_t7Rpq6ZJA" base_Package="_gAOFQLcqEeK8_t7Rpq6ZJA" packageName="layers" nsPrefix="layers" nsURI="http://www.eclipse.org/papyrus/infra/gmfdiag/layers" basePackage="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model" prefix="Layers"/>
@@ -1581,10 +1263,8 @@
   <Ecore:EReference xmi:id="_dF0wYAkeEeOnVqX9VcfeWQ" isTransient="true" base_Property="_5xnb4AkdEeOnVqX9VcfeWQ"/>
   <Ecore:EReference xmi:id="_hXqZAAkeEeOnVqX9VcfeWQ" isTransient="true" base_Property="_31bcAAkdEeOnVqX9VcfeWQ"/>
   <Ecore:EReference xmi:id="_hIIUsAw-EeOjX-JbGFEH7w" isTransient="true" base_Property="_X8IIIAkdEeOnVqX9VcfeWQ"/>
-  <Ecore:EReference xmi:id="_0vze4Aw-EeOjX-JbGFEH7w" isTransient="true" base_Property="_KSjUEAkdEeOnVqX9VcfeWQ"/>
   <Ecore:EReference xmi:id="_i_yH8AxAEeOjX-JbGFEH7w" isTransient="true" base_Property="_FDc3EAxAEeOjX-JbGFEH7w"/>
   <Ecore:EAttribute xmi:id="_B49pUAxGEeOjX-JbGFEH7w" isTransient="true" base_Property="_mCUIAAxEEeOjX-JbGFEH7w"/>
-  <Ecore:EDataType xmi:id="_Fya_cAxMEeOjX-JbGFEH7w" instanceClassName="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance" base_PrimitiveType="__ADTwAxLEeOjX-JbGFEH7w"/>
   <Ecore:EReference xmi:id="_1yMvsA2hEeOjX-JbGFEH7w" isTransient="true" base_Property="_rTr0UA2fEeOjX-JbGFEH7w"/>
   <Ecore:EAttribute xmi:id="_iczSMA2qEeOjX-JbGFEH7w" isTransient="true" base_Property="_RrX8YA2qEeOjX-JbGFEH7w"/>
   <Ecore:EAttribute xmi:id="_8zffIGQ7EeOlpfB_tZS-QA" isTransient="true" base_Property="_xcbgQGQ7EeOlpfB_tZS-QA"/>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layersconfig.genmodel b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layersconfig.genmodel
index ca9e381..953ecc1 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layersconfig.genmodel
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/layersconfig.genmodel
@@ -6,7 +6,7 @@
     editorDirectory="/org.eclipse.papyrus.infra.gmfdiag.layers.model.editor/src-gen"
     modelPluginID="org.eclipse.papyrus.infra.gmfdiag.layers.model" modelName="LayersConfig"
     editorPluginClass="org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.presentation.LayersconfigEditorPlugin"
-    nonNLSMarkers="true" testsDirectory="/org.eclipse.papyrus.infra.gmfdiag.layers.model.tests/src-gen"
+    nonNLSMarkers="true" suppressEMFTypes="true" testsDirectory="/org.eclipse.papyrus.infra.gmfdiag.layers.model.tests/src-gen"
     testSuiteClass="org.eclipse.papyrus.infra.gmfdiag.layers.configmodel.layersconfig.tests.LayersconfigAllTests"
     importerID="org.eclipse.uml2.uml.ecore.importer" complianceLevel="6.0" copyrightFields="false"
     editorPluginID="org.eclipse.papyrus.infra.gmfdiag.layers.model.editor" operationReflection="true"
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/notation/README b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/notation/README
index a28a569..62bbd9c 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/notation/README
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/notation/README
@@ -1,3 +1,2 @@
-the genmodel is missing???
-should not be here!!!
+This is used to define the notation View and Diagram required by the layer model...
 *must not be exposed to the user
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/notation/notation.di b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/notation/notation.di
index a274d05..bf9abab 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/notation/notation.di
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/model/notation/notation.di
@@ -1,17 +1,2 @@
-<?xml version="1.0" encoding="ASCII"?>
-<di:SashWindowsMngr xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.eclipse.org/papyrus/0.7.0/sashdi">
-  <pageList>
-    <availablePage>
-      <emfPageIdentifier href="notation.notation#_WlS4YLcpEeK8_t7Rpq6ZJA"/>
-    </availablePage>
-  </pageList>
-  <sashModel currentSelection="//@sashModel/@windows.0/@children.0">
-    <windows>
-      <children xsi:type="di:TabFolder">
-        <children>
-          <emfPageIdentifier href="notation.notation#_WlS4YLcpEeK8_t7Rpq6ZJA"/>
-        </children>
-      </children>
-    </windows>
-  </sashModel>
-</di:SashWindowsMngr>
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"/>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/plugin.xml b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/plugin.xml
index 67350c6..4ccb6cc 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/plugin.xml
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/plugin.xml
@@ -22,5 +22,26 @@
             class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage"
             genModel="model/layersconfig.genmodel"/>
    </extension>
+   <extension
+         point="org.eclipse.emf.ecore.factory_override">
+      <factory
+            class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom.CustomLayersFactory"
+            uri="http://www.eclipse.org/papyrus/infra/gmfdiag/layers">
+      </factory>
+   </extension>
+   <extension
+         point="org.eclipse.emf.ecore.factory_override">
+      <factory
+            class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl.custom.CustomLayersConfigFactory"
+            uri="http://www.eclipse.org/papyrus/infra/gmfdiag/layersconfig">
+      </factory>
+   </extension>
+   <extension
+         point="org.eclipse.emf.ecore.extension_parser">
+      <parser
+            class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.resource.LayersModelResourceFactory"
+            type="layers">
+      </parser>
+   </extension>
 
 </plugin>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/ClassnameKind.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/ClassnameKind.java
index b1387fc..8df7d4b 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/ClassnameKind.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/ClassnameKind.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig;
 
@@ -36,7 +37,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	UNDEFINED(0, "UNDEFINED", "UNDEFINED"),
+	UNDEFINED(0, "UNDEFINED", "UNDEFINED"), //$NON-NLS-1$ //$NON-NLS-2$
 
 	/**
 	 * The '<em><b>EMF CLASSNAME</b></em>' literal object.
@@ -46,7 +47,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	EMF_CLASSNAME(1, "EMF_CLASSNAME", "EMF_CLASSNAME"),
+	EMF_CLASSNAME(1, "EMF_CLASSNAME", "EMF_CLASSNAME"), //$NON-NLS-1$ //$NON-NLS-2$
 
 	/**
 	 * The '<em><b>POJO CLASSNAME</b></em>' literal object.
@@ -56,7 +57,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	POJO_CLASSNAME(2, "POJO_CLASSNAME", "POJO_CLASSNAME"),
+	POJO_CLASSNAME(2, "POJO_CLASSNAME", "POJO_CLASSNAME"), //$NON-NLS-1$ //$NON-NLS-2$
 
 	/**
 	 * The '<em><b>NOT FOUND</b></em>' literal object.
@@ -66,13 +67,14 @@
 	 * @generated
 	 * @ordered
 	 */
-	NOT_FOUND(3, "NOT_FOUND", "NOT_FOUND");
+	NOT_FOUND(3, "NOT_FOUND", "NOT_FOUND"); //$NON-NLS-1$ //$NON-NLS-2$
 
 	/**
 	 * The '<em><b>UNDEFINED</b></em>' literal value.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of '<em><b>UNDEFINED</b></em>' literal object isn't clear, there really should be more of a description here...
+	 * If the meaning of '<em><b>UNDEFINED</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @see #UNDEFINED
@@ -86,7 +88,8 @@
 	 * The '<em><b>EMF CLASSNAME</b></em>' literal value.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of '<em><b>EMF CLASSNAME</b></em>' literal object isn't clear, there really should be more of a description here...
+	 * If the meaning of '<em><b>EMF CLASSNAME</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @see #EMF_CLASSNAME
@@ -100,7 +103,8 @@
 	 * The '<em><b>POJO CLASSNAME</b></em>' literal value.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of '<em><b>POJO CLASSNAME</b></em>' literal object isn't clear, there really should be more of a description here...
+	 * If the meaning of '<em><b>POJO CLASSNAME</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @see #POJO_CLASSNAME
@@ -114,7 +118,8 @@
 	 * The '<em><b>NOT FOUND</b></em>' literal value.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of '<em><b>NOT FOUND</b></em>' literal object isn't clear, there really should be more of a description here...
+	 * If the meaning of '<em><b>NOT FOUND</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @see #NOT_FOUND
@@ -130,7 +135,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private static final ClassnameKind[] VALUES_ARRAY = new ClassnameKind[] {
+	private static final ClassnameKind[] VALUES_ARRAY =
+		new ClassnameKind[] {
 			UNDEFINED,
 			EMF_CLASSNAME,
 			POJO_CLASSNAME,
@@ -237,7 +243,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public int getValue() {
 	  return value;
 	}
@@ -247,7 +252,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getName() {
 	  return name;
 	}
@@ -257,7 +261,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getLiteral() {
 	  return literal;
 	}
@@ -272,5 +275,5 @@
 	public String toString() {
 		return literal;
 	}
-
-} // ClassnameKind
+	
+} //ClassnameKind
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/Folder.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/Folder.java
index 8cafd87..ceb2d78 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/Folder.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/Folder.java
@@ -1,21 +1,19 @@
-/*****************************************************************************
+/**
  * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- *
- *    
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *  Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *  Quentin Le Menez quentin.lemenez@cea.fr
- *****************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig;
 
-import org.eclipse.emf.common.util.EList;
+import java.util.List;
 
 /**
  * <!-- begin-user-doc -->
@@ -39,7 +37,8 @@
 	 * The list contents are of type {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.FolderElement}.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Folder Elements</em>' containment reference list isn't clear, there really should be more of a description here...
+	 * If the meaning of the '<em>Folder Elements</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Folder Elements</em>' containment reference list.
@@ -47,6 +46,6 @@
 	 * @model containment="true" ordered="false"
 	 * @generated
 	 */
-	EList<FolderElement> getFolderElements();
+	List<FolderElement> getFolderElements();
 
 } // Folder
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/FolderElement.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/FolderElement.java
index ad4fdca..9eed628 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/FolderElement.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/FolderElement.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig;
 
@@ -35,7 +36,8 @@
 	 * Returns the value of the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Name</em>' attribute isn't clear, there really should be more of a description here...
+	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Name</em>' attribute.
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/InstanciableElement.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/InstanciableElement.java
index 9071c32..60fc0ac 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/InstanciableElement.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/InstanciableElement.java
@@ -1,19 +1,19 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig;
 
 
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Instanciable Element</b></em>'.
@@ -39,7 +39,8 @@
 	 * Returns the value of the '<em><b>Classname</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Classname</em>' attribute isn't clear, there really should be more of a description here...
+	 * If the meaning of the '<em>Classname</em>' attribute isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Classname</em>' attribute.
@@ -64,7 +65,8 @@
 	 * Returns the value of the '<em><b>Bundle ID</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Bundle ID</em>' attribute isn't clear, there really should be more of a description here...
+	 * If the meaning of the '<em>Bundle ID</em>' attribute isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Bundle ID</em>' attribute.
@@ -89,7 +91,8 @@
 	 * Returns the value of the '<em><b>Display Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Display Name</em>' attribute isn't clear, there really should be more of a description here...
+	 * If the meaning of the '<em>Display Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Display Name</em>' attribute.
@@ -114,7 +117,8 @@
 	 * Returns the value of the '<em><b>Icon Path</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Icon Path</em>' attribute isn't clear, there really should be more of a description here...
+	 * If the meaning of the '<em>Icon Path</em>' attribute isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Icon Path</em>' attribute.
@@ -141,7 +145,8 @@
 	 * The literals are from the enumeration {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.ClassnameKind}.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Classname Kind</em>' attribute isn't clear, there really should be more of a description here...
+	 * If the meaning of the '<em>Classname Kind</em>' attribute isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Classname Kind</em>' attribute.
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/LayerOperatorConfig.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/LayerOperatorConfig.java
index 9771a5b..e7be28a 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/LayerOperatorConfig.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/LayerOperatorConfig.java
@@ -1,20 +1,21 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig;
 
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.InstanciationException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor;
 
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor;
 
 /**
  * <!-- begin-user-doc -->
@@ -27,7 +28,6 @@
  * @generated
  */
 public interface LayerOperatorConfig extends InstanciableElement {
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -35,4 +35,5 @@
 	 * @generated
 	 */
 	LayerOperatorDescriptor createLayersOperatorDescriptor() throws InstanciationException;
+
 } // LayerOperatorConfig
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/LayerOperatorMultipleBinding.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/LayerOperatorMultipleBinding.java
index 1507e45..f1339ab 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/LayerOperatorMultipleBinding.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/LayerOperatorMultipleBinding.java
@@ -1,18 +1,19 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig;
 
-import org.eclipse.emf.common.util.EList;
+import java.util.List;
 
 /**
  * <!-- begin-user-doc -->
@@ -36,7 +37,8 @@
 	 * Returns the value of the '<em><b>Layer Operator Config</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Layer Operator Config</em>' reference isn't clear, there really should be more of a description here...
+	 * If the meaning of the '<em>Layer Operator Config</em>' reference isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Layer Operator Config</em>' reference.
@@ -63,7 +65,8 @@
 	 * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.OperatorBinding#getOwner <em>Owner</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Bindings</em>' containment reference list isn't clear, there really should be more of a description here...
+	 * If the meaning of the '<em>Bindings</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Bindings</em>' containment reference list.
@@ -72,6 +75,6 @@
 	 * @model opposite="owner" containment="true" ordered="false"
 	 * @generated
 	 */
-	EList<OperatorBinding> getBindings();
+	List<OperatorBinding> getBindings();
 
 } // LayerOperatorMultipleBinding
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/LayerOperatorToOperatorBinding.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/LayerOperatorToOperatorBinding.java
deleted file mode 100755
index 46e4bbc..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/LayerOperatorToOperatorBinding.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Layer Operator To Operator Binding</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorToOperatorBinding#getOperators <em>Operators</em>}</li>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorToOperatorBinding#getLayerOperator <em>Layer Operator</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersconfigPackage#getLayerOperatorToOperatorBinding()
- * @model
- * @generated
- */
-public interface LayerOperatorToOperatorBinding extends FolderElement, LayersOperatorBinding {
-	/**
-	 * Returns the value of the '<em><b>Operators</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Operators</em>' reference list isn't clear, there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 *
-	 * @return the value of the '<em>Operators</em>' reference.
-	 * @see #setOperators(OperatorConfig)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersconfigPackage#getLayerOperatorToOperatorBinding_Operators()
-	 * @model required="true" ordered="false"
-	 * @generated
-	 */
-	OperatorConfig getOperators();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorToOperatorBinding#getOperators <em>Operators</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @param value
-	 *            the new value of the '<em>Operators</em>' reference.
-	 * @see #getOperators()
-	 * @generated
-	 */
-	void setOperators(OperatorConfig value);
-
-	/**
-	 * Returns the value of the '<em><b>Layer Operator</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Layer Operator</em>' reference isn't clear, there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 *
-	 * @return the value of the '<em>Layer Operator</em>' reference.
-	 * @see #setLayerOperator(LayerOperatorConfig)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersconfigPackage#getLayerOperatorToOperatorBinding_LayerOperator()
-	 * @model ordered="false"
-	 * @generated
-	 */
-	LayerOperatorConfig getLayerOperator();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorToOperatorBinding#getLayerOperator <em>Layer Operator</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @param value
-	 *            the new value of the '<em>Layer Operator</em>' reference.
-	 * @see #getLayerOperator()
-	 * @generated
-	 */
-	void setLayerOperator(LayerOperatorConfig value);
-
-} // LayerOperatorToOperatorBinding
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/LayersOperatorBinding.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/LayersOperatorBinding.java
deleted file mode 100755
index 5df75aa..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/LayersOperatorBinding.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Layers Operator Binding</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersconfigPackage#getLayersOperatorBinding()
- * @model interface="true" abstract="true"
- * @generated
- */
-public interface LayersOperatorBinding extends EObject {
-} // LayersOperatorBinding
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/OperatorBinding.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/OperatorBinding.java
index 9de113b..4bd31fd 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/OperatorBinding.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/OperatorBinding.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig;
 
@@ -38,7 +39,8 @@
 	 * Returns the value of the '<em><b>Operator</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Operator</em>' reference isn't clear, there really should be more of a description here...
+	 * If the meaning of the '<em>Operator</em>' reference isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Operator</em>' reference.
@@ -63,7 +65,8 @@
 	 * Returns the value of the '<em><b>Layer Operator Config</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Layer Operator Config</em>' reference isn't clear, there really should be more of a description here...
+	 * If the meaning of the '<em>Layer Operator Config</em>' reference isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Layer Operator Config</em>' reference.
@@ -77,7 +80,8 @@
 	 * Returns the value of the '<em><b>Property Id</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Property Id</em>' reference isn't clear, there really should be more of a description here...
+	 * If the meaning of the '<em>Property Id</em>' reference isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Property Id</em>' reference.
@@ -103,7 +107,8 @@
 	 * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorMultipleBinding#getBindings <em>Bindings</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Owner</em>' container reference isn't clear, there really should be more of a description here...
+	 * If the meaning of the '<em>Owner</em>' container reference isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Owner</em>' container reference.
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/OperatorConfig.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/OperatorConfig.java
index 34ca835..e4454f5 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/OperatorConfig.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/OperatorConfig.java
@@ -1,20 +1,21 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig;
 
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.InstanciationException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator;
 
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator;
 
 /**
  * <!-- begin-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/PropertyId.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/PropertyId.java
index 90eb760..7fa39bf 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/PropertyId.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/PropertyId.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig;
 
@@ -30,12 +31,12 @@
  * @generated
  */
 public interface PropertyId extends FolderElement {
-
 	/**
 	 * Returns the value of the '<em><b>Type</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Type</em>' reference isn't clear, there really should be more of a description here...
+	 * If the meaning of the '<em>Type</em>' reference isn't clear,
+	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Type</em>' reference.
@@ -55,4 +56,5 @@
 	 * @generated
 	 */
 	void setType(TypeConfig value);
+
 } // PropertyId
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/SimpleBinding.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/SimpleBinding.java
deleted file mode 100755
index ffb11a6..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/SimpleBinding.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Simple Binding</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.SimpleBinding#getOperators <em>Operators</em>}</li>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.SimpleBinding#getLayerOperatorMultipleBinding <em>Layer Operator Multiple Binding</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersconfigPackage#getSimpleBinding()
- * @model
- * @generated
- */
-public interface SimpleBinding extends LayersOperatorBinding {
-	/**
-	 * Returns the value of the '<em><b>Operators</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Operators</em>' reference isn't clear, there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 *
-	 * @return the value of the '<em>Operators</em>' reference.
-	 * @see #setOperators(OperatorConfig)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersconfigPackage#getSimpleBinding_Operators()
-	 * @model required="true" ordered="false"
-	 * @generated
-	 */
-	OperatorConfig getOperators();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.SimpleBinding#getOperators <em>Operators</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @param value
-	 *            the new value of the '<em>Operators</em>' reference.
-	 * @see #getOperators()
-	 * @generated
-	 */
-	void setOperators(OperatorConfig value);
-
-	/**
-	 * Returns the value of the '<em><b>Layer Operator Multiple Binding</b></em>' container reference.
-	 * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorMultipleBinding#getBindings <em>Bindings</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Layer Operator Multiple Binding</em>' container reference isn't clear, there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 *
-	 * @return the value of the '<em>Layer Operator Multiple Binding</em>' container reference.
-	 * @see #setLayerOperatorMultipleBinding(LayerOperatorMultipleBinding)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersconfigPackage#getSimpleBinding_LayerOperatorMultipleBinding()
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorMultipleBinding#getBindings
-	 * @model opposite="bindings" required="true" transient="false" ordered="false"
-	 * @generated
-	 */
-	LayerOperatorMultipleBinding getLayerOperatorMultipleBinding();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.SimpleBinding#getLayerOperatorMultipleBinding <em>Layer Operator Multiple Binding</em>}' container reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @param value
-	 *            the new value of the '<em>Layer Operator Multiple Binding</em>' container reference.
-	 * @see #getLayerOperatorMultipleBinding()
-	 * @generated
-	 */
-	void setLayerOperatorMultipleBinding(LayerOperatorMultipleBinding value);
-
-} // SimpleBinding
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/TypeConfig.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/TypeConfig.java
index 19f305e..ce8d4a9 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/TypeConfig.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/TypeConfig.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig;
 
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/FolderElementImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/FolderElementImpl.java
index 67848c1..1f77e81 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/FolderElementImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/FolderElementImpl.java
@@ -1,21 +1,25 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl;
 
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.ecore.EClass;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.FolderElement;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
 
@@ -77,7 +81,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getName() {
 		return name;
 	}
@@ -87,7 +90,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setName(String newName) {
 		String oldName = name;
 		name = newName;
@@ -169,4 +171,4 @@
 		return result.toString();
 	}
 
-} // FolderElementImpl
+} //FolderElementImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/FolderImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/FolderImpl.java
index 4a6ef67..f119fb9 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/FolderImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/FolderImpl.java
@@ -1,25 +1,31 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl;
 
 import java.util.Collection;
 
+import java.util.List;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.Folder;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.FolderElement;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
@@ -72,8 +78,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EList<FolderElement> getFolderElements() {
+	public List<FolderElement> getFolderElements() {
 		if (folderElements == null) {
 			folderElements = new EObjectContainmentEList<FolderElement>(FolderElement.class, this, LayersConfigPackage.FOLDER__FOLDER_ELEMENTS);
 		}
@@ -154,4 +159,4 @@
 		return super.eIsSet(featureID);
 	}
 
-} // FolderImpl
+} //FolderImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/InstanciableElementImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/InstanciableElementImpl.java
index e0b79e7..3e2ff88 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/InstanciableElementImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/InstanciableElementImpl.java
@@ -1,20 +1,24 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl;
 
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.ecore.EClass;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.ClassnameKind;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.InstanciableElement;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
@@ -161,7 +165,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getClassname() {
 		return classname;
 	}
@@ -171,7 +174,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setClassname(String newClassname) {
 		String oldClassname = classname;
 		classname = newClassname;
@@ -184,7 +186,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getBundleID() {
 		return bundleID;
 	}
@@ -194,7 +195,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setBundleID(String newBundleID) {
 		String oldBundleID = bundleID;
 		bundleID = newBundleID;
@@ -207,7 +207,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getDisplayName() {
 		return displayName;
 	}
@@ -217,7 +216,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setDisplayName(String newDisplayName) {
 		String oldDisplayName = displayName;
 		displayName = newDisplayName;
@@ -230,7 +228,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getIconPath() {
 		return iconPath;
 	}
@@ -240,7 +237,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setIconPath(String newIconPath) {
 		String oldIconPath = iconPath;
 		iconPath = newIconPath;
@@ -253,7 +249,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public ClassnameKind getClassnameKind() {
 		return classnameKind;
 	}
@@ -263,7 +258,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setClassnameKind(ClassnameKind newClassnameKind) {
 		ClassnameKind oldClassnameKind = classnameKind;
 		classnameKind = newClassnameKind == null ? CLASSNAME_KIND_EDEFAULT : newClassnameKind;
@@ -393,4 +387,4 @@
 		return result.toString();
 	}
 
-} // InstanciableElementImpl
+} //InstanciableElementImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/LayerOperatorConfigImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/LayerOperatorConfigImpl.java
index 65344e1..e05551b 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/LayerOperatorConfigImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/LayerOperatorConfigImpl.java
@@ -1,29 +1,29 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl;
 
 import java.lang.reflect.InvocationTargetException;
 
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorConfig;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.InstanciationException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 
 /**
  * <!-- begin-user-doc -->
@@ -59,22 +59,13 @@
 	 *
 	 * @return
 	 * @throws NotFoundException
-	 * @generated NOT
+	 * @generated
 	 */
 	@Override
 	public LayerOperatorDescriptor createLayersOperatorDescriptor() throws InstanciationException {
-
-		// Create instance of layer
-		EClassifier classifier = LayersPackage.eINSTANCE.getEClassifier(getClassname());
-		if (classifier == null) {
-			throw new InstanciationException("Can't create LayerOperatorDescriptor for name '" + getClassname() + "'");
-		}
-		LayerOperatorDescriptor res = (LayerOperatorDescriptor) LayersFactory.eINSTANCE.create((EClass) classifier);
-
-		// Set values
-		res.setName(getName());
-
-		return res;
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
@@ -95,4 +86,5 @@
 		}
 		return super.eInvoke(operationID, arguments);
 	}
+
 } // LayerOperatorConfigImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/LayerOperatorMultipleBindingImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/LayerOperatorMultipleBindingImpl.java
index 113bb09..dd36c9e 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/LayerOperatorMultipleBindingImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/LayerOperatorMultipleBindingImpl.java
@@ -1,27 +1,34 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl;
 
 import java.util.Collection;
 
+import java.util.List;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
 import org.eclipse.emf.ecore.util.InternalEList;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorConfig;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorMultipleBinding;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
@@ -86,7 +93,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayerOperatorConfig getLayerOperatorConfig() {
 		if (layerOperatorConfig != null && layerOperatorConfig.eIsProxy()) {
 			InternalEObject oldLayerOperatorConfig = (InternalEObject)layerOperatorConfig;
@@ -113,7 +119,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setLayerOperatorConfig(LayerOperatorConfig newLayerOperatorConfig) {
 		LayerOperatorConfig oldLayerOperatorConfig = layerOperatorConfig;
 		layerOperatorConfig = newLayerOperatorConfig;
@@ -126,8 +131,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EList<OperatorBinding> getBindings() {
+	public List<OperatorBinding> getBindings() {
 		if (bindings == null) {
 			bindings = new EObjectContainmentWithInverseEList<OperatorBinding>(OperatorBinding.class, this, LayersConfigPackage.LAYER_OPERATOR_MULTIPLE_BINDING__BINDINGS, LayersConfigPackage.OPERATOR_BINDING__OWNER);
 		}
@@ -234,4 +238,4 @@
 		return super.eIsSet(featureID);
 	}
 
-} // LayerOperatorMultipleBindingImpl
+} //LayerOperatorMultipleBindingImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/OperatorBindingImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/OperatorBindingImpl.java
index 74d968e..2d41689 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/OperatorBindingImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/OperatorBindingImpl.java
@@ -1,24 +1,29 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.emf.ecore.util.EcoreUtil;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorConfig;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorMultipleBinding;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
@@ -136,12 +141,13 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	public LayerOperatorConfig basicGetLayerOperatorConfig() {
-		//
-		return getOwner().getLayerOperatorConfig();
+		// TODO: implement this method to return the 'Layer Operator Config' reference
+		// -> do not perform proxy resolution
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/OperatorConfigImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/OperatorConfigImpl.java
index d82fe12..4806a88 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/OperatorConfigImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/OperatorConfigImpl.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl;
 
@@ -16,18 +17,18 @@
 
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.ClassnameKind;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.OperatorConfig;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.InstanciationException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceException;
 
@@ -42,6 +43,7 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	protected OperatorConfigImpl() {
@@ -51,6 +53,7 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
@@ -61,71 +64,46 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * 
+	 * @generated
 	 */
 	@Override
 	public PropertyOperator createOperatorDescriptor() throws InstanciationException {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
 
-		switch (getClassnameKind()) {
-		case UNDEFINED:
-			// Try to find the exact type of classname
-			PropertyOperator res;
-
-			// Try as EMF instance
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
+		switch (operationID) {
+		case LayersConfigPackage.OPERATOR_CONFIG___CREATE_OPERATOR_DESCRIPTOR:
 			try {
-				res = createEmfInstance();
-				setClassnameKind(ClassnameKind.EMF_CLASSNAME);
-				return res;
-			} catch (InstanciationException e) {
-				// Not an EMF name. Try other solutions.
-			} catch (ClassCastException e) {
-				// specified class name is of wrong type
-				setClassnameKind(ClassnameKind.NOT_FOUND);
-				throw new InstanciationException("Can't create PropertyOperator for name '" + getClassname() + "'. Bad EMF type.");
+				return createOperatorDescriptor();
+			} catch (Throwable throwable) {
+				throw new InvocationTargetException(throwable);
 			}
-
-			// Try as java pojo
-			try {
-				res = createPojoInstance();
-				setClassnameKind(ClassnameKind.POJO_CLASSNAME);
-				return res;
-			} catch (InstanciationException e) {
-				setClassnameKind(ClassnameKind.NOT_FOUND);
-				throw e;
-			}
-
-
-		case EMF_CLASSNAME:
-			return createEmfInstance();
-
-		case POJO_CLASSNAME:
-			// Try to load a java class
-			return createPojoInstance();
-
-
-		case NOT_FOUND:
-			// We already are in error. Do nothing
-
-			break;
-
-		default:
-			break;
 		}
-
-		throw new InstanciationException("Can't create PropertyOperator for name '" + getClassname() + "'.");
-
+		return super.eInvoke(operationID, arguments);
 	}
 
 	/**
 	 * @return
 	 * @throws InstanciationException
+	 * 
+	 * @generated
 	 */
 	protected PropertyOperator createPojoInstance() throws InstanciationException {
 		try {
 			Class<?> opClass = loadClass();
-			CustomPropertyOperator operator = LayersFactory.eINSTANCE.createCustomPropertyOperator();
-			operator.setOperatorInstance((CustomPropertyOperatorsInstance) opClass.newInstance());
+			PropertyOperator operator = LayersFactory.eINSTANCE.createPropertyOperator();
+			operator.setOperatorInstance((PropertyOperator) opClass.newInstance());
 			operator.setName(getName());
 
 			return operator;
@@ -140,6 +118,8 @@
 	 *
 	 * @return
 	 * @throws InstanciationException
+	 * 
+	 * @generated
 	 */
 	protected PropertyOperator createEmfInstance() throws InstanciationException {
 		// Try to load an EMF type
@@ -158,30 +138,13 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
-		switch (operationID) {
-			case LayersConfigPackage.OPERATOR_CONFIG___CREATE_OPERATOR_DESCRIPTOR:
-				try {
-					return createOperatorDescriptor();
-				}
-				catch (Throwable throwable) {
-					throw new InvocationTargetException(throwable);
-				}
-		}
-		return super.eInvoke(operationID, arguments);
-	}
-
-	/**
 	 * Load the Class object. Try from current ClassLoader, then try using the
 	 * plugin referenced in the serviceDescriptor.PluginId
 	 *
 	 * @return
 	 * @throws ServiceException
+	 * 
+	 * @generated
 	 */
 	private Class<?> loadClass() throws LayersException {
 		String classname = getClassname();
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/PropertyIdImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/PropertyIdImpl.java
index 06ac103..55bb9d8 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/PropertyIdImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/PropertyIdImpl.java
@@ -1,21 +1,25 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl;
 
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.PropertyId;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.TypeConfig;
@@ -68,7 +72,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public TypeConfig getType() {
 		if (type != null && type.eIsProxy()) {
 			InternalEObject oldType = (InternalEObject)type;
@@ -95,7 +98,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setType(TypeConfig newType) {
 		TypeConfig oldType = type;
 		type = newType;
@@ -162,4 +164,4 @@
 		return super.eIsSet(featureID);
 	}
 
-} // PropertyIdImpl
+} //PropertyIdImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/TypeConfigImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/TypeConfigImpl.java
index 2174d0f..315417f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/TypeConfigImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/TypeConfigImpl.java
@@ -1,18 +1,20 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl;
 
 import org.eclipse.emf.ecore.EClass;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayersConfigPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.TypeConfig;
 
@@ -43,4 +45,4 @@
 		return LayersConfigPackage.Literals.TYPE_CONFIG;
 	}
 
-} // TypeConfigImpl
+} //TypeConfigImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/AbstractLayer.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/AbstractLayer.java
index 7de610e..7c4bdee 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/AbstractLayer.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/AbstractLayer.java
@@ -13,8 +13,8 @@
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
 
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.EMap;
+import java.util.List;
+import java.util.Map;
 
 import org.eclipse.gmf.runtime.notation.View;
 
@@ -55,7 +55,7 @@
 	 * @model
 	 * @generated
 	 */
-	EList<TypeInstance> getPropertyValues();
+	List<TypeInstance> getPropertyValues();
 
 	/**
 	 * Returns the value of the '<em><b>Property Value Map</b></em>' map.
@@ -72,7 +72,7 @@
 	 * @model mapType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringToTypeInstanceMap&lt;org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance&gt;" ordered="false"
 	 * @generated
 	 */
-	EMap<String, TypeInstance> getPropertyValueMap();
+	Map<String, TypeInstance> getPropertyValueMap();
 
 	/**
 	 * Returns the value of the '<em><b>Layer Descriptor</b></em>' reference.
@@ -114,7 +114,7 @@
 	 * @model ordered="false"
 	 * @generated
 	 */
-	EList<View> getViews();
+	List<View> getViews();
 
 	/**
 	 * Returns the value of the '<em><b>Attached Properties</b></em>' reference list.
@@ -130,7 +130,7 @@
 	 * @model transient="true" volatile="true" derived="true" ordered="false"
 	 * @generated
 	 */
-	EList<Property> getAttachedProperties();
+	List<Property> getAttachedProperties();
 
 	/**
 	 * <!-- begin-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/AbstractLayerOperator.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/AbstractLayerOperator.java
deleted file mode 100755
index a5c2e3b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/AbstractLayerOperator.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Abstract Layer Operator</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator#getLayerOperatorDescriptor <em>Layer Operator Descriptor</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator#getLayerOperatorDescriptorName <em>Layer Operator Descriptor Name</em>}</li>
- * </ul>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getAbstractLayerOperator()
- * @model abstract="true"
- * @generated
- */
-public interface AbstractLayerOperator extends LayerOperator {
-	/**
-	 * Returns the value of the '<em><b>Layer Operator Descriptor</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Layer Operator Descriptor</em>' reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Layer Operator Descriptor</em>' reference.
-	 * @see #setLayerOperatorDescriptor(LayerOperatorDescriptor)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getAbstractLayerOperator_LayerOperatorDescriptor()
-	 * @model required="true" transient="true" ordered="false"
-	 * @generated
-	 */
-	LayerOperatorDescriptor getLayerOperatorDescriptor();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator#getLayerOperatorDescriptor <em>Layer Operator Descriptor</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Layer Operator Descriptor</em>' reference.
-	 * @see #getLayerOperatorDescriptor()
-	 * @generated
-	 */
-	void setLayerOperatorDescriptor(LayerOperatorDescriptor value);
-
-	/**
-	 * Returns the value of the '<em><b>Layer Operator Descriptor Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Layer Operator Descriptor Name</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Layer Operator Descriptor Name</em>' attribute.
-	 * @see #setLayerOperatorDescriptorName(String)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getAbstractLayerOperator_LayerOperatorDescriptorName()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
-	 * @generated
-	 */
-	String getLayerOperatorDescriptorName();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator#getLayerOperatorDescriptorName <em>Layer Operator Descriptor Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Layer Operator Descriptor Name</em>' attribute.
-	 * @see #getLayerOperatorDescriptorName()
-	 * @generated
-	 */
-	void setLayerOperatorDescriptorName(String value);
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @model kind="operation" dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.boolean" required="true" ordered="false"
-	 * @generated
-	 */
-	boolean isDescriptorSet();
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @model
-	 * @generated
-	 */
-	void resetDescriptor();
-
-} // AbstractLayerOperator
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/AndStackedLayerOperatorDescriptor.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/AndStackedLayerOperatorDescriptor.java
deleted file mode 100755
index 4cc493d..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/AndStackedLayerOperatorDescriptor.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>And Stacked Layer Operator Descriptor</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getAndStackedLayerOperatorDescriptor()
- * @model
- * @generated
- */
-public interface AndStackedLayerOperatorDescriptor extends StackedLayerOperatorDescriptor {
-} // AndStackedLayerOperatorDescriptor
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/BooleanInstance.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/BooleanInstance.java
deleted file mode 100755
index e86c246..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/BooleanInstance.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Boolean Instance</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance#isValue <em>Value</em>}</li>
- * </ul>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getBooleanInstance()
- * @model
- * @generated
- */
-public interface BooleanInstance extends TypeInstance {
-	/**
-	 * Returns the value of the '<em><b>Value</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Value</em>' attribute.
-	 * @see #setValue(boolean)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getBooleanInstance_Value()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.boolean" required="true" ordered="false"
-	 * @generated
-	 */
-	boolean isValue();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance#isValue <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Value</em>' attribute.
-	 * @see #isValue()
-	 * @generated
-	 */
-	void setValue(boolean value);
-
-} // BooleanInstance
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/BooleanPropertyValue.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/BooleanPropertyValue.java
deleted file mode 100755
index 6766f90..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/BooleanPropertyValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Boolean Property Value</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanPropertyValue#isValue <em>Value</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getBooleanPropertyValue()
- * @model
- * @generated
- */
-public interface BooleanPropertyValue extends TypeInstance {
-	/**
-	 * Returns the value of the '<em><b>Value</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Value</em>' attribute isn't clear, there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 *
-	 * @return the value of the '<em>Value</em>' attribute.
-	 * @see #setValue(boolean)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getBooleanPropertyValue_Value()
-	 * @model unique="false" dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.boolean" required="true" ordered="false"
-	 * @generated
-	 */
-	boolean isValue();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanPropertyValue#isValue <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @param value
-	 *            the new value of the '<em>Value</em>' attribute.
-	 * @see #isValue()
-	 * @generated
-	 */
-	void setValue(boolean value);
-
-} // BooleanPropertyValue
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/BooleanType.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/BooleanType.java
deleted file mode 100755
index 80bae41..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/BooleanType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Boolean Type</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getBooleanType()
- * @model
- * @generated
- */
-public interface BooleanType extends Type {
-} // BooleanType
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/BooleanValue.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/BooleanValue.java
deleted file mode 100755
index 83dd036..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/BooleanValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Boolean Value</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanValue#isValue <em>Value</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getBooleanValue()
- * @model
- * @generated
- */
-public interface BooleanValue extends TypeInstance {
-	/**
-	 * Returns the value of the '<em><b>Value</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Value</em>' attribute isn't clear, there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 *
-	 * @return the value of the '<em>Value</em>' attribute.
-	 * @see #setValue(boolean)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getBooleanValue_Value()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.boolean" required="true" ordered="false"
-	 * @generated
-	 */
-	boolean isValue();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanValue#isValue <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @param value
-	 *            the new value of the '<em>Value</em>' attribute.
-	 * @see #isValue()
-	 * @generated
-	 */
-	void setValue(boolean value);
-
-} // BooleanValue
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Color.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Color.java
deleted file mode 100755
index 8508717..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Color.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Color</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getColor()
- * @model
- * @generated
- */
-public interface Color extends Type {
-} // Color
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/ColorInstance.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/ColorInstance.java
deleted file mode 100755
index 80460b0..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/ColorInstance.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Color Instance</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance#getValue <em>Value</em>}</li>
- * </ul>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getColorInstance()
- * @model
- * @generated
- */
-public interface ColorInstance extends TypeInstance {
-	/**
-	 * Returns the value of the '<em><b>Value</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Value</em>' attribute.
-	 * @see #setValue(int)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getColorInstance_Value()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.int" required="true" ordered="false"
-	 * @generated
-	 */
-	int getValue();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance#getValue <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Value</em>' attribute.
-	 * @see #getValue()
-	 * @generated
-	 */
-	void setValue(int value);
-
-} // ColorInstance
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/CustomLayerOperator.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/CustomLayerOperator.java
deleted file mode 100755
index b8d30c8..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/CustomLayerOperator.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Custom Layer Operator</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getCustomLayerOperator()
- * @model
- * @generated
- */
-public interface CustomLayerOperator extends LayerOperator {
-} // CustomLayerOperator
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/CustomPropertyOperator.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/CustomPropertyOperator.java
deleted file mode 100755
index d27acd1..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/CustomPropertyOperator.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Custom Property Operator</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator#getClassname <em>Classname</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator#getOperatorInstance <em>Operator Instance</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator#getClassBundleID <em>Class Bundle ID</em>}</li>
- * </ul>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getCustomPropertyOperator()
- * @model
- * @generated
- */
-public interface CustomPropertyOperator extends PropertyOperator {
-	/**
-	 * Returns the value of the '<em><b>Classname</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Classname</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Classname</em>' attribute.
-	 * @see #setClassname(String)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getCustomPropertyOperator_Classname()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
-	 * @generated
-	 */
-	String getClassname();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator#getClassname <em>Classname</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Classname</em>' attribute.
-	 * @see #getClassname()
-	 * @generated
-	 */
-	void setClassname(String value);
-
-	/**
-	 * Returns the value of the '<em><b>Operator Instance</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Operator Instance</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Operator Instance</em>' attribute.
-	 * @see #setOperatorInstance(CustomPropertyOperatorsInstance)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getCustomPropertyOperator_OperatorInstance()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOpertorInstance" required="true" ordered="false"
-	 * @generated
-	 */
-	CustomPropertyOperatorsInstance getOperatorInstance();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator#getOperatorInstance <em>Operator Instance</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Operator Instance</em>' attribute.
-	 * @see #getOperatorInstance()
-	 * @generated
-	 */
-	void setOperatorInstance(CustomPropertyOperatorsInstance value);
-
-	/**
-	 * Returns the value of the '<em><b>Class Bundle ID</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Class Bundle ID</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Class Bundle ID</em>' attribute.
-	 * @see #setClassBundleID(String)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getCustomPropertyOperator_ClassBundleID()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
-	 * @generated
-	 */
-	String getClassBundleID();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator#getClassBundleID <em>Class Bundle ID</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Class Bundle ID</em>' attribute.
-	 * @see #getClassBundleID()
-	 * @generated
-	 */
-	void setClassBundleID(String value);
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @model exceptions="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersException"
-	 * @generated
-	 */
-	void resetOperatorInstance() throws LayersException;
-
-} // CustomPropertyOperator
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/CustomType.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/CustomType.java
deleted file mode 100755
index d3a0fba..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/CustomType.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Custom Type</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomType#getClassifier <em>Classifier</em>}</li>
- * </ul>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getCustomType()
- * @model
- * @generated
- */
-public interface CustomType extends Type {
-	/**
-	 * Returns the value of the '<em><b>Classifier</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Classifier</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Classifier</em>' attribute.
-	 * @see #setClassifier(String)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getCustomType_Classifier()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
-	 * @generated
-	 */
-	String getClassifier();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomType#getClassifier <em>Classifier</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Classifier</em>' attribute.
-	 * @see #getClassifier()
-	 * @generated
-	 */
-	void setClassifier(String value);
-
-} // CustomType
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/DefaultPropertyOperator.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/DefaultPropertyOperator.java
deleted file mode 100755
index 56fc062..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/DefaultPropertyOperator.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Default Property Operator</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getDefaultPropertyOperator()
- * @model
- * @generated
- */
-public interface DefaultPropertyOperator extends PropertyOperator {
-} // DefaultPropertyOperator
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Fill.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Fill.java
deleted file mode 100755
index 11e2887..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Fill.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Fill</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getFill()
- * @model
- * @generated
- */
-public interface Fill extends Type {
-} // Fill
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FillInstance.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FillInstance.java
deleted file mode 100755
index 40993ea..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FillInstance.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Fill Instance</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance#getTransparency <em>Transparency</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance#getFillColor <em>Fill Color</em>}</li>
- * </ul>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getFillInstance()
- * @model
- * @generated
- */
-public interface FillInstance extends TypeInstance {
-	/**
-	 * Returns the value of the '<em><b>Transparency</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Transparency</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Transparency</em>' attribute.
-	 * @see #setTransparency(int)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getFillInstance_Transparency()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.int" required="true" ordered="false"
-	 * @generated
-	 */
-	int getTransparency();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance#getTransparency <em>Transparency</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Transparency</em>' attribute.
-	 * @see #getTransparency()
-	 * @generated
-	 */
-	void setTransparency(int value);
-
-	/**
-	 * Returns the value of the '<em><b>Fill Color</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Fill Color</em>' containment reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Fill Color</em>' containment reference.
-	 * @see #setFillColor(ColorInstance)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getFillInstance_FillColor()
-	 * @model containment="true" required="true" ordered="false"
-	 * @generated
-	 */
-	ColorInstance getFillColor();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance#getFillColor <em>Fill Color</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Fill Color</em>' containment reference.
-	 * @see #getFillColor()
-	 * @generated
-	 */
-	void setFillColor(ColorInstance value);
-
-} // FillInstance
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FillPropertySetter.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FillPropertySetter.java
deleted file mode 100755
index 4949de5..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FillPropertySetter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Fill Property Setter</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getFillPropertySetter()
- * @model
- * @generated
- */
-public interface FillPropertySetter extends PropertySetter {
-} // FillPropertySetter
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Folder.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Folder.java
index ae461d4..bf5cc43 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Folder.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Folder.java
@@ -13,7 +13,7 @@
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
 
-import org.eclipse.emf.common.util.EList;
+import java.util.List;
 
 /**
  * <!-- begin-user-doc -->
@@ -47,7 +47,7 @@
 	 * @model containment="true" ordered="false"
 	 * @generated
 	 */
-	EList<FolderElement> getElements();
+	List<FolderElement> getElements();
 
 	/**
 	 * Returns the value of the '<em><b>Name</b></em>' attribute.
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FontInstance.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FontInstance.java
deleted file mode 100755
index abd4001..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FontInstance.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Font Instance</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#getFontColor <em>Font Color</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#getFontName <em>Font Name</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#getFontHeigh <em>Font Heigh</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#isBold <em>Bold</em>}</li>
- * </ul>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getFontInstance()
- * @model
- * @generated
- */
-public interface FontInstance extends TypeInstance {
-	/**
-	 * Returns the value of the '<em><b>Font Color</b></em>' attribute.
-	 * The default value is <code>"15053796"</code>.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Font Color</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Font Color</em>' attribute.
-	 * @see #setFontColor(int)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getFontInstance_FontColor()
-	 * @model default="15053796" dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.int" required="true" ordered="false"
-	 * @generated
-	 */
-	int getFontColor();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#getFontColor <em>Font Color</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Font Color</em>' attribute.
-	 * @see #getFontColor()
-	 * @generated
-	 */
-	void setFontColor(int value);
-
-	/**
-	 * Returns the value of the '<em><b>Font Name</b></em>' attribute.
-	 * The default value is <code>"Segoe UI"</code>.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Font Name</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Font Name</em>' attribute.
-	 * @see #setFontName(String)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getFontInstance_FontName()
-	 * @model default="Segoe UI" dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
-	 * @generated
-	 */
-	String getFontName();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#getFontName <em>Font Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Font Name</em>' attribute.
-	 * @see #getFontName()
-	 * @generated
-	 */
-	void setFontName(String value);
-
-	/**
-	 * Returns the value of the '<em><b>Font Heigh</b></em>' attribute.
-	 * The default value is <code>"9"</code>.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Font Heigh</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Font Heigh</em>' attribute.
-	 * @see #setFontHeigh(int)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getFontInstance_FontHeigh()
-	 * @model default="9" dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.int" required="true" ordered="false"
-	 * @generated
-	 */
-	int getFontHeigh();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#getFontHeigh <em>Font Heigh</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Font Heigh</em>' attribute.
-	 * @see #getFontHeigh()
-	 * @generated
-	 */
-	void setFontHeigh(int value);
-
-	/**
-	 * Returns the value of the '<em><b>Bold</b></em>' attribute.
-	 * The default value is <code>"true"</code>.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Bold</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Bold</em>' attribute.
-	 * @see #setBold(boolean)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getFontInstance_Bold()
-	 * @model default="true" dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.boolean" required="true" ordered="false"
-	 * @generated
-	 */
-	boolean isBold();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#isBold <em>Bold</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Bold</em>' attribute.
-	 * @see #isBold()
-	 * @generated
-	 */
-	void setBold(boolean value);
-
-} // FontInstance
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FontPropertySetter.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FontPropertySetter.java
deleted file mode 100755
index 21a5614..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FontPropertySetter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Font Property Setter</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getFontPropertySetter()
- * @model
- * @generated
- */
-public interface FontPropertySetter extends PropertySetter {
-} // FontPropertySetter
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FontType.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FontType.java
deleted file mode 100755
index 31ef150..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/FontType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Font Type</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getFontType()
- * @model
- * @generated
- */
-public interface FontType extends Type {
-} // FontType
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IntInstance.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IntInstance.java
deleted file mode 100755
index b5e55d8..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IntInstance.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Int Instance</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntInstance#getValue <em>Value</em>}</li>
- * </ul>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getIntInstance()
- * @model
- * @generated
- */
-public interface IntInstance extends TypeInstance {
-	/**
-	 * Returns the value of the '<em><b>Value</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Value</em>' attribute.
-	 * @see #setValue(int)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getIntInstance_Value()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.int" required="true" ordered="false"
-	 * @generated
-	 */
-	int getValue();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntInstance#getValue <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Value</em>' attribute.
-	 * @see #getValue()
-	 * @generated
-	 */
-	void setValue(int value);
-
-} // IntInstance
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IntPropertyValue.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IntPropertyValue.java
deleted file mode 100755
index 2bbef97..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IntPropertyValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Int Property Value</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntPropertyValue#getValue <em>Value</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getIntPropertyValue()
- * @model
- * @generated
- */
-public interface IntPropertyValue extends TypeInstance {
-	/**
-	 * Returns the value of the '<em><b>Value</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Value</em>' attribute isn't clear, there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 *
-	 * @return the value of the '<em>Value</em>' attribute.
-	 * @see #setValue(int)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getIntPropertyValue_Value()
-	 * @model unique="false" dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.int" required="true" ordered="false"
-	 * @generated
-	 */
-	int getValue();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntPropertyValue#getValue <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @param value
-	 *            the new value of the '<em>Value</em>' attribute.
-	 * @see #getValue()
-	 * @generated
-	 */
-	void setValue(int value);
-
-} // IntPropertyValue
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IntType.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IntType.java
deleted file mode 100755
index 568cdee..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IntType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Int Type</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getIntType()
- * @model
- * @generated
- */
-public interface IntType extends Type {
-} // IntType
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IntValue.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IntValue.java
deleted file mode 100755
index e2fae40..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IntValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Int Value</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntValue#getValue <em>Value</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getIntValue()
- * @model
- * @generated
- */
-public interface IntValue extends TypeInstance {
-	/**
-	 * Returns the value of the '<em><b>Value</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Value</em>' attribute isn't clear, there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 *
-	 * @return the value of the '<em>Value</em>' attribute.
-	 * @see #setValue(int)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getIntValue_Value()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.int" required="true" ordered="false"
-	 * @generated
-	 */
-	int getValue();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntValue#getValue <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @param value
-	 *            the new value of the '<em>Value</em>' attribute.
-	 * @see #getValue()
-	 * @generated
-	 */
-	void setValue(int value);
-
-} // IntValue
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IsAbstractUmlSetter.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IsAbstractUmlSetter.java
deleted file mode 100755
index 00ace40..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IsAbstractUmlSetter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Is Abstract Uml Setter</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getIsAbstractUmlSetter()
- * @model
- * @generated
- */
-public interface IsAbstractUmlSetter extends PropertySetter {
-} // IsAbstractUmlSetter
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IsValidPropertySetter.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IsValidPropertySetter.java
deleted file mode 100755
index 9b31759..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IsValidPropertySetter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Is Valid Property Setter</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getIsValidPropertySetter()
- * @model
- * @generated
- */
-public interface IsValidPropertySetter extends PropertySetter {
-} // IsValidPropertySetter
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IsVisiblePropertySetter.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IsVisiblePropertySetter.java
deleted file mode 100755
index 3ba21d8..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/IsVisiblePropertySetter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Is Visible Property Setter</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getIsVisiblePropertySetter()
- * @model
- * @generated
- */
-public interface IsVisiblePropertySetter extends PropertySetter {
-} // IsVisiblePropertySetter
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerDescriptorRegistry.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerDescriptorRegistry.java
index 71e5fe5..ce91ea1 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerDescriptorRegistry.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerDescriptorRegistry.java
@@ -13,7 +13,7 @@
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
 
-import org.eclipse.emf.common.util.EList;
+import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
 
@@ -48,6 +48,6 @@
 	 * @model containment="true" ordered="false"
 	 * @generated
 	 */
-	EList<LayerDescriptor> getLayerDescriptors();
+	List<LayerDescriptor> getLayerDescriptors();
 
 } // LayerDescriptorRegistry
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerExpression.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerExpression.java
index d62248c..3b6c7fb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerExpression.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerExpression.java
@@ -15,8 +15,6 @@
 
 import java.util.List;
 
-import org.eclipse.emf.common.util.EList;
-
 import org.eclipse.gmf.runtime.notation.View;
 
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
@@ -240,7 +238,7 @@
 	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ComputePropertyValueCommand" exceptions="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersException" viewMany="true" propertyRequired="true" propertyOrdered="false"
 	 * @generated
 	 */
-	EList<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(EList<View> view, Property property) throws LayersException;
+	List<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(List<View> view, Property property) throws LayersException;
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -248,7 +246,7 @@
 	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ComputePropertyValueCommand" exceptions="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersException" viewRequired="true" viewOrdered="false" propertyRequired="true" propertyMany="true"
 	 * @generated
 	 */
-	EList<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, EList<Property> property) throws LayersException;
+	List<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, List<Property> property) throws LayersException;
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -333,23 +331,4 @@
 	 */
 	void exitAttachedState();
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @throws LayersException
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ComputePropertyValueCommand" viewMany="true" propertyRequired="true" propertyOrdered="false"
-	 * @generated NOT
-	 */
-	EList<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(List<View> view, Property property) throws LayersException;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @throws LayersException
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ComputePropertyValueCommand" viewRequired="true" viewOrdered="false" propertyRequired="true" propertyMany="true"
-	 * @generated NOT
-	 */
-	EList<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, List<Property> property) throws LayersException;
 } // LayerExpression
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerNamedStyle.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerNamedStyle.java
index 694bd79..2c9d848 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerNamedStyle.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerNamedStyle.java
@@ -13,7 +13,7 @@
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
 
-import org.eclipse.emf.common.util.EList;
+import java.util.List;
 
 import org.eclipse.gmf.runtime.notation.NamedStyle;
 
@@ -48,6 +48,6 @@
 	 * @model containment="true" ordered="false"
 	 * @generated
 	 */
-	EList<LayersStack> getLayersStack();
+	List<LayersStack> getLayersStack();
 
 } // LayerNamedStyle
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerOperator.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerOperator.java
index 90a9696..758b1a9 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerOperator.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerOperator.java
@@ -13,7 +13,7 @@
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
 
-import org.eclipse.emf.common.util.EList;
+import java.util.List;
 
 /**
  * <!-- begin-user-doc -->
@@ -25,6 +25,8 @@
  * </p>
  * <ul>
  *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator#getLayers <em>Layers</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator#getLayerOperatorDescriptorName <em>Layer Operator Descriptor Name</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator#getLayerOperatorDescriptor <em>Layer Operator Descriptor</em>}</li>
  * </ul>
  *
  * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getLayerOperator()
@@ -46,6 +48,74 @@
 	 * @model containment="true"
 	 * @generated
 	 */
-	EList<LayerExpression> getLayers();
+	List<LayerExpression> getLayers();
+
+	/**
+	 * Returns the value of the '<em><b>Layer Operator Descriptor Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Layer Operator Descriptor Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Layer Operator Descriptor Name</em>' attribute.
+	 * @see #setLayerOperatorDescriptorName(String)
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getLayerOperator_LayerOperatorDescriptorName()
+	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
+	 * @generated
+	 */
+	String getLayerOperatorDescriptorName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator#getLayerOperatorDescriptorName <em>Layer Operator Descriptor Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Layer Operator Descriptor Name</em>' attribute.
+	 * @see #getLayerOperatorDescriptorName()
+	 * @generated
+	 */
+	void setLayerOperatorDescriptorName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Layer Operator Descriptor</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Layer Operator Descriptor</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Layer Operator Descriptor</em>' reference.
+	 * @see #setLayerOperatorDescriptor(LayerOperatorDescriptor)
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getLayerOperator_LayerOperatorDescriptor()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	LayerOperatorDescriptor getLayerOperatorDescriptor();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator#getLayerOperatorDescriptor <em>Layer Operator Descriptor</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Layer Operator Descriptor</em>' reference.
+	 * @see #getLayerOperatorDescriptor()
+	 * @generated
+	 */
+	void setLayerOperatorDescriptor(LayerOperatorDescriptor value);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation" dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.boolean" required="true" ordered="false"
+	 * @generated
+	 */
+	boolean isDescriptorSet();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model
+	 * @generated
+	 */
+	void resetDescriptor();
 
 } // LayerOperator
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerOperatorDescriptor.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerOperatorDescriptor.java
index 818ef0a..d40e1a7 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerOperatorDescriptor.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerOperatorDescriptor.java
@@ -13,7 +13,7 @@
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
 
-import org.eclipse.emf.common.util.EList;
+import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
 
@@ -51,7 +51,7 @@
 	 * @model transient="true"
 	 * @generated
 	 */
-	EList<PropertyOperator> getPropertyOperators();
+	List<PropertyOperator> getPropertyOperators();
 
 	/**
 	 * Returns the value of the '<em><b>Name</b></em>' attribute.
@@ -101,7 +101,7 @@
 	 * @model required="true" ordered="false"
 	 * @generated
 	 */
-	AbstractLayerOperator createLayerOperator();
+	LayerOperator createLayerOperator();
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -109,6 +109,6 @@
 	 * @model sizeDataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.int" sizeRequired="true" sizeOrdered="false" defaultPropertyOperatorRequired="true" defaultPropertyOperatorOrdered="false"
 	 * @generated
 	 */
-	void setPropertyCollectionSize(int size, DefaultPropertyOperator defaultPropertyOperator);
+	void setPropertyCollectionSize(int size, PropertyOperator defaultPropertyOperator);
 
 } // LayerOperatorDescriptor
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerOperatorDescriptorRegistry.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerOperatorDescriptorRegistry.java
index dd27976..6df8f08 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerOperatorDescriptorRegistry.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayerOperatorDescriptorRegistry.java
@@ -13,7 +13,7 @@
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
 
-import org.eclipse.emf.common.util.EList;
+import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
 
@@ -54,7 +54,7 @@
 	 * @model containment="true" transient="true" ordered="false"
 	 * @generated
 	 */
-	EList<LayerOperatorDescriptor> getDescriptors();
+	List<LayerOperatorDescriptor> getDescriptors();
 
 	/**
 	 * Returns the value of the '<em><b>Property Operators</b></em>' containment reference list.
@@ -70,7 +70,7 @@
 	 * @model containment="true" transient="true"
 	 * @generated
 	 */
-	EList<PropertyOperator> getPropertyOperators();
+	List<PropertyOperator> getPropertyOperators();
 
 	/**
 	 * Returns the value of the '<em><b>Property Collection Size</b></em>' attribute.
@@ -111,7 +111,7 @@
 	 * @model required="true" transient="true" changeable="false" ordered="false"
 	 * @generated
 	 */
-	DefaultPropertyOperator getDefaultOperator();
+	PropertyOperator getDefaultOperator();
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -159,6 +159,6 @@
 	 * @model required="true" ordered="false" exceptions="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersException" layerOperatorIDDataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" layerOperatorIDRequired="true" layerOperatorIDOrdered="false"
 	 * @generated
 	 */
-	AbstractLayerOperator createLayerOperator(String layerOperatorID) throws LayersException;
+	LayerOperator createLayerOperator(String layerOperatorID) throws LayersException;
 
 } // LayerOperatorDescriptorRegistry
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersFactory.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersFactory.java
index d70c2ca..1ac6724 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersFactory.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersFactory.java
@@ -87,15 +87,6 @@
 	Property createProperty();
 
 	/**
-	 * Returns a new object of class '<em>Metamodel</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Metamodel</em>'.
-	 * @generated
-	 */
-	Metamodel createMetamodel();
-
-	/**
 	 * Returns a new object of class '<em>Type Registry</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -168,15 +159,6 @@
 	PropertyOperator createPropertyOperator();
 
 	/**
-	 * Returns a new object of class '<em>Default Property Operator</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Default Property Operator</em>'.
-	 * @generated
-	 */
-	DefaultPropertyOperator createDefaultPropertyOperator();
-
-	/**
 	 * Returns a new object of class '<em>Folder</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -186,67 +168,13 @@
 	Folder createFolder();
 
 	/**
-	 * Returns a new object of class '<em>Int Instance</em>'.
+	 * Returns a new object of class '<em>Metamodel</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Int Instance</em>'.
+	 * @return a new object of class '<em>Metamodel</em>'.
 	 * @generated
 	 */
-	IntInstance createIntInstance();
-
-	/**
-	 * Returns a new object of class '<em>Boolean Instance</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Boolean Instance</em>'.
-	 * @generated
-	 */
-	BooleanInstance createBooleanInstance();
-
-	/**
-	 * Returns a new object of class '<em>String Instance</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>String Instance</em>'.
-	 * @generated
-	 */
-	StringInstance createStringInstance();
-
-	/**
-	 * Returns a new object of class '<em>Int Type</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Int Type</em>'.
-	 * @generated
-	 */
-	IntType createIntType();
-
-	/**
-	 * Returns a new object of class '<em>Boolean Type</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Boolean Type</em>'.
-	 * @generated
-	 */
-	BooleanType createBooleanType();
-
-	/**
-	 * Returns a new object of class '<em>String Type</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>String Type</em>'.
-	 * @generated
-	 */
-	StringType createStringType();
-
-	/**
-	 * Returns a new object of class '<em>Custom Type</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Custom Type</em>'.
-	 * @generated
-	 */
-	CustomType createCustomType();
+	Metamodel createMetamodel();
 
 	/**
 	 * Returns a new object of class '<em>Top Layer Operator</em>'.
@@ -267,15 +195,6 @@
 	StackedLayerOperator createStackedLayerOperator();
 
 	/**
-	 * Returns a new object of class '<em>Custom Layer Operator</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Custom Layer Operator</em>'.
-	 * @generated
-	 */
-	CustomLayerOperator createCustomLayerOperator();
-
-	/**
 	 * Returns a new object of class '<em>Property Index</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -294,15 +213,6 @@
 	SimpleLayerDescriptor createSimpleLayerDescriptor();
 
 	/**
-	 * Returns a new object of class '<em>Reg Exp Layer Descriptor</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Reg Exp Layer Descriptor</em>'.
-	 * @generated
-	 */
-	RegExpLayerDescriptor createRegExpLayerDescriptor();
-
-	/**
 	 * Returns a new object of class '<em>Null Instance</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -312,15 +222,6 @@
 	NullInstance createNullInstance();
 
 	/**
-	 * Returns a new object of class '<em>Reg Exp Layer</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Reg Exp Layer</em>'.
-	 * @generated
-	 */
-	RegExpLayer createRegExpLayer();
-
-	/**
 	 * Returns a new object of class '<em>Layer</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -330,60 +231,6 @@
 	Layer createLayer();
 
 	/**
-	 * Returns a new object of class '<em>Color</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Color</em>'.
-	 * @generated
-	 */
-	Color createColor();
-
-	/**
-	 * Returns a new object of class '<em>Color Instance</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Color Instance</em>'.
-	 * @generated
-	 */
-	ColorInstance createColorInstance();
-
-	/**
-	 * Returns a new object of class '<em>Fill Instance</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Fill Instance</em>'.
-	 * @generated
-	 */
-	FillInstance createFillInstance();
-
-	/**
-	 * Returns a new object of class '<em>Fill</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Fill</em>'.
-	 * @generated
-	 */
-	Fill createFill();
-
-	/**
-	 * Returns a new object of class '<em>Fill Property Setter</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Fill Property Setter</em>'.
-	 * @generated
-	 */
-	FillPropertySetter createFillPropertySetter();
-
-	/**
-	 * Returns a new object of class '<em>Is Valid Property Setter</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Is Valid Property Setter</em>'.
-	 * @generated
-	 */
-	IsValidPropertySetter createIsValidPropertySetter();
-
-	/**
 	 * Returns a new object of class '<em>Null Property Setter</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -393,69 +240,6 @@
 	NullPropertySetter createNullPropertySetter();
 
 	/**
-	 * Returns a new object of class '<em>Line Type</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Line Type</em>'.
-	 * @generated
-	 */
-	LineType createLineType();
-
-	/**
-	 * Returns a new object of class '<em>Line Instance</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Line Instance</em>'.
-	 * @generated
-	 */
-	LineInstance createLineInstance();
-
-	/**
-	 * Returns a new object of class '<em>Line Property Setter</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Line Property Setter</em>'.
-	 * @generated
-	 */
-	LinePropertySetter createLinePropertySetter();
-
-	/**
-	 * Returns a new object of class '<em>Font Property Setter</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Font Property Setter</em>'.
-	 * @generated
-	 */
-	FontPropertySetter createFontPropertySetter();
-
-	/**
-	 * Returns a new object of class '<em>Font Instance</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Font Instance</em>'.
-	 * @generated
-	 */
-	FontInstance createFontInstance();
-
-	/**
-	 * Returns a new object of class '<em>Font Type</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Font Type</em>'.
-	 * @generated
-	 */
-	FontType createFontType();
-
-	/**
-	 * Returns a new object of class '<em>Is Visible Property Setter</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Is Visible Property Setter</em>'.
-	 * @generated
-	 */
-	IsVisiblePropertySetter createIsVisiblePropertySetter();
-
-	/**
 	 * Returns a new object of class '<em>Top Layer Operator Descriptor</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -474,42 +258,6 @@
 	StackedLayerOperatorDescriptor createStackedLayerOperatorDescriptor();
 
 	/**
-	 * Returns a new object of class '<em>Custom Property Operator</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Custom Property Operator</em>'.
-	 * @generated
-	 */
-	CustomPropertyOperator createCustomPropertyOperator();
-
-	/**
-	 * Returns a new object of class '<em>And Stacked Layer Operator Descriptor</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>And Stacked Layer Operator Descriptor</em>'.
-	 * @generated
-	 */
-	AndStackedLayerOperatorDescriptor createAndStackedLayerOperatorDescriptor();
-
-	/**
-	 * Returns a new object of class '<em>Or Stacked Layer Operator Descriptor</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Or Stacked Layer Operator Descriptor</em>'.
-	 * @generated
-	 */
-	OrStackedLayerOperatorDescriptor createOrStackedLayerOperatorDescriptor();
-
-	/**
-	 * Returns a new object of class '<em>Is Abstract Uml Setter</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Is Abstract Uml Setter</em>'.
-	 * @generated
-	 */
-	IsAbstractUmlSetter createIsAbstractUmlSetter();
-
-	/**
 	 * Returns a new object of class '<em>All Views Derived Layer</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersFactoryForStack.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersFactoryForStack.java
deleted file mode 100755
index 66e03d4..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersFactoryForStack.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Factory</b> for the model.
- * It provides a create method for each non-abstract class of the model.
- * <!-- end-user-doc -->
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage
- * @generated
- */
-public interface LayersFactoryForStack {
-	/**
-	 * The singleton instance of the factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated
-	 */
-	LayersFactoryForStack eINSTANCE = org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryForStackImpl.init();
-
-	/**
-	 * Returns a new object of class '<em>Stack</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @return a new object of class '<em>Stack</em>'.
-	 * @generated
-	 */
-	LayersStack createLayersStack();
-
-	/**
-	 * Returns a new object of class '<em>Layer</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @return a new object of class '<em>Layer</em>'.
-	 * @generated NOT
-	 */
-	public Layer createLayer(LayersContainer parent, LayersStack owningStack, LayersStackApplication application)
-			throws LayersException;
-
-
-	/**
-	 * Returns a new object of class '<em>Reg Exp Layer</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @return a new object of class '<em>Reg Exp Layer</em>'.
-	 * @throws LayersException
-	 * @generated
-	 */
-	public RegExpLayer createRegExpLayer(LayersContainer parent, LayersStack owningStack, LayersStackApplication application) throws LayersException;
-
-	/**
-	 * Returns a new object of class '<em>Top Layer Operator</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @return a new object of class '<em>Top Layer Operator</em>'.
-	 * @generated
-	 */
-	public TopLayerOperator createTopLayerOperator(LayersContainer parent, LayersStack owningStack, LayersStackApplication application) throws LayersException;
-
-	/**
-	 * Returns a new object of class '<em>Stacked Layer Operator</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @return a new object of class '<em>Stacked Layer Operator</em>'.
-	 * @generated
-	 */
-	public StackedLayerOperator createStackedLayerOperator(LayersContainer parent, LayersStack owningStack, LayersStackApplication application) throws LayersException;
-
-	/**
-	 * Standard initialization of a newly created layer.
-	 *
-	 * @param layer
-	 * @param parentLayer
-	 * @param owningStack
-	 * @param application
-	 * @return
-	 * @throws LayersException
-	 */
-	public LayerExpression initLayer(LayerExpression layer, LayersContainer parentLayer, LayersStack owningStack, LayersStackApplication application) throws LayersException;
-
-	/**
-	 * Create a LayerOperator by its ID.
-	 * IDs are those used when the LayerOperator is registered in application'registry.
-	 *
-	 * @param layerOperatorID
-	 * @param parent
-	 * @param owningStack
-	 * @param application
-	 * @return
-	 * @throws LayersException
-	 */
-	public AbstractLayerOperator createLayerOperator(String layerOperatorID, LayersContainer parent, LayersStack owningStack, LayersStackApplication application) throws LayersException;
-
-
-} // LayersFactory
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersPackage.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersPackage.java
index 6fbdcef..8847277 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersPackage.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersPackage.java
@@ -124,7 +124,7 @@
 	 * @generated NOT
 	 * @ordered
 	 */
-	int LAYER_NAMED_STYLE_OPERATION_COUNT = /* NotationPackage.NAMED_STYLE_OPERATION_COUNT + */0;
+	int LAYER_NAMED_STYLE_OPERATION_COUNT = /* NotationPackage.NAMED_STYLE_OPERATION_COUNT + */ 0;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersContainer <em>Container</em>}' class.
@@ -134,7 +134,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLayersContainer()
 	 * @generated
 	 */
-	int LAYERS_CONTAINER = 26;
+	int LAYERS_CONTAINER = 24;
 
 	/**
 	 * The number of structural features of the '<em>Container</em>' class.
@@ -252,7 +252,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int LAYERS_STACK___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST = LAYERS_CONTAINER_OPERATION_COUNT + 1;
+	int LAYERS_STACK___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST = LAYERS_CONTAINER_OPERATION_COUNT + 1;
 
 	/**
 	 * The operation id for the '<em>Get Views Compute Property Value Command</em>' operation.
@@ -261,7 +261,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int LAYERS_STACK___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY = LAYERS_CONTAINER_OPERATION_COUNT + 2;
+	int LAYERS_STACK___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY = LAYERS_CONTAINER_OPERATION_COUNT + 2;
 
 	/**
 	 * The operation id for the '<em>Start After Creation</em>' operation.
@@ -470,7 +470,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int LAYER_EXPRESSION___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY = APPLICATION_DEPENDANT_ELEMENT_OPERATION_COUNT + 1;
+	int LAYER_EXPRESSION___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY = APPLICATION_DEPENDANT_ELEMENT_OPERATION_COUNT + 1;
 
 	/**
 	 * The operation id for the '<em>Get Properties Compute Property Value Command</em>' operation.
@@ -479,7 +479,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int LAYER_EXPRESSION___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST = APPLICATION_DEPENDANT_ELEMENT_OPERATION_COUNT + 2;
+	int LAYER_EXPRESSION___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST = APPLICATION_DEPENDANT_ELEMENT_OPERATION_COUNT + 2;
 
 	/**
 	 * The operation id for the '<em>Attach To Layers Stack</em>' operation.
@@ -911,22 +911,13 @@
 	int TYPE = 9;
 
 	/**
-	 * The feature id for the '<em><b>Metamodel</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int TYPE__METAMODEL = FOLDER_ELEMENT_FEATURE_COUNT + 0;
-
-	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int TYPE__NAME = FOLDER_ELEMENT_FEATURE_COUNT + 1;
+	int TYPE__NAME = FOLDER_ELEMENT_FEATURE_COUNT + 0;
 
 	/**
 	 * The feature id for the '<em><b>Description</b></em>' attribute.
@@ -935,7 +926,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TYPE__DESCRIPTION = FOLDER_ELEMENT_FEATURE_COUNT + 2;
+	int TYPE__DESCRIPTION = FOLDER_ELEMENT_FEATURE_COUNT + 1;
 
 	/**
 	 * The number of structural features of the '<em>Type</em>' class.
@@ -944,7 +935,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TYPE_FEATURE_COUNT = FOLDER_ELEMENT_FEATURE_COUNT + 3;
+	int TYPE_FEATURE_COUNT = FOLDER_ELEMENT_FEATURE_COUNT + 2;
 
 	/**
 	 * The operation id for the '<em>Create Instance</em>' operation.
@@ -965,97 +956,6 @@
 	int TYPE_OPERATION_COUNT = FOLDER_ELEMENT_OPERATION_COUNT + 1;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.MetamodelImpl <em>Metamodel</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.MetamodelImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getMetamodel()
-	 * @generated
-	 */
-	int METAMODEL = 10;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int METAMODEL__NAME = FOLDER_ELEMENT_FEATURE_COUNT + 0;
-
-	/**
-	 * The feature id for the '<em><b>Description</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int METAMODEL__DESCRIPTION = FOLDER_ELEMENT_FEATURE_COUNT + 1;
-
-	/**
-	 * The feature id for the '<em><b>Nsuri</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int METAMODEL__NSURI = FOLDER_ELEMENT_FEATURE_COUNT + 2;
-
-	/**
-	 * The feature id for the '<em><b>Plugin ID</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int METAMODEL__PLUGIN_ID = FOLDER_ELEMENT_FEATURE_COUNT + 3;
-
-	/**
-	 * The feature id for the '<em><b>EPackage Instance Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int METAMODEL__EPACKAGE_INSTANCE_NAME = FOLDER_ELEMENT_FEATURE_COUNT + 4;
-
-	/**
-	 * The feature id for the '<em><b>Is Type Valid</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int METAMODEL__IS_TYPE_VALID = FOLDER_ELEMENT_FEATURE_COUNT + 5;
-
-	/**
-	 * The number of structural features of the '<em>Metamodel</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int METAMODEL_FEATURE_COUNT = FOLDER_ELEMENT_FEATURE_COUNT + 6;
-
-	/**
-	 * The operation id for the '<em>Get EPackage</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int METAMODEL___GET_EPACKAGE = FOLDER_ELEMENT_OPERATION_COUNT + 0;
-
-	/**
-	 * The number of operations of the '<em>Metamodel</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int METAMODEL_OPERATION_COUNT = FOLDER_ELEMENT_OPERATION_COUNT + 1;
-
-	/**
 	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand <em>Compute Property Value Command Itf</em>}' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1063,7 +963,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getComputePropertyValueCommandItf()
 	 * @generated
 	 */
-	int COMPUTE_PROPERTY_VALUE_COMMAND_ITF = 12;
+	int COMPUTE_PROPERTY_VALUE_COMMAND_ITF = 11;
 
 	/**
 	 * The number of structural features of the '<em>Compute Property Value Command Itf</em>' class.
@@ -1100,7 +1000,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getTypeInstance()
 	 * @generated
 	 */
-	int TYPE_INSTANCE = 11;
+	int TYPE_INSTANCE = 10;
 
 	/**
 	 * The number of structural features of the '<em>Type Instance</em>' class.
@@ -1155,7 +1055,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getTypeRegistry()
 	 * @generated
 	 */
-	int TYPE_REGISTRY = 13;
+	int TYPE_REGISTRY = 12;
 
 	/**
 	 * The feature id for the '<em><b>Types</b></em>' map.
@@ -1192,7 +1092,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getStringToTypeMap()
 	 * @generated
 	 */
-	int STRING_TO_TYPE_MAP = 14;
+	int STRING_TO_TYPE_MAP = 13;
 
 	/**
 	 * The feature id for the '<em><b>Value</b></em>' containment reference.
@@ -1238,7 +1138,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLayerDescriptorRegistry()
 	 * @generated
 	 */
-	int LAYER_DESCRIPTOR_REGISTRY = 15;
+	int LAYER_DESCRIPTOR_REGISTRY = 14;
 
 	/**
 	 * The feature id for the '<em><b>Layer Descriptors</b></em>' containment reference list.
@@ -1275,7 +1175,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLayerDescriptor()
 	 * @generated
 	 */
-	int LAYER_DESCRIPTOR = 16;
+	int LAYER_DESCRIPTOR = 15;
 
 	/**
 	 * The feature id for the '<em><b>Property Registry</b></em>' reference.
@@ -1312,7 +1212,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLayerApplicationFactory()
 	 * @generated
 	 */
-	int LAYER_APPLICATION_FACTORY = 17;
+	int LAYER_APPLICATION_FACTORY = 16;
 
 	/**
 	 * The feature id for the '<em><b>Application</b></em>' container reference.
@@ -1349,7 +1249,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getPropertySetterRegistry()
 	 * @generated
 	 */
-	int PROPERTY_SETTER_REGISTRY = 18;
+	int PROPERTY_SETTER_REGISTRY = 17;
 
 	/**
 	 * The feature id for the '<em><b>Property Setters</b></em>' reference list.
@@ -1431,7 +1331,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getPropertySetter()
 	 * @generated
 	 */
-	int PROPERTY_SETTER = 19;
+	int PROPERTY_SETTER = 18;
 
 	/**
 	 * The feature id for the '<em><b>Property</b></em>' reference.
@@ -1486,7 +1386,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getStringToPropertySetter()
 	 * @generated
 	 */
-	int STRING_TO_PROPERTY_SETTER = 20;
+	int STRING_TO_PROPERTY_SETTER = 19;
 
 	/**
 	 * The feature id for the '<em><b>Key</b></em>' attribute.
@@ -1532,7 +1432,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLayerOperatorDescriptorRegistry()
 	 * @generated
 	 */
-	int LAYER_OPERATOR_DESCRIPTOR_REGISTRY = 21;
+	int LAYER_OPERATOR_DESCRIPTOR_REGISTRY = 20;
 
 	/**
 	 * The feature id for the '<em><b>Descriptors</b></em>' containment reference list.
@@ -1650,7 +1550,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLayerOperatorDescriptor()
 	 * @generated
 	 */
-	int LAYER_OPERATOR_DESCRIPTOR = 22;
+	int LAYER_OPERATOR_DESCRIPTOR = 21;
 
 	/**
 	 * The feature id for the '<em><b>Property Operators</b></em>' reference list.
@@ -1713,7 +1613,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_DEFAULTPROPERTYOPERATOR = 3;
+	int LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_PROPERTYOPERATOR = 3;
 
 	/**
 	 * The number of operations of the '<em>Layer Operator Descriptor</em>' class.
@@ -1732,7 +1632,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getPropertyOperator()
 	 * @generated
 	 */
-	int PROPERTY_OPERATOR = 23;
+	int PROPERTY_OPERATOR = 22;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -1744,13 +1644,40 @@
 	int PROPERTY_OPERATOR__NAME = 0;
 
 	/**
+	 * The feature id for the '<em><b>Classname</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROPERTY_OPERATOR__CLASSNAME = 1;
+
+	/**
+	 * The feature id for the '<em><b>Operator Instance</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROPERTY_OPERATOR__OPERATOR_INSTANCE = 2;
+
+	/**
+	 * The feature id for the '<em><b>Class Bundle ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROPERTY_OPERATOR__CLASS_BUNDLE_ID = 3;
+
+	/**
 	 * The number of structural features of the '<em>Property Operator</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int PROPERTY_OPERATOR_FEATURE_COUNT = 1;
+	int PROPERTY_OPERATOR_FEATURE_COUNT = 4;
 
 	/**
 	 * The operation id for the '<em>Get Compute Property Value Command</em>' operation.
@@ -1759,7 +1686,16 @@
 	 * @generated
 	 * @ordered
 	 */
-	int PROPERTY_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST = 0;
+	int PROPERTY_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__LIST = 0;
+
+	/**
+	 * The operation id for the '<em>Reset Operator Instance</em>' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROPERTY_OPERATOR___RESET_OPERATOR_INSTANCE = 1;
 
 	/**
 	 * The number of operations of the '<em>Property Operator</em>' class.
@@ -1768,7 +1704,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int PROPERTY_OPERATOR_OPERATION_COUNT = 1;
+	int PROPERTY_OPERATOR_OPERATION_COUNT = 2;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorImpl <em>Layer Operator</em>}' class.
@@ -1778,7 +1714,286 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLayerOperator()
 	 * @generated
 	 */
-	int LAYER_OPERATOR = 25;
+	int LAYER_OPERATOR = 23;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AbstractLayerImpl <em>Abstract Layer</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AbstractLayerImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getAbstractLayer()
+	 * @generated
+	 */
+	int ABSTRACT_LAYER = 25;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringToTypeInstanceMapImpl <em>String To Type Instance Map</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringToTypeInstanceMapImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getStringToTypeInstanceMap()
+	 * @generated
+	 */
+	int STRING_TO_TYPE_INSTANCE_MAP = 26;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FolderImpl <em>Folder</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FolderImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getFolder()
+	 * @generated
+	 */
+	int FOLDER = 27;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.MetamodelImpl <em>Metamodel</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.MetamodelImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getMetamodel()
+	 * @generated
+	 */
+	int METAMODEL = 28;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TopLayerOperatorImpl <em>Top Layer Operator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TopLayerOperatorImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getTopLayerOperator()
+	 * @generated
+	 */
+	int TOP_LAYER_OPERATOR = 29;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StackedLayerOperatorImpl <em>Stacked Layer Operator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StackedLayerOperatorImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getStackedLayerOperator()
+	 * @generated
+	 */
+	int STACKED_LAYER_OPERATOR = 30;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyIndexImpl <em>Property Index</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyIndexImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getPropertyIndex()
+	 * @generated
+	 */
+	int PROPERTY_INDEX = 31;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringToPropertyIndexMapImpl <em>String To Property Index Map</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringToPropertyIndexMapImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getStringToPropertyIndexMap()
+	 * @generated
+	 */
+	int STRING_TO_PROPERTY_INDEX_MAP = 32;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.SimpleLayerDescriptorImpl <em>Simple Layer Descriptor</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.SimpleLayerDescriptorImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getSimpleLayerDescriptor()
+	 * @generated
+	 */
+	int SIMPLE_LAYER_DESCRIPTOR = 33;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.NullInstanceImpl <em>Null Instance</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.NullInstanceImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getNullInstance()
+	 * @generated
+	 */
+	int NULL_INSTANCE = 34;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerImpl <em>Layer</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLayer()
+	 * @generated
+	 */
+	int LAYER = 35;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.NullPropertySetterImpl <em>Null Property Setter</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.NullPropertySetterImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getNullPropertySetter()
+	 * @generated
+	 */
+	int NULL_PROPERTY_SETTER = 36;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TopLayerOperatorDescriptorImpl <em>Top Layer Operator Descriptor</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TopLayerOperatorDescriptorImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getTopLayerOperatorDescriptor()
+	 * @generated
+	 */
+	int TOP_LAYER_OPERATOR_DESCRIPTOR = 37;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StackedLayerOperatorDescriptorImpl <em>Stacked Layer Operator Descriptor</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StackedLayerOperatorDescriptorImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getStackedLayerOperatorDescriptor()
+	 * @generated
+	 */
+	int STACKED_LAYER_OPERATOR_DESCRIPTOR = 38;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AllViewsDerivedLayerImpl <em>All Views Derived Layer</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AllViewsDerivedLayerImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getAllViewsDerivedLayer()
+	 * @generated
+	 */
+	int ALL_VIEWS_DERIVED_LAYER = 39;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSPropertySetterImpl <em>CSS Property Setter</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSPropertySetterImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCSSPropertySetter()
+	 * @generated
+	 */
+	int CSS_PROPERTY_SETTER = 40;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSTypeImpl <em>CSS Type</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSTypeImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCSSType()
+	 * @generated
+	 */
+	int CSS_TYPE = 41;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSInstanceImpl <em>CSS Instance</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSInstanceImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCSSInstance()
+	 * @generated
+	 */
+	int CSS_INSTANCE = 42;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHidePropertySetterImpl <em>CSS Hide Property Setter</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHidePropertySetterImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCSSHidePropertySetter()
+	 * @generated
+	 */
+	int CSS_HIDE_PROPERTY_SETTER = 43;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHideTypeImpl <em>CSS Hide Type</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHideTypeImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCSSHideType()
+	 * @generated
+	 */
+	int CSS_HIDE_TYPE = 44;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHideInstanceImpl <em>CSS Hide Instance</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHideInstanceImpl
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCSSHideInstance()
+	 * @generated
+	 */
+	int CSS_HIDE_INSTANCE = 45;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerState <em>Layer State</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerState
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLayerState()
+	 * @generated
+	 */
+	int LAYER_STATE = 46;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.EventLevel <em>Event Level</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.EventLevel
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getEventLevel()
+	 * @generated
+	 */
+	int EVENT_LEVEL = 47;
+
+	/**
+	 * The meta object id for the '<em>String</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see java.lang.String
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getString()
+	 * @generated
+	 */
+	int STRING = 48;
+
+	/**
+	 * The meta object id for the '<em>Exception</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLayersException()
+	 * @generated
+	 */
+	int LAYERS_EXCEPTION = 49;
+
+	/**
+	 * The meta object id for the '<em>int</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getint()
+	 * @generated
+	 */
+	int INT = 50;
+
+	/**
+	 * The meta object id for the '<em>Bad State Exception</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.BadStateException
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getBadStateException()
+	 * @generated
+	 */
+	int BAD_STATE_EXCEPTION = 51;
+
+	/**
+	 * The meta object id for the '<em>Not Found Exception</em>' data type.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getNotFoundException()
+	 * @generated
+	 */
+	int NOT_FOUND_EXCEPTION = 52;
 
 	/**
 	 * The feature id for the '<em><b>Application</b></em>' reference.
@@ -1862,13 +2077,31 @@
 	int LAYER_OPERATOR__LAYERS = LAYER_EXPRESSION_FEATURE_COUNT + 0;
 
 	/**
+	 * The feature id for the '<em><b>Layer Operator Descriptor Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME = LAYER_EXPRESSION_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Layer Operator Descriptor</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR = LAYER_EXPRESSION_FEATURE_COUNT + 2;
+
+	/**
 	 * The number of structural features of the '<em>Layer Operator</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int LAYER_OPERATOR_FEATURE_COUNT = LAYER_EXPRESSION_FEATURE_COUNT + 1;
+	int LAYER_OPERATOR_FEATURE_COUNT = LAYER_EXPRESSION_FEATURE_COUNT + 3;
 
 	/**
 	 * The operation id for the '<em>Get Compute Property Value Command</em>' operation.
@@ -1886,7 +2119,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int LAYER_OPERATOR___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY = LAYER_EXPRESSION___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY;
+	int LAYER_OPERATOR___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY = LAYER_EXPRESSION___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY;
 
 	/**
 	 * The operation id for the '<em>Get Properties Compute Property Value Command</em>' operation.
@@ -1895,7 +2128,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int LAYER_OPERATOR___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST = LAYER_EXPRESSION___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST;
+	int LAYER_OPERATOR___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST = LAYER_EXPRESSION___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST;
 
 	/**
 	 * The operation id for the '<em>Attach To Layers Stack</em>' operation.
@@ -1961,230 +2194,13 @@
 	int LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION = LAYER_EXPRESSION_OPERATION_COUNT + 0;
 
 	/**
-	 * The number of operations of the '<em>Layer Operator</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LAYER_OPERATOR_OPERATION_COUNT = LAYER_EXPRESSION_OPERATION_COUNT + 1;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AbstractLayerOperatorImpl <em>Abstract Layer Operator</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AbstractLayerOperatorImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getAbstractLayerOperator()
-	 * @generated
-	 */
-	int ABSTRACT_LAYER_OPERATOR = 24;
-
-	/**
-	 * The feature id for the '<em><b>Application</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR__APPLICATION = LAYER_OPERATOR__APPLICATION;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR__NAME = LAYER_OPERATOR__NAME;
-
-	/**
-	 * The feature id for the '<em><b>Description</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR__DESCRIPTION = LAYER_OPERATOR__DESCRIPTION;
-
-	/**
-	 * The feature id for the '<em><b>Is Layer Enabled Internal</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR__IS_LAYER_ENABLED_INTERNAL = LAYER_OPERATOR__IS_LAYER_ENABLED_INTERNAL;
-
-	/**
-	 * The feature id for the '<em><b>Is Layer Enabled</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR__IS_LAYER_ENABLED = LAYER_OPERATOR__IS_LAYER_ENABLED;
-
-	/**
-	 * The feature id for the '<em><b>Is Branch Enabled</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR__IS_BRANCH_ENABLED = LAYER_OPERATOR__IS_BRANCH_ENABLED;
-
-	/**
-	 * The feature id for the '<em><b>Owning Layers Stack</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR__OWNING_LAYERS_STACK = LAYER_OPERATOR__OWNING_LAYERS_STACK;
-
-	/**
-	 * The feature id for the '<em><b>State</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR__STATE = LAYER_OPERATOR__STATE;
-
-	/**
-	 * The feature id for the '<em><b>Layers</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR__LAYERS = LAYER_OPERATOR__LAYERS;
-
-	/**
-	 * The feature id for the '<em><b>Layer Operator Descriptor</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR = LAYER_OPERATOR_FEATURE_COUNT + 0;
-
-	/**
-	 * The feature id for the '<em><b>Layer Operator Descriptor Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME = LAYER_OPERATOR_FEATURE_COUNT + 1;
-
-	/**
-	 * The number of structural features of the '<em>Abstract Layer Operator</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR_FEATURE_COUNT = LAYER_OPERATOR_FEATURE_COUNT + 2;
-
-	/**
-	 * The operation id for the '<em>Get Compute Property Value Command</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY = LAYER_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY;
-
-	/**
-	 * The operation id for the '<em>Get Views Compute Property Value Command</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY = LAYER_OPERATOR___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY;
-
-	/**
-	 * The operation id for the '<em>Get Properties Compute Property Value Command</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST = LAYER_OPERATOR___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST;
-
-	/**
-	 * The operation id for the '<em>Attach To Layers Stack</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR___ATTACH_TO_LAYERS_STACK__LAYERSSTACK = LAYER_OPERATOR___ATTACH_TO_LAYERS_STACK__LAYERSSTACK;
-
-	/**
-	 * The operation id for the '<em>Get Layers Stack</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR___GET_LAYERS_STACK = LAYER_OPERATOR___GET_LAYERS_STACK;
-
-	/**
-	 * The operation id for the '<em>Enter Attached State</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR___ENTER_ATTACHED_STATE = LAYER_OPERATOR___ENTER_ATTACHED_STATE;
-
-	/**
-	 * The operation id for the '<em>Attach</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR___ATTACH = LAYER_OPERATOR___ATTACH;
-
-	/**
-	 * The operation id for the '<em>Detach</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR___DETACH = LAYER_OPERATOR___DETACH;
-
-	/**
-	 * The operation id for the '<em>Exit Attached State</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR___EXIT_ATTACHED_STATE = LAYER_OPERATOR___EXIT_ATTACHED_STATE;
-
-	/**
-	 * The operation id for the '<em>Add Layer</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ABSTRACT_LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION = LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION;
-
-	/**
 	 * The operation id for the '<em>Is Descriptor Set</em>' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int ABSTRACT_LAYER_OPERATOR___IS_DESCRIPTOR_SET = LAYER_OPERATOR_OPERATION_COUNT + 0;
+	int LAYER_OPERATOR___IS_DESCRIPTOR_SET = LAYER_EXPRESSION_OPERATION_COUNT + 1;
 
 	/**
 	 * The operation id for the '<em>Reset Descriptor</em>' operation.
@@ -2193,72 +2209,16 @@
 	 * @generated
 	 * @ordered
 	 */
-	int ABSTRACT_LAYER_OPERATOR___RESET_DESCRIPTOR = LAYER_OPERATOR_OPERATION_COUNT + 1;
+	int LAYER_OPERATOR___RESET_DESCRIPTOR = LAYER_EXPRESSION_OPERATION_COUNT + 2;
 
 	/**
-	 * The number of operations of the '<em>Abstract Layer Operator</em>' class.
+	 * The number of operations of the '<em>Layer Operator</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int ABSTRACT_LAYER_OPERATOR_OPERATION_COUNT = LAYER_OPERATOR_OPERATION_COUNT + 2;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.DefaultPropertyOperatorImpl <em>Default Property Operator</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.DefaultPropertyOperatorImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getDefaultPropertyOperator()
-	 * @generated
-	 */
-	int DEFAULT_PROPERTY_OPERATOR = 27;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int DEFAULT_PROPERTY_OPERATOR__NAME = PROPERTY_OPERATOR__NAME;
-
-	/**
-	 * The number of structural features of the '<em>Default Property Operator</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int DEFAULT_PROPERTY_OPERATOR_FEATURE_COUNT = PROPERTY_OPERATOR_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Get Compute Property Value Command</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int DEFAULT_PROPERTY_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST = PROPERTY_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST;
-
-	/**
-	 * The number of operations of the '<em>Default Property Operator</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int DEFAULT_PROPERTY_OPERATOR_OPERATION_COUNT = PROPERTY_OPERATOR_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AbstractLayerImpl <em>Abstract Layer</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AbstractLayerImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getAbstractLayer()
-	 * @generated
-	 */
-	int ABSTRACT_LAYER = 28;
+	int LAYER_OPERATOR_OPERATION_COUNT = LAYER_EXPRESSION_OPERATION_COUNT + 3;
 
 	/**
 	 * The feature id for the '<em><b>Application</b></em>' reference.
@@ -2402,7 +2362,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int ABSTRACT_LAYER___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY = LAYER_EXPRESSION___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY;
+	int ABSTRACT_LAYER___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY = LAYER_EXPRESSION___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY;
 
 	/**
 	 * The operation id for the '<em>Get Properties Compute Property Value Command</em>' operation.
@@ -2411,7 +2371,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int ABSTRACT_LAYER___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST = LAYER_EXPRESSION___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST;
+	int ABSTRACT_LAYER___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST = LAYER_EXPRESSION___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST;
 
 	/**
 	 * The operation id for the '<em>Attach To Layers Stack</em>' operation.
@@ -2513,16 +2473,6 @@
 	int ABSTRACT_LAYER_OPERATION_COUNT = LAYER_EXPRESSION_OPERATION_COUNT + 4;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringToTypeInstanceMapImpl <em>String To Type Instance Map</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringToTypeInstanceMapImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getStringToTypeInstanceMap()
-	 * @generated
-	 */
-	int STRING_TO_TYPE_INSTANCE_MAP = 29;
-
-	/**
 	 * The feature id for the '<em><b>Key</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2559,16 +2509,6 @@
 	int STRING_TO_TYPE_INSTANCE_MAP_OPERATION_COUNT = 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FolderImpl <em>Folder</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FolderImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getFolder()
-	 * @generated
-	 */
-	int FOLDER = 30;
-
-	/**
 	 * The feature id for the '<em><b>Elements</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2605,224 +2545,13 @@
 	int FOLDER_OPERATION_COUNT = FOLDER_ELEMENT_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IntInstanceImpl <em>Int Instance</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IntInstanceImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getIntInstance()
-	 * @generated
-	 */
-	int INT_INSTANCE = 31;
-
-	/**
-	 * The feature id for the '<em><b>Value</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int INT_INSTANCE__VALUE = TYPE_INSTANCE_FEATURE_COUNT + 0;
-
-	/**
-	 * The number of structural features of the '<em>Int Instance</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int INT_INSTANCE_FEATURE_COUNT = TYPE_INSTANCE_FEATURE_COUNT + 1;
-
-	/**
-	 * The operation id for the '<em>Get Cmd Value</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int INT_INSTANCE___GET_CMD_VALUE = TYPE_INSTANCE___GET_CMD_VALUE;
-
-	/**
-	 * The operation id for the '<em>Set Value From String</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int INT_INSTANCE___SET_VALUE_FROM_STRING__STRING = TYPE_INSTANCE___SET_VALUE_FROM_STRING__STRING;
-
-	/**
-	 * The operation id for the '<em>Set Value From Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int INT_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE = TYPE_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Int Instance</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int INT_INSTANCE_OPERATION_COUNT = TYPE_INSTANCE_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.BooleanInstanceImpl <em>Boolean Instance</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.BooleanInstanceImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getBooleanInstance()
-	 * @generated
-	 */
-	int BOOLEAN_INSTANCE = 32;
-
-	/**
-	 * The feature id for the '<em><b>Value</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int BOOLEAN_INSTANCE__VALUE = TYPE_INSTANCE_FEATURE_COUNT + 0;
-
-	/**
-	 * The number of structural features of the '<em>Boolean Instance</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int BOOLEAN_INSTANCE_FEATURE_COUNT = TYPE_INSTANCE_FEATURE_COUNT + 1;
-
-	/**
-	 * The operation id for the '<em>Get Cmd Value</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int BOOLEAN_INSTANCE___GET_CMD_VALUE = TYPE_INSTANCE___GET_CMD_VALUE;
-
-	/**
-	 * The operation id for the '<em>Set Value From String</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int BOOLEAN_INSTANCE___SET_VALUE_FROM_STRING__STRING = TYPE_INSTANCE___SET_VALUE_FROM_STRING__STRING;
-
-	/**
-	 * The operation id for the '<em>Set Value From Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int BOOLEAN_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE = TYPE_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Boolean Instance</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int BOOLEAN_INSTANCE_OPERATION_COUNT = TYPE_INSTANCE_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringInstanceImpl <em>String Instance</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringInstanceImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getStringInstance()
-	 * @generated
-	 */
-	int STRING_INSTANCE = 33;
-
-	/**
-	 * The feature id for the '<em><b>Value</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_INSTANCE__VALUE = TYPE_INSTANCE_FEATURE_COUNT + 0;
-
-	/**
-	 * The number of structural features of the '<em>String Instance</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_INSTANCE_FEATURE_COUNT = TYPE_INSTANCE_FEATURE_COUNT + 1;
-
-	/**
-	 * The operation id for the '<em>Get Cmd Value</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_INSTANCE___GET_CMD_VALUE = TYPE_INSTANCE___GET_CMD_VALUE;
-
-	/**
-	 * The operation id for the '<em>Set Value From String</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_INSTANCE___SET_VALUE_FROM_STRING__STRING = TYPE_INSTANCE___SET_VALUE_FROM_STRING__STRING;
-
-	/**
-	 * The operation id for the '<em>Set Value From Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE = TYPE_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE;
-
-	/**
-	 * The number of operations of the '<em>String Instance</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_INSTANCE_OPERATION_COUNT = TYPE_INSTANCE_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IntTypeImpl <em>Int Type</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IntTypeImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getIntType()
-	 * @generated
-	 */
-	int INT_TYPE = 34;
-
-	/**
-	 * The feature id for the '<em><b>Metamodel</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int INT_TYPE__METAMODEL = TYPE__METAMODEL;
-
-	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int INT_TYPE__NAME = TYPE__NAME;
+	int METAMODEL__NAME = FOLDER_ELEMENT_FEATURE_COUNT + 0;
 
 	/**
 	 * The feature id for the '<em><b>Description</b></em>' attribute.
@@ -2831,245 +2560,70 @@
 	 * @generated
 	 * @ordered
 	 */
-	int INT_TYPE__DESCRIPTION = TYPE__DESCRIPTION;
+	int METAMODEL__DESCRIPTION = FOLDER_ELEMENT_FEATURE_COUNT + 1;
 
 	/**
-	 * The number of structural features of the '<em>Int Type</em>' class.
+	 * The feature id for the '<em><b>Nsuri</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int INT_TYPE_FEATURE_COUNT = TYPE_FEATURE_COUNT + 0;
+	int METAMODEL__NSURI = FOLDER_ELEMENT_FEATURE_COUNT + 2;
 
 	/**
-	 * The operation id for the '<em>Create Instance</em>' operation.
+	 * The feature id for the '<em><b>Plugin ID</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int INT_TYPE___CREATE_INSTANCE = TYPE___CREATE_INSTANCE;
+	int METAMODEL__PLUGIN_ID = FOLDER_ELEMENT_FEATURE_COUNT + 3;
 
 	/**
-	 * The number of operations of the '<em>Int Type</em>' class.
+	 * The feature id for the '<em><b>EPackage Instance Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int INT_TYPE_OPERATION_COUNT = TYPE_OPERATION_COUNT + 0;
+	int METAMODEL__EPACKAGE_INSTANCE_NAME = FOLDER_ELEMENT_FEATURE_COUNT + 4;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.BooleanTypeImpl <em>Boolean Type</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.BooleanTypeImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getBooleanType()
-	 * @generated
-	 */
-	int BOOLEAN_TYPE = 35;
-
-	/**
-	 * The feature id for the '<em><b>Metamodel</b></em>' reference.
+	 * The feature id for the '<em><b>Is Type Valid</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int BOOLEAN_TYPE__METAMODEL = TYPE__METAMODEL;
+	int METAMODEL__IS_TYPE_VALID = FOLDER_ELEMENT_FEATURE_COUNT + 5;
 
 	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * The number of structural features of the '<em>Metamodel</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int BOOLEAN_TYPE__NAME = TYPE__NAME;
+	int METAMODEL_FEATURE_COUNT = FOLDER_ELEMENT_FEATURE_COUNT + 6;
 
 	/**
-	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * The operation id for the '<em>Get EPackage</em>' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int BOOLEAN_TYPE__DESCRIPTION = TYPE__DESCRIPTION;
+	int METAMODEL___GET_EPACKAGE = FOLDER_ELEMENT_OPERATION_COUNT + 0;
 
 	/**
-	 * The number of structural features of the '<em>Boolean Type</em>' class.
+	 * The number of operations of the '<em>Metamodel</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int BOOLEAN_TYPE_FEATURE_COUNT = TYPE_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Create Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int BOOLEAN_TYPE___CREATE_INSTANCE = TYPE___CREATE_INSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Boolean Type</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int BOOLEAN_TYPE_OPERATION_COUNT = TYPE_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringTypeImpl <em>String Type</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringTypeImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getStringType()
-	 * @generated
-	 */
-	int STRING_TYPE = 36;
-
-	/**
-	 * The feature id for the '<em><b>Metamodel</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_TYPE__METAMODEL = TYPE__METAMODEL;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_TYPE__NAME = TYPE__NAME;
-
-	/**
-	 * The feature id for the '<em><b>Description</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_TYPE__DESCRIPTION = TYPE__DESCRIPTION;
-
-	/**
-	 * The number of structural features of the '<em>String Type</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_TYPE_FEATURE_COUNT = TYPE_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Create Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_TYPE___CREATE_INSTANCE = TYPE___CREATE_INSTANCE;
-
-	/**
-	 * The number of operations of the '<em>String Type</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_TYPE_OPERATION_COUNT = TYPE_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomTypeImpl <em>Custom Type</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomTypeImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCustomType()
-	 * @generated
-	 */
-	int CUSTOM_TYPE = 37;
-
-	/**
-	 * The feature id for the '<em><b>Metamodel</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_TYPE__METAMODEL = TYPE__METAMODEL;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_TYPE__NAME = TYPE__NAME;
-
-	/**
-	 * The feature id for the '<em><b>Description</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_TYPE__DESCRIPTION = TYPE__DESCRIPTION;
-
-	/**
-	 * The feature id for the '<em><b>Classifier</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_TYPE__CLASSIFIER = TYPE_FEATURE_COUNT + 0;
-
-	/**
-	 * The number of structural features of the '<em>Custom Type</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_TYPE_FEATURE_COUNT = TYPE_FEATURE_COUNT + 1;
-
-	/**
-	 * The operation id for the '<em>Create Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_TYPE___CREATE_INSTANCE = TYPE___CREATE_INSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Custom Type</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_TYPE_OPERATION_COUNT = TYPE_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TopLayerOperatorImpl <em>Top Layer Operator</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TopLayerOperatorImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getTopLayerOperator()
-	 * @generated
-	 */
-	int TOP_LAYER_OPERATOR = 38;
+	int METAMODEL_OPERATION_COUNT = FOLDER_ELEMENT_OPERATION_COUNT + 1;
 
 	/**
 	 * The feature id for the '<em><b>Application</b></em>' reference.
@@ -3078,7 +2632,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR__APPLICATION = ABSTRACT_LAYER_OPERATOR__APPLICATION;
+	int TOP_LAYER_OPERATOR__APPLICATION = LAYER_OPERATOR__APPLICATION;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -3087,7 +2641,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR__NAME = ABSTRACT_LAYER_OPERATOR__NAME;
+	int TOP_LAYER_OPERATOR__NAME = LAYER_OPERATOR__NAME;
 
 	/**
 	 * The feature id for the '<em><b>Description</b></em>' attribute.
@@ -3096,7 +2650,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR__DESCRIPTION = ABSTRACT_LAYER_OPERATOR__DESCRIPTION;
+	int TOP_LAYER_OPERATOR__DESCRIPTION = LAYER_OPERATOR__DESCRIPTION;
 
 	/**
 	 * The feature id for the '<em><b>Is Layer Enabled Internal</b></em>' attribute.
@@ -3105,7 +2659,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR__IS_LAYER_ENABLED_INTERNAL = ABSTRACT_LAYER_OPERATOR__IS_LAYER_ENABLED_INTERNAL;
+	int TOP_LAYER_OPERATOR__IS_LAYER_ENABLED_INTERNAL = LAYER_OPERATOR__IS_LAYER_ENABLED_INTERNAL;
 
 	/**
 	 * The feature id for the '<em><b>Is Layer Enabled</b></em>' attribute.
@@ -3114,7 +2668,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR__IS_LAYER_ENABLED = ABSTRACT_LAYER_OPERATOR__IS_LAYER_ENABLED;
+	int TOP_LAYER_OPERATOR__IS_LAYER_ENABLED = LAYER_OPERATOR__IS_LAYER_ENABLED;
 
 	/**
 	 * The feature id for the '<em><b>Is Branch Enabled</b></em>' attribute.
@@ -3123,7 +2677,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR__IS_BRANCH_ENABLED = ABSTRACT_LAYER_OPERATOR__IS_BRANCH_ENABLED;
+	int TOP_LAYER_OPERATOR__IS_BRANCH_ENABLED = LAYER_OPERATOR__IS_BRANCH_ENABLED;
 
 	/**
 	 * The feature id for the '<em><b>Owning Layers Stack</b></em>' reference.
@@ -3132,7 +2686,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR__OWNING_LAYERS_STACK = ABSTRACT_LAYER_OPERATOR__OWNING_LAYERS_STACK;
+	int TOP_LAYER_OPERATOR__OWNING_LAYERS_STACK = LAYER_OPERATOR__OWNING_LAYERS_STACK;
 
 	/**
 	 * The feature id for the '<em><b>State</b></em>' attribute.
@@ -3141,7 +2695,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR__STATE = ABSTRACT_LAYER_OPERATOR__STATE;
+	int TOP_LAYER_OPERATOR__STATE = LAYER_OPERATOR__STATE;
 
 	/**
 	 * The feature id for the '<em><b>Layers</b></em>' containment reference list.
@@ -3150,16 +2704,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR__LAYERS = ABSTRACT_LAYER_OPERATOR__LAYERS;
-
-	/**
-	 * The feature id for the '<em><b>Layer Operator Descriptor</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int TOP_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR = ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR;
+	int TOP_LAYER_OPERATOR__LAYERS = LAYER_OPERATOR__LAYERS;
 
 	/**
 	 * The feature id for the '<em><b>Layer Operator Descriptor Name</b></em>' attribute.
@@ -3168,7 +2713,16 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME = ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME;
+	int TOP_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME = LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Layer Operator Descriptor</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int TOP_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR = LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR;
 
 	/**
 	 * The number of structural features of the '<em>Top Layer Operator</em>' class.
@@ -3177,7 +2731,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR_FEATURE_COUNT = ABSTRACT_LAYER_OPERATOR_FEATURE_COUNT + 0;
+	int TOP_LAYER_OPERATOR_FEATURE_COUNT = LAYER_OPERATOR_FEATURE_COUNT + 0;
 
 	/**
 	 * The operation id for the '<em>Get Compute Property Value Command</em>' operation.
@@ -3186,7 +2740,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY = ABSTRACT_LAYER_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY;
+	int TOP_LAYER_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY = LAYER_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY;
 
 	/**
 	 * The operation id for the '<em>Get Views Compute Property Value Command</em>' operation.
@@ -3195,7 +2749,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY = ABSTRACT_LAYER_OPERATOR___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY;
+	int TOP_LAYER_OPERATOR___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY = LAYER_OPERATOR___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY;
 
 	/**
 	 * The operation id for the '<em>Get Properties Compute Property Value Command</em>' operation.
@@ -3204,7 +2758,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST = ABSTRACT_LAYER_OPERATOR___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST;
+	int TOP_LAYER_OPERATOR___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST = LAYER_OPERATOR___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST;
 
 	/**
 	 * The operation id for the '<em>Attach To Layers Stack</em>' operation.
@@ -3213,7 +2767,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR___ATTACH_TO_LAYERS_STACK__LAYERSSTACK = ABSTRACT_LAYER_OPERATOR___ATTACH_TO_LAYERS_STACK__LAYERSSTACK;
+	int TOP_LAYER_OPERATOR___ATTACH_TO_LAYERS_STACK__LAYERSSTACK = LAYER_OPERATOR___ATTACH_TO_LAYERS_STACK__LAYERSSTACK;
 
 	/**
 	 * The operation id for the '<em>Get Layers Stack</em>' operation.
@@ -3222,7 +2776,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR___GET_LAYERS_STACK = ABSTRACT_LAYER_OPERATOR___GET_LAYERS_STACK;
+	int TOP_LAYER_OPERATOR___GET_LAYERS_STACK = LAYER_OPERATOR___GET_LAYERS_STACK;
 
 	/**
 	 * The operation id for the '<em>Enter Attached State</em>' operation.
@@ -3231,7 +2785,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR___ENTER_ATTACHED_STATE = ABSTRACT_LAYER_OPERATOR___ENTER_ATTACHED_STATE;
+	int TOP_LAYER_OPERATOR___ENTER_ATTACHED_STATE = LAYER_OPERATOR___ENTER_ATTACHED_STATE;
 
 	/**
 	 * The operation id for the '<em>Attach</em>' operation.
@@ -3240,7 +2794,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR___ATTACH = ABSTRACT_LAYER_OPERATOR___ATTACH;
+	int TOP_LAYER_OPERATOR___ATTACH = LAYER_OPERATOR___ATTACH;
 
 	/**
 	 * The operation id for the '<em>Detach</em>' operation.
@@ -3249,7 +2803,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR___DETACH = ABSTRACT_LAYER_OPERATOR___DETACH;
+	int TOP_LAYER_OPERATOR___DETACH = LAYER_OPERATOR___DETACH;
 
 	/**
 	 * The operation id for the '<em>Exit Attached State</em>' operation.
@@ -3258,7 +2812,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR___EXIT_ATTACHED_STATE = ABSTRACT_LAYER_OPERATOR___EXIT_ATTACHED_STATE;
+	int TOP_LAYER_OPERATOR___EXIT_ATTACHED_STATE = LAYER_OPERATOR___EXIT_ATTACHED_STATE;
 
 	/**
 	 * The operation id for the '<em>Add Layer</em>' operation.
@@ -3267,7 +2821,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION = ABSTRACT_LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION;
+	int TOP_LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION = LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION;
 
 	/**
 	 * The operation id for the '<em>Is Descriptor Set</em>' operation.
@@ -3276,7 +2830,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR___IS_DESCRIPTOR_SET = ABSTRACT_LAYER_OPERATOR___IS_DESCRIPTOR_SET;
+	int TOP_LAYER_OPERATOR___IS_DESCRIPTOR_SET = LAYER_OPERATOR___IS_DESCRIPTOR_SET;
 
 	/**
 	 * The operation id for the '<em>Reset Descriptor</em>' operation.
@@ -3285,7 +2839,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR___RESET_DESCRIPTOR = ABSTRACT_LAYER_OPERATOR___RESET_DESCRIPTOR;
+	int TOP_LAYER_OPERATOR___RESET_DESCRIPTOR = LAYER_OPERATOR___RESET_DESCRIPTOR;
 
 	/**
 	 * The number of operations of the '<em>Top Layer Operator</em>' class.
@@ -3294,17 +2848,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR_OPERATION_COUNT = ABSTRACT_LAYER_OPERATOR_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StackedLayerOperatorImpl <em>Stacked Layer Operator</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StackedLayerOperatorImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getStackedLayerOperator()
-	 * @generated
-	 */
-	int STACKED_LAYER_OPERATOR = 39;
+	int TOP_LAYER_OPERATOR_OPERATION_COUNT = LAYER_OPERATOR_OPERATION_COUNT + 0;
 
 	/**
 	 * The feature id for the '<em><b>Application</b></em>' reference.
@@ -3313,7 +2857,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR__APPLICATION = ABSTRACT_LAYER_OPERATOR__APPLICATION;
+	int STACKED_LAYER_OPERATOR__APPLICATION = LAYER_OPERATOR__APPLICATION;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -3322,7 +2866,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR__NAME = ABSTRACT_LAYER_OPERATOR__NAME;
+	int STACKED_LAYER_OPERATOR__NAME = LAYER_OPERATOR__NAME;
 
 	/**
 	 * The feature id for the '<em><b>Description</b></em>' attribute.
@@ -3331,7 +2875,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR__DESCRIPTION = ABSTRACT_LAYER_OPERATOR__DESCRIPTION;
+	int STACKED_LAYER_OPERATOR__DESCRIPTION = LAYER_OPERATOR__DESCRIPTION;
 
 	/**
 	 * The feature id for the '<em><b>Is Layer Enabled Internal</b></em>' attribute.
@@ -3340,7 +2884,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR__IS_LAYER_ENABLED_INTERNAL = ABSTRACT_LAYER_OPERATOR__IS_LAYER_ENABLED_INTERNAL;
+	int STACKED_LAYER_OPERATOR__IS_LAYER_ENABLED_INTERNAL = LAYER_OPERATOR__IS_LAYER_ENABLED_INTERNAL;
 
 	/**
 	 * The feature id for the '<em><b>Is Layer Enabled</b></em>' attribute.
@@ -3349,7 +2893,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR__IS_LAYER_ENABLED = ABSTRACT_LAYER_OPERATOR__IS_LAYER_ENABLED;
+	int STACKED_LAYER_OPERATOR__IS_LAYER_ENABLED = LAYER_OPERATOR__IS_LAYER_ENABLED;
 
 	/**
 	 * The feature id for the '<em><b>Is Branch Enabled</b></em>' attribute.
@@ -3358,7 +2902,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR__IS_BRANCH_ENABLED = ABSTRACT_LAYER_OPERATOR__IS_BRANCH_ENABLED;
+	int STACKED_LAYER_OPERATOR__IS_BRANCH_ENABLED = LAYER_OPERATOR__IS_BRANCH_ENABLED;
 
 	/**
 	 * The feature id for the '<em><b>Owning Layers Stack</b></em>' reference.
@@ -3367,7 +2911,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR__OWNING_LAYERS_STACK = ABSTRACT_LAYER_OPERATOR__OWNING_LAYERS_STACK;
+	int STACKED_LAYER_OPERATOR__OWNING_LAYERS_STACK = LAYER_OPERATOR__OWNING_LAYERS_STACK;
 
 	/**
 	 * The feature id for the '<em><b>State</b></em>' attribute.
@@ -3376,7 +2920,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR__STATE = ABSTRACT_LAYER_OPERATOR__STATE;
+	int STACKED_LAYER_OPERATOR__STATE = LAYER_OPERATOR__STATE;
 
 	/**
 	 * The feature id for the '<em><b>Layers</b></em>' containment reference list.
@@ -3385,16 +2929,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR__LAYERS = ABSTRACT_LAYER_OPERATOR__LAYERS;
-
-	/**
-	 * The feature id for the '<em><b>Layer Operator Descriptor</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STACKED_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR = ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR;
+	int STACKED_LAYER_OPERATOR__LAYERS = LAYER_OPERATOR__LAYERS;
 
 	/**
 	 * The feature id for the '<em><b>Layer Operator Descriptor Name</b></em>' attribute.
@@ -3403,7 +2938,16 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME = ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME;
+	int STACKED_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME = LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME;
+
+	/**
+	 * The feature id for the '<em><b>Layer Operator Descriptor</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STACKED_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR = LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR;
 
 	/**
 	 * The number of structural features of the '<em>Stacked Layer Operator</em>' class.
@@ -3412,7 +2956,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR_FEATURE_COUNT = ABSTRACT_LAYER_OPERATOR_FEATURE_COUNT + 0;
+	int STACKED_LAYER_OPERATOR_FEATURE_COUNT = LAYER_OPERATOR_FEATURE_COUNT + 0;
 
 	/**
 	 * The operation id for the '<em>Get Compute Property Value Command</em>' operation.
@@ -3421,7 +2965,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY = ABSTRACT_LAYER_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY;
+	int STACKED_LAYER_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY = LAYER_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY;
 
 	/**
 	 * The operation id for the '<em>Get Views Compute Property Value Command</em>' operation.
@@ -3430,7 +2974,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY = ABSTRACT_LAYER_OPERATOR___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY;
+	int STACKED_LAYER_OPERATOR___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY = LAYER_OPERATOR___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY;
 
 	/**
 	 * The operation id for the '<em>Get Properties Compute Property Value Command</em>' operation.
@@ -3439,7 +2983,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST = ABSTRACT_LAYER_OPERATOR___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST;
+	int STACKED_LAYER_OPERATOR___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST = LAYER_OPERATOR___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST;
 
 	/**
 	 * The operation id for the '<em>Attach To Layers Stack</em>' operation.
@@ -3448,7 +2992,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR___ATTACH_TO_LAYERS_STACK__LAYERSSTACK = ABSTRACT_LAYER_OPERATOR___ATTACH_TO_LAYERS_STACK__LAYERSSTACK;
+	int STACKED_LAYER_OPERATOR___ATTACH_TO_LAYERS_STACK__LAYERSSTACK = LAYER_OPERATOR___ATTACH_TO_LAYERS_STACK__LAYERSSTACK;
 
 	/**
 	 * The operation id for the '<em>Get Layers Stack</em>' operation.
@@ -3457,7 +3001,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR___GET_LAYERS_STACK = ABSTRACT_LAYER_OPERATOR___GET_LAYERS_STACK;
+	int STACKED_LAYER_OPERATOR___GET_LAYERS_STACK = LAYER_OPERATOR___GET_LAYERS_STACK;
 
 	/**
 	 * The operation id for the '<em>Enter Attached State</em>' operation.
@@ -3466,7 +3010,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR___ENTER_ATTACHED_STATE = ABSTRACT_LAYER_OPERATOR___ENTER_ATTACHED_STATE;
+	int STACKED_LAYER_OPERATOR___ENTER_ATTACHED_STATE = LAYER_OPERATOR___ENTER_ATTACHED_STATE;
 
 	/**
 	 * The operation id for the '<em>Attach</em>' operation.
@@ -3475,7 +3019,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR___ATTACH = ABSTRACT_LAYER_OPERATOR___ATTACH;
+	int STACKED_LAYER_OPERATOR___ATTACH = LAYER_OPERATOR___ATTACH;
 
 	/**
 	 * The operation id for the '<em>Detach</em>' operation.
@@ -3484,7 +3028,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR___DETACH = ABSTRACT_LAYER_OPERATOR___DETACH;
+	int STACKED_LAYER_OPERATOR___DETACH = LAYER_OPERATOR___DETACH;
 
 	/**
 	 * The operation id for the '<em>Exit Attached State</em>' operation.
@@ -3493,7 +3037,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR___EXIT_ATTACHED_STATE = ABSTRACT_LAYER_OPERATOR___EXIT_ATTACHED_STATE;
+	int STACKED_LAYER_OPERATOR___EXIT_ATTACHED_STATE = LAYER_OPERATOR___EXIT_ATTACHED_STATE;
 
 	/**
 	 * The operation id for the '<em>Add Layer</em>' operation.
@@ -3502,7 +3046,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION = ABSTRACT_LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION;
+	int STACKED_LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION = LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION;
 
 	/**
 	 * The operation id for the '<em>Is Descriptor Set</em>' operation.
@@ -3511,7 +3055,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR___IS_DESCRIPTOR_SET = ABSTRACT_LAYER_OPERATOR___IS_DESCRIPTOR_SET;
+	int STACKED_LAYER_OPERATOR___IS_DESCRIPTOR_SET = LAYER_OPERATOR___IS_DESCRIPTOR_SET;
 
 	/**
 	 * The operation id for the '<em>Reset Descriptor</em>' operation.
@@ -3520,7 +3064,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR___RESET_DESCRIPTOR = ABSTRACT_LAYER_OPERATOR___RESET_DESCRIPTOR;
+	int STACKED_LAYER_OPERATOR___RESET_DESCRIPTOR = LAYER_OPERATOR___RESET_DESCRIPTOR;
 
 	/**
 	 * The number of operations of the '<em>Stacked Layer Operator</em>' class.
@@ -3529,216 +3073,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR_OPERATION_COUNT = ABSTRACT_LAYER_OPERATOR_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomLayerOperatorImpl <em>Custom Layer Operator</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomLayerOperatorImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCustomLayerOperator()
-	 * @generated
-	 */
-	int CUSTOM_LAYER_OPERATOR = 40;
-
-	/**
-	 * The feature id for the '<em><b>Application</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR__APPLICATION = LAYER_OPERATOR__APPLICATION;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR__NAME = LAYER_OPERATOR__NAME;
-
-	/**
-	 * The feature id for the '<em><b>Description</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR__DESCRIPTION = LAYER_OPERATOR__DESCRIPTION;
-
-	/**
-	 * The feature id for the '<em><b>Is Layer Enabled Internal</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR__IS_LAYER_ENABLED_INTERNAL = LAYER_OPERATOR__IS_LAYER_ENABLED_INTERNAL;
-
-	/**
-	 * The feature id for the '<em><b>Is Layer Enabled</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR__IS_LAYER_ENABLED = LAYER_OPERATOR__IS_LAYER_ENABLED;
-
-	/**
-	 * The feature id for the '<em><b>Is Branch Enabled</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR__IS_BRANCH_ENABLED = LAYER_OPERATOR__IS_BRANCH_ENABLED;
-
-	/**
-	 * The feature id for the '<em><b>Owning Layers Stack</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR__OWNING_LAYERS_STACK = LAYER_OPERATOR__OWNING_LAYERS_STACK;
-
-	/**
-	 * The feature id for the '<em><b>State</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR__STATE = LAYER_OPERATOR__STATE;
-
-	/**
-	 * The feature id for the '<em><b>Layers</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR__LAYERS = LAYER_OPERATOR__LAYERS;
-
-	/**
-	 * The number of structural features of the '<em>Custom Layer Operator</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR_FEATURE_COUNT = LAYER_OPERATOR_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Get Compute Property Value Command</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY = LAYER_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY;
-
-	/**
-	 * The operation id for the '<em>Get Views Compute Property Value Command</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY = LAYER_OPERATOR___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY;
-
-	/**
-	 * The operation id for the '<em>Get Properties Compute Property Value Command</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST = LAYER_OPERATOR___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST;
-
-	/**
-	 * The operation id for the '<em>Attach To Layers Stack</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR___ATTACH_TO_LAYERS_STACK__LAYERSSTACK = LAYER_OPERATOR___ATTACH_TO_LAYERS_STACK__LAYERSSTACK;
-
-	/**
-	 * The operation id for the '<em>Get Layers Stack</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR___GET_LAYERS_STACK = LAYER_OPERATOR___GET_LAYERS_STACK;
-
-	/**
-	 * The operation id for the '<em>Enter Attached State</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR___ENTER_ATTACHED_STATE = LAYER_OPERATOR___ENTER_ATTACHED_STATE;
-
-	/**
-	 * The operation id for the '<em>Attach</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR___ATTACH = LAYER_OPERATOR___ATTACH;
-
-	/**
-	 * The operation id for the '<em>Detach</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR___DETACH = LAYER_OPERATOR___DETACH;
-
-	/**
-	 * The operation id for the '<em>Exit Attached State</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR___EXIT_ATTACHED_STATE = LAYER_OPERATOR___EXIT_ATTACHED_STATE;
-
-	/**
-	 * The operation id for the '<em>Add Layer</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION = LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION;
-
-	/**
-	 * The number of operations of the '<em>Custom Layer Operator</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_LAYER_OPERATOR_OPERATION_COUNT = LAYER_OPERATOR_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyIndexImpl <em>Property Index</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyIndexImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getPropertyIndex()
-	 * @generated
-	 */
-	int PROPERTY_INDEX = 41;
+	int STACKED_LAYER_OPERATOR_OPERATION_COUNT = LAYER_OPERATOR_OPERATION_COUNT + 0;
 
 	/**
 	 * The feature id for the '<em><b>Property</b></em>' reference.
@@ -3777,16 +3112,6 @@
 	int PROPERTY_INDEX_OPERATION_COUNT = 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringToPropertyIndexMapImpl <em>String To Property Index Map</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringToPropertyIndexMapImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getStringToPropertyIndexMap()
-	 * @generated
-	 */
-	int STRING_TO_PROPERTY_INDEX_MAP = 42;
-
-	/**
 	 * The feature id for the '<em><b>Value</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3823,16 +3148,6 @@
 	int STRING_TO_PROPERTY_INDEX_MAP_OPERATION_COUNT = 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.SimpleLayerDescriptorImpl <em>Simple Layer Descriptor</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.SimpleLayerDescriptorImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getSimpleLayerDescriptor()
-	 * @generated
-	 */
-	int SIMPLE_LAYER_DESCRIPTOR = 43;
-
-	/**
 	 * The feature id for the '<em><b>Property Registry</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3860,53 +3175,6 @@
 	int SIMPLE_LAYER_DESCRIPTOR_OPERATION_COUNT = LAYER_DESCRIPTOR_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerDescriptorImpl <em>Reg Exp Layer Descriptor</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerDescriptorImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getRegExpLayerDescriptor()
-	 * @generated
-	 */
-	int REG_EXP_LAYER_DESCRIPTOR = 44;
-
-	/**
-	 * The feature id for the '<em><b>Property Registry</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER_DESCRIPTOR__PROPERTY_REGISTRY = LAYER_DESCRIPTOR__PROPERTY_REGISTRY;
-
-	/**
-	 * The number of structural features of the '<em>Reg Exp Layer Descriptor</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER_DESCRIPTOR_FEATURE_COUNT = LAYER_DESCRIPTOR_FEATURE_COUNT + 0;
-
-	/**
-	 * The number of operations of the '<em>Reg Exp Layer Descriptor</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER_DESCRIPTOR_OPERATION_COUNT = LAYER_DESCRIPTOR_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.NullInstanceImpl <em>Null Instance</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.NullInstanceImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getNullInstance()
-	 * @generated
-	 */
-	int NULL_INSTANCE = 45;
-
-	/**
 	 * The number of structural features of the '<em>Null Instance</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3961,404 +3229,6 @@
 	int NULL_INSTANCE_OPERATION_COUNT = TYPE_INSTANCE_OPERATION_COUNT + 1;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerImpl <em>Reg Exp Layer</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getRegExpLayer()
-	 * @generated
-	 */
-	int REG_EXP_LAYER = 46;
-
-	/**
-	 * The feature id for the '<em><b>Application</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__APPLICATION = ABSTRACT_LAYER__APPLICATION;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__NAME = ABSTRACT_LAYER__NAME;
-
-	/**
-	 * The feature id for the '<em><b>Description</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__DESCRIPTION = ABSTRACT_LAYER__DESCRIPTION;
-
-	/**
-	 * The feature id for the '<em><b>Is Layer Enabled Internal</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__IS_LAYER_ENABLED_INTERNAL = ABSTRACT_LAYER__IS_LAYER_ENABLED_INTERNAL;
-
-	/**
-	 * The feature id for the '<em><b>Is Layer Enabled</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__IS_LAYER_ENABLED = ABSTRACT_LAYER__IS_LAYER_ENABLED;
-
-	/**
-	 * The feature id for the '<em><b>Is Branch Enabled</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__IS_BRANCH_ENABLED = ABSTRACT_LAYER__IS_BRANCH_ENABLED;
-
-	/**
-	 * The feature id for the '<em><b>Owning Layers Stack</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__OWNING_LAYERS_STACK = ABSTRACT_LAYER__OWNING_LAYERS_STACK;
-
-	/**
-	 * The feature id for the '<em><b>State</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__STATE = ABSTRACT_LAYER__STATE;
-
-	/**
-	 * The feature id for the '<em><b>Property Values</b></em>' reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__PROPERTY_VALUES = ABSTRACT_LAYER__PROPERTY_VALUES;
-
-	/**
-	 * The feature id for the '<em><b>Property Value Map</b></em>' map.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__PROPERTY_VALUE_MAP = ABSTRACT_LAYER__PROPERTY_VALUE_MAP;
-
-	/**
-	 * The feature id for the '<em><b>Layer Descriptor</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__LAYER_DESCRIPTOR = ABSTRACT_LAYER__LAYER_DESCRIPTOR;
-
-	/**
-	 * The feature id for the '<em><b>Views</b></em>' reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__VIEWS = ABSTRACT_LAYER__VIEWS;
-
-	/**
-	 * The feature id for the '<em><b>Attached Properties</b></em>' reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__ATTACHED_PROPERTIES = ABSTRACT_LAYER__ATTACHED_PROPERTIES;
-
-	/**
-	 * The feature id for the '<em><b>Expr</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__EXPR = ABSTRACT_LAYER_FEATURE_COUNT + 0;
-
-	/**
-	 * The feature id for the '<em><b>Language</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__LANGUAGE = ABSTRACT_LAYER_FEATURE_COUNT + 1;
-
-	/**
-	 * The feature id for the '<em><b>Is Domain Changed Event Dependant</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__IS_DOMAIN_CHANGED_EVENT_DEPENDANT = ABSTRACT_LAYER_FEATURE_COUNT + 2;
-
-	/**
-	 * The feature id for the '<em><b>Domain Changed Event Level</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__DOMAIN_CHANGED_EVENT_LEVEL = ABSTRACT_LAYER_FEATURE_COUNT + 3;
-
-	/**
-	 * The feature id for the '<em><b>Is Diagram Changed Event Dependant</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__IS_DIAGRAM_CHANGED_EVENT_DEPENDANT = ABSTRACT_LAYER_FEATURE_COUNT + 4;
-
-	/**
-	 * The feature id for the '<em><b>Diagram Changed Event Level</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__DIAGRAM_CHANGED_EVENT_LEVEL = ABSTRACT_LAYER_FEATURE_COUNT + 5;
-
-	/**
-	 * The feature id for the '<em><b>Expression Context Object Type</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER__EXPRESSION_CONTEXT_OBJECT_TYPE = ABSTRACT_LAYER_FEATURE_COUNT + 6;
-
-	/**
-	 * The number of structural features of the '<em>Reg Exp Layer</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER_FEATURE_COUNT = ABSTRACT_LAYER_FEATURE_COUNT + 7;
-
-	/**
-	 * The operation id for the '<em>Get Compute Property Value Command</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY = ABSTRACT_LAYER___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY;
-
-	/**
-	 * The operation id for the '<em>Get Views Compute Property Value Command</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY = ABSTRACT_LAYER___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY;
-
-	/**
-	 * The operation id for the '<em>Get Properties Compute Property Value Command</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST = ABSTRACT_LAYER___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST;
-
-	/**
-	 * The operation id for the '<em>Attach To Layers Stack</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___ATTACH_TO_LAYERS_STACK__LAYERSSTACK = ABSTRACT_LAYER___ATTACH_TO_LAYERS_STACK__LAYERSSTACK;
-
-	/**
-	 * The operation id for the '<em>Get Layers Stack</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___GET_LAYERS_STACK = ABSTRACT_LAYER___GET_LAYERS_STACK;
-
-	/**
-	 * The operation id for the '<em>Enter Attached State</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___ENTER_ATTACHED_STATE = ABSTRACT_LAYER___ENTER_ATTACHED_STATE;
-
-	/**
-	 * The operation id for the '<em>Attach</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___ATTACH = ABSTRACT_LAYER___ATTACH;
-
-	/**
-	 * The operation id for the '<em>Detach</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___DETACH = ABSTRACT_LAYER___DETACH;
-
-	/**
-	 * The operation id for the '<em>Exit Attached State</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___EXIT_ATTACHED_STATE = ABSTRACT_LAYER___EXIT_ATTACHED_STATE;
-
-	/**
-	 * The operation id for the '<em>Add Property Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___ADD_PROPERTY_INSTANCE__PROPERTY = ABSTRACT_LAYER___ADD_PROPERTY_INSTANCE__PROPERTY;
-
-	/**
-	 * The operation id for the '<em>Remove Property Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___REMOVE_PROPERTY_INSTANCE__PROPERTY = ABSTRACT_LAYER___REMOVE_PROPERTY_INSTANCE__PROPERTY;
-
-	/**
-	 * The operation id for the '<em>Get Property Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___GET_PROPERTY_INSTANCE__PROPERTY = ABSTRACT_LAYER___GET_PROPERTY_INSTANCE__PROPERTY;
-
-	/**
-	 * The operation id for the '<em>Get Property Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___GET_PROPERTY_INSTANCE__STRING = ABSTRACT_LAYER___GET_PROPERTY_INSTANCE__STRING;
-
-	/**
-	 * The operation id for the '<em>Activate</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___ACTIVATE__ABSTRACTLAYEROPERATOR = ABSTRACT_LAYER_OPERATION_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Deactivate</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___DEACTIVATE__ABSTRACTLAYEROPERATOR = ABSTRACT_LAYER_OPERATION_COUNT + 1;
-
-	/**
-	 * The operation id for the '<em>Is Derived View</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___IS_DERIVED_VIEW__VIEW = ABSTRACT_LAYER_OPERATION_COUNT + 2;
-
-	/**
-	 * The operation id for the '<em>Attach Derived View</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___ATTACH_DERIVED_VIEW__VIEW = ABSTRACT_LAYER_OPERATION_COUNT + 3;
-
-	/**
-	 * The operation id for the '<em>Attach Derived Views</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___ATTACH_DERIVED_VIEWS__ELIST = ABSTRACT_LAYER_OPERATION_COUNT + 4;
-
-	/**
-	 * The operation id for the '<em>Attach Derived Views</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___ATTACH_DERIVED_VIEWS = ABSTRACT_LAYER_OPERATION_COUNT + 5;
-
-	/**
-	 * The operation id for the '<em>Lookup Derived Views</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER___LOOKUP_DERIVED_VIEWS__ELIST = ABSTRACT_LAYER_OPERATION_COUNT + 6;
-
-	/**
-	 * The number of operations of the '<em>Reg Exp Layer</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int REG_EXP_LAYER_OPERATION_COUNT = ABSTRACT_LAYER_OPERATION_COUNT + 7;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerImpl <em>Layer</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLayer()
-	 * @generated
-	 */
-	int LAYER = 47;
-
-	/**
 	 * The feature id for the '<em><b>Application</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -4500,7 +3370,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int LAYER___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY = ABSTRACT_LAYER___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY;
+	int LAYER___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY = ABSTRACT_LAYER___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY;
 
 	/**
 	 * The operation id for the '<em>Get Properties Compute Property Value Command</em>' operation.
@@ -4509,7 +3379,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int LAYER___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST = ABSTRACT_LAYER___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST;
+	int LAYER___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST = ABSTRACT_LAYER___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST;
 
 	/**
 	 * The operation id for the '<em>Attach To Layers Stack</em>' operation.
@@ -4611,391 +3481,6 @@
 	int LAYER_OPERATION_COUNT = ABSTRACT_LAYER_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.ColorImpl <em>Color</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.ColorImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getColor()
-	 * @generated
-	 */
-	int COLOR = 48;
-
-	/**
-	 * The feature id for the '<em><b>Metamodel</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int COLOR__METAMODEL = TYPE__METAMODEL;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int COLOR__NAME = TYPE__NAME;
-
-	/**
-	 * The feature id for the '<em><b>Description</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int COLOR__DESCRIPTION = TYPE__DESCRIPTION;
-
-	/**
-	 * The number of structural features of the '<em>Color</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int COLOR_FEATURE_COUNT = TYPE_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Create Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int COLOR___CREATE_INSTANCE = TYPE___CREATE_INSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Color</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int COLOR_OPERATION_COUNT = TYPE_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.ColorInstanceImpl <em>Color Instance</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.ColorInstanceImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getColorInstance()
-	 * @generated
-	 */
-	int COLOR_INSTANCE = 49;
-
-	/**
-	 * The feature id for the '<em><b>Value</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int COLOR_INSTANCE__VALUE = TYPE_INSTANCE_FEATURE_COUNT + 0;
-
-	/**
-	 * The number of structural features of the '<em>Color Instance</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int COLOR_INSTANCE_FEATURE_COUNT = TYPE_INSTANCE_FEATURE_COUNT + 1;
-
-	/**
-	 * The operation id for the '<em>Get Cmd Value</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int COLOR_INSTANCE___GET_CMD_VALUE = TYPE_INSTANCE___GET_CMD_VALUE;
-
-	/**
-	 * The operation id for the '<em>Set Value From String</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int COLOR_INSTANCE___SET_VALUE_FROM_STRING__STRING = TYPE_INSTANCE___SET_VALUE_FROM_STRING__STRING;
-
-	/**
-	 * The operation id for the '<em>Set Value From Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int COLOR_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE = TYPE_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Color Instance</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int COLOR_INSTANCE_OPERATION_COUNT = TYPE_INSTANCE_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FillInstanceImpl <em>Fill Instance</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FillInstanceImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getFillInstance()
-	 * @generated
-	 */
-	int FILL_INSTANCE = 50;
-
-	/**
-	 * The feature id for the '<em><b>Transparency</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL_INSTANCE__TRANSPARENCY = TYPE_INSTANCE_FEATURE_COUNT + 0;
-
-	/**
-	 * The feature id for the '<em><b>Fill Color</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL_INSTANCE__FILL_COLOR = TYPE_INSTANCE_FEATURE_COUNT + 1;
-
-	/**
-	 * The number of structural features of the '<em>Fill Instance</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL_INSTANCE_FEATURE_COUNT = TYPE_INSTANCE_FEATURE_COUNT + 2;
-
-	/**
-	 * The operation id for the '<em>Get Cmd Value</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL_INSTANCE___GET_CMD_VALUE = TYPE_INSTANCE___GET_CMD_VALUE;
-
-	/**
-	 * The operation id for the '<em>Set Value From String</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL_INSTANCE___SET_VALUE_FROM_STRING__STRING = TYPE_INSTANCE___SET_VALUE_FROM_STRING__STRING;
-
-	/**
-	 * The operation id for the '<em>Set Value From Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE = TYPE_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Fill Instance</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL_INSTANCE_OPERATION_COUNT = TYPE_INSTANCE_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FillImpl <em>Fill</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FillImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getFill()
-	 * @generated
-	 */
-	int FILL = 51;
-
-	/**
-	 * The feature id for the '<em><b>Metamodel</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL__METAMODEL = TYPE__METAMODEL;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL__NAME = TYPE__NAME;
-
-	/**
-	 * The feature id for the '<em><b>Description</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL__DESCRIPTION = TYPE__DESCRIPTION;
-
-	/**
-	 * The number of structural features of the '<em>Fill</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL_FEATURE_COUNT = TYPE_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Create Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL___CREATE_INSTANCE = TYPE___CREATE_INSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Fill</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL_OPERATION_COUNT = TYPE_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FillPropertySetterImpl <em>Fill Property Setter</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FillPropertySetterImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getFillPropertySetter()
-	 * @generated
-	 */
-	int FILL_PROPERTY_SETTER = 52;
-
-	/**
-	 * The feature id for the '<em><b>Property</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL_PROPERTY_SETTER__PROPERTY = PROPERTY_SETTER__PROPERTY;
-
-	/**
-	 * The feature id for the '<em><b>Property Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL_PROPERTY_SETTER__PROPERTY_NAME = PROPERTY_SETTER__PROPERTY_NAME;
-
-	/**
-	 * The number of structural features of the '<em>Fill Property Setter</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL_PROPERTY_SETTER_FEATURE_COUNT = PROPERTY_SETTER_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Set Value</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL_PROPERTY_SETTER___SET_VALUE__VIEW_TYPEINSTANCE = PROPERTY_SETTER___SET_VALUE__VIEW_TYPEINSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Fill Property Setter</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FILL_PROPERTY_SETTER_OPERATION_COUNT = PROPERTY_SETTER_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IsValidPropertySetterImpl <em>Is Valid Property Setter</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IsValidPropertySetterImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getIsValidPropertySetter()
-	 * @generated
-	 */
-	int IS_VALID_PROPERTY_SETTER = 53;
-
-	/**
-	 * The feature id for the '<em><b>Property</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_VALID_PROPERTY_SETTER__PROPERTY = PROPERTY_SETTER__PROPERTY;
-
-	/**
-	 * The feature id for the '<em><b>Property Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_VALID_PROPERTY_SETTER__PROPERTY_NAME = PROPERTY_SETTER__PROPERTY_NAME;
-
-	/**
-	 * The number of structural features of the '<em>Is Valid Property Setter</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_VALID_PROPERTY_SETTER_FEATURE_COUNT = PROPERTY_SETTER_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Set Value</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_VALID_PROPERTY_SETTER___SET_VALUE__VIEW_TYPEINSTANCE = PROPERTY_SETTER___SET_VALUE__VIEW_TYPEINSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Is Valid Property Setter</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_VALID_PROPERTY_SETTER_OPERATION_COUNT = PROPERTY_SETTER_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.NullPropertySetterImpl <em>Null Property Setter</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.NullPropertySetterImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getNullPropertySetter()
-	 * @generated
-	 */
-	int NULL_PROPERTY_SETTER = 54;
-
-	/**
 	 * The feature id for the '<em><b>Property</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -5041,473 +3526,6 @@
 	int NULL_PROPERTY_SETTER_OPERATION_COUNT = PROPERTY_SETTER_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LineTypeImpl <em>Line Type</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LineTypeImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLineType()
-	 * @generated
-	 */
-	int LINE_TYPE = 55;
-
-	/**
-	 * The feature id for the '<em><b>Metamodel</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_TYPE__METAMODEL = TYPE__METAMODEL;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_TYPE__NAME = TYPE__NAME;
-
-	/**
-	 * The feature id for the '<em><b>Description</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_TYPE__DESCRIPTION = TYPE__DESCRIPTION;
-
-	/**
-	 * The number of structural features of the '<em>Line Type</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_TYPE_FEATURE_COUNT = TYPE_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Create Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_TYPE___CREATE_INSTANCE = TYPE___CREATE_INSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Line Type</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_TYPE_OPERATION_COUNT = TYPE_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LineInstanceImpl <em>Line Instance</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LineInstanceImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLineInstance()
-	 * @generated
-	 */
-	int LINE_INSTANCE = 56;
-
-	/**
-	 * The feature id for the '<em><b>Line Color</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_INSTANCE__LINE_COLOR = TYPE_INSTANCE_FEATURE_COUNT + 0;
-
-	/**
-	 * The feature id for the '<em><b>Line With</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_INSTANCE__LINE_WITH = TYPE_INSTANCE_FEATURE_COUNT + 1;
-
-	/**
-	 * The number of structural features of the '<em>Line Instance</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_INSTANCE_FEATURE_COUNT = TYPE_INSTANCE_FEATURE_COUNT + 2;
-
-	/**
-	 * The operation id for the '<em>Get Cmd Value</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_INSTANCE___GET_CMD_VALUE = TYPE_INSTANCE___GET_CMD_VALUE;
-
-	/**
-	 * The operation id for the '<em>Set Value From String</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_INSTANCE___SET_VALUE_FROM_STRING__STRING = TYPE_INSTANCE___SET_VALUE_FROM_STRING__STRING;
-
-	/**
-	 * The operation id for the '<em>Set Value From Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE = TYPE_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Line Instance</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_INSTANCE_OPERATION_COUNT = TYPE_INSTANCE_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LinePropertySetterImpl <em>Line Property Setter</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LinePropertySetterImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLinePropertySetter()
-	 * @generated
-	 */
-	int LINE_PROPERTY_SETTER = 57;
-
-	/**
-	 * The feature id for the '<em><b>Property</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_PROPERTY_SETTER__PROPERTY = PROPERTY_SETTER__PROPERTY;
-
-	/**
-	 * The feature id for the '<em><b>Property Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_PROPERTY_SETTER__PROPERTY_NAME = PROPERTY_SETTER__PROPERTY_NAME;
-
-	/**
-	 * The number of structural features of the '<em>Line Property Setter</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_PROPERTY_SETTER_FEATURE_COUNT = PROPERTY_SETTER_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Set Value</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_PROPERTY_SETTER___SET_VALUE__VIEW_TYPEINSTANCE = PROPERTY_SETTER___SET_VALUE__VIEW_TYPEINSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Line Property Setter</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int LINE_PROPERTY_SETTER_OPERATION_COUNT = PROPERTY_SETTER_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontPropertySetterImpl <em>Font Property Setter</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontPropertySetterImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getFontPropertySetter()
-	 * @generated
-	 */
-	int FONT_PROPERTY_SETTER = 58;
-
-	/**
-	 * The feature id for the '<em><b>Property</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_PROPERTY_SETTER__PROPERTY = PROPERTY_SETTER__PROPERTY;
-
-	/**
-	 * The feature id for the '<em><b>Property Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_PROPERTY_SETTER__PROPERTY_NAME = PROPERTY_SETTER__PROPERTY_NAME;
-
-	/**
-	 * The number of structural features of the '<em>Font Property Setter</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_PROPERTY_SETTER_FEATURE_COUNT = PROPERTY_SETTER_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Set Value</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_PROPERTY_SETTER___SET_VALUE__VIEW_TYPEINSTANCE = PROPERTY_SETTER___SET_VALUE__VIEW_TYPEINSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Font Property Setter</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_PROPERTY_SETTER_OPERATION_COUNT = PROPERTY_SETTER_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontInstanceImpl <em>Font Instance</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontInstanceImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getFontInstance()
-	 * @generated
-	 */
-	int FONT_INSTANCE = 59;
-
-	/**
-	 * The feature id for the '<em><b>Font Color</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_INSTANCE__FONT_COLOR = TYPE_INSTANCE_FEATURE_COUNT + 0;
-
-	/**
-	 * The feature id for the '<em><b>Font Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_INSTANCE__FONT_NAME = TYPE_INSTANCE_FEATURE_COUNT + 1;
-
-	/**
-	 * The feature id for the '<em><b>Font Heigh</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_INSTANCE__FONT_HEIGH = TYPE_INSTANCE_FEATURE_COUNT + 2;
-
-	/**
-	 * The feature id for the '<em><b>Bold</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_INSTANCE__BOLD = TYPE_INSTANCE_FEATURE_COUNT + 3;
-
-	/**
-	 * The number of structural features of the '<em>Font Instance</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_INSTANCE_FEATURE_COUNT = TYPE_INSTANCE_FEATURE_COUNT + 4;
-
-	/**
-	 * The operation id for the '<em>Get Cmd Value</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_INSTANCE___GET_CMD_VALUE = TYPE_INSTANCE___GET_CMD_VALUE;
-
-	/**
-	 * The operation id for the '<em>Set Value From String</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_INSTANCE___SET_VALUE_FROM_STRING__STRING = TYPE_INSTANCE___SET_VALUE_FROM_STRING__STRING;
-
-	/**
-	 * The operation id for the '<em>Set Value From Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE = TYPE_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Font Instance</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_INSTANCE_OPERATION_COUNT = TYPE_INSTANCE_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontTypeImpl <em>Font Type</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontTypeImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getFontType()
-	 * @generated
-	 */
-	int FONT_TYPE = 60;
-
-	/**
-	 * The feature id for the '<em><b>Metamodel</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_TYPE__METAMODEL = TYPE__METAMODEL;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_TYPE__NAME = TYPE__NAME;
-
-	/**
-	 * The feature id for the '<em><b>Description</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_TYPE__DESCRIPTION = TYPE__DESCRIPTION;
-
-	/**
-	 * The number of structural features of the '<em>Font Type</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_TYPE_FEATURE_COUNT = TYPE_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Create Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_TYPE___CREATE_INSTANCE = TYPE___CREATE_INSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Font Type</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FONT_TYPE_OPERATION_COUNT = TYPE_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IsVisiblePropertySetterImpl <em>Is Visible Property Setter</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IsVisiblePropertySetterImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getIsVisiblePropertySetter()
-	 * @generated
-	 */
-	int IS_VISIBLE_PROPERTY_SETTER = 61;
-
-	/**
-	 * The feature id for the '<em><b>Property</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_VISIBLE_PROPERTY_SETTER__PROPERTY = PROPERTY_SETTER__PROPERTY;
-
-	/**
-	 * The feature id for the '<em><b>Property Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_VISIBLE_PROPERTY_SETTER__PROPERTY_NAME = PROPERTY_SETTER__PROPERTY_NAME;
-
-	/**
-	 * The number of structural features of the '<em>Is Visible Property Setter</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_VISIBLE_PROPERTY_SETTER_FEATURE_COUNT = PROPERTY_SETTER_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Set Value</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_VISIBLE_PROPERTY_SETTER___SET_VALUE__VIEW_TYPEINSTANCE = PROPERTY_SETTER___SET_VALUE__VIEW_TYPEINSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Is Visible Property Setter</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_VISIBLE_PROPERTY_SETTER_OPERATION_COUNT = PROPERTY_SETTER_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TopLayerOperatorDescriptorImpl <em>Top Layer Operator Descriptor</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TopLayerOperatorDescriptorImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getTopLayerOperatorDescriptor()
-	 * @generated
-	 */
-	int TOP_LAYER_OPERATOR_DESCRIPTOR = 62;
-
-	/**
 	 * The feature id for the '<em><b>Property Operators</b></em>' reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -5568,7 +3586,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int TOP_LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_DEFAULTPROPERTYOPERATOR = LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_DEFAULTPROPERTYOPERATOR;
+	int TOP_LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_PROPERTYOPERATOR = LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_PROPERTYOPERATOR;
 
 	/**
 	 * The number of operations of the '<em>Top Layer Operator Descriptor</em>' class.
@@ -5580,16 +3598,6 @@
 	int TOP_LAYER_OPERATOR_DESCRIPTOR_OPERATION_COUNT = LAYER_OPERATOR_DESCRIPTOR_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StackedLayerOperatorDescriptorImpl <em>Stacked Layer Operator Descriptor</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StackedLayerOperatorDescriptorImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getStackedLayerOperatorDescriptor()
-	 * @generated
-	 */
-	int STACKED_LAYER_OPERATOR_DESCRIPTOR = 63;
-
-	/**
 	 * The feature id for the '<em><b>Property Operators</b></em>' reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -5650,7 +3658,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int STACKED_LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_DEFAULTPROPERTYOPERATOR = LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_DEFAULTPROPERTYOPERATOR;
+	int STACKED_LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_PROPERTYOPERATOR = LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_PROPERTYOPERATOR;
 
 	/**
 	 * The number of operations of the '<em>Stacked Layer Operator Descriptor</em>' class.
@@ -5662,317 +3670,6 @@
 	int STACKED_LAYER_OPERATOR_DESCRIPTOR_OPERATION_COUNT = LAYER_OPERATOR_DESCRIPTOR_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomPropertyOperatorImpl <em>Custom Property Operator</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomPropertyOperatorImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCustomPropertyOperator()
-	 * @generated
-	 */
-	int CUSTOM_PROPERTY_OPERATOR = 64;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_PROPERTY_OPERATOR__NAME = PROPERTY_OPERATOR__NAME;
-
-	/**
-	 * The feature id for the '<em><b>Classname</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_PROPERTY_OPERATOR__CLASSNAME = PROPERTY_OPERATOR_FEATURE_COUNT + 0;
-
-	/**
-	 * The feature id for the '<em><b>Operator Instance</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_PROPERTY_OPERATOR__OPERATOR_INSTANCE = PROPERTY_OPERATOR_FEATURE_COUNT + 1;
-
-	/**
-	 * The feature id for the '<em><b>Class Bundle ID</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_PROPERTY_OPERATOR__CLASS_BUNDLE_ID = PROPERTY_OPERATOR_FEATURE_COUNT + 2;
-
-	/**
-	 * The number of structural features of the '<em>Custom Property Operator</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_PROPERTY_OPERATOR_FEATURE_COUNT = PROPERTY_OPERATOR_FEATURE_COUNT + 3;
-
-	/**
-	 * The operation id for the '<em>Get Compute Property Value Command</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_PROPERTY_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST = PROPERTY_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST;
-
-	/**
-	 * The operation id for the '<em>Reset Operator Instance</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_PROPERTY_OPERATOR___RESET_OPERATOR_INSTANCE = PROPERTY_OPERATOR_OPERATION_COUNT + 0;
-
-	/**
-	 * The number of operations of the '<em>Custom Property Operator</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CUSTOM_PROPERTY_OPERATOR_OPERATION_COUNT = PROPERTY_OPERATOR_OPERATION_COUNT + 1;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AndStackedLayerOperatorDescriptorImpl <em>And Stacked Layer Operator Descriptor</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AndStackedLayerOperatorDescriptorImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getAndStackedLayerOperatorDescriptor()
-	 * @generated
-	 */
-	int AND_STACKED_LAYER_OPERATOR_DESCRIPTOR = 65;
-
-	/**
-	 * The feature id for the '<em><b>Property Operators</b></em>' reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int AND_STACKED_LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS = STACKED_LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int AND_STACKED_LAYER_OPERATOR_DESCRIPTOR__NAME = STACKED_LAYER_OPERATOR_DESCRIPTOR__NAME;
-
-	/**
-	 * The number of structural features of the '<em>And Stacked Layer Operator Descriptor</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int AND_STACKED_LAYER_OPERATOR_DESCRIPTOR_FEATURE_COUNT = STACKED_LAYER_OPERATOR_DESCRIPTOR_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Get Property Operator</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int AND_STACKED_LAYER_OPERATOR_DESCRIPTOR___GET_PROPERTY_OPERATOR__PROPERTY = STACKED_LAYER_OPERATOR_DESCRIPTOR___GET_PROPERTY_OPERATOR__PROPERTY;
-
-	/**
-	 * The operation id for the '<em>Set Property Operator</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int AND_STACKED_LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_OPERATOR__PROPERTY_PROPERTYOPERATOR = STACKED_LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_OPERATOR__PROPERTY_PROPERTYOPERATOR;
-
-	/**
-	 * The operation id for the '<em>Create Layer Operator</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int AND_STACKED_LAYER_OPERATOR_DESCRIPTOR___CREATE_LAYER_OPERATOR = STACKED_LAYER_OPERATOR_DESCRIPTOR___CREATE_LAYER_OPERATOR;
-
-	/**
-	 * The operation id for the '<em>Set Property Collection Size</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int AND_STACKED_LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_DEFAULTPROPERTYOPERATOR = STACKED_LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_DEFAULTPROPERTYOPERATOR;
-
-	/**
-	 * The number of operations of the '<em>And Stacked Layer Operator Descriptor</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int AND_STACKED_LAYER_OPERATOR_DESCRIPTOR_OPERATION_COUNT = STACKED_LAYER_OPERATOR_DESCRIPTOR_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.OrStackedLayerOperatorDescriptorImpl <em>Or Stacked Layer Operator Descriptor</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.OrStackedLayerOperatorDescriptorImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getOrStackedLayerOperatorDescriptor()
-	 * @generated
-	 */
-	int OR_STACKED_LAYER_OPERATOR_DESCRIPTOR = 66;
-
-	/**
-	 * The feature id for the '<em><b>Property Operators</b></em>' reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int OR_STACKED_LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS = STACKED_LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int OR_STACKED_LAYER_OPERATOR_DESCRIPTOR__NAME = STACKED_LAYER_OPERATOR_DESCRIPTOR__NAME;
-
-	/**
-	 * The number of structural features of the '<em>Or Stacked Layer Operator Descriptor</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int OR_STACKED_LAYER_OPERATOR_DESCRIPTOR_FEATURE_COUNT = STACKED_LAYER_OPERATOR_DESCRIPTOR_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Get Property Operator</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int OR_STACKED_LAYER_OPERATOR_DESCRIPTOR___GET_PROPERTY_OPERATOR__PROPERTY = STACKED_LAYER_OPERATOR_DESCRIPTOR___GET_PROPERTY_OPERATOR__PROPERTY;
-
-	/**
-	 * The operation id for the '<em>Set Property Operator</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int OR_STACKED_LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_OPERATOR__PROPERTY_PROPERTYOPERATOR = STACKED_LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_OPERATOR__PROPERTY_PROPERTYOPERATOR;
-
-	/**
-	 * The operation id for the '<em>Create Layer Operator</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int OR_STACKED_LAYER_OPERATOR_DESCRIPTOR___CREATE_LAYER_OPERATOR = STACKED_LAYER_OPERATOR_DESCRIPTOR___CREATE_LAYER_OPERATOR;
-
-	/**
-	 * The operation id for the '<em>Set Property Collection Size</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int OR_STACKED_LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_DEFAULTPROPERTYOPERATOR = STACKED_LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_DEFAULTPROPERTYOPERATOR;
-
-	/**
-	 * The number of operations of the '<em>Or Stacked Layer Operator Descriptor</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int OR_STACKED_LAYER_OPERATOR_DESCRIPTOR_OPERATION_COUNT = STACKED_LAYER_OPERATOR_DESCRIPTOR_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IsAbstractUmlSetterImpl <em>Is Abstract Uml Setter</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IsAbstractUmlSetterImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getIsAbstractUmlSetter()
-	 * @generated
-	 */
-	int IS_ABSTRACT_UML_SETTER = 67;
-
-	/**
-	 * The feature id for the '<em><b>Property</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_ABSTRACT_UML_SETTER__PROPERTY = PROPERTY_SETTER__PROPERTY;
-
-	/**
-	 * The feature id for the '<em><b>Property Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_ABSTRACT_UML_SETTER__PROPERTY_NAME = PROPERTY_SETTER__PROPERTY_NAME;
-
-	/**
-	 * The number of structural features of the '<em>Is Abstract Uml Setter</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_ABSTRACT_UML_SETTER_FEATURE_COUNT = PROPERTY_SETTER_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Set Value</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_ABSTRACT_UML_SETTER___SET_VALUE__VIEW_TYPEINSTANCE = PROPERTY_SETTER___SET_VALUE__VIEW_TYPEINSTANCE;
-
-	/**
-	 * The number of operations of the '<em>Is Abstract Uml Setter</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int IS_ABSTRACT_UML_SETTER_OPERATION_COUNT = PROPERTY_SETTER_OPERATION_COUNT + 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AllViewsDerivedLayerImpl <em>All Views Derived Layer</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AllViewsDerivedLayerImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getAllViewsDerivedLayer()
-	 * @generated
-	 */
-	int ALL_VIEWS_DERIVED_LAYER = 68;
-
-	/**
 	 * The feature id for the '<em><b>Application</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -6114,7 +3811,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int ALL_VIEWS_DERIVED_LAYER___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY = ABSTRACT_LAYER___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY;
+	int ALL_VIEWS_DERIVED_LAYER___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY = ABSTRACT_LAYER___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY;
 
 	/**
 	 * The operation id for the '<em>Get Properties Compute Property Value Command</em>' operation.
@@ -6123,7 +3820,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int ALL_VIEWS_DERIVED_LAYER___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST = ABSTRACT_LAYER___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST;
+	int ALL_VIEWS_DERIVED_LAYER___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST = ABSTRACT_LAYER___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST;
 
 	/**
 	 * The operation id for the '<em>Attach To Layers Stack</em>' operation.
@@ -6225,16 +3922,6 @@
 	int ALL_VIEWS_DERIVED_LAYER_OPERATION_COUNT = ABSTRACT_LAYER_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSPropertySetterImpl <em>CSS Property Setter</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSPropertySetterImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCSSPropertySetter()
-	 * @generated
-	 */
-	int CSS_PROPERTY_SETTER = 69;
-
-	/**
 	 * The feature id for the '<em><b>Property</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -6280,25 +3967,6 @@
 	int CSS_PROPERTY_SETTER_OPERATION_COUNT = PROPERTY_SETTER_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSTypeImpl <em>CSS Type</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSTypeImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCSSType()
-	 * @generated
-	 */
-	int CSS_TYPE = 70;
-
-	/**
-	 * The feature id for the '<em><b>Metamodel</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CSS_TYPE__METAMODEL = TYPE__METAMODEL;
-
-	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -6344,16 +4012,6 @@
 	int CSS_TYPE_OPERATION_COUNT = TYPE_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSInstanceImpl <em>CSS Instance</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSInstanceImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCSSInstance()
-	 * @generated
-	 */
-	int CSS_INSTANCE = 71;
-
-	/**
 	 * The feature id for the '<em><b>Stylesheet</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -6417,16 +4075,6 @@
 	int CSS_INSTANCE_OPERATION_COUNT = TYPE_INSTANCE_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHidePropertySetterImpl <em>CSS Hide Property Setter</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHidePropertySetterImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCSSHidePropertySetter()
-	 * @generated
-	 */
-	int CSS_HIDE_PROPERTY_SETTER = 72;
-
-	/**
 	 * The feature id for the '<em><b>Property</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -6472,25 +4120,6 @@
 	int CSS_HIDE_PROPERTY_SETTER_OPERATION_COUNT = PROPERTY_SETTER_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHideTypeImpl <em>CSS Hide Type</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHideTypeImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCSSHideType()
-	 * @generated
-	 */
-	int CSS_HIDE_TYPE = 73;
-
-	/**
-	 * The feature id for the '<em><b>Metamodel</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int CSS_HIDE_TYPE__METAMODEL = TYPE__METAMODEL;
-
-	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -6536,16 +4165,6 @@
 	int CSS_HIDE_TYPE_OPERATION_COUNT = TYPE_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHideInstanceImpl <em>CSS Hide Instance</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHideInstanceImpl
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCSSHideInstance()
-	 * @generated
-	 */
-	int CSS_HIDE_INSTANCE = 74;
-
-	/**
 	 * The feature id for the '<em><b>Stylesheet</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -6609,34 +4228,14 @@
 	int CSS_HIDE_INSTANCE_OPERATION_COUNT = TYPE_INSTANCE_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerState <em>Layer State</em>}' enum.
+	 * The meta object id for the '<em>Compute Property Value Command</em>' data type.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerState
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLayerState()
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getComputePropertyValueCommand()
 	 * @generated
 	 */
-	int LAYER_STATE = 75;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.EventLevel <em>Event Level</em>}' enum.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.EventLevel
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getEventLevel()
-	 * @generated
-	 */
-	int EVENT_LEVEL = 76;
-
-	/**
-	 * The meta object id for the '<em>String</em>' data type.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see java.lang.String
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getString()
-	 * @generated
-	 */
-	int STRING = 77;
+	int COMPUTE_PROPERTY_VALUE_COMMAND = 53;
 
 	/**
 	 * The meta object id for the '<em>boolean</em>' data type.
@@ -6645,7 +4244,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getboolean()
 	 * @generated
 	 */
-	int BOOLEAN = 78;
+	int BOOLEAN = 54;
 
 	/**
 	 * The meta object id for the '<em>EPackage</em>' data type.
@@ -6655,56 +4254,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getEPackage()
 	 * @generated
 	 */
-	int EPACKAGE = 79;
-
-	/**
-	 * The meta object id for the '<em>Exception</em>' data type.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLayersException()
-	 * @generated
-	 */
-	int LAYERS_EXCEPTION = 80;
-
-	/**
-	 * The meta object id for the '<em>int</em>' data type.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getint()
-	 * @generated
-	 */
-	int INT = 81;
-
-	/**
-	 * The meta object id for the '<em>Bad State Exception</em>' data type.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.BadStateException
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getBadStateException()
-	 * @generated
-	 */
-	int BAD_STATE_EXCEPTION = 82;
-
-	/**
-	 * The meta object id for the '<em>Not Found Exception</em>' data type.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getNotFoundException()
-	 * @generated
-	 */
-	int NOT_FOUND_EXCEPTION = 83;
-
-	/**
-	 * The meta object id for the '<em>Compute Property Value Command</em>' data type.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getComputePropertyValueCommand()
-	 * @generated
-	 */
-	int COMPUTE_PROPERTY_VALUE_COMMAND = 84;
+	int EPACKAGE = 55;
 
 	/**
 	 * The meta object id for the '<em>Object</em>' data type.
@@ -6714,17 +4264,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getObject()
 	 * @generated
 	 */
-	int OBJECT = 85;
-
-	/**
-	 * The meta object id for the '<em>Custom Property Opertor Instance</em>' data type.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCustomPropertyOpertorInstance()
-	 * @generated
-	 */
-	int CUSTOM_PROPERTY_OPERTOR_INSTANCE = 86;
+	int OBJECT = 56;
 
 
 	/**
@@ -6824,24 +4364,24 @@
 	EOperation getLayersStack__GetComputePropertyValueCommand__View_Property();
 
 	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack#getPropertiesComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, org.eclipse.emf.common.util.EList) <em>Get Properties Compute Property Value Command</em>}' operation.
+	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack#getPropertiesComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, java.util.List) <em>Get Properties Compute Property Value Command</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @return the meta object for the '<em>Get Properties Compute Property Value Command</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack#getPropertiesComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, org.eclipse.emf.common.util.EList)
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack#getPropertiesComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, java.util.List)
 	 * @generated
 	 */
-	EOperation getLayersStack__GetPropertiesComputePropertyValueCommand__View_EList();
+	EOperation getLayersStack__GetPropertiesComputePropertyValueCommand__View_List();
 
 	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack#getViewsComputePropertyValueCommand(org.eclipse.emf.common.util.EList, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property) <em>Get Views Compute Property Value Command</em>}' operation.
+	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack#getViewsComputePropertyValueCommand(java.util.List, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property) <em>Get Views Compute Property Value Command</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @return the meta object for the '<em>Get Views Compute Property Value Command</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack#getViewsComputePropertyValueCommand(org.eclipse.emf.common.util.EList, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property)
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack#getViewsComputePropertyValueCommand(java.util.List, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property)
 	 * @generated
 	 */
-	EOperation getLayersStack__GetViewsComputePropertyValueCommand__EList_Property();
+	EOperation getLayersStack__GetViewsComputePropertyValueCommand__List_Property();
 
 	/**
 	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack#startAfterCreation() <em>Start After Creation</em>}' operation.
@@ -7001,24 +4541,24 @@
 	EOperation getLayerExpression__GetComputePropertyValueCommand__View_Property();
 
 	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression#getViewsComputePropertyValueCommand(org.eclipse.emf.common.util.EList, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property) <em>Get Views Compute Property Value Command</em>}' operation.
+	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression#getViewsComputePropertyValueCommand(java.util.List, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property) <em>Get Views Compute Property Value Command</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @return the meta object for the '<em>Get Views Compute Property Value Command</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression#getViewsComputePropertyValueCommand(org.eclipse.emf.common.util.EList, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property)
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression#getViewsComputePropertyValueCommand(java.util.List, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property)
 	 * @generated
 	 */
-	EOperation getLayerExpression__GetViewsComputePropertyValueCommand__EList_Property();
+	EOperation getLayerExpression__GetViewsComputePropertyValueCommand__List_Property();
 
 	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression#getPropertiesComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, org.eclipse.emf.common.util.EList) <em>Get Properties Compute Property Value Command</em>}' operation.
+	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression#getPropertiesComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, java.util.List) <em>Get Properties Compute Property Value Command</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @return the meta object for the '<em>Get Properties Compute Property Value Command</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression#getPropertiesComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, org.eclipse.emf.common.util.EList)
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression#getPropertiesComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, java.util.List)
 	 * @generated
 	 */
-	EOperation getLayerExpression__GetPropertiesComputePropertyValueCommand__View_EList();
+	EOperation getLayerExpression__GetPropertiesComputePropertyValueCommand__View_List();
 
 	/**
 	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression#attachToLayersStack(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack) <em>Attach To Layers Stack</em>}' operation.
@@ -7417,17 +4957,6 @@
 	EClass getType();
 
 	/**
-	 * Returns the meta object for the reference '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type#getMetamodel <em>Metamodel</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the reference '<em>Metamodel</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type#getMetamodel()
-	 * @see #getType()
-	 * @generated
-	 */
-	EReference getType_Metamodel();
-
-	/**
 	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type#getName <em>Name</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -7460,92 +4989,6 @@
 	EOperation getType__CreateInstance();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel <em>Metamodel</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Metamodel</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel
-	 * @generated
-	 */
-	EClass getMetamodel();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getName <em>Name</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Name</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getName()
-	 * @see #getMetamodel()
-	 * @generated
-	 */
-	EAttribute getMetamodel_Name();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getDescription <em>Description</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Description</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getDescription()
-	 * @see #getMetamodel()
-	 * @generated
-	 */
-	EAttribute getMetamodel_Description();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getNsuri <em>Nsuri</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Nsuri</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getNsuri()
-	 * @see #getMetamodel()
-	 * @generated
-	 */
-	EAttribute getMetamodel_Nsuri();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getPluginID <em>Plugin ID</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Plugin ID</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getPluginID()
-	 * @see #getMetamodel()
-	 * @generated
-	 */
-	EAttribute getMetamodel_PluginID();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getEPackageInstanceName <em>EPackage Instance Name</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>EPackage Instance Name</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getEPackageInstanceName()
-	 * @see #getMetamodel()
-	 * @generated
-	 */
-	EAttribute getMetamodel_EPackageInstanceName();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#isTypeValid <em>Is Type Valid</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Is Type Valid</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#isTypeValid()
-	 * @see #getMetamodel()
-	 * @generated
-	 */
-	EAttribute getMetamodel_IsTypeValid();
-
-	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getEPackage() <em>Get EPackage</em>}' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the '<em>Get EPackage</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getEPackage()
-	 * @generated
-	 */
-	EOperation getMetamodel__GetEPackage();
-
-	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance <em>Type Instance</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -8041,14 +5484,14 @@
 	EOperation getLayerOperatorDescriptor__CreateLayerOperator();
 
 	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor#setPropertyCollectionSize(int, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.DefaultPropertyOperator) <em>Set Property Collection Size</em>}' operation.
+	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor#setPropertyCollectionSize(int, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator) <em>Set Property Collection Size</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @return the meta object for the '<em>Set Property Collection Size</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor#setPropertyCollectionSize(int, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.DefaultPropertyOperator)
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor#setPropertyCollectionSize(int, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator)
 	 * @generated
 	 */
-	EOperation getLayerOperatorDescriptor__SetPropertyCollectionSize__int_DefaultPropertyOperator();
+	EOperation getLayerOperatorDescriptor__SetPropertyCollectionSize__int_PropertyOperator();
 
 	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator <em>Property Operator</em>}'.
@@ -8072,66 +5515,57 @@
 	EAttribute getPropertyOperator_Name();
 
 	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getComputePropertyValueCommand(org.eclipse.emf.common.util.EList) <em>Get Compute Property Value Command</em>}' operation.
+	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getClassname <em>Classname</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Classname</em>'.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getClassname()
+	 * @see #getPropertyOperator()
+	 * @generated
+	 */
+	EAttribute getPropertyOperator_Classname();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getOperatorInstance <em>Operator Instance</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Operator Instance</em>'.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getOperatorInstance()
+	 * @see #getPropertyOperator()
+	 * @generated
+	 */
+	EReference getPropertyOperator_OperatorInstance();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getClassBundleID <em>Class Bundle ID</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Class Bundle ID</em>'.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getClassBundleID()
+	 * @see #getPropertyOperator()
+	 * @generated
+	 */
+	EAttribute getPropertyOperator_ClassBundleID();
+
+	/**
+	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getComputePropertyValueCommand(java.util.List) <em>Get Compute Property Value Command</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @return the meta object for the '<em>Get Compute Property Value Command</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getComputePropertyValueCommand(org.eclipse.emf.common.util.EList)
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getComputePropertyValueCommand(java.util.List)
 	 * @generated
 	 */
-	EOperation getPropertyOperator__GetComputePropertyValueCommand__EList();
+	EOperation getPropertyOperator__GetComputePropertyValueCommand__List();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator <em>Abstract Layer Operator</em>}'.
+	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#resetOperatorInstance() <em>Reset Operator Instance</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Abstract Layer Operator</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator
+	 * @return the meta object for the '<em>Reset Operator Instance</em>' operation.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#resetOperatorInstance()
 	 * @generated
 	 */
-	EClass getAbstractLayerOperator();
-
-	/**
-	 * Returns the meta object for the reference '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator#getLayerOperatorDescriptor <em>Layer Operator Descriptor</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the reference '<em>Layer Operator Descriptor</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator#getLayerOperatorDescriptor()
-	 * @see #getAbstractLayerOperator()
-	 * @generated
-	 */
-	EReference getAbstractLayerOperator_LayerOperatorDescriptor();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator#getLayerOperatorDescriptorName <em>Layer Operator Descriptor Name</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Layer Operator Descriptor Name</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator#getLayerOperatorDescriptorName()
-	 * @see #getAbstractLayerOperator()
-	 * @generated
-	 */
-	EAttribute getAbstractLayerOperator_LayerOperatorDescriptorName();
-
-	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator#isDescriptorSet() <em>Is Descriptor Set</em>}' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the '<em>Is Descriptor Set</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator#isDescriptorSet()
-	 * @generated
-	 */
-	EOperation getAbstractLayerOperator__IsDescriptorSet();
-
-	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator#resetDescriptor() <em>Reset Descriptor</em>}' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the '<em>Reset Descriptor</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator#resetDescriptor()
-	 * @generated
-	 */
-	EOperation getAbstractLayerOperator__ResetDescriptor();
+	EOperation getPropertyOperator__ResetOperatorInstance();
 
 	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator <em>Layer Operator</em>}'.
@@ -8155,6 +5589,48 @@
 	EReference getLayerOperator_Layers();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator#getLayerOperatorDescriptorName <em>Layer Operator Descriptor Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Layer Operator Descriptor Name</em>'.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator#getLayerOperatorDescriptorName()
+	 * @see #getLayerOperator()
+	 * @generated
+	 */
+	EAttribute getLayerOperator_LayerOperatorDescriptorName();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator#getLayerOperatorDescriptor <em>Layer Operator Descriptor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Layer Operator Descriptor</em>'.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator#getLayerOperatorDescriptor()
+	 * @see #getLayerOperator()
+	 * @generated
+	 */
+	EReference getLayerOperator_LayerOperatorDescriptor();
+
+	/**
+	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator#isDescriptorSet() <em>Is Descriptor Set</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the '<em>Is Descriptor Set</em>' operation.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator#isDescriptorSet()
+	 * @generated
+	 */
+	EOperation getLayerOperator__IsDescriptorSet();
+
+	/**
+	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator#resetDescriptor() <em>Reset Descriptor</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the '<em>Reset Descriptor</em>' operation.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator#resetDescriptor()
+	 * @generated
+	 */
+	EOperation getLayerOperator__ResetDescriptor();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersContainer <em>Container</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -8175,16 +5651,6 @@
 	EOperation getLayersContainer__AddLayer__LayerExpression();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.DefaultPropertyOperator <em>Default Property Operator</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Default Property Operator</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.DefaultPropertyOperator
-	 * @generated
-	 */
-	EClass getDefaultPropertyOperator();
-
-	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayer <em>Abstract Layer</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -8356,118 +5822,90 @@
 	EAttribute getFolder_Name();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntInstance <em>Int Instance</em>}'.
+	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel <em>Metamodel</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Int Instance</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntInstance
+	 * @return the meta object for class '<em>Metamodel</em>'.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel
 	 * @generated
 	 */
-	EClass getIntInstance();
+	EClass getMetamodel();
 
 	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntInstance#getValue <em>Value</em>}'.
+	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getName <em>Name</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Value</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntInstance#getValue()
-	 * @see #getIntInstance()
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getName()
+	 * @see #getMetamodel()
 	 * @generated
 	 */
-	EAttribute getIntInstance_Value();
+	EAttribute getMetamodel_Name();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance <em>Boolean Instance</em>}'.
+	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getDescription <em>Description</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Boolean Instance</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance
+	 * @return the meta object for the attribute '<em>Description</em>'.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getDescription()
+	 * @see #getMetamodel()
 	 * @generated
 	 */
-	EClass getBooleanInstance();
+	EAttribute getMetamodel_Description();
 
 	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance#isValue <em>Value</em>}'.
+	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getNsuri <em>Nsuri</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Value</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance#isValue()
-	 * @see #getBooleanInstance()
+	 * @return the meta object for the attribute '<em>Nsuri</em>'.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getNsuri()
+	 * @see #getMetamodel()
 	 * @generated
 	 */
-	EAttribute getBooleanInstance_Value();
+	EAttribute getMetamodel_Nsuri();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance <em>String Instance</em>}'.
+	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getPluginID <em>Plugin ID</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>String Instance</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance
+	 * @return the meta object for the attribute '<em>Plugin ID</em>'.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getPluginID()
+	 * @see #getMetamodel()
 	 * @generated
 	 */
-	EClass getStringInstance();
+	EAttribute getMetamodel_PluginID();
 
 	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance#getValue <em>Value</em>}'.
+	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getEPackageInstanceName <em>EPackage Instance Name</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Value</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance#getValue()
-	 * @see #getStringInstance()
+	 * @return the meta object for the attribute '<em>EPackage Instance Name</em>'.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getEPackageInstanceName()
+	 * @see #getMetamodel()
 	 * @generated
 	 */
-	EAttribute getStringInstance_Value();
+	EAttribute getMetamodel_EPackageInstanceName();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntType <em>Int Type</em>}'.
+	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#isTypeValid <em>Is Type Valid</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Int Type</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntType
+	 * @return the meta object for the attribute '<em>Is Type Valid</em>'.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#isTypeValid()
+	 * @see #getMetamodel()
 	 * @generated
 	 */
-	EClass getIntType();
+	EAttribute getMetamodel_IsTypeValid();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanType <em>Boolean Type</em>}'.
+	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getEPackage() <em>Get EPackage</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Boolean Type</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanType
+	 * @return the meta object for the '<em>Get EPackage</em>' operation.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel#getEPackage()
 	 * @generated
 	 */
-	EClass getBooleanType();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringType <em>String Type</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>String Type</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringType
-	 * @generated
-	 */
-	EClass getStringType();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomType <em>Custom Type</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Custom Type</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomType
-	 * @generated
-	 */
-	EClass getCustomType();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomType#getClassifier <em>Classifier</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Classifier</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomType#getClassifier()
-	 * @see #getCustomType()
-	 * @generated
-	 */
-	EAttribute getCustomType_Classifier();
+	EOperation getMetamodel__GetEPackage();
 
 	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator <em>Top Layer Operator</em>}'.
@@ -8490,16 +5928,6 @@
 	EClass getStackedLayerOperator();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomLayerOperator <em>Custom Layer Operator</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Custom Layer Operator</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomLayerOperator
-	 * @generated
-	 */
-	EClass getCustomLayerOperator();
-
-	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyIndex <em>Property Index</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -8577,16 +6005,6 @@
 	EClass getSimpleLayerDescriptor();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayerDescriptor <em>Reg Exp Layer Descriptor</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Reg Exp Layer Descriptor</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayerDescriptor
-	 * @generated
-	 */
-	EClass getRegExpLayerDescriptor();
-
-	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullInstance <em>Null Instance</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -8607,163 +6025,6 @@
 	EOperation getNullInstance__GetInstance();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer <em>Reg Exp Layer</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Reg Exp Layer</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer
-	 * @generated
-	 */
-	EClass getRegExpLayer();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getExpr <em>Expr</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Expr</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getExpr()
-	 * @see #getRegExpLayer()
-	 * @generated
-	 */
-	EAttribute getRegExpLayer_Expr();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getLanguage <em>Language</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Language</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getLanguage()
-	 * @see #getRegExpLayer()
-	 * @generated
-	 */
-	EAttribute getRegExpLayer_Language();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#isDomainChangedEventDependant <em>Is Domain Changed Event Dependant</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Is Domain Changed Event Dependant</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#isDomainChangedEventDependant()
-	 * @see #getRegExpLayer()
-	 * @generated
-	 */
-	EAttribute getRegExpLayer_IsDomainChangedEventDependant();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getDomainChangedEventLevel <em>Domain Changed Event Level</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Domain Changed Event Level</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getDomainChangedEventLevel()
-	 * @see #getRegExpLayer()
-	 * @generated
-	 */
-	EAttribute getRegExpLayer_DomainChangedEventLevel();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#isDiagramChangedEventDependant <em>Is Diagram Changed Event Dependant</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Is Diagram Changed Event Dependant</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#isDiagramChangedEventDependant()
-	 * @see #getRegExpLayer()
-	 * @generated
-	 */
-	EAttribute getRegExpLayer_IsDiagramChangedEventDependant();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getDiagramChangedEventLevel <em>Diagram Changed Event Level</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Diagram Changed Event Level</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getDiagramChangedEventLevel()
-	 * @see #getRegExpLayer()
-	 * @generated
-	 */
-	EAttribute getRegExpLayer_DiagramChangedEventLevel();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getExpressionContextObjectType <em>Expression Context Object Type</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Expression Context Object Type</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getExpressionContextObjectType()
-	 * @see #getRegExpLayer()
-	 * @generated
-	 */
-	EAttribute getRegExpLayer_ExpressionContextObjectType();
-
-	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#activate(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator) <em>Activate</em>}' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the '<em>Activate</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#activate(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator)
-	 * @generated
-	 */
-	EOperation getRegExpLayer__Activate__AbstractLayerOperator();
-
-	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#deactivate(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator) <em>Deactivate</em>}' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the '<em>Deactivate</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#deactivate(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator)
-	 * @generated
-	 */
-	EOperation getRegExpLayer__Deactivate__AbstractLayerOperator();
-
-	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#isDerivedView(org.eclipse.gmf.runtime.notation.View) <em>Is Derived View</em>}' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the '<em>Is Derived View</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#isDerivedView(org.eclipse.gmf.runtime.notation.View)
-	 * @generated
-	 */
-	EOperation getRegExpLayer__IsDerivedView__View();
-
-	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#attachDerivedView(org.eclipse.gmf.runtime.notation.View) <em>Attach Derived View</em>}' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the '<em>Attach Derived View</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#attachDerivedView(org.eclipse.gmf.runtime.notation.View)
-	 * @generated
-	 */
-	EOperation getRegExpLayer__AttachDerivedView__View();
-
-	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#attachDerivedViews(org.eclipse.emf.common.util.EList) <em>Attach Derived Views</em>}' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the '<em>Attach Derived Views</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#attachDerivedViews(org.eclipse.emf.common.util.EList)
-	 * @generated
-	 */
-	EOperation getRegExpLayer__AttachDerivedViews__EList();
-
-	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#attachDerivedViews() <em>Attach Derived Views</em>}' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the '<em>Attach Derived Views</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#attachDerivedViews()
-	 * @generated
-	 */
-	EOperation getRegExpLayer__AttachDerivedViews();
-
-	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#lookupDerivedViews(org.eclipse.emf.common.util.EList) <em>Lookup Derived Views</em>}' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the '<em>Lookup Derived Views</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#lookupDerivedViews(org.eclipse.emf.common.util.EList)
-	 * @generated
-	 */
-	EOperation getRegExpLayer__LookupDerivedViews__EList();
-
-	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Layer <em>Layer</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -8774,99 +6035,6 @@
 	EClass getLayer();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Color <em>Color</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Color</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Color
-	 * @generated
-	 */
-	EClass getColor();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance <em>Color Instance</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Color Instance</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance
-	 * @generated
-	 */
-	EClass getColorInstance();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance#getValue <em>Value</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Value</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance#getValue()
-	 * @see #getColorInstance()
-	 * @generated
-	 */
-	EAttribute getColorInstance_Value();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance <em>Fill Instance</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Fill Instance</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance
-	 * @generated
-	 */
-	EClass getFillInstance();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance#getTransparency <em>Transparency</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Transparency</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance#getTransparency()
-	 * @see #getFillInstance()
-	 * @generated
-	 */
-	EAttribute getFillInstance_Transparency();
-
-	/**
-	 * Returns the meta object for the containment reference '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance#getFillColor <em>Fill Color</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference '<em>Fill Color</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance#getFillColor()
-	 * @see #getFillInstance()
-	 * @generated
-	 */
-	EReference getFillInstance_FillColor();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Fill <em>Fill</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Fill</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Fill
-	 * @generated
-	 */
-	EClass getFill();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillPropertySetter <em>Fill Property Setter</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Fill Property Setter</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillPropertySetter
-	 * @generated
-	 */
-	EClass getFillPropertySetter();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsValidPropertySetter <em>Is Valid Property Setter</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Is Valid Property Setter</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsValidPropertySetter
-	 * @generated
-	 */
-	EClass getIsValidPropertySetter();
-
-	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullPropertySetter <em>Null Property Setter</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -8877,142 +6045,6 @@
 	EClass getNullPropertySetter();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineType <em>Line Type</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Line Type</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineType
-	 * @generated
-	 */
-	EClass getLineType();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance <em>Line Instance</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Line Instance</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance
-	 * @generated
-	 */
-	EClass getLineInstance();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance#getLineColor <em>Line Color</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Line Color</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance#getLineColor()
-	 * @see #getLineInstance()
-	 * @generated
-	 */
-	EAttribute getLineInstance_LineColor();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance#getLineWith <em>Line With</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Line With</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance#getLineWith()
-	 * @see #getLineInstance()
-	 * @generated
-	 */
-	EAttribute getLineInstance_LineWith();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LinePropertySetter <em>Line Property Setter</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Line Property Setter</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LinePropertySetter
-	 * @generated
-	 */
-	EClass getLinePropertySetter();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontPropertySetter <em>Font Property Setter</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Font Property Setter</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontPropertySetter
-	 * @generated
-	 */
-	EClass getFontPropertySetter();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance <em>Font Instance</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Font Instance</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance
-	 * @generated
-	 */
-	EClass getFontInstance();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#getFontColor <em>Font Color</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Font Color</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#getFontColor()
-	 * @see #getFontInstance()
-	 * @generated
-	 */
-	EAttribute getFontInstance_FontColor();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#getFontName <em>Font Name</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Font Name</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#getFontName()
-	 * @see #getFontInstance()
-	 * @generated
-	 */
-	EAttribute getFontInstance_FontName();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#getFontHeigh <em>Font Heigh</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Font Heigh</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#getFontHeigh()
-	 * @see #getFontInstance()
-	 * @generated
-	 */
-	EAttribute getFontInstance_FontHeigh();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#isBold <em>Bold</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Bold</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance#isBold()
-	 * @see #getFontInstance()
-	 * @generated
-	 */
-	EAttribute getFontInstance_Bold();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontType <em>Font Type</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Font Type</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontType
-	 * @generated
-	 */
-	EClass getFontType();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsVisiblePropertySetter <em>Is Visible Property Setter</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Is Visible Property Setter</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsVisiblePropertySetter
-	 * @generated
-	 */
-	EClass getIsVisiblePropertySetter();
-
-	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperatorDescriptor <em>Top Layer Operator Descriptor</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -9033,89 +6065,6 @@
 	EClass getStackedLayerOperatorDescriptor();
 
 	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator <em>Custom Property Operator</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Custom Property Operator</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator
-	 * @generated
-	 */
-	EClass getCustomPropertyOperator();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator#getClassname <em>Classname</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Classname</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator#getClassname()
-	 * @see #getCustomPropertyOperator()
-	 * @generated
-	 */
-	EAttribute getCustomPropertyOperator_Classname();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator#getOperatorInstance <em>Operator Instance</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Operator Instance</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator#getOperatorInstance()
-	 * @see #getCustomPropertyOperator()
-	 * @generated
-	 */
-	EAttribute getCustomPropertyOperator_OperatorInstance();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator#getClassBundleID <em>Class Bundle ID</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Class Bundle ID</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator#getClassBundleID()
-	 * @see #getCustomPropertyOperator()
-	 * @generated
-	 */
-	EAttribute getCustomPropertyOperator_ClassBundleID();
-
-	/**
-	 * Returns the meta object for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator#resetOperatorInstance() <em>Reset Operator Instance</em>}' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the '<em>Reset Operator Instance</em>' operation.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator#resetOperatorInstance()
-	 * @generated
-	 */
-	EOperation getCustomPropertyOperator__ResetOperatorInstance();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AndStackedLayerOperatorDescriptor <em>And Stacked Layer Operator Descriptor</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>And Stacked Layer Operator Descriptor</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AndStackedLayerOperatorDescriptor
-	 * @generated
-	 */
-	EClass getAndStackedLayerOperatorDescriptor();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.OrStackedLayerOperatorDescriptor <em>Or Stacked Layer Operator Descriptor</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Or Stacked Layer Operator Descriptor</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.OrStackedLayerOperatorDescriptor
-	 * @generated
-	 */
-	EClass getOrStackedLayerOperatorDescriptor();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsAbstractUmlSetter <em>Is Abstract Uml Setter</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Is Abstract Uml Setter</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsAbstractUmlSetter
-	 * @generated
-	 */
-	EClass getIsAbstractUmlSetter();
-
-	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AllViewsDerivedLayer <em>All Views Derived Layer</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -9261,27 +6210,6 @@
 	EDataType getString();
 
 	/**
-	 * Returns the meta object for data type '<em>boolean</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for data type '<em>boolean</em>'.
-	 * @model instanceClass="boolean"
-	 * @generated
-	 */
-	EDataType getboolean();
-
-	/**
-	 * Returns the meta object for data type '{@link org.eclipse.emf.ecore.EPackage <em>EPackage</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for data type '<em>EPackage</em>'.
-	 * @see org.eclipse.emf.ecore.EPackage
-	 * @model instanceClass="org.eclipse.emf.ecore.EPackage"
-	 * @generated
-	 */
-	EDataType getEPackage();
-
-	/**
 	 * Returns the meta object for data type '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException <em>Exception</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -9338,6 +6266,27 @@
 	EDataType getComputePropertyValueCommand();
 
 	/**
+	 * Returns the meta object for data type '<em>boolean</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for data type '<em>boolean</em>'.
+	 * @model instanceClass="boolean"
+	 * @generated
+	 */
+	EDataType getboolean();
+
+	/**
+	 * Returns the meta object for data type '{@link org.eclipse.emf.ecore.EPackage <em>EPackage</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for data type '<em>EPackage</em>'.
+	 * @see org.eclipse.emf.ecore.EPackage
+	 * @model instanceClass="org.eclipse.emf.ecore.EPackage"
+	 * @generated
+	 */
+	EDataType getEPackage();
+
+	/**
 	 * Returns the meta object for data type '{@link java.lang.Object <em>Object</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -9349,17 +6298,6 @@
 	EDataType getObject();
 
 	/**
-	 * Returns the meta object for data type '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance <em>Custom Property Opertor Instance</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for data type '<em>Custom Property Opertor Instance</em>'.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance
-	 * @model instanceClass="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance"
-	 * @generated
-	 */
-	EDataType getCustomPropertyOpertorInstance();
-
-	/**
 	 * Returns the factory that creates the instances of the model.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -9464,7 +6402,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EOperation LAYERS_STACK___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST = eINSTANCE.getLayersStack__GetPropertiesComputePropertyValueCommand__View_EList();
+		EOperation LAYERS_STACK___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST = eINSTANCE.getLayersStack__GetPropertiesComputePropertyValueCommand__View_List();
 
 		/**
 		 * The meta object literal for the '<em><b>Get Views Compute Property Value Command</b></em>' operation.
@@ -9472,7 +6410,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EOperation LAYERS_STACK___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY = eINSTANCE.getLayersStack__GetViewsComputePropertyValueCommand__EList_Property();
+		EOperation LAYERS_STACK___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY = eINSTANCE.getLayersStack__GetViewsComputePropertyValueCommand__List_Property();
 
 		/**
 		 * The meta object literal for the '<em><b>Start After Creation</b></em>' operation.
@@ -9602,7 +6540,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EOperation LAYER_EXPRESSION___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY = eINSTANCE.getLayerExpression__GetViewsComputePropertyValueCommand__EList_Property();
+		EOperation LAYER_EXPRESSION___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY = eINSTANCE.getLayerExpression__GetViewsComputePropertyValueCommand__List_Property();
 
 		/**
 		 * The meta object literal for the '<em><b>Get Properties Compute Property Value Command</b></em>' operation.
@@ -9610,7 +6548,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EOperation LAYER_EXPRESSION___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST = eINSTANCE.getLayerExpression__GetPropertiesComputePropertyValueCommand__View_EList();
+		EOperation LAYER_EXPRESSION___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST = eINSTANCE.getLayerExpression__GetPropertiesComputePropertyValueCommand__View_List();
 
 		/**
 		 * The meta object literal for the '<em><b>Attach To Layers Stack</b></em>' operation.
@@ -9931,14 +6869,6 @@
 		EClass TYPE = eINSTANCE.getType();
 
 		/**
-		 * The meta object literal for the '<em><b>Metamodel</b></em>' reference feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EReference TYPE__METAMODEL = eINSTANCE.getType_Metamodel();
-
-		/**
 		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -9963,72 +6893,6 @@
 		EOperation TYPE___CREATE_INSTANCE = eINSTANCE.getType__CreateInstance();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.MetamodelImpl <em>Metamodel</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.MetamodelImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getMetamodel()
-		 * @generated
-		 */
-		EClass METAMODEL = eINSTANCE.getMetamodel();
-
-		/**
-		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute METAMODEL__NAME = eINSTANCE.getMetamodel_Name();
-
-		/**
-		 * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute METAMODEL__DESCRIPTION = eINSTANCE.getMetamodel_Description();
-
-		/**
-		 * The meta object literal for the '<em><b>Nsuri</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute METAMODEL__NSURI = eINSTANCE.getMetamodel_Nsuri();
-
-		/**
-		 * The meta object literal for the '<em><b>Plugin ID</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute METAMODEL__PLUGIN_ID = eINSTANCE.getMetamodel_PluginID();
-
-		/**
-		 * The meta object literal for the '<em><b>EPackage Instance Name</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute METAMODEL__EPACKAGE_INSTANCE_NAME = eINSTANCE.getMetamodel_EPackageInstanceName();
-
-		/**
-		 * The meta object literal for the '<em><b>Is Type Valid</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute METAMODEL__IS_TYPE_VALID = eINSTANCE.getMetamodel_IsTypeValid();
-
-		/**
-		 * The meta object literal for the '<em><b>Get EPackage</b></em>' operation.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EOperation METAMODEL___GET_EPACKAGE = eINSTANCE.getMetamodel__GetEPackage();
-
-		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TypeInstanceImpl <em>Type Instance</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -10434,7 +7298,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EOperation LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_DEFAULTPROPERTYOPERATOR = eINSTANCE.getLayerOperatorDescriptor__SetPropertyCollectionSize__int_DefaultPropertyOperator();
+		EOperation LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_PROPERTYOPERATOR = eINSTANCE.getLayerOperatorDescriptor__SetPropertyCollectionSize__int_PropertyOperator();
 
 		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyOperatorImpl <em>Property Operator</em>}' class.
@@ -10455,54 +7319,44 @@
 		EAttribute PROPERTY_OPERATOR__NAME = eINSTANCE.getPropertyOperator_Name();
 
 		/**
+		 * The meta object literal for the '<em><b>Classname</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PROPERTY_OPERATOR__CLASSNAME = eINSTANCE.getPropertyOperator_Classname();
+
+		/**
+		 * The meta object literal for the '<em><b>Operator Instance</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PROPERTY_OPERATOR__OPERATOR_INSTANCE = eINSTANCE.getPropertyOperator_OperatorInstance();
+
+		/**
+		 * The meta object literal for the '<em><b>Class Bundle ID</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute PROPERTY_OPERATOR__CLASS_BUNDLE_ID = eINSTANCE.getPropertyOperator_ClassBundleID();
+
+		/**
 		 * The meta object literal for the '<em><b>Get Compute Property Value Command</b></em>' operation.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EOperation PROPERTY_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST = eINSTANCE.getPropertyOperator__GetComputePropertyValueCommand__EList();
+		EOperation PROPERTY_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__LIST = eINSTANCE.getPropertyOperator__GetComputePropertyValueCommand__List();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AbstractLayerOperatorImpl <em>Abstract Layer Operator</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AbstractLayerOperatorImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getAbstractLayerOperator()
-		 * @generated
-		 */
-		EClass ABSTRACT_LAYER_OPERATOR = eINSTANCE.getAbstractLayerOperator();
-
-		/**
-		 * The meta object literal for the '<em><b>Layer Operator Descriptor</b></em>' reference feature.
+		 * The meta object literal for the '<em><b>Reset Operator Instance</b></em>' operation.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EReference ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR = eINSTANCE.getAbstractLayerOperator_LayerOperatorDescriptor();
-
-		/**
-		 * The meta object literal for the '<em><b>Layer Operator Descriptor Name</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME = eINSTANCE.getAbstractLayerOperator_LayerOperatorDescriptorName();
-
-		/**
-		 * The meta object literal for the '<em><b>Is Descriptor Set</b></em>' operation.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EOperation ABSTRACT_LAYER_OPERATOR___IS_DESCRIPTOR_SET = eINSTANCE.getAbstractLayerOperator__IsDescriptorSet();
-
-		/**
-		 * The meta object literal for the '<em><b>Reset Descriptor</b></em>' operation.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EOperation ABSTRACT_LAYER_OPERATOR___RESET_DESCRIPTOR = eINSTANCE.getAbstractLayerOperator__ResetDescriptor();
+		EOperation PROPERTY_OPERATOR___RESET_OPERATOR_INSTANCE = eINSTANCE.getPropertyOperator__ResetOperatorInstance();
 
 		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorImpl <em>Layer Operator</em>}' class.
@@ -10523,6 +7377,38 @@
 		EReference LAYER_OPERATOR__LAYERS = eINSTANCE.getLayerOperator_Layers();
 
 		/**
+		 * The meta object literal for the '<em><b>Layer Operator Descriptor Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME = eINSTANCE.getLayerOperator_LayerOperatorDescriptorName();
+
+		/**
+		 * The meta object literal for the '<em><b>Layer Operator Descriptor</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR = eINSTANCE.getLayerOperator_LayerOperatorDescriptor();
+
+		/**
+		 * The meta object literal for the '<em><b>Is Descriptor Set</b></em>' operation.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EOperation LAYER_OPERATOR___IS_DESCRIPTOR_SET = eINSTANCE.getLayerOperator__IsDescriptorSet();
+
+		/**
+		 * The meta object literal for the '<em><b>Reset Descriptor</b></em>' operation.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EOperation LAYER_OPERATOR___RESET_DESCRIPTOR = eINSTANCE.getLayerOperator__ResetDescriptor();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersContainer <em>Container</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -10541,16 +7427,6 @@
 		EOperation LAYERS_CONTAINER___ADD_LAYER__LAYEREXPRESSION = eINSTANCE.getLayersContainer__AddLayer__LayerExpression();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.DefaultPropertyOperatorImpl <em>Default Property Operator</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.DefaultPropertyOperatorImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getDefaultPropertyOperator()
-		 * @generated
-		 */
-		EClass DEFAULT_PROPERTY_OPERATOR = eINSTANCE.getDefaultPropertyOperator();
-
-		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AbstractLayerImpl <em>Abstract Layer</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -10685,106 +7561,70 @@
 		EAttribute FOLDER__NAME = eINSTANCE.getFolder_Name();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IntInstanceImpl <em>Int Instance</em>}' class.
+		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.MetamodelImpl <em>Metamodel</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IntInstanceImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getIntInstance()
+		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.MetamodelImpl
+		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getMetamodel()
 		 * @generated
 		 */
-		EClass INT_INSTANCE = eINSTANCE.getIntInstance();
+		EClass METAMODEL = eINSTANCE.getMetamodel();
 
 		/**
-		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EAttribute INT_INSTANCE__VALUE = eINSTANCE.getIntInstance_Value();
+		EAttribute METAMODEL__NAME = eINSTANCE.getMetamodel_Name();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.BooleanInstanceImpl <em>Boolean Instance</em>}' class.
+		 * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.BooleanInstanceImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getBooleanInstance()
 		 * @generated
 		 */
-		EClass BOOLEAN_INSTANCE = eINSTANCE.getBooleanInstance();
+		EAttribute METAMODEL__DESCRIPTION = eINSTANCE.getMetamodel_Description();
 
 		/**
-		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * The meta object literal for the '<em><b>Nsuri</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EAttribute BOOLEAN_INSTANCE__VALUE = eINSTANCE.getBooleanInstance_Value();
+		EAttribute METAMODEL__NSURI = eINSTANCE.getMetamodel_Nsuri();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringInstanceImpl <em>String Instance</em>}' class.
+		 * The meta object literal for the '<em><b>Plugin ID</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringInstanceImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getStringInstance()
 		 * @generated
 		 */
-		EClass STRING_INSTANCE = eINSTANCE.getStringInstance();
+		EAttribute METAMODEL__PLUGIN_ID = eINSTANCE.getMetamodel_PluginID();
 
 		/**
-		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * The meta object literal for the '<em><b>EPackage Instance Name</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EAttribute STRING_INSTANCE__VALUE = eINSTANCE.getStringInstance_Value();
+		EAttribute METAMODEL__EPACKAGE_INSTANCE_NAME = eINSTANCE.getMetamodel_EPackageInstanceName();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IntTypeImpl <em>Int Type</em>}' class.
+		 * The meta object literal for the '<em><b>Is Type Valid</b></em>' attribute feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IntTypeImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getIntType()
 		 * @generated
 		 */
-		EClass INT_TYPE = eINSTANCE.getIntType();
+		EAttribute METAMODEL__IS_TYPE_VALID = eINSTANCE.getMetamodel_IsTypeValid();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.BooleanTypeImpl <em>Boolean Type</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.BooleanTypeImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getBooleanType()
-		 * @generated
-		 */
-		EClass BOOLEAN_TYPE = eINSTANCE.getBooleanType();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringTypeImpl <em>String Type</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringTypeImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getStringType()
-		 * @generated
-		 */
-		EClass STRING_TYPE = eINSTANCE.getStringType();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomTypeImpl <em>Custom Type</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomTypeImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCustomType()
-		 * @generated
-		 */
-		EClass CUSTOM_TYPE = eINSTANCE.getCustomType();
-
-		/**
-		 * The meta object literal for the '<em><b>Classifier</b></em>' attribute feature.
+		 * The meta object literal for the '<em><b>Get EPackage</b></em>' operation.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EAttribute CUSTOM_TYPE__CLASSIFIER = eINSTANCE.getCustomType_Classifier();
+		EOperation METAMODEL___GET_EPACKAGE = eINSTANCE.getMetamodel__GetEPackage();
 
 		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TopLayerOperatorImpl <em>Top Layer Operator</em>}' class.
@@ -10807,16 +7647,6 @@
 		EClass STACKED_LAYER_OPERATOR = eINSTANCE.getStackedLayerOperator();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomLayerOperatorImpl <em>Custom Layer Operator</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomLayerOperatorImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCustomLayerOperator()
-		 * @generated
-		 */
-		EClass CUSTOM_LAYER_OPERATOR = eINSTANCE.getCustomLayerOperator();
-
-		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyIndexImpl <em>Property Index</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -10879,16 +7709,6 @@
 		EClass SIMPLE_LAYER_DESCRIPTOR = eINSTANCE.getSimpleLayerDescriptor();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerDescriptorImpl <em>Reg Exp Layer Descriptor</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerDescriptorImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getRegExpLayerDescriptor()
-		 * @generated
-		 */
-		EClass REG_EXP_LAYER_DESCRIPTOR = eINSTANCE.getRegExpLayerDescriptor();
-
-		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.NullInstanceImpl <em>Null Instance</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -10907,128 +7727,6 @@
 		EOperation NULL_INSTANCE___GET_INSTANCE = eINSTANCE.getNullInstance__GetInstance();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerImpl <em>Reg Exp Layer</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getRegExpLayer()
-		 * @generated
-		 */
-		EClass REG_EXP_LAYER = eINSTANCE.getRegExpLayer();
-
-		/**
-		 * The meta object literal for the '<em><b>Expr</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute REG_EXP_LAYER__EXPR = eINSTANCE.getRegExpLayer_Expr();
-
-		/**
-		 * The meta object literal for the '<em><b>Language</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute REG_EXP_LAYER__LANGUAGE = eINSTANCE.getRegExpLayer_Language();
-
-		/**
-		 * The meta object literal for the '<em><b>Is Domain Changed Event Dependant</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute REG_EXP_LAYER__IS_DOMAIN_CHANGED_EVENT_DEPENDANT = eINSTANCE.getRegExpLayer_IsDomainChangedEventDependant();
-
-		/**
-		 * The meta object literal for the '<em><b>Domain Changed Event Level</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute REG_EXP_LAYER__DOMAIN_CHANGED_EVENT_LEVEL = eINSTANCE.getRegExpLayer_DomainChangedEventLevel();
-
-		/**
-		 * The meta object literal for the '<em><b>Is Diagram Changed Event Dependant</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute REG_EXP_LAYER__IS_DIAGRAM_CHANGED_EVENT_DEPENDANT = eINSTANCE.getRegExpLayer_IsDiagramChangedEventDependant();
-
-		/**
-		 * The meta object literal for the '<em><b>Diagram Changed Event Level</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute REG_EXP_LAYER__DIAGRAM_CHANGED_EVENT_LEVEL = eINSTANCE.getRegExpLayer_DiagramChangedEventLevel();
-
-		/**
-		 * The meta object literal for the '<em><b>Expression Context Object Type</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute REG_EXP_LAYER__EXPRESSION_CONTEXT_OBJECT_TYPE = eINSTANCE.getRegExpLayer_ExpressionContextObjectType();
-
-		/**
-		 * The meta object literal for the '<em><b>Activate</b></em>' operation.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EOperation REG_EXP_LAYER___ACTIVATE__ABSTRACTLAYEROPERATOR = eINSTANCE.getRegExpLayer__Activate__AbstractLayerOperator();
-
-		/**
-		 * The meta object literal for the '<em><b>Deactivate</b></em>' operation.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EOperation REG_EXP_LAYER___DEACTIVATE__ABSTRACTLAYEROPERATOR = eINSTANCE.getRegExpLayer__Deactivate__AbstractLayerOperator();
-
-		/**
-		 * The meta object literal for the '<em><b>Is Derived View</b></em>' operation.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EOperation REG_EXP_LAYER___IS_DERIVED_VIEW__VIEW = eINSTANCE.getRegExpLayer__IsDerivedView__View();
-
-		/**
-		 * The meta object literal for the '<em><b>Attach Derived View</b></em>' operation.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EOperation REG_EXP_LAYER___ATTACH_DERIVED_VIEW__VIEW = eINSTANCE.getRegExpLayer__AttachDerivedView__View();
-
-		/**
-		 * The meta object literal for the '<em><b>Attach Derived Views</b></em>' operation.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EOperation REG_EXP_LAYER___ATTACH_DERIVED_VIEWS__ELIST = eINSTANCE.getRegExpLayer__AttachDerivedViews__EList();
-
-		/**
-		 * The meta object literal for the '<em><b>Attach Derived Views</b></em>' operation.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EOperation REG_EXP_LAYER___ATTACH_DERIVED_VIEWS = eINSTANCE.getRegExpLayer__AttachDerivedViews();
-
-		/**
-		 * The meta object literal for the '<em><b>Lookup Derived Views</b></em>' operation.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EOperation REG_EXP_LAYER___LOOKUP_DERIVED_VIEWS__ELIST = eINSTANCE.getRegExpLayer__LookupDerivedViews__EList();
-
-		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerImpl <em>Layer</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -11039,90 +7737,6 @@
 		EClass LAYER = eINSTANCE.getLayer();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.ColorImpl <em>Color</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.ColorImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getColor()
-		 * @generated
-		 */
-		EClass COLOR = eINSTANCE.getColor();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.ColorInstanceImpl <em>Color Instance</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.ColorInstanceImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getColorInstance()
-		 * @generated
-		 */
-		EClass COLOR_INSTANCE = eINSTANCE.getColorInstance();
-
-		/**
-		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute COLOR_INSTANCE__VALUE = eINSTANCE.getColorInstance_Value();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FillInstanceImpl <em>Fill Instance</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FillInstanceImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getFillInstance()
-		 * @generated
-		 */
-		EClass FILL_INSTANCE = eINSTANCE.getFillInstance();
-
-		/**
-		 * The meta object literal for the '<em><b>Transparency</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute FILL_INSTANCE__TRANSPARENCY = eINSTANCE.getFillInstance_Transparency();
-
-		/**
-		 * The meta object literal for the '<em><b>Fill Color</b></em>' containment reference feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EReference FILL_INSTANCE__FILL_COLOR = eINSTANCE.getFillInstance_FillColor();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FillImpl <em>Fill</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FillImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getFill()
-		 * @generated
-		 */
-		EClass FILL = eINSTANCE.getFill();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FillPropertySetterImpl <em>Fill Property Setter</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FillPropertySetterImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getFillPropertySetter()
-		 * @generated
-		 */
-		EClass FILL_PROPERTY_SETTER = eINSTANCE.getFillPropertySetter();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IsValidPropertySetterImpl <em>Is Valid Property Setter</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IsValidPropertySetterImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getIsValidPropertySetter()
-		 * @generated
-		 */
-		EClass IS_VALID_PROPERTY_SETTER = eINSTANCE.getIsValidPropertySetter();
-
-		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.NullPropertySetterImpl <em>Null Property Setter</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -11133,124 +7747,6 @@
 		EClass NULL_PROPERTY_SETTER = eINSTANCE.getNullPropertySetter();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LineTypeImpl <em>Line Type</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LineTypeImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLineType()
-		 * @generated
-		 */
-		EClass LINE_TYPE = eINSTANCE.getLineType();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LineInstanceImpl <em>Line Instance</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LineInstanceImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLineInstance()
-		 * @generated
-		 */
-		EClass LINE_INSTANCE = eINSTANCE.getLineInstance();
-
-		/**
-		 * The meta object literal for the '<em><b>Line Color</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute LINE_INSTANCE__LINE_COLOR = eINSTANCE.getLineInstance_LineColor();
-
-		/**
-		 * The meta object literal for the '<em><b>Line With</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute LINE_INSTANCE__LINE_WITH = eINSTANCE.getLineInstance_LineWith();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LinePropertySetterImpl <em>Line Property Setter</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LinePropertySetterImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getLinePropertySetter()
-		 * @generated
-		 */
-		EClass LINE_PROPERTY_SETTER = eINSTANCE.getLinePropertySetter();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontPropertySetterImpl <em>Font Property Setter</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontPropertySetterImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getFontPropertySetter()
-		 * @generated
-		 */
-		EClass FONT_PROPERTY_SETTER = eINSTANCE.getFontPropertySetter();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontInstanceImpl <em>Font Instance</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontInstanceImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getFontInstance()
-		 * @generated
-		 */
-		EClass FONT_INSTANCE = eINSTANCE.getFontInstance();
-
-		/**
-		 * The meta object literal for the '<em><b>Font Color</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute FONT_INSTANCE__FONT_COLOR = eINSTANCE.getFontInstance_FontColor();
-
-		/**
-		 * The meta object literal for the '<em><b>Font Name</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute FONT_INSTANCE__FONT_NAME = eINSTANCE.getFontInstance_FontName();
-
-		/**
-		 * The meta object literal for the '<em><b>Font Heigh</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute FONT_INSTANCE__FONT_HEIGH = eINSTANCE.getFontInstance_FontHeigh();
-
-		/**
-		 * The meta object literal for the '<em><b>Bold</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute FONT_INSTANCE__BOLD = eINSTANCE.getFontInstance_Bold();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontTypeImpl <em>Font Type</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontTypeImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getFontType()
-		 * @generated
-		 */
-		EClass FONT_TYPE = eINSTANCE.getFontType();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IsVisiblePropertySetterImpl <em>Is Visible Property Setter</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IsVisiblePropertySetterImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getIsVisiblePropertySetter()
-		 * @generated
-		 */
-		EClass IS_VISIBLE_PROPERTY_SETTER = eINSTANCE.getIsVisiblePropertySetter();
-
-		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TopLayerOperatorDescriptorImpl <em>Top Layer Operator Descriptor</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -11271,78 +7767,6 @@
 		EClass STACKED_LAYER_OPERATOR_DESCRIPTOR = eINSTANCE.getStackedLayerOperatorDescriptor();
 
 		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomPropertyOperatorImpl <em>Custom Property Operator</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomPropertyOperatorImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCustomPropertyOperator()
-		 * @generated
-		 */
-		EClass CUSTOM_PROPERTY_OPERATOR = eINSTANCE.getCustomPropertyOperator();
-
-		/**
-		 * The meta object literal for the '<em><b>Classname</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute CUSTOM_PROPERTY_OPERATOR__CLASSNAME = eINSTANCE.getCustomPropertyOperator_Classname();
-
-		/**
-		 * The meta object literal for the '<em><b>Operator Instance</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute CUSTOM_PROPERTY_OPERATOR__OPERATOR_INSTANCE = eINSTANCE.getCustomPropertyOperator_OperatorInstance();
-
-		/**
-		 * The meta object literal for the '<em><b>Class Bundle ID</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute CUSTOM_PROPERTY_OPERATOR__CLASS_BUNDLE_ID = eINSTANCE.getCustomPropertyOperator_ClassBundleID();
-
-		/**
-		 * The meta object literal for the '<em><b>Reset Operator Instance</b></em>' operation.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EOperation CUSTOM_PROPERTY_OPERATOR___RESET_OPERATOR_INSTANCE = eINSTANCE.getCustomPropertyOperator__ResetOperatorInstance();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AndStackedLayerOperatorDescriptorImpl <em>And Stacked Layer Operator Descriptor</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AndStackedLayerOperatorDescriptorImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getAndStackedLayerOperatorDescriptor()
-		 * @generated
-		 */
-		EClass AND_STACKED_LAYER_OPERATOR_DESCRIPTOR = eINSTANCE.getAndStackedLayerOperatorDescriptor();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.OrStackedLayerOperatorDescriptorImpl <em>Or Stacked Layer Operator Descriptor</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.OrStackedLayerOperatorDescriptorImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getOrStackedLayerOperatorDescriptor()
-		 * @generated
-		 */
-		EClass OR_STACKED_LAYER_OPERATOR_DESCRIPTOR = eINSTANCE.getOrStackedLayerOperatorDescriptor();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IsAbstractUmlSetterImpl <em>Is Abstract Uml Setter</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IsAbstractUmlSetterImpl
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getIsAbstractUmlSetter()
-		 * @generated
-		 */
-		EClass IS_ABSTRACT_UML_SETTER = eINSTANCE.getIsAbstractUmlSetter();
-
-		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AllViewsDerivedLayerImpl <em>All Views Derived Layer</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -11475,25 +7899,6 @@
 		EDataType STRING = eINSTANCE.getString();
 
 		/**
-		 * The meta object literal for the '<em>boolean</em>' data type.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getboolean()
-		 * @generated
-		 */
-		EDataType BOOLEAN = eINSTANCE.getboolean();
-
-		/**
-		 * The meta object literal for the '<em>EPackage</em>' data type.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.emf.ecore.EPackage
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getEPackage()
-		 * @generated
-		 */
-		EDataType EPACKAGE = eINSTANCE.getEPackage();
-
-		/**
 		 * The meta object literal for the '<em>Exception</em>' data type.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -11543,6 +7948,25 @@
 		EDataType COMPUTE_PROPERTY_VALUE_COMMAND = eINSTANCE.getComputePropertyValueCommand();
 
 		/**
+		 * The meta object literal for the '<em>boolean</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getboolean()
+		 * @generated
+		 */
+		EDataType BOOLEAN = eINSTANCE.getboolean();
+
+		/**
+		 * The meta object literal for the '<em>EPackage</em>' data type.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.emf.ecore.EPackage
+		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getEPackage()
+		 * @generated
+		 */
+		EDataType EPACKAGE = eINSTANCE.getEPackage();
+
+		/**
 		 * The meta object literal for the '<em>Object</em>' data type.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -11552,16 +7976,6 @@
 		 */
 		EDataType OBJECT = eINSTANCE.getObject();
 
-		/**
-		 * The meta object literal for the '<em>Custom Property Opertor Instance</em>' data type.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersPackageImpl#getCustomPropertyOpertorInstance()
-		 * @generated
-		 */
-		EDataType CUSTOM_PROPERTY_OPERTOR_INSTANCE = eINSTANCE.getCustomPropertyOpertorInstance();
-
 	}
 
 } // LayersPackage
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersStack.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersStack.java
index e36344a..dd38b4f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersStack.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersStack.java
@@ -15,8 +15,6 @@
 
 import java.util.List;
 
-import org.eclipse.emf.common.util.EList;
-
 import org.eclipse.gmf.runtime.notation.Diagram;
 import org.eclipse.gmf.runtime.notation.View;
 
@@ -193,7 +191,7 @@
 	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ComputePropertyValueCommand" exceptions="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersException" viewRequired="true" viewOrdered="false" propertyRequired="true" propertyMany="true"
 	 * @generated
 	 */
-	EList<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, EList<Property> property) throws LayersException;
+	List<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, List<Property> property) throws LayersException;
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -201,7 +199,7 @@
 	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ComputePropertyValueCommand" exceptions="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersException" viewMany="true" propertyRequired="true" propertyOrdered="false"
 	 * @generated
 	 */
-	EList<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(EList<View> view, Property property) throws LayersException;
+	List<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(List<View> view, Property property) throws LayersException;
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -280,25 +278,4 @@
 	 */
 	void exitAttachedState();
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @throws LayersException
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ComputePropertyValueCommand" viewRequired="true" viewOrdered="false" propertyRequired="true" propertyMany="true"
-	 * @generated NOT
-	 */
-	EList<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, List<Property> property) throws LayersException;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @throws LayersException
-	 *             If something wrong happen during computation.
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ComputePropertyValueCommand" viewMany="true" propertyRequired="true" propertyOrdered="false"
-	 * @generated NOT
-	 */
-	EList<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(List<View> view, Property property) throws LayersException;
-
 } // LayersStack
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersStackApplication.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersStackApplication.java
index a8c3c3f..69306ef 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersStackApplication.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LayersStackApplication.java
@@ -13,7 +13,7 @@
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
 
-import org.eclipse.emf.common.util.EList;
+import java.util.List;
 
 import org.eclipse.gmf.runtime.notation.Diagram;
 
@@ -56,7 +56,7 @@
 	 * @model containment="true" ordered="false"
 	 * @generated
 	 */
-	EList<LayersStack> getLayersStacks();
+	List<LayersStack> getLayersStacks();
 
 	/**
 	 * Returns the value of the '<em><b>Layer Stack Registry</b></em>' containment reference.
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LineInstance.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LineInstance.java
deleted file mode 100755
index ac0ffba..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LineInstance.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Line Instance</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance#getLineColor <em>Line Color</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance#getLineWith <em>Line With</em>}</li>
- * </ul>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getLineInstance()
- * @model
- * @generated
- */
-public interface LineInstance extends TypeInstance {
-	/**
-	 * Returns the value of the '<em><b>Line Color</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Line Color</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Line Color</em>' attribute.
-	 * @see #setLineColor(int)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getLineInstance_LineColor()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.int" required="true" ordered="false"
-	 * @generated
-	 */
-	int getLineColor();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance#getLineColor <em>Line Color</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Line Color</em>' attribute.
-	 * @see #getLineColor()
-	 * @generated
-	 */
-	void setLineColor(int value);
-
-	/**
-	 * Returns the value of the '<em><b>Line With</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Line With</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Line With</em>' attribute.
-	 * @see #setLineWith(int)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getLineInstance_LineWith()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.int" required="true" ordered="false"
-	 * @generated
-	 */
-	int getLineWith();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance#getLineWith <em>Line With</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Line With</em>' attribute.
-	 * @see #getLineWith()
-	 * @generated
-	 */
-	void setLineWith(int value);
-
-} // LineInstance
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LinePropertySetter.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LinePropertySetter.java
deleted file mode 100755
index f3a9cd8..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LinePropertySetter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Line Property Setter</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getLinePropertySetter()
- * @model
- * @generated
- */
-public interface LinePropertySetter extends PropertySetter {
-} // LinePropertySetter
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LineType.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LineType.java
deleted file mode 100755
index 23c294b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/LineType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Line Type</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getLineType()
- * @model
- * @generated
- */
-public interface LineType extends Type {
-} // LineType
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/NullInstance.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/NullInstance.java
index 01940b6..7c48064 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/NullInstance.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/NullInstance.java
@@ -26,11 +26,10 @@
  */
 public interface NullInstance extends TypeInstance {
 
-	public static NullInstance NULLINSTANCE = LayersFactory.eINSTANCE.createNullInstance();
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @model kind="operation" required="true" ordered="false"
 	 * @generated
 	 */
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/OrStackedLayerOperatorDescriptor.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/OrStackedLayerOperatorDescriptor.java
deleted file mode 100755
index 1653d86..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/OrStackedLayerOperatorDescriptor.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Or Stacked Layer Operator Descriptor</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getOrStackedLayerOperatorDescriptor()
- * @model
- * @generated
- */
-public interface OrStackedLayerOperatorDescriptor extends StackedLayerOperatorDescriptor {
-} // OrStackedLayerOperatorDescriptor
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Package.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Package.java
deleted file mode 100755
index 760b945..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Package.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-import org.eclipse.emf.common.util.EList;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Package</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Package#getElements <em>Elements</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getPackage()
- * @model
- * @generated
- */
-public interface Package extends PackageableElement {
-	/**
-	 * Returns the value of the '<em><b>Elements</b></em>' containment reference list.
-	 * The list contents are of type {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PackageableElement}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Elements</em>' containment reference list isn't clear, there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 *
-	 * @return the value of the '<em>Elements</em>' containment reference list.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getPackage_Elements()
-	 * @model containment="true" ordered="false"
-	 * @generated
-	 */
-	EList<PackageableElement> getElements();
-
-} // Package
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PackageableElement.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PackageableElement.java
deleted file mode 100755
index 1c960ee..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PackageableElement.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Packageable Element</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getPackageableElement()
- * @model
- * @generated
- */
-public interface PackageableElement extends EObject {
-} // PackageableElement
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertyDescriptor.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertyDescriptor.java
deleted file mode 100755
index 5c0dc2e..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertyDescriptor.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Descriptor</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getPropertyDescriptor()
- * @model
- * @generated
- */
-public interface PropertyDescriptor extends EObject {
-} // PropertyDescriptor
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertyOperator.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertyOperator.java
index 5471a84..08eac24 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertyOperator.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertyOperator.java
@@ -13,7 +13,7 @@
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
 
-import org.eclipse.emf.common.util.EList;
+import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
 
@@ -31,6 +31,9 @@
  * </p>
  * <ul>
  *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getClassname <em>Classname</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getOperatorInstance <em>Operator Instance</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getClassBundleID <em>Class Bundle ID</em>}</li>
  * </ul>
  *
  * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getPropertyOperator()
@@ -65,11 +68,97 @@
 	void setName(String value);
 
 	/**
+	 * Returns the value of the '<em><b>Classname</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Classname</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Classname</em>' attribute.
+	 * @see #setClassname(String)
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getPropertyOperator_Classname()
+	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
+	 * @generated
+	 */
+	String getClassname();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getClassname <em>Classname</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Classname</em>' attribute.
+	 * @see #getClassname()
+	 * @generated
+	 */
+	void setClassname(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Operator Instance</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Operator Instance</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Operator Instance</em>' reference.
+	 * @see #setOperatorInstance(PropertyOperator)
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getPropertyOperator_OperatorInstance()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	PropertyOperator getOperatorInstance();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getOperatorInstance <em>Operator Instance</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Operator Instance</em>' reference.
+	 * @see #getOperatorInstance()
+	 * @generated
+	 */
+	void setOperatorInstance(PropertyOperator value);
+
+	/**
+	 * Returns the value of the '<em><b>Class Bundle ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Class Bundle ID</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Class Bundle ID</em>' attribute.
+	 * @see #setClassBundleID(String)
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getPropertyOperator_ClassBundleID()
+	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
+	 * @generated
+	 */
+	String getClassBundleID();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator#getClassBundleID <em>Class Bundle ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Class Bundle ID</em>' attribute.
+	 * @see #getClassBundleID()
+	 * @generated
+	 */
+	void setClassBundleID(String value);
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ComputePropertyValueCommand" required="true" ordered="false" exceptions="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersException" propertyDataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ComputePropertyValueCommand" propertyMany="true"
 	 * @generated
 	 */
-	ComputePropertyValueCommand getComputePropertyValueCommand(EList<ComputePropertyValueCommand> property) throws LayersException;
+	ComputePropertyValueCommand getComputePropertyValueCommand(List<ComputePropertyValueCommand> property) throws LayersException;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model exceptions="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersException"
+	 * @generated
+	 */
+	void resetOperatorInstance() throws LayersException;
 
 } // PropertyOperator
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertyRegistry.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertyRegistry.java
index e907a91..9175b29 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertyRegistry.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertyRegistry.java
@@ -13,7 +13,7 @@
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
 
-import org.eclipse.emf.common.util.EList;
+import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
 
@@ -52,7 +52,7 @@
 	 * @model containment="true"
 	 * @generated
 	 */
-	EList<Property> getProperties();
+	List<Property> getProperties();
 
 	/**
 	 * Returns the value of the '<em><b>Type Registry</b></em>' containment reference.
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertySetter.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertySetter.java
index f30b5b9..558f035 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertySetter.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertySetter.java
@@ -26,8 +26,8 @@
  * The following features are supported:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter#getProperty <em>Property</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter#getPropertyName <em>Property Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter#getProperty <em>Property</em>}</li>
+ * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter#getPropertyName <em>Property Name</em>}</li>
  * </ul>
  *
  * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getPropertySetter()
@@ -36,9 +36,6 @@
  */
 public interface PropertySetter extends EObject {
 
-
-	public static PropertySetter NULL_PROPERTY_SETTER = LayersFactory.eINSTANCE.createNullPropertySetter();
-
 	/**
 	 * Returns the value of the '<em><b>Property</b></em>' reference.
 	 * <!-- begin-user-doc -->
@@ -47,6 +44,7 @@
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
+	 * 
 	 * @return the value of the '<em>Property</em>' reference.
 	 * @see #setProperty(Property)
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getPropertySetter_Property()
@@ -59,7 +57,9 @@
 	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter#getProperty <em>Property</em>}' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Property</em>' reference.
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Property</em>' reference.
 	 * @see #getProperty()
 	 * @generated
 	 */
@@ -73,6 +73,7 @@
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
+	 * 
 	 * @return the value of the '<em>Property Name</em>' attribute.
 	 * @see #setPropertyName(String)
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getPropertySetter_PropertyName()
@@ -85,7 +86,9 @@
 	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter#getPropertyName <em>Property Name</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Property Name</em>' attribute.
+	 * 
+	 * @param value
+	 *            the new value of the '<em>Property Name</em>' attribute.
 	 * @see #getPropertyName()
 	 * @generated
 	 */
@@ -94,6 +97,7 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @model viewRequired="true" viewOrdered="false" valueRequired="true" valueOrdered="false"
 	 * @generated
 	 */
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertySetterRegistry.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertySetterRegistry.java
index bc6925b..b5f0815 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertySetterRegistry.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertySetterRegistry.java
@@ -13,8 +13,8 @@
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
 
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.EMap;
+import java.util.List;
+import java.util.Map;
 
 import org.eclipse.emf.ecore.EObject;
 
@@ -53,7 +53,7 @@
 	 * @model
 	 * @generated
 	 */
-	EList<PropertySetter> getPropertySetters();
+	List<PropertySetter> getPropertySetters();
 
 	/**
 	 * Returns the value of the '<em><b>Setter Map</b></em>' map.
@@ -70,7 +70,7 @@
 	 * @model mapType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringToPropertySetter&lt;org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter&gt;" ordered="false"
 	 * @generated
 	 */
-	EMap<String, PropertySetter> getSetterMap();
+	Map<String, PropertySetter> getSetterMap();
 
 	/**
 	 * Returns the value of the '<em><b>Application</b></em>' container reference.
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertyValue.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertyValue.java
deleted file mode 100755
index 94126a1..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/PropertyValue.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Value</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getPropertyValue()
- * @model abstract="true"
- * @generated
- */
-public interface PropertyValue extends EObject {
-} // PropertyValue
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/RegExpLayer.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/RegExpLayer.java
deleted file mode 100755
index 51aa6a9..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/RegExpLayer.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.gmf.runtime.notation.View;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Reg Exp Layer</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getExpr <em>Expr</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getLanguage <em>Language</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#isDomainChangedEventDependant <em>Is Domain Changed Event Dependant</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getDomainChangedEventLevel <em>Domain Changed Event Level</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#isDiagramChangedEventDependant <em>Is Diagram Changed Event Dependant</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getDiagramChangedEventLevel <em>Diagram Changed Event Level</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getExpressionContextObjectType <em>Expression Context Object Type</em>}</li>
- * </ul>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getRegExpLayer()
- * @model
- * @generated
- */
-public interface RegExpLayer extends AbstractLayer {
-	/**
-	 * Returns the value of the '<em><b>Expr</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Expr</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Expr</em>' attribute.
-	 * @see #setExpr(String)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getRegExpLayer_Expr()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
-	 * @generated
-	 */
-	String getExpr();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getExpr <em>Expr</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Expr</em>' attribute.
-	 * @see #getExpr()
-	 * @generated
-	 */
-	void setExpr(String value);
-
-	/**
-	 * Returns the value of the '<em><b>Language</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Language</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Language</em>' attribute.
-	 * @see #setLanguage(String)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getRegExpLayer_Language()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
-	 * @generated
-	 */
-	String getLanguage();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getLanguage <em>Language</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Language</em>' attribute.
-	 * @see #getLanguage()
-	 * @generated
-	 */
-	void setLanguage(String value);
-
-	/**
-	 * Returns the value of the '<em><b>Is Domain Changed Event Dependant</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Is Domain Changed Event Dependant</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Is Domain Changed Event Dependant</em>' attribute.
-	 * @see #setIsDomainChangedEventDependant(boolean)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getRegExpLayer_IsDomainChangedEventDependant()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.boolean" required="true" ordered="false"
-	 * @generated
-	 */
-	boolean isDomainChangedEventDependant();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#isDomainChangedEventDependant <em>Is Domain Changed Event Dependant</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Is Domain Changed Event Dependant</em>' attribute.
-	 * @see #isDomainChangedEventDependant()
-	 * @generated
-	 */
-	void setIsDomainChangedEventDependant(boolean value);
-
-	/**
-	 * Returns the value of the '<em><b>Domain Changed Event Level</b></em>' attribute.
-	 * The literals are from the enumeration {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.EventLevel}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Domain Changed Event Level</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Domain Changed Event Level</em>' attribute.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.EventLevel
-	 * @see #setDomainChangedEventLevel(EventLevel)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getRegExpLayer_DomainChangedEventLevel()
-	 * @model required="true" ordered="false"
-	 * @generated
-	 */
-	EventLevel getDomainChangedEventLevel();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getDomainChangedEventLevel <em>Domain Changed Event Level</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Domain Changed Event Level</em>' attribute.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.EventLevel
-	 * @see #getDomainChangedEventLevel()
-	 * @generated
-	 */
-	void setDomainChangedEventLevel(EventLevel value);
-
-	/**
-	 * Returns the value of the '<em><b>Is Diagram Changed Event Dependant</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Is Diagram Changed Event Dependant</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Is Diagram Changed Event Dependant</em>' attribute.
-	 * @see #setIsDiagramChangedEventDependant(boolean)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getRegExpLayer_IsDiagramChangedEventDependant()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.boolean" required="true" ordered="false"
-	 * @generated
-	 */
-	boolean isDiagramChangedEventDependant();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#isDiagramChangedEventDependant <em>Is Diagram Changed Event Dependant</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Is Diagram Changed Event Dependant</em>' attribute.
-	 * @see #isDiagramChangedEventDependant()
-	 * @generated
-	 */
-	void setIsDiagramChangedEventDependant(boolean value);
-
-	/**
-	 * Returns the value of the '<em><b>Diagram Changed Event Level</b></em>' attribute.
-	 * The literals are from the enumeration {@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.EventLevel}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Diagram Changed Event Level</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Diagram Changed Event Level</em>' attribute.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.EventLevel
-	 * @see #setDiagramChangedEventLevel(EventLevel)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getRegExpLayer_DiagramChangedEventLevel()
-	 * @model required="true" ordered="false"
-	 * @generated
-	 */
-	EventLevel getDiagramChangedEventLevel();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getDiagramChangedEventLevel <em>Diagram Changed Event Level</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Diagram Changed Event Level</em>' attribute.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.EventLevel
-	 * @see #getDiagramChangedEventLevel()
-	 * @generated
-	 */
-	void setDiagramChangedEventLevel(EventLevel value);
-
-	/**
-	 * Returns the value of the '<em><b>Expression Context Object Type</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Expression Context Object Type</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Expression Context Object Type</em>' attribute.
-	 * @see #setExpressionContextObjectType(String)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getRegExpLayer_ExpressionContextObjectType()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
-	 * @generated
-	 */
-	String getExpressionContextObjectType();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer#getExpressionContextObjectType <em>Expression Context Object Type</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Expression Context Object Type</em>' attribute.
-	 * @see #getExpressionContextObjectType()
-	 * @generated
-	 */
-	void setExpressionContextObjectType(String value);
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @model newParentLayerRequired="true" newParentLayerOrdered="false"
-	 * @generated
-	 */
-	void activate(AbstractLayerOperator newParentLayer);
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @model oldParentLayerRequired="true" oldParentLayerOrdered="false"
-	 * @generated
-	 */
-	void deactivate(AbstractLayerOperator oldParentLayer);
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.boolean" required="true" ordered="false" exceptions="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersException" viewRequired="true" viewOrdered="false"
-	 * @generated
-	 */
-	boolean isDerivedView(View view) throws LayersException;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @model exceptions="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersException" viewRequired="true" viewOrdered="false"
-	 * @generated
-	 */
-	void attachDerivedView(View view) throws LayersException;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @model exceptions="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersException" viewsMany="true" viewsOrdered="false"
-	 * @generated
-	 */
-	void attachDerivedViews(EList<View> views) throws LayersException;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @model exceptions="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersException"
-	 * @generated
-	 */
-	void attachDerivedViews() throws LayersException;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @model ordered="false" exceptions="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersException" viewsMany="true" viewsOrdered="false"
-	 * @generated
-	 */
-	EList<View> lookupDerivedViews(EList<View> views) throws LayersException;
-
-} // RegExpLayer
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/RegExpLayerDescriptor.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/RegExpLayerDescriptor.java
deleted file mode 100755
index c85188d..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/RegExpLayerDescriptor.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Reg Exp Layer Descriptor</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getRegExpLayerDescriptor()
- * @model
- * @generated
- */
-public interface RegExpLayerDescriptor extends LayerDescriptor {
-} // RegExpLayerDescriptor
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StackedLayerOperator.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StackedLayerOperator.java
index bf9fbd7..6fccca3 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StackedLayerOperator.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StackedLayerOperator.java
@@ -24,5 +24,5 @@
  * @model
  * @generated
  */
-public interface StackedLayerOperator extends AbstractLayerOperator {
+public interface StackedLayerOperator extends LayerOperator {
 } // StackedLayerOperator
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringInstance.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringInstance.java
deleted file mode 100755
index 392197b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringInstance.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>String Instance</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance#getValue <em>Value</em>}</li>
- * </ul>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getStringInstance()
- * @model
- * @generated
- */
-public interface StringInstance extends TypeInstance {
-	/**
-	 * Returns the value of the '<em><b>Value</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Value</em>' attribute.
-	 * @see #setValue(String)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getStringInstance_Value()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
-	 * @generated
-	 */
-	String getValue();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance#getValue <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Value</em>' attribute.
-	 * @see #getValue()
-	 * @generated
-	 */
-	void setValue(String value);
-
-} // StringInstance
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringPropertyValue.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringPropertyValue.java
deleted file mode 100755
index 0a95f7b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringPropertyValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>String Property Value</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringPropertyValue#getValue <em>Value</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getStringPropertyValue()
- * @model
- * @generated
- */
-public interface StringPropertyValue extends TypeInstance {
-	/**
-	 * Returns the value of the '<em><b>Value</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Value</em>' attribute isn't clear, there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 *
-	 * @return the value of the '<em>Value</em>' attribute.
-	 * @see #setValue(String)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getStringPropertyValue_Value()
-	 * @model unique="false" dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
-	 * @generated
-	 */
-	String getValue();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringPropertyValue#getValue <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @param value
-	 *            the new value of the '<em>Value</em>' attribute.
-	 * @see #getValue()
-	 * @generated
-	 */
-	void setValue(String value);
-
-} // StringPropertyValue
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringToTypeInstanceMap.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringToTypeInstanceMap.java
deleted file mode 100755
index 1651a5a..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringToTypeInstanceMap.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>String To Type Instance Map</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringToTypeInstanceMap#getKey <em>Key</em>}</li>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringToTypeInstanceMap#getValue <em>Value</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getStringToTypeInstanceMap()
- * @model
- * @generated
- */
-public interface StringToTypeInstanceMap extends EObject {
-	/**
-	 * Returns the value of the '<em><b>Key</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Key</em>' attribute isn't clear, there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 *
-	 * @return the value of the '<em>Key</em>' attribute.
-	 * @see #setKey(String)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getStringToTypeInstanceMap_Key()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
-	 * @generated
-	 */
-	String getKey();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringToTypeInstanceMap#getKey <em>Key</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @param value
-	 *            the new value of the '<em>Key</em>' attribute.
-	 * @see #getKey()
-	 * @generated
-	 */
-	void setKey(String value);
-
-	/**
-	 * Returns the value of the '<em><b>Value</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Value</em>' reference isn't clear, there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 *
-	 * @return the value of the '<em>Value</em>' reference.
-	 * @see #setValue(TypeInstance)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getStringToTypeInstanceMap_Value()
-	 * @model required="true" ordered="false"
-	 * @generated
-	 */
-	TypeInstance getValue();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringToTypeInstanceMap#getValue <em>Value</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @param value
-	 *            the new value of the '<em>Value</em>' reference.
-	 * @see #getValue()
-	 * @generated
-	 */
-	void setValue(TypeInstance value);
-
-} // StringToTypeInstanceMap
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringType.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringType.java
deleted file mode 100755
index e29e435..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2013, 2017 CEA LIST & LIFL 
- * 
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *   Quentin Le Menez quentin.lemenez@cea.fr
- * 
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>String Type</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getStringType()
- * @model
- * @generated
- */
-public interface StringType extends Type {
-} // StringType
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringValue.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringValue.java
deleted file mode 100755
index 65bbcf3..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/StringValue.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>String Value</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringValue#getValue <em>Value</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getStringValue()
- * @model
- * @generated
- */
-public interface StringValue extends TypeInstance {
-	/**
-	 * Returns the value of the '<em><b>Value</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Value</em>' attribute isn't clear, there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 *
-	 * @return the value of the '<em>Value</em>' attribute.
-	 * @see #setValue(String)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getStringValue_Value()
-	 * @model dataType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String" required="true" ordered="false"
-	 * @generated
-	 */
-	String getValue();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringValue#getValue <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @param value
-	 *            the new value of the '<em>Value</em>' attribute.
-	 * @see #getValue()
-	 * @generated
-	 */
-	void setValue(String value);
-
-} // StringValue
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/TopLayerOperator.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/TopLayerOperator.java
index 3bd7a67..7464f09 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/TopLayerOperator.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/TopLayerOperator.java
@@ -24,5 +24,5 @@
  * @model
  * @generated
  */
-public interface TopLayerOperator extends AbstractLayerOperator {
+public interface TopLayerOperator extends LayerOperator {
 } // TopLayerOperator
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Type.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Type.java
index 7ccdc71..3321be8 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Type.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/Type.java
@@ -23,7 +23,6 @@
  * The following features are supported:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type#getMetamodel <em>Metamodel</em>}</li>
  *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type#getDescription <em>Description</em>}</li>
  * </ul>
@@ -34,32 +33,6 @@
  */
 public interface Type extends FolderElement {
 	/**
-	 * Returns the value of the '<em><b>Metamodel</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Metamodel</em>' reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Metamodel</em>' reference.
-	 * @see #setMetamodel(Metamodel)
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#getType_Metamodel()
-	 * @model required="true" ordered="false"
-	 * @generated
-	 */
-	Metamodel getMetamodel();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type#getMetamodel <em>Metamodel</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Metamodel</em>' reference.
-	 * @see #getMetamodel()
-	 * @generated
-	 */
-	void setMetamodel(Metamodel value);
-
-	/**
 	 * Returns the value of the '<em><b>Name</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <p>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/TypeRegistry.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/TypeRegistry.java
index 457fbb8..7a180f5 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/TypeRegistry.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/TypeRegistry.java
@@ -13,7 +13,7 @@
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers;
 
-import org.eclipse.emf.common.util.EMap;
+import java.util.Map;
 
 import org.eclipse.emf.ecore.EObject;
 
@@ -49,6 +49,6 @@
 	 * @model mapType="org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringToTypeMap&lt;org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.String, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type&gt;" ordered="false"
 	 * @generated
 	 */
-	EMap<String, Type> getTypes();
+	Map<String, Type> getTypes();
 
 } // TypeRegistry
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/AbstractLayerImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/AbstractLayerImpl.java
index 07fce66..ec68152 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/AbstractLayerImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/AbstractLayerImpl.java
@@ -1,22 +1,25 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import static org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.Activator.log;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
 
 import org.eclipse.emf.common.notify.Adapter;
@@ -26,13 +29,17 @@
 import org.eclipse.emf.common.util.BasicEList;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.EMap;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.emf.ecore.util.EObjectResolvingEList;
 import org.eclipse.emf.ecore.util.EcoreEMap;
 import org.eclipse.emf.ecore.util.InternalEList;
+
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.BadStateException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
@@ -40,6 +47,7 @@
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayer;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptor;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication;
@@ -128,6 +136,8 @@
 	/**
 	 * Start the behaviors associated to this layer.
 	 * This method is called by one of the methods: {@link #startAfterReloading()} or {@link #attachToLayersStack(LayersStack)}.
+	 * 
+	 * @generated NOT
 	 */
 	@Override
 	protected void startBehaviors() {
@@ -152,8 +162,7 @@
 	 * @generated NOT
 	 */
 	@Override
-	@SuppressWarnings("serial")
-	public EList<TypeInstance> getPropertyValues() {
+	public List<TypeInstance> getPropertyValues() {
 		if (propertyValues == null) {
 			propertyValues = new EObjectResolvingEList<TypeInstance>(TypeInstance.class, this, LayersPackage.ABSTRACT_LAYER__PROPERTY_VALUES) {
 
@@ -174,11 +183,11 @@
 	 * @generated
 	 */
 	@Override
-	public EMap<String, TypeInstance> getPropertyValueMap() {
+	public Map<String, TypeInstance> getPropertyValueMap() {
 		if (propertyValueMap == null) {
 			propertyValueMap = new EcoreEMap<String, TypeInstance>(LayersPackage.Literals.STRING_TO_TYPE_INSTANCE_MAP, StringToTypeInstanceMapImpl.class, this, LayersPackage.ABSTRACT_LAYER__PROPERTY_VALUE_MAP);
 		}
-		return propertyValueMap;
+		return propertyValueMap.map();
 	}
 
 	/**
@@ -231,7 +240,7 @@
 	 * @generated
 	 */
 	@Override
-	public EList<View> getViews() {
+	public List<View> getViews() {
 		if (views == null) {
 			views = new EObjectResolvingEList<View>(View.class, this, LayersPackage.ABSTRACT_LAYER__VIEWS);
 		}
@@ -245,7 +254,7 @@
 	 * @generated NOT
 	 */
 	@Override
-	public EList<Property> getAttachedProperties() {
+	public List<Property> getAttachedProperties() {
 
 		// Silly implementation:
 		// walk existing instance keys, and get there descriptor
@@ -253,9 +262,9 @@
 		// TODO: improve this method: have a list updated when an instance is
 		// added or removed.
 
-		EList<Property> res = new BasicEList<Property>();
+		List<Property> res = new BasicEList<Property>();
 
-		for (Entry<String, TypeInstance> entry : getPropertyValueMap()) {
+		for (Entry<String, TypeInstance> entry : getPropertyValueMap().entrySet()) {
 			String propertyName = entry.getKey();
 
 			try {
@@ -345,7 +354,7 @@
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
 		case LayersPackage.ABSTRACT_LAYER__PROPERTY_VALUE_MAP:
-			return ((InternalEList<?>) getPropertyValueMap()).basicRemove(otherEnd, msgs);
+			return ((InternalEList<?>) ((EMap.InternalMapView<String, TypeInstance>) getPropertyValueMap()).eMap()).basicRemove(otherEnd, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -363,9 +372,9 @@
 			return getPropertyValues();
 		case LayersPackage.ABSTRACT_LAYER__PROPERTY_VALUE_MAP:
 			if (coreType)
-				return getPropertyValueMap();
+				return ((EMap.InternalMapView<String, TypeInstance>) getPropertyValueMap()).eMap();
 			else
-				return getPropertyValueMap().map();
+				return getPropertyValueMap();
 		case LayersPackage.ABSTRACT_LAYER__LAYER_DESCRIPTOR:
 			if (resolve)
 				return getLayerDescriptor();
@@ -393,7 +402,7 @@
 			getPropertyValues().addAll((Collection<? extends TypeInstance>) newValue);
 			return;
 		case LayersPackage.ABSTRACT_LAYER__PROPERTY_VALUE_MAP:
-			((EStructuralFeature.Setting) getPropertyValueMap()).set(newValue);
+			((EStructuralFeature.Setting) ((EMap.InternalMapView<String, TypeInstance>) getPropertyValueMap()).eMap()).set(newValue);
 			return;
 		case LayersPackage.ABSTRACT_LAYER__LAYER_DESCRIPTOR:
 			setLayerDescriptor((LayerDescriptor) newValue);
@@ -502,6 +511,7 @@
 	 * Synchronize the values with instances found in {@link #propertyValueMap}.
 	 *
 	 * @throws BadStateException
+	 * @generated NOT
 	 */
 	protected void resetAllPropertyValuesFromRegistry() throws BadStateException {
 
@@ -534,7 +544,7 @@
 			// That the list will have the correct size.
 			TypeInstance instance = getPropertyValueMap().get(propertyName);
 			if (instance == null) {
-				instance = NullInstance.NULLINSTANCE;
+				instance = LayersFactory.eINSTANCE.createNullInstance();
 			}
 			getPropertyValues().add(instance);
 		}
@@ -546,6 +556,8 @@
 	 * @param propertyName
 	 * @param value
 	 * @throws NotFoundException
+	 * 
+	 * @generated NOT
 	 */
 	protected void synchronizePropertyValue(String propertyName, TypeInstance value) throws BadStateException, NotFoundException {
 
@@ -567,7 +579,7 @@
 	/**
 	 * This class listen to #propertyValueMap, and synchronize propertyValues accordingly.
 	 *
-	 *
+	 * @generated NOT
 	 */
 	public class PropertyValuesSynchronizer extends AdapterImpl {
 
@@ -664,7 +676,7 @@
 
 				// Add the corresponding instance to propertyValues
 				try {
-					synchronizePropertyValue(entry.getKey(), NullInstance.NULLINSTANCE);
+					synchronizePropertyValue(entry.getKey(), LayersFactory.eINSTANCE.createNullInstance());
 				} catch (LayersException e) {
 					// should not happen
 					e.printStackTrace();
@@ -718,6 +730,8 @@
 	 * @param property
 	 * @return
 	 * @throws LayersException
+	 * 
+	 * @generated NOT
 	 */
 	@Override
 	public ComputePropertyValueCommand getComputePropertyValueCommand(View view, Property property) throws LayersException {
@@ -744,6 +758,8 @@
 	 * @param property
 	 * @return
 	 * @throws LayersException
+	 * 
+	 * @generated NOT
 	 */
 	@Override
 	public EList<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, List<Property> properties) throws LayersException {
@@ -789,6 +805,8 @@
 	 * @param property
 	 * @return
 	 * @throws LayersException
+	 * 
+	 * @generated NOT
 	 */
 	@Override
 	public EList<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(List<View> views, Property property) throws LayersException {
@@ -830,23 +848,4 @@
 		}
 	}
 
-	/**
-	 * Get the LayersStack that own directly or indirectly this Layer.
-	 * Throw an exception if no {@link LayersStack} can be found. <br>
-	 * Lookup is done recursively in parent containers.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#getLayersStack()
-	 *
-	 * @return
-	 * @throws NotFoundException
-	 */
-	// @Override
-	// public LayersStack getLayersStack() throws NotFoundException {
-	// // TODO: performance improvment. It is possible to avoid the lookup
-	// // by caching the LayersStack, or by setting a corresponding property
-	// // in the model
-	// return (LayersStack)ECoreUtils.lookupAncestorOfType(this, LayersPackage.eINSTANCE.getLayersStack());
-	// }
-
-
 } // AbstractLayerImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/AbstractLayerOperatorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/AbstractLayerOperatorImpl.java
deleted file mode 100755
index db04a2f..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/AbstractLayerOperatorImpl.java
+++ /dev/null
@@ -1,488 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import static org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.Activator.log;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.util.BasicEList;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Abstract Layer Operator</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AbstractLayerOperatorImpl#getLayerOperatorDescriptor <em>Layer Operator Descriptor</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AbstractLayerOperatorImpl#getLayerOperatorDescriptorName <em>Layer Operator Descriptor Name</em>}</li>
- * </ul>
- *
- * @generated
- */
-public abstract class AbstractLayerOperatorImpl extends LayerOperatorImpl implements AbstractLayerOperator {
-	/**
-	 * The cached value of the '{@link #getLayerOperatorDescriptor() <em>Layer Operator Descriptor</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getLayerOperatorDescriptor()
-	 * @generated
-	 * @ordered
-	 */
-	protected LayerOperatorDescriptor layerOperatorDescriptor;
-
-	/**
-	 * The default value of the '{@link #getLayerOperatorDescriptorName() <em>Layer Operator Descriptor Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getLayerOperatorDescriptorName()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String LAYER_OPERATOR_DESCRIPTOR_NAME_EDEFAULT = null;
-	/**
-	 * The cached value of the '{@link #getLayerOperatorDescriptorName() <em>Layer Operator Descriptor Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getLayerOperatorDescriptorName()
-	 * @generated
-	 * @ordered
-	 */
-	protected String layerOperatorDescriptorName = LAYER_OPERATOR_DESCRIPTOR_NAME_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected AbstractLayerOperatorImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.ABSTRACT_LAYER_OPERATOR;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public LayerOperatorDescriptor getLayerOperatorDescriptor() {
-		if (layerOperatorDescriptor != null && layerOperatorDescriptor.eIsProxy()) {
-			InternalEObject oldLayerOperatorDescriptor = (InternalEObject)layerOperatorDescriptor;
-			layerOperatorDescriptor = (LayerOperatorDescriptor)eResolveProxy(oldLayerOperatorDescriptor);
-			if (layerOperatorDescriptor != oldLayerOperatorDescriptor) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LayersPackage.ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR, oldLayerOperatorDescriptor, layerOperatorDescriptor));
-			}
-		}
-		return layerOperatorDescriptor;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LayerOperatorDescriptor basicGetLayerOperatorDescriptor() {
-		return layerOperatorDescriptor;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setLayerOperatorDescriptor(LayerOperatorDescriptor newLayerOperatorDescriptor) {
-		LayerOperatorDescriptor oldLayerOperatorDescriptor = layerOperatorDescriptor;
-		layerOperatorDescriptor = newLayerOperatorDescriptor;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR, oldLayerOperatorDescriptor, layerOperatorDescriptor));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getLayerOperatorDescriptorName() {
-		return layerOperatorDescriptorName;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setLayerOperatorDescriptorName(String newLayerOperatorDescriptorName) {
-
-		// Avoid recursive call if name is the same
-		if (newLayerOperatorDescriptorName.equals(layerOperatorDescriptorName)) {
-			return;
-		}
-
-		String oldLayerOperatorDescriptorName = layerOperatorDescriptorName;
-		layerOperatorDescriptorName = newLayerOperatorDescriptorName;
-		if (eNotificationRequired()) {
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME, oldLayerOperatorDescriptorName, layerOperatorDescriptorName));
-		}
-
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public boolean isDescriptorSet() {
-		return getLayerOperatorDescriptor() != null;
-	}
-
-	/**
-	 * Reset the descriptor accordingly to the descriptor name.
-	 * The descriptor is resseted only if the ::application and ::layerOperatorDescriptorName are set.
-	 * Nothing is done if one of the attribute is not set.
-	 * Nothing is done if the descriptor can not be found (maybe a log is issue).
-	 * <!-- begin-user-doc -->
-	 * Not used ?
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void resetDescriptor() {
-
-		if (getApplication() == null) {
-			return;
-		}
-		if (getLayerOperatorDescriptorName() == null) {
-			return;
-		}
-
-		try {
-			LayerOperatorDescriptor descriptor = application.getLayerOperatorDescriptorRegistry().getLayerOperatorDescriptor(getLayerOperatorDescriptorName());
-			setLayerOperatorDescriptor(descriptor);
-		} catch (NotFoundException e) {
-			log.error("LOG - " + this.getClass().getName() + " - " + e.getMessage(), e);
-		}
-
-	}
-
-	/**
-	 * Override in order to call {@link #resetDescriptor()}
-	 *
-	 * @param newApplication
-	 */
-	// @Override
-	// public void setApplication(LayersStackApplication newApplication) {
-	// super.setApplication(newApplication);
-	// resetDescriptor();
-	// }
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public boolean isLayerEnabledInternal() {
-		return isLayerEnabled() && isDescriptorSet();
-	}
-
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case LayersPackage.ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR:
-				if (resolve) return getLayerOperatorDescriptor();
-				return basicGetLayerOperatorDescriptor();
-			case LayersPackage.ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME:
-				return getLayerOperatorDescriptorName();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case LayersPackage.ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR:
-				setLayerOperatorDescriptor((LayerOperatorDescriptor)newValue);
-				return;
-			case LayersPackage.ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME:
-				setLayerOperatorDescriptorName((String)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case LayersPackage.ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR:
-				setLayerOperatorDescriptor((LayerOperatorDescriptor)null);
-				return;
-			case LayersPackage.ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME:
-				setLayerOperatorDescriptorName(LAYER_OPERATOR_DESCRIPTOR_NAME_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case LayersPackage.ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR:
-				return layerOperatorDescriptor != null;
-			case LayersPackage.ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME:
-				return LAYER_OPERATOR_DESCRIPTOR_NAME_EDEFAULT == null ? layerOperatorDescriptorName != null : !LAYER_OPERATOR_DESCRIPTOR_NAME_EDEFAULT.equals(layerOperatorDescriptorName);
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
-		switch (operationID) {
-			case LayersPackage.ABSTRACT_LAYER_OPERATOR___IS_DESCRIPTOR_SET:
-				return isDescriptorSet();
-			case LayersPackage.ABSTRACT_LAYER_OPERATOR___RESET_DESCRIPTOR:
-				resetDescriptor();
-				return null;
-		}
-		return super.eInvoke(operationID, arguments);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (layerOperatorDescriptorName: "); //$NON-NLS-1$
-		result.append(layerOperatorDescriptorName);
-		result.append(')');
-		return result.toString();
-	}
-
-	/**
-	 * Get the command to compute the required property value.
-	 * Walk all layers and collect the non null command for the property and view.
-	 * Then return the command provided by a call to the properties'operator(collectedCmd).
-	 *
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#getComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property)
-	 *
-	 * @param view
-	 * @param property
-	 * @return
-	 * @throws LayersException
-	 */
-	@Override
-	public ComputePropertyValueCommand getComputePropertyValueCommand(View view, Property property) throws LayersException {
-
-		// Do nothing if the layer is disable.
-		if (!isLayerEnabled()) {
-			return null;
-		}
-
-
-		// The list of commands provided by each layers
-		EList<ComputePropertyValueCommand> collectedCmds = new BasicEList<ComputePropertyValueCommand>(getLayers().size());
-
-		// Walk all layers and return the first cmd that is not null for specified view and proerty.
-		for (LayerExpression layer : getLayers()) {
-
-			ComputePropertyValueCommand cmd = layer.getComputePropertyValueCommand(view, property);
-			if (cmd != null) {
-				collectedCmds.add(cmd);
-			}
-		}
-
-		// If we have no subcommand, skip the value by returning null.
-		if (collectedCmds.size() == 0) {
-			return null;
-		}
-
-		// Call the corresponding operator
-		ComputePropertyValueCommand res;
-		try {
-			res = getLayerOperatorDescriptor().getPropertyOperator(property).getComputePropertyValueCommand(collectedCmds);
-		} catch (UnsupportedOperationException e) {
-			// The operator is not implemented
-			log.error(this.getClass().getSimpleName() + "WARNING - Operator not implemened for LayerOperator '"
-					+ this.getClass().getSimpleName() + "' and property '"
-					+ property.getName() + "'.", e);
-			return null;
-		}
-		return res;
-
-	}
-
-	/**
-	 * For each property, add the first property value in the list of result.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#getPropertiesComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, java.util.List)
-	 *
-	 * @param view
-	 * @param property
-	 * @return
-	 * @throws LayersException
-	 */
-	@Override
-	public EList<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, List<Property> properties) throws LayersException {
-
-		// Do nothing if the layer is disable.
-		if (!isLayerEnabled()) {
-			return null;
-		}
-
-		// Simple implementation
-		// TODO Check if we can optimize
-
-		// the result list
-		EList<ComputePropertyValueCommand> resCmds = new BasicEList<ComputePropertyValueCommand>(properties.size());
-		boolean isCmdFound = false;
-
-		// Walk each property
-		for (Property property : properties) {
-			if (property == null) {
-				resCmds.add(null);
-				continue;
-			}
-
-			ComputePropertyValueCommand cmd = getComputePropertyValueCommand(view, property);
-			if (cmd != null) {
-				isCmdFound = true;
-			}
-			resCmds.add(cmd);
-
-
-		}
-		// Return appropriate result
-		if (isCmdFound) {
-			return resCmds;
-		} else {
-			// No command ==> null
-			return null;
-		}
-	}
-
-	/**
-	 * For each view, add the first property value in the list of result.
-	 *
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#getViewsComputePropertyValueCommand(java.util.List, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property)
-	 *
-	 * @param view
-	 * @param property
-	 * @return
-	 * @throws LayersException
-	 */
-	@Override
-	public EList<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(List<View> views, Property property) throws LayersException {
-
-		// Do nothing if the layer is disable.
-		if (!isLayerEnabled()) {
-			return null;
-		}
-
-		// Simple implementation
-		// TODO Check if we can optimize
-
-		// the result list
-		EList<ComputePropertyValueCommand> resCmds = new BasicEList<ComputePropertyValueCommand>(views.size());
-		boolean isCmdFound = false;
-
-		for (View view : views) {
-			if (view == null) {
-				resCmds.add(null);
-				continue;
-			}
-
-			ComputePropertyValueCommand cmd = getComputePropertyValueCommand(view, property);
-			if (cmd != null) {
-				isCmdFound = true;
-			}
-			resCmds.add(cmd);
-		}
-
-		// Return appropriate result
-		if (isCmdFound) {
-			return resCmds;
-		} else {
-			// No command ==> null
-			return null;
-		}
-	}
-
-} // AbstractLayerOperatorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/AllViewsDerivedLayerImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/AllViewsDerivedLayerImpl.java
index 080acca..d88efb0 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/AllViewsDerivedLayerImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/AllViewsDerivedLayerImpl.java
@@ -1,13 +1,22 @@
 /**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
-import static org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.Activator.log;
-
 import org.eclipse.emf.ecore.EClass;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AllViewsDerivedLayer;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.util.DiagramViewToListSynchronizer;
 
 /**
@@ -19,27 +28,21 @@
  */
 public class AllViewsDerivedLayerImpl extends AbstractLayerImpl implements AllViewsDerivedLayer {
 
-	/**
-	 * Object used to synchronize a list with the diagram's views.
-	 *
-	 */
-	protected DiagramViewToListSynchronizer viewsListSynchronizer;
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * 
+	 * @generated
 	 */
 	protected AllViewsDerivedLayerImpl() {
 		super();
-		// init the synchronizer
-		viewsListSynchronizer = new DiagramViewToListSynchronizer(getViews());
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
@@ -47,24 +50,4 @@
 		return LayersPackage.Literals.ALL_VIEWS_DERIVED_LAYER;
 	}
 
-	/**
-	 * This layer has just been added to a LayerStack.
-	 * Set the root of the expression.
-	 * Set the views to match the result of the expression.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#initLayer(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack)
-	 *
-	 * @param owningLayersStack
-	 */
-	@Override
-	public void initLayer(LayersStack owningLayersStack) {
-		super.initLayer(owningLayersStack);
-
-		if (log.isDebugEnabled()) {
-			log.debug(this.getClass().getSimpleName() + ".initLayer(" + owningLayersStack + ")");
-		}
-
-		// Set the diagram associated to this tree of layers
-		viewsListSynchronizer.setDiagram(owningLayersStack.getDiagram());
-	}
 } // AllViewsDerivedLayerImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/AndStackedLayerOperatorDescriptorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/AndStackedLayerOperatorDescriptorImpl.java
deleted file mode 100755
index 2e9dba3..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/AndStackedLayerOperatorDescriptorImpl.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AndStackedLayerOperatorDescriptor;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>And Stacked Layer Operator Descriptor</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class AndStackedLayerOperatorDescriptorImpl extends StackedLayerOperatorDescriptorImpl implements AndStackedLayerOperatorDescriptor {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected AndStackedLayerOperatorDescriptorImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.AND_STACKED_LAYER_OPERATOR_DESCRIPTOR;
-	}
-
-} // AndStackedLayerOperatorDescriptorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/ApplicationDependantElementImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/ApplicationDependantElementImpl.java
index ede4fa9..ed4da48 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/ApplicationDependantElementImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/ApplicationDependantElementImpl.java
@@ -1,22 +1,26 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ApplicationDependantElement;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication;
@@ -69,7 +73,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayersStackApplication getApplication() {
 		if (application != null && application.eIsProxy()) {
 			InternalEObject oldApplication = (InternalEObject)application;
@@ -96,7 +99,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setApplication(LayersStackApplication newApplication) {
 		LayersStackApplication oldApplication = application;
 		application = newApplication;
@@ -163,4 +165,4 @@
 		return super.eIsSet(featureID);
 	}
 
-} // ApplicationDependantElementImpl
+} //ApplicationDependantElementImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/BooleanInstanceImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/BooleanInstanceImpl.java
deleted file mode 100755
index 3065f65..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/BooleanInstanceImpl.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Boolean Instance</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.BooleanInstanceImpl#isValue <em>Value</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class BooleanInstanceImpl extends TypeInstanceImpl implements BooleanInstance {
-	/**
-	 * The default value of the '{@link #isValue() <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final boolean VALUE_EDEFAULT = false;
-
-	/**
-	 * The cached value of the '{@link #isValue() <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected boolean value = VALUE_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected BooleanInstanceImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.BOOLEAN_INSTANCE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean isValue() {
-		return value;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setValue(boolean newValue) {
-		boolean oldValue = value;
-		value = newValue;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.BOOLEAN_INSTANCE__VALUE, oldValue, value));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case LayersPackage.BOOLEAN_INSTANCE__VALUE:
-				return isValue();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case LayersPackage.BOOLEAN_INSTANCE__VALUE:
-				setValue((Boolean)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case LayersPackage.BOOLEAN_INSTANCE__VALUE:
-				setValue(VALUE_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case LayersPackage.BOOLEAN_INSTANCE__VALUE:
-				return value != VALUE_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromString(String value) {
-
-		if (value == null || value.length() == 0) {
-			return;
-		}
-
-		setValue(Boolean.parseBoolean(value.trim()));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromInstance(TypeInstance value) {
-
-		// Check if the value is of the right instance
-		if (!getClass().isInstance(value)) {
-			return;
-		}
-
-		BooleanInstance instance = (BooleanInstance) value;
-		setValue(instance.isValue());
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (value: "); //$NON-NLS-1$
-		result.append(value);
-		result.append(')');
-		return result.toString();
-	}
-
-} // BooleanInstanceImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/BooleanTypeImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/BooleanTypeImpl.java
deleted file mode 100755
index 05b7bef..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/BooleanTypeImpl.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanType;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Boolean Type</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class BooleanTypeImpl extends TypeImpl implements BooleanType {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected BooleanTypeImpl() {
-		super();
-		setName("boolean");
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public TypeInstance createInstance() {
-		return LayersFactory.eINSTANCE.createBooleanInstance();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.BOOLEAN_TYPE;
-	}
-
-} // BooleanTypeImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSHideInstanceImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSHideInstanceImpl.java
index 9e72b9b..d562f76 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSHideInstanceImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSHideInstanceImpl.java
@@ -25,7 +25,6 @@
 
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSHideInstance;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
 
 /**
  * <!-- begin-user-doc -->
@@ -35,8 +34,8 @@
  * The following features are implemented:
  * </p>
  * <ul>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHideInstanceImpl#getStylesheet <em>Stylesheet</em>}</li>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHideInstanceImpl#getStyle <em>Style</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHideInstanceImpl#getStylesheet <em>Stylesheet</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHideInstanceImpl#getStyle <em>Style</em>}</li>
  * </ul>
  *
  * @generated
@@ -46,7 +45,6 @@
 	 * The cached value of the '{@link #getStylesheet() <em>Stylesheet</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @see #getStylesheet()
 	 * @generated
 	 * @ordered
@@ -57,7 +55,6 @@
 	 * The default value of the '{@link #getStyle() <em>Style</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @see #getStyle()
 	 * @generated
 	 * @ordered
@@ -68,7 +65,6 @@
 	 * The cached value of the '{@link #getStyle() <em>Style</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @see #getStyle()
 	 * @generated
 	 * @ordered
@@ -78,7 +74,6 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	protected CSSHideInstanceImpl() {
@@ -88,7 +83,6 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
@@ -99,10 +93,8 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
-	@Override
 	public StyleSheet getStylesheet() {
 		return stylesheet;
 	}
@@ -110,7 +102,6 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public NotificationChain basicSetStylesheet(StyleSheet newStylesheet, NotificationChain msgs) {
@@ -118,10 +109,7 @@
 		stylesheet = newStylesheet;
 		if (eNotificationRequired()) {
 			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET, oldStylesheet, newStylesheet);
-			if (msgs == null)
-				msgs = notification;
-			else
-				msgs.add(notification);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
 		}
 		return msgs;
 	}
@@ -129,31 +117,27 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
-	@Override
 	public void setStylesheet(StyleSheet newStylesheet) {
 		if (newStylesheet != stylesheet) {
 			NotificationChain msgs = null;
 			if (stylesheet != null)
-				msgs = ((InternalEObject) stylesheet).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET, null, msgs);
+				msgs = ((InternalEObject)stylesheet).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET, null, msgs);
 			if (newStylesheet != null)
-				msgs = ((InternalEObject) newStylesheet).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET, null, msgs);
+				msgs = ((InternalEObject)newStylesheet).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET, null, msgs);
 			msgs = basicSetStylesheet(newStylesheet, msgs);
-			if (msgs != null)
-				msgs.dispatch();
-		} else if (eNotificationRequired())
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
 			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET, newStylesheet, newStylesheet));
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
-	@Override
 	public String getStyle() {
 		return style;
 	}
@@ -161,10 +145,8 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
-	@Override
 	public void setStyle(String newStyle) {
 		String oldStyle = style;
 		style = newStyle;
@@ -175,14 +157,13 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-		case LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET:
-			return basicSetStylesheet(null, msgs);
+			case LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET:
+				return basicSetStylesheet(null, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -190,16 +171,15 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-		case LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET:
-			return getStylesheet();
-		case LayersPackage.CSS_HIDE_INSTANCE__STYLE:
-			return getStyle();
+			case LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET:
+				return getStylesheet();
+			case LayersPackage.CSS_HIDE_INSTANCE__STYLE:
+				return getStyle();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -207,18 +187,17 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-		case LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET:
-			setStylesheet((StyleSheet) newValue);
-			return;
-		case LayersPackage.CSS_HIDE_INSTANCE__STYLE:
-			setStyle((String) newValue);
-			return;
+			case LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET:
+				setStylesheet((StyleSheet)newValue);
+				return;
+			case LayersPackage.CSS_HIDE_INSTANCE__STYLE:
+				setStyle((String)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -226,18 +205,17 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-		case LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET:
-			setStylesheet((StyleSheet) null);
-			return;
-		case LayersPackage.CSS_HIDE_INSTANCE__STYLE:
-			setStyle(STYLE_EDEFAULT);
-			return;
+			case LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET:
+				setStylesheet((StyleSheet)null);
+				return;
+			case LayersPackage.CSS_HIDE_INSTANCE__STYLE:
+				setStyle(STYLE_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -245,16 +223,15 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-		case LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET:
-			return stylesheet != null;
-		case LayersPackage.CSS_HIDE_INSTANCE__STYLE:
-			return STYLE_EDEFAULT == null ? style != null : !STYLE_EDEFAULT.equals(style);
+			case LayersPackage.CSS_HIDE_INSTANCE__STYLESHEET:
+				return stylesheet != null;
+			case LayersPackage.CSS_HIDE_INSTANCE__STYLE:
+				return STYLE_EDEFAULT == null ? style != null : !STYLE_EDEFAULT.equals(style);
 		}
 		return super.eIsSet(featureID);
 	}
@@ -262,72 +239,17 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public String toString() {
-		if (eIsProxy())
-			return super.toString();
+		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (style: "); //$NON-NLS-1$
 		result.append(style);
 		result.append(')');
 		return result.toString();
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromString(String value) {
-		int i = 0;
-		i++;
-		// TODO
-		// if (value == null || value.length() == 0) {
-		// return;
-		// }
-		//
-		// // The value should contains the values, separated by comma
-		// // "FontName, FontHeight, FontColor, Bold"
-		// String[] values = value.split(",");
-		// int i = 0;
-		// try {
-		// setFontName(values[i++].trim());
-		// setFontHeigh(Integer.parseInt(values[i++].trim()));
-		// setFontColor(Integer.parseInt(values[i++].trim()));
-		// setBold(Boolean.parseBoolean(values[i++].trim()));
-		// } catch (NumberFormatException e) {
-		// // fail silently
-		// e.printStackTrace();
-		// }
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromInstance(TypeInstance value) {
-		int i = 0;
-		i++;
-		// TODO
-		// Check if the value is of the right instance
-		// if (!getClass().isInstance(value)) {
-		// return;
-		// }
-		//
-		// FontInstance instance = (FontInstance) value;
-		// setFontName(instance.getFontName());
-		// setFontHeigh(instance.getFontHeigh());
-		// setFontColor(instance.getFontColor());
-		// setBold(instance.isBold());
-	}
-
-} // CSSHideInstanceImpl
+} //CSSHideInstanceImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSHidePropertySetterImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSHidePropertySetterImpl.java
index 4b528e6..be2d0cc 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSHidePropertySetterImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSHidePropertySetterImpl.java
@@ -14,10 +14,9 @@
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.ecore.EClass;
-import org.eclipse.gmf.runtime.notation.View;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSHidePropertySetter;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
 
 /**
  * <!-- begin-user-doc -->
@@ -30,18 +29,15 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
-	 * @generated NOT
+	 * @generated
 	 */
 	protected CSSHidePropertySetterImpl() {
 		super();
-		setPropertyName("cssHide");
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
@@ -49,16 +45,4 @@
 		return LayersPackage.Literals.CSS_HIDE_PROPERTY_SETTER;
 	}
 
-	/**
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterImpl#setValue(org.eclipse.gmf.runtime.notation.View, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance)
-	 *
-	 * @param view
-	 * @param value
-	 */
-	@Override
-	public void setValue(View view, TypeInstance value) {
-
-
-	}
-
-} // CSSHidePropertySetterImpl
+} //CSSHidePropertySetterImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSHideTypeImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSHideTypeImpl.java
index d2d21ad..7b77a02 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSHideTypeImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSHideTypeImpl.java
@@ -16,7 +16,6 @@
 import org.eclipse.emf.ecore.EClass;
 
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSHideType;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 
 /**
@@ -30,18 +29,15 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
-	 * @generated NOT
+	 * @generated
 	 */
 	protected CSSHideTypeImpl() {
 		super();
-		setName("CSSHideType");
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
@@ -49,9 +45,4 @@
 		return LayersPackage.Literals.CSS_HIDE_TYPE;
 	}
 
-	@Override
-	public org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance createInstance() {
-		return LayersFactory.eINSTANCE.createCSSHideInstance();
-	};
-
-} // CSSHideTypeImpl
+} //CSSHideTypeImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSInstanceImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSInstanceImpl.java
index 1c7f4f3..09341c6 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSInstanceImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSInstanceImpl.java
@@ -1,16 +1,30 @@
 /**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.StyleSheet;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSInstance;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
 
 /**
  * <!-- begin-user-doc -->
@@ -46,6 +60,7 @@
 	 * @ordered
 	 */
 	protected static final String STYLE_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getStyle() <em>Style</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -80,7 +95,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public StyleSheet getStylesheet() {
 		return stylesheet;
 	}
@@ -105,8 +119,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	// @Override
-	@Override
 	public void setStylesheet(StyleSheet newStylesheet) {
 		if (newStylesheet != stylesheet) {
 			NotificationChain msgs = null;
@@ -190,9 +202,6 @@
 		super.eSet(featureID, newValue);
 	}
 
-
-
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -236,65 +245,11 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (style: "); //$NON-NLS-1$
 		result.append(style);
 		result.append(')');
 		return result.toString();
 	}
 
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromString(String value) {
-		int i = 0;
-		i++;
-		// TODO
-		// if (value == null || value.length() == 0) {
-		// return;
-		// }
-		//
-		// // The value should contains the values, separated by comma
-		// // "FontName, FontHeight, FontColor, Bold"
-		// String[] values = value.split(",");
-		// int i = 0;
-		// try {
-		// setFontName(values[i++].trim());
-		// setFontHeigh(Integer.parseInt(values[i++].trim()));
-		// setFontColor(Integer.parseInt(values[i++].trim()));
-		// setBold(Boolean.parseBoolean(values[i++].trim()));
-		// } catch (NumberFormatException e) {
-		// // fail silently
-		// e.printStackTrace();
-		// }
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromInstance(TypeInstance value) {
-		int i = 0;
-		i++;
-		// TODO
-		// Check if the value is of the right instance
-		// if (!getClass().isInstance(value)) {
-		// return;
-		// }
-		//
-		// FontInstance instance = (FontInstance) value;
-		// setFontName(instance.getFontName());
-		// setFontHeigh(instance.getFontHeigh());
-		// setFontColor(instance.getFontColor());
-		// setBold(instance.isBold());
-	}
-
-
-} // CSSInstanceImpl
+} //CSSInstanceImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSPropertySetterImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSPropertySetterImpl.java
index 695eb2e..7231481 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSPropertySetterImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSPropertySetterImpl.java
@@ -1,31 +1,22 @@
 /**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
-import java.util.List;
-import java.util.ArrayList;
-import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.transaction.TransactionalEditingDomain;
-import org.eclipse.gmf.runtime.notation.Diagram;
-import org.eclipse.gmf.runtime.notation.NotationPackage;
-import org.eclipse.gmf.runtime.notation.StringListValueStyle;
-import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.papyrus.infra.core.services.ServiceException;
-import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForResource;
-import org.eclipse.papyrus.infra.gmfdiag.css.notation.CSSDiagram;
-import org.eclipse.papyrus.infra.gmfdiag.css.notation.CSSStyles;
-import org.eclipse.papyrus.infra.gmfdiag.css.properties.databinding.AddCSSStyleSheetCommand;
-import org.eclipse.papyrus.infra.gmfdiag.css.properties.databinding.AddCssClassStyleCommand;
-import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.EmbeddedStyleSheet;
-import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.StyleSheet;
-import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.StyleSheetReference;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSInstance;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSPropertySetter;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
 
 /**
  * <!-- begin-user-doc -->
@@ -38,18 +29,15 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
-	 * @generated NOT
+	 * @generated
 	 */
 	protected CSSPropertySetterImpl() {
 		super();
-		setPropertyName("css");
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
@@ -57,104 +45,4 @@
 		return LayersPackage.Literals.CSS_PROPERTY_SETTER;
 	}
 
-	/**
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterImpl#setValue(org.eclipse.gmf.runtime.notation.View, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance)
-	 *
-	 * @param view
-	 * @param value
-	 */
-	@Override
-	public void setValue(View view, TypeInstance value) {
-		Diagram d = view.getDiagram();
-		StyleSheet ass;
-		CSSDiagram cssD = null;
-		TransactionalEditingDomain ted = null;
-
-		EList<EStructuralFeature> features = view.eClass().getEStructuralFeatures();
-
-		CSSInstance associatedCSS = (CSSInstance) value;
-		StyleSheet sheet = associatedCSS.getStylesheet();
-
-		// System.err.println(view);
-		// System.err.println(value);
-
-		// CHeck if there is a styleSheet reference associated
-		if (sheet == null) {
-			return;
-		}
-
-		if (d instanceof CSSDiagram) {
-			cssD = (CSSDiagram) d;
-			// Get the Transactional Editing Domain associated to the diagram
-			try {
-				ted = ServiceUtilsForResource.getInstance().getTransactionalEditingDomain(view.eResource());
-			} catch (ServiceException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-
-			// TODO find a way to remove a reference
-			// if (!(cssD.getStyleSheets().isEmpty())) {
-			// RemoveAllCSSStyleSheetValueCommand racssvc = new RemoveAllCSSStyleSheetValueCommand(ted, cssD,
-			// CSSStyles.CSS_DIAGRAM_STYLESHEETS_KEY,
-			// NotationPackage.eINSTANCE.getEObjectListValueStyle(),
-			// NotationPackage.eINSTANCE.getEObjectListValueStyle_EObjectListValue(),
-			// Collections.singleton(sheet));
-			// racssvc.execute();
-			// System.out.println("done!");
-			// }
-
-			String sheetPath = ((StyleSheetReference) sheet).getPath();
-			boolean sheetIsApplied = false;
-			for (StyleSheet ss : cssD.getStyleSheets()) {
-				String ssPath = ((StyleSheetReference) ss).getPath();
-				if (sheetPath.equals(ssPath)) {
-					sheetIsApplied = true;
-					// There may be discrepancies in the memory addresses between the layer's CSS and the model's
-					// Always revert to the model's CSS as it is the one being used
-					sheet = ss;
-					break;
-				}
-			}
-
-			if (!sheetIsApplied) {
-				if (sheet instanceof StyleSheetReference) {
-					sheet = EcoreUtil.copy(sheet);
-				} else if (sheet instanceof EmbeddedStyleSheet) {
-					// TODO if needed
-				}
-
-				AddCSSStyleSheetCommand aacssc = new AddCSSStyleSheetCommand(ted, cssD,
-						CSSStyles.CSS_DIAGRAM_STYLESHEETS_KEY,
-						NotationPackage.eINSTANCE.getEObjectListValueStyle(),
-						NotationPackage.eINSTANCE.getEObjectListValueStyle_EObjectListValue(),
-						sheet);
-				aacssc.execute();
-			}
-
-			// Apply the style to the view if it has not been previously
-			String style = associatedCSS.getStyle();
-			if (style == null) {
-				return;
-			}
-
-			List<String> appliedStyles = new ArrayList<String>();
-			for (Object o : view.getStyles()) {
-				if (!(o instanceof StringListValueStyle)) {
-					continue;
-				}
-				StringListValueStyle slvs = (StringListValueStyle) o;
-				if (!slvs.getStringListValue().isEmpty()) {
-					appliedStyles.add((String) slvs.getStringListValue().get(0));
-				}
-			}
-			// There is a refresh problem on the style display in the property view,
-			// undo/redo multiply the style without applying it multiple times
-			if (appliedStyles.isEmpty() || !appliedStyles.contains(style)) {
-				AddCssClassStyleCommand accsc = new AddCssClassStyleCommand(ted, view, style);
-				accsc.execute();
-			}
-		}
-	}
-
-} // CSSPropertySetterImpl
+} //CSSPropertySetterImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSTypeImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSTypeImpl.java
index 9250348..ebeb93f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSTypeImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CSSTypeImpl.java
@@ -1,10 +1,21 @@
 /**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.ecore.EClass;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSType;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 
 /**
@@ -18,12 +29,10 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
-	 * @generated NOT
+	 * @generated
 	 */
 	protected CSSTypeImpl() {
 		super();
-		setName("CSSType");
 	}
 
 	/**
@@ -36,9 +45,4 @@
 		return LayersPackage.Literals.CSS_TYPE;
 	}
 
-	@Override
-	public org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance createInstance() {
-		return LayersFactory.eINSTANCE.createCSSInstance();
-	};
-
-} // CSSTypeImpl
+} //CSSTypeImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/ColorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/ColorImpl.java
deleted file mode 100755
index a3fe3d0..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/ColorImpl.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Color;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Color</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class ColorImpl extends TypeImpl implements Color {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected ColorImpl() {
-		super();
-		setName("Color");
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public TypeInstance createInstance() {
-		return LayersFactory.eINSTANCE.createColorInstance();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.COLOR;
-	}
-
-} // ColorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/ColorInstanceImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/ColorInstanceImpl.java
deleted file mode 100755
index 9f7237b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/ColorInstanceImpl.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Color Instance</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.ColorInstanceImpl#getValue <em>Value</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class ColorInstanceImpl extends TypeInstanceImpl implements ColorInstance {
-	/**
-	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int VALUE_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected int value = VALUE_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected ColorInstanceImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.COLOR_INSTANCE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public int getValue() {
-		return value;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setValue(int newValue) {
-		int oldValue = value;
-		value = newValue;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.COLOR_INSTANCE__VALUE, oldValue, value));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case LayersPackage.COLOR_INSTANCE__VALUE:
-				return getValue();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case LayersPackage.COLOR_INSTANCE__VALUE:
-				setValue((Integer)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case LayersPackage.COLOR_INSTANCE__VALUE:
-				setValue(VALUE_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case LayersPackage.COLOR_INSTANCE__VALUE:
-				return value != VALUE_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromString(String value) {
-
-		if (value == null || value.length() == 0) {
-			return;
-		}
-
-		try {
-			setValue(Integer.parseInt(value.trim()));
-		} catch (NumberFormatException e) {
-			// fail silently
-		}
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromInstance(TypeInstance value) {
-
-		// Check if the value is of the right instance
-		if (!getClass().isInstance(value)) {
-			return;
-		}
-
-		ColorInstance instance = (ColorInstance) value;
-		setValue(instance.getValue());
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (value: "); //$NON-NLS-1$
-		result.append(value);
-		result.append(')');
-		return result.toString();
-	}
-
-} // ColorInstanceImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CustomLayerOperatorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CustomLayerOperatorImpl.java
deleted file mode 100755
index 19350bf..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CustomLayerOperatorImpl.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomLayerOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Custom Layer Operator</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class CustomLayerOperatorImpl extends LayerOperatorImpl implements CustomLayerOperator {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected CustomLayerOperatorImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.CUSTOM_LAYER_OPERATOR;
-	}
-
-} // CustomLayerOperatorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CustomPropertyOperatorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CustomPropertyOperatorImpl.java
deleted file mode 100755
index 02b7fa4..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CustomPropertyOperatorImpl.java
+++ /dev/null
@@ -1,396 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import static org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.Activator.log;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceException;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Custom Property Operator</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomPropertyOperatorImpl#getClassname <em>Classname</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomPropertyOperatorImpl#getOperatorInstance <em>Operator Instance</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomPropertyOperatorImpl#getClassBundleID <em>Class Bundle ID</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class CustomPropertyOperatorImpl extends PropertyOperatorImpl implements CustomPropertyOperator {
-	/**
-	 * The default value of the '{@link #getClassname() <em>Classname</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getClassname()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String CLASSNAME_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getClassname() <em>Classname</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getClassname()
-	 * @generated
-	 * @ordered
-	 */
-	protected String classname = CLASSNAME_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getOperatorInstance() <em>Operator Instance</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getOperatorInstance()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final CustomPropertyOperatorsInstance OPERATOR_INSTANCE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getOperatorInstance() <em>Operator Instance</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getOperatorInstance()
-	 * @generated
-	 * @ordered
-	 */
-	protected CustomPropertyOperatorsInstance operatorInstance = OPERATOR_INSTANCE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getClassBundleID() <em>Class Bundle ID</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getClassBundleID()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String CLASS_BUNDLE_ID_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getClassBundleID() <em>Class Bundle ID</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getClassBundleID()
-	 * @generated
-	 * @ordered
-	 */
-	protected String classBundleID = CLASS_BUNDLE_ID_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected CustomPropertyOperatorImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.CUSTOM_PROPERTY_OPERATOR;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getClassname() {
-		return classname;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setClassname(String newClassname) {
-		String oldClassname = classname;
-		classname = newClassname;
-		if (eNotificationRequired()) {
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.CUSTOM_PROPERTY_OPERATOR__CLASSNAME, oldClassname, classname));
-		}
-		// Reset the actual instance
-		setOperatorInstance(null);
-
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public CustomPropertyOperatorsInstance getOperatorInstance() {
-		if (operatorInstance == null) {
-			try {
-				resetOperatorInstance();
-			} catch (LayersException e) {
-				// TODO log the error
-				log.error("LOG-" + this.getClass().getName()
-						+ "- Can't set custom operator instance '" + e.getMessage() + "'.", e);
-
-			}
-		}
-
-		return operatorInstance;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setOperatorInstance(CustomPropertyOperatorsInstance newOperatorInstance) {
-		CustomPropertyOperatorsInstance oldOperatorInstance = operatorInstance;
-		operatorInstance = newOperatorInstance;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.CUSTOM_PROPERTY_OPERATOR__OPERATOR_INSTANCE, oldOperatorInstance, operatorInstance));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getClassBundleID() {
-		return classBundleID;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setClassBundleID(String newClassBundleID) {
-		String oldClassBundleID = classBundleID;
-		classBundleID = newClassBundleID;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.CUSTOM_PROPERTY_OPERATOR__CLASS_BUNDLE_ID, oldClassBundleID, classBundleID));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @throws LayersException
-	 * @generated NOT
-	 */
-	@Override
-	public void resetOperatorInstance() throws LayersException {
-		if (getClassname() == null) {
-			return;
-		}
-
-		Class<?> opClass = loadClass();
-		try {
-			setOperatorInstance((CustomPropertyOperatorsInstance) opClass.newInstance());
-		} catch (Exception e) {
-			throw new LayersException("Can't create instance for CustomOperator " + getName(), e);
-		}
-	}
-
-	/**
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyOperatorImpl#getComputePropertyValueCommand(org.eclipse.emf.common.util.EList)
-	 *
-	 * @param property
-	 * @return
-	 * @throws LayersException
-	 * @generated NOT
-	 */
-	@Override
-	public ComputePropertyValueCommand getComputePropertyValueCommand(EList<ComputePropertyValueCommand> property) throws LayersException {
-		return getOperatorInstance().getComputePropertyValueCommand(property);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__CLASSNAME:
-				return getClassname();
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__OPERATOR_INSTANCE:
-				return getOperatorInstance();
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__CLASS_BUNDLE_ID:
-				return getClassBundleID();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__CLASSNAME:
-				setClassname((String)newValue);
-				return;
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__OPERATOR_INSTANCE:
-				setOperatorInstance((CustomPropertyOperatorsInstance)newValue);
-				return;
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__CLASS_BUNDLE_ID:
-				setClassBundleID((String)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__CLASSNAME:
-				setClassname(CLASSNAME_EDEFAULT);
-				return;
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__OPERATOR_INSTANCE:
-				setOperatorInstance(OPERATOR_INSTANCE_EDEFAULT);
-				return;
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__CLASS_BUNDLE_ID:
-				setClassBundleID(CLASS_BUNDLE_ID_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__CLASSNAME:
-				return CLASSNAME_EDEFAULT == null ? classname != null : !CLASSNAME_EDEFAULT.equals(classname);
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__OPERATOR_INSTANCE:
-				return OPERATOR_INSTANCE_EDEFAULT == null ? operatorInstance != null : !OPERATOR_INSTANCE_EDEFAULT.equals(operatorInstance);
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR__CLASS_BUNDLE_ID:
-				return CLASS_BUNDLE_ID_EDEFAULT == null ? classBundleID != null : !CLASS_BUNDLE_ID_EDEFAULT.equals(classBundleID);
-		}
-		return super.eIsSet(featureID);
-	}
-
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
-		switch (operationID) {
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR___RESET_OPERATOR_INSTANCE:
-				try {
-					resetOperatorInstance();
-					return null;
-				}
-				catch (Throwable throwable) {
-					throw new InvocationTargetException(throwable);
-				}
-		}
-		return super.eInvoke(operationID, arguments);
-	}
-
-	/**
-	 * Load the Class object. Try from current ClassLoader, then try using the
-	 * plugin referenced in the serviceDescriptor.PluginId
-	 *
-	 * @return
-	 * @throws ServiceException
-	 */
-	private Class<?> loadClass() throws LayersException {
-		String classname = getClassname();
-		Class<?> classDesc;
-		try {
-			classDesc = Class.forName(classname);
-		} catch (ClassNotFoundException e1) {
-			// Try using bundle
-			try {
-				String bundleID = getClassBundleID();
-				Bundle bundle = Platform.getBundle(bundleID);
-				classDesc = bundle.loadClass(classname);
-			} catch (ClassNotFoundException e2) {
-				throw new LayersException("Can't find class for the name '" + classname + "'.", e2);
-			} catch (NullPointerException e) {
-				throw new LayersException("Can't find bundle '" + getClassBundleID()
-						+ "' for class for the name '" + classname + "'.", e);
-			}
-		}
-
-		return classDesc;
-	}
-
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (classname: "); //$NON-NLS-1$
-		result.append(classname);
-		result.append(", operatorInstance: "); //$NON-NLS-1$
-		result.append(operatorInstance);
-		result.append(", classBundleID: "); //$NON-NLS-1$
-		result.append(classBundleID);
-		result.append(')');
-		return result.toString();
-	}
-
-} // CustomPropertyOperatorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CustomTypeImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CustomTypeImpl.java
deleted file mode 100755
index f1f3c89..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/CustomTypeImpl.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomType;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Custom Type</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CustomTypeImpl#getClassifier <em>Classifier</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class CustomTypeImpl extends TypeImpl implements CustomType {
-	/**
-	 * The default value of the '{@link #getClassifier() <em>Classifier</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getClassifier()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String CLASSIFIER_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getClassifier() <em>Classifier</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getClassifier()
-	 * @generated
-	 * @ordered
-	 */
-	protected String classifier = CLASSIFIER_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected CustomTypeImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.CUSTOM_TYPE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getClassifier() {
-		return classifier;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setClassifier(String newClassifier) {
-		String oldClassifier = classifier;
-		classifier = newClassifier;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.CUSTOM_TYPE__CLASSIFIER, oldClassifier, classifier));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case LayersPackage.CUSTOM_TYPE__CLASSIFIER:
-				return getClassifier();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case LayersPackage.CUSTOM_TYPE__CLASSIFIER:
-				setClassifier((String)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case LayersPackage.CUSTOM_TYPE__CLASSIFIER:
-				setClassifier(CLASSIFIER_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case LayersPackage.CUSTOM_TYPE__CLASSIFIER:
-				return CLASSIFIER_EDEFAULT == null ? classifier != null : !CLASSIFIER_EDEFAULT.equals(classifier);
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (classifier: "); //$NON-NLS-1$
-		result.append(classifier);
-		result.append(')');
-		return result.toString();
-	}
-
-} // CustomTypeImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/DefaultPropertyOperatorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/DefaultPropertyOperatorImpl.java
deleted file mode 100755
index a46d7f2..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/DefaultPropertyOperatorImpl.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.DefaultPropertyOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Default Property Operator</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class DefaultPropertyOperatorImpl extends PropertyOperatorImpl implements DefaultPropertyOperator {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected DefaultPropertyOperatorImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.DEFAULT_PROPERTY_OPERATOR;
-	}
-
-} // DefaultPropertyOperatorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FillImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FillImpl.java
deleted file mode 100755
index e706c59..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FillImpl.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Fill;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Fill</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class FillImpl extends TypeImpl implements Fill {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected FillImpl() {
-		super();
-		setName("Fill");
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public TypeInstance createInstance() {
-		FillInstance instance = LayersFactory.eINSTANCE.createFillInstance();
-		ColorInstance color = LayersFactory.eINSTANCE.createColorInstance();
-		instance.setFillColor(color);
-		return instance;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.FILL;
-	}
-
-} // FillImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FillInstanceImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FillInstanceImpl.java
deleted file mode 100755
index 75cec4c..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FillInstanceImpl.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Fill Instance</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FillInstanceImpl#getTransparency <em>Transparency</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FillInstanceImpl#getFillColor <em>Fill Color</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class FillInstanceImpl extends TypeInstanceImpl implements FillInstance {
-	/**
-	 * The default value of the '{@link #getTransparency() <em>Transparency</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getTransparency()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int TRANSPARENCY_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getTransparency() <em>Transparency</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getTransparency()
-	 * @generated
-	 * @ordered
-	 */
-	protected int transparency = TRANSPARENCY_EDEFAULT;
-
-	/**
-	 * The cached value of the '{@link #getFillColor() <em>Fill Color</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getFillColor()
-	 * @generated
-	 * @ordered
-	 */
-	protected ColorInstance fillColor;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected FillInstanceImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.FILL_INSTANCE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public int getTransparency() {
-		return transparency;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setTransparency(int newTransparency) {
-		int oldTransparency = transparency;
-		transparency = newTransparency;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.FILL_INSTANCE__TRANSPARENCY, oldTransparency, transparency));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public ColorInstance getFillColor() {
-		return fillColor;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public NotificationChain basicSetFillColor(ColorInstance newFillColor, NotificationChain msgs) {
-		ColorInstance oldFillColor = fillColor;
-		fillColor = newFillColor;
-		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LayersPackage.FILL_INSTANCE__FILL_COLOR, oldFillColor, newFillColor);
-			if (msgs == null) msgs = notification; else msgs.add(notification);
-		}
-		return msgs;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setFillColor(ColorInstance newFillColor) {
-		if (newFillColor != fillColor) {
-			NotificationChain msgs = null;
-			if (fillColor != null)
-				msgs = ((InternalEObject)fillColor).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LayersPackage.FILL_INSTANCE__FILL_COLOR, null, msgs);
-			if (newFillColor != null)
-				msgs = ((InternalEObject)newFillColor).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - LayersPackage.FILL_INSTANCE__FILL_COLOR, null, msgs);
-			msgs = basicSetFillColor(newFillColor, msgs);
-			if (msgs != null) msgs.dispatch();
-		}
-		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.FILL_INSTANCE__FILL_COLOR, newFillColor, newFillColor));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case LayersPackage.FILL_INSTANCE__FILL_COLOR:
-				return basicSetFillColor(null, msgs);
-		}
-		return super.eInverseRemove(otherEnd, featureID, msgs);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case LayersPackage.FILL_INSTANCE__TRANSPARENCY:
-				return getTransparency();
-			case LayersPackage.FILL_INSTANCE__FILL_COLOR:
-				return getFillColor();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case LayersPackage.FILL_INSTANCE__TRANSPARENCY:
-				setTransparency((Integer)newValue);
-				return;
-			case LayersPackage.FILL_INSTANCE__FILL_COLOR:
-				setFillColor((ColorInstance)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case LayersPackage.FILL_INSTANCE__TRANSPARENCY:
-				setTransparency(TRANSPARENCY_EDEFAULT);
-				return;
-			case LayersPackage.FILL_INSTANCE__FILL_COLOR:
-				setFillColor((ColorInstance)null);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case LayersPackage.FILL_INSTANCE__TRANSPARENCY:
-				return transparency != TRANSPARENCY_EDEFAULT;
-			case LayersPackage.FILL_INSTANCE__FILL_COLOR:
-				return fillColor != null;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromString(String value) {
-
-		if (value == null || value.length() == 0) {
-			return;
-		}
-
-		// The value should contains the 2 values, separated by comma
-		// "transparency, fillColor"
-		String[] values = value.split(",");
-		try {
-			setTransparency(Integer.parseInt(values[0].trim()));
-			getFillColor().setValueFromString(values[1]);
-		} catch (NumberFormatException e) {
-			// fail silently
-		}
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromInstance(TypeInstance value) {
-
-		// Check if the value is of the right instance
-		if (!getClass().isInstance(value)) {
-			return;
-		}
-
-		FillInstance instance = (FillInstance) value;
-		setTransparency(instance.getTransparency());
-		// Set by copy
-		getFillColor().setValueFromInstance(instance.getFillColor());
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (transparency: "); //$NON-NLS-1$
-		result.append(transparency);
-		result.append(')');
-		return result.toString();
-	}
-
-} // FillInstanceImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FillPropertySetterImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FillPropertySetterImpl.java
deleted file mode 100755
index 2ee3544..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FillPropertySetterImpl.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.gmf.runtime.notation.FillStyle;
-import org.eclipse.gmf.runtime.notation.NotationPackage;
-import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillPropertySetter;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Fill Property Setter</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class FillPropertySetterImpl extends PropertySetterImpl implements FillPropertySetter {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected FillPropertySetterImpl() {
-		super();
-		setPropertyName("fill");
-
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.FILL_PROPERTY_SETTER;
-	}
-
-	/**
-	 * Set the property of the specified view.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterImpl#setValue(org.eclipse.gmf.runtime.notation.View, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance)
-	 *
-	 * @param view
-	 * @param value
-	 */
-	@Override
-	public void setValue(View view, TypeInstance value) {
-
-		// Try to get the FontStyle object to modify
-		FillStyle style;
-		if (view instanceof FillStyle) {
-			// Try directly (case of Shape ...)
-			style = (FillStyle) view;
-		} else {
-			// Try as additionnal style
-			style = (FillStyle) view.getStyle(NotationPackage.eINSTANCE.getFillStyle());
-		}
-
-		// Set values
-		if (style != null) {
-
-			FillInstance fillValue = (FillInstance) value;
-
-			style.setFillColor(fillValue.getFillColor().getValue());
-			style.setTransparency(fillValue.getTransparency());
-		}
-
-	}
-} // FillPropertySetterImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FolderElementImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FolderElementImpl.java
index f86490e..7ddd49b 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FolderElementImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FolderElementImpl.java
@@ -1,19 +1,22 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.ecore.EClass;
+
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FolderElement;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 
@@ -44,4 +47,4 @@
 		return LayersPackage.Literals.FOLDER_ELEMENT;
 	}
 
-} // FolderElementImpl
+} //FolderElementImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FolderImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FolderImpl.java
index f41e244..b0ddbf8 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FolderImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FolderImpl.java
@@ -1,27 +1,34 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.util.Collection;
+import java.util.List;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Folder;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FolderElement;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
@@ -60,6 +67,7 @@
 	 * @ordered
 	 */
 	protected static final String NAME_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -94,8 +102,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EList<FolderElement> getElements() {
+	public List<FolderElement> getElements() {
 		if (elements == null) {
 			elements = new EObjectContainmentEList<FolderElement>(FolderElement.class, this, LayersPackage.FOLDER__ELEMENTS);
 		}
@@ -107,7 +114,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getName() {
 		return name;
 	}
@@ -117,7 +123,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setName(String newName) {
 		String oldName = name;
 		name = newName;
@@ -218,11 +223,11 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (name: "); //$NON-NLS-1$
 		result.append(name);
 		result.append(')');
 		return result.toString();
 	}
 
-} // FolderImpl
+} //FolderImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FontInstanceImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FontInstanceImpl.java
deleted file mode 100755
index 683a3e2..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FontInstanceImpl.java
+++ /dev/null
@@ -1,390 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Font Instance</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontInstanceImpl#getFontColor <em>Font Color</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontInstanceImpl#getFontName <em>Font Name</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontInstanceImpl#getFontHeigh <em>Font Heigh</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.FontInstanceImpl#isBold <em>Bold</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class FontInstanceImpl extends TypeInstanceImpl implements FontInstance {
-	/**
-	 * The default value of the '{@link #getFontColor() <em>Font Color</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getFontColor()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int FONT_COLOR_EDEFAULT = 15053796;
-
-	/**
-	 * The cached value of the '{@link #getFontColor() <em>Font Color</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getFontColor()
-	 * @generated
-	 * @ordered
-	 */
-	protected int fontColor = FONT_COLOR_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getFontName() <em>Font Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getFontName()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String FONT_NAME_EDEFAULT = "Segoe UI";
-
-	/**
-	 * The cached value of the '{@link #getFontName() <em>Font Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getFontName()
-	 * @generated
-	 * @ordered
-	 */
-	protected String fontName = FONT_NAME_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getFontHeigh() <em>Font Heigh</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getFontHeigh()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int FONT_HEIGH_EDEFAULT = 9;
-
-	/**
-	 * The cached value of the '{@link #getFontHeigh() <em>Font Heigh</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getFontHeigh()
-	 * @generated
-	 * @ordered
-	 */
-	protected int fontHeigh = FONT_HEIGH_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #isBold() <em>Bold</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isBold()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final boolean BOLD_EDEFAULT = true;
-
-	/**
-	 * The cached value of the '{@link #isBold() <em>Bold</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isBold()
-	 * @generated
-	 * @ordered
-	 */
-	protected boolean bold = BOLD_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected FontInstanceImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.FONT_INSTANCE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public int getFontColor() {
-		return fontColor;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setFontColor(int newFontColor) {
-		int oldFontColor = fontColor;
-		fontColor = newFontColor;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.FONT_INSTANCE__FONT_COLOR, oldFontColor, fontColor));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getFontName() {
-		return fontName;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setFontName(String newFontName) {
-		String oldFontName = fontName;
-		fontName = newFontName;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.FONT_INSTANCE__FONT_NAME, oldFontName, fontName));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public int getFontHeigh() {
-		return fontHeigh;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setFontHeigh(int newFontHeigh) {
-		int oldFontHeigh = fontHeigh;
-		fontHeigh = newFontHeigh;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.FONT_INSTANCE__FONT_HEIGH, oldFontHeigh, fontHeigh));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean isBold() {
-		return bold;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setBold(boolean newBold) {
-		boolean oldBold = bold;
-		bold = newBold;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.FONT_INSTANCE__BOLD, oldBold, bold));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case LayersPackage.FONT_INSTANCE__FONT_COLOR:
-				return getFontColor();
-			case LayersPackage.FONT_INSTANCE__FONT_NAME:
-				return getFontName();
-			case LayersPackage.FONT_INSTANCE__FONT_HEIGH:
-				return getFontHeigh();
-			case LayersPackage.FONT_INSTANCE__BOLD:
-				return isBold();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case LayersPackage.FONT_INSTANCE__FONT_COLOR:
-				setFontColor((Integer)newValue);
-				return;
-			case LayersPackage.FONT_INSTANCE__FONT_NAME:
-				setFontName((String)newValue);
-				return;
-			case LayersPackage.FONT_INSTANCE__FONT_HEIGH:
-				setFontHeigh((Integer)newValue);
-				return;
-			case LayersPackage.FONT_INSTANCE__BOLD:
-				setBold((Boolean)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case LayersPackage.FONT_INSTANCE__FONT_COLOR:
-				setFontColor(FONT_COLOR_EDEFAULT);
-				return;
-			case LayersPackage.FONT_INSTANCE__FONT_NAME:
-				setFontName(FONT_NAME_EDEFAULT);
-				return;
-			case LayersPackage.FONT_INSTANCE__FONT_HEIGH:
-				setFontHeigh(FONT_HEIGH_EDEFAULT);
-				return;
-			case LayersPackage.FONT_INSTANCE__BOLD:
-				setBold(BOLD_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case LayersPackage.FONT_INSTANCE__FONT_COLOR:
-				return fontColor != FONT_COLOR_EDEFAULT;
-			case LayersPackage.FONT_INSTANCE__FONT_NAME:
-				return FONT_NAME_EDEFAULT == null ? fontName != null : !FONT_NAME_EDEFAULT.equals(fontName);
-			case LayersPackage.FONT_INSTANCE__FONT_HEIGH:
-				return fontHeigh != FONT_HEIGH_EDEFAULT;
-			case LayersPackage.FONT_INSTANCE__BOLD:
-				return bold != BOLD_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromString(String value) {
-
-		if (value == null || value.length() == 0) {
-			return;
-		}
-
-		// The value should contains the values, separated by comma
-		// "FontName, FontHeight, FontColor, Bold"
-		String[] values = value.split(",");
-		int i = 0;
-		try {
-			setFontName(values[i++].trim());
-			setFontHeigh(Integer.parseInt(values[i++].trim()));
-			setFontColor(Integer.parseInt(values[i++].trim()));
-			setBold(Boolean.parseBoolean(values[i++].trim()));
-		} catch (NumberFormatException e) {
-			// fail silently
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromInstance(TypeInstance value) {
-
-		// Check if the value is of the right instance
-		if (!getClass().isInstance(value)) {
-			return;
-		}
-
-		FontInstance instance = (FontInstance) value;
-		setFontName(instance.getFontName());
-		setFontHeigh(instance.getFontHeigh());
-		setFontColor(instance.getFontColor());
-		setBold(instance.isBold());
-	}
-
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (fontColor: "); //$NON-NLS-1$
-		result.append(fontColor);
-		result.append(", fontName: "); //$NON-NLS-1$
-		result.append(fontName);
-		result.append(", fontHeigh: "); //$NON-NLS-1$
-		result.append(fontHeigh);
-		result.append(", bold: "); //$NON-NLS-1$
-		result.append(bold);
-		result.append(')');
-		return result.toString();
-	}
-
-} // FontInstanceImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FontPropertySetterImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FontPropertySetterImpl.java
deleted file mode 100755
index 6f27fde..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FontPropertySetterImpl.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.gmf.runtime.notation.FontStyle;
-import org.eclipse.gmf.runtime.notation.NotationPackage;
-import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontPropertySetter;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Font Property Setter</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class FontPropertySetterImpl extends PropertySetterImpl implements FontPropertySetter {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected FontPropertySetterImpl() {
-		super();
-		setPropertyName("font");
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.FONT_PROPERTY_SETTER;
-	}
-
-	/**
-	 * Set the property of the specified view.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterImpl#setValue(org.eclipse.gmf.runtime.notation.View, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance)
-	 *
-	 * @param view
-	 * @param value
-	 */
-	@Override
-	public void setValue(View view, TypeInstance value) {
-
-		// Try to get the FontStyle object to modify
-		FontStyle style;
-		if (view instanceof FontStyle) {
-			// Try directly (case of Shape ...)
-			style = (FontStyle) view;
-		} else {
-			// Try as additionnal style
-			style = (FontStyle) view.getStyle(NotationPackage.eINSTANCE.getFontStyle());
-		}
-
-		// Set values
-		if (style != null) {
-			FontInstance lineValue = (FontInstance) value;
-
-			style.setFontColor(lineValue.getFontColor());
-			style.setFontName(lineValue.getFontName());
-			style.setFontHeight(lineValue.getFontHeigh());
-			style.setBold(lineValue.isBold());
-		}
-
-	}
-
-} // FontPropertySetterImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FontTypeImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FontTypeImpl.java
deleted file mode 100755
index 3ce4f75..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/FontTypeImpl.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontType;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Font Type</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class FontTypeImpl extends TypeImpl implements FontType {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected FontTypeImpl() {
-		super();
-		setName("FontType");
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.FONT_TYPE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public TypeInstance createInstance() {
-		FontInstance instance = LayersFactory.eINSTANCE.createFontInstance();
-		return instance;
-	}
-
-} // FontTypeImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IntInstanceImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IntInstanceImpl.java
deleted file mode 100755
index 2c49034..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IntInstanceImpl.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Int Instance</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.IntInstanceImpl#getValue <em>Value</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class IntInstanceImpl extends TypeInstanceImpl implements IntInstance {
-	/**
-	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int VALUE_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected int value = VALUE_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected IntInstanceImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.INT_INSTANCE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public int getValue() {
-		return value;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setValue(int newValue) {
-		int oldValue = value;
-		value = newValue;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.INT_INSTANCE__VALUE, oldValue, value));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case LayersPackage.INT_INSTANCE__VALUE:
-				return getValue();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case LayersPackage.INT_INSTANCE__VALUE:
-				setValue((Integer)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case LayersPackage.INT_INSTANCE__VALUE:
-				setValue(VALUE_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case LayersPackage.INT_INSTANCE__VALUE:
-				return value != VALUE_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromString(String value) {
-
-		if (value == null || value.length() == 0) {
-			return;
-		}
-
-		try {
-			setValue(Integer.parseInt(value.trim()));
-		} catch (NumberFormatException e) {
-			// fail silently
-		}
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromInstance(TypeInstance value) {
-
-		// Check if the value is of the right instance
-		if (!getClass().isInstance(value)) {
-			return;
-		}
-
-		IntInstance instance = (IntInstance) value;
-		setValue(instance.getValue());
-	}
-
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (value: "); //$NON-NLS-1$
-		result.append(value);
-		result.append(')');
-		return result.toString();
-	}
-
-} // IntInstanceImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IntTypeImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IntTypeImpl.java
deleted file mode 100755
index da10bc3..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IntTypeImpl.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntType;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Int Type</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class IntTypeImpl extends TypeImpl implements IntType {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected IntTypeImpl() {
-		super();
-		setName("int");
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public TypeInstance createInstance() {
-		return LayersFactory.eINSTANCE.createIntInstance();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.INT_TYPE;
-	}
-
-} // IntTypeImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IsAbstractUmlSetterImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IsAbstractUmlSetterImpl.java
deleted file mode 100755
index ea46f46..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IsAbstractUmlSetterImpl.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsAbstractUmlSetter;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-import org.eclipse.uml2.uml.Classifier;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>is Abstract Uml Setter</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class IsAbstractUmlSetterImpl extends PropertySetterImpl implements IsAbstractUmlSetter {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected IsAbstractUmlSetterImpl() {
-		super();
-		setPropertyName("isAbstract");
-
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.IS_ABSTRACT_UML_SETTER;
-	}
-
-	/**
-	 * Set the property of the specified view.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterImpl#setValue(org.eclipse.gmf.runtime.notation.View, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance)
-	 *
-	 * @param view
-	 * @param value
-	 */
-	@Override
-	public void setValue(View view, TypeInstance value) {
-
-
-		BooleanInstance boolValue = (BooleanInstance) value;
-
-		EObject ele = view.getElement();
-		if (ele instanceof Classifier) {
-			Classifier classifier = (Classifier) ele;
-			classifier.setIsAbstract(boolValue.isValue());
-		}
-
-	}
-
-} // IsAbstractUmlSetterImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IsValidPropertySetterImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IsValidPropertySetterImpl.java
deleted file mode 100755
index 058c63f..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IsValidPropertySetterImpl.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsValidPropertySetter;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Is Valid Property Setter</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class IsValidPropertySetterImpl extends PropertySetterImpl implements IsValidPropertySetter {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected IsValidPropertySetterImpl() {
-		super();
-		setPropertyName("isValid");
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.IS_VALID_PROPERTY_SETTER;
-	}
-
-
-	/**
-	 * Set the value in the view
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterImpl#setValue(org.eclipse.gmf.runtime.notation.View, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance)
-	 *
-	 * @param view
-	 * @param value
-	 */
-	@Override
-	public void setValue(View view, TypeInstance value) {
-		// TODO implements this method
-	}
-} // IsValidPropertySetterImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IsVisiblePropertySetterImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IsVisiblePropertySetterImpl.java
deleted file mode 100755
index 8b788f2..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/IsVisiblePropertySetterImpl.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.gmf.runtime.notation.Connector;
-import org.eclipse.gmf.runtime.notation.Shape;
-import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsVisiblePropertySetter;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Is Visible Property Setter</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class IsVisiblePropertySetterImpl extends PropertySetterImpl implements IsVisiblePropertySetter {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected IsVisiblePropertySetterImpl() {
-		super();
-		setPropertyName("isVisible");
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.IS_VISIBLE_PROPERTY_SETTER;
-	}
-
-	/**
-	 * Set the property of the specified view.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterImpl#setValue(org.eclipse.gmf.runtime.notation.View, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance)
-	 *
-	 * @param view
-	 * @param value
-	 */
-	@Override
-	public void setValue(View view, TypeInstance value) {
-
-
-		BooleanInstance boolValue = (BooleanInstance) value;
-
-		if (view instanceof Shape || view instanceof Connector) {
-			// We restrict to Shape and Connector
-			view.setVisible(boolValue.isValue());
-		}
-
-	}
-
-} // IsVisiblePropertySetterImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerApplicationFactoryImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerApplicationFactoryImpl.java
index 7a66859..ac35adc 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerApplicationFactoryImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerApplicationFactoryImpl.java
@@ -1,24 +1,29 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.emf.ecore.util.EcoreUtil;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerApplicationFactory;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication;
@@ -61,7 +66,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayersStackApplication getApplication() {
 		if (eContainerFeatureID() != LayersPackage.LAYER_APPLICATION_FACTORY__APPLICATION) return null;
 		return (LayersStackApplication)eInternalContainer();
@@ -82,7 +86,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setApplication(LayersStackApplication newApplication) {
 		if (newApplication != eInternalContainer() || (eContainerFeatureID() != LayersPackage.LAYER_APPLICATION_FACTORY__APPLICATION && newApplication != null)) {
 			if (EcoreUtil.isAncestor(this, newApplication))
@@ -201,4 +204,4 @@
 		return super.eIsSet(featureID);
 	}
 
-} // LayerApplicationFactoryImpl
+} //LayerApplicationFactoryImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerDescriptorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerDescriptorImpl.java
index 98300a5..2381f1f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerDescriptorImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerDescriptorImpl.java
@@ -1,22 +1,26 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptor;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry;
@@ -69,7 +73,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public PropertyRegistry getPropertyRegistry() {
 		if (propertyRegistry != null && propertyRegistry.eIsProxy()) {
 			InternalEObject oldPropertyRegistry = (InternalEObject)propertyRegistry;
@@ -96,7 +99,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setPropertyRegistry(PropertyRegistry newPropertyRegistry) {
 		PropertyRegistry oldPropertyRegistry = propertyRegistry;
 		propertyRegistry = newPropertyRegistry;
@@ -163,4 +165,4 @@
 		return super.eIsSet(featureID);
 	}
 
-} // LayerDescriptorImpl
+} //LayerDescriptorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerDescriptorRegistryImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerDescriptorRegistryImpl.java
index 0b5bcf2..7e9be2d 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerDescriptorRegistryImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerDescriptorRegistryImpl.java
@@ -1,26 +1,33 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.util.Collection;
+import java.util.List;
 
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptor;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptorRegistry;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
@@ -73,8 +80,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EList<LayerDescriptor> getLayerDescriptors() {
+	public List<LayerDescriptor> getLayerDescriptors() {
 		if (layerDescriptors == null) {
 			layerDescriptors = new EObjectContainmentEList<LayerDescriptor>(LayerDescriptor.class, this, LayersPackage.LAYER_DESCRIPTOR_REGISTRY__LAYER_DESCRIPTORS);
 		}
@@ -155,4 +161,4 @@
 		return super.eIsSet(featureID);
 	}
 
-} // LayerDescriptorRegistryImpl
+} //LayerDescriptorRegistryImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerExpressionImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerExpressionImpl.java
index 9d16330..5bbc101 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerExpressionImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerExpressionImpl.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
@@ -19,15 +20,20 @@
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.impl.AdapterImpl;
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EcorePackage;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.BadStateException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerState;
@@ -54,8 +60,7 @@
  *
  * @generated
  */
-public abstract class LayerExpressionImpl extends
-		ApplicationDependantElementImpl implements LayerExpression {
+public abstract class LayerExpressionImpl extends ApplicationDependantElementImpl implements LayerExpression {
 	/**
 	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -65,6 +70,7 @@
 	 * @ordered
 	 */
 	protected static final String NAME_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -74,6 +80,7 @@
 	 * @ordered
 	 */
 	protected String name = NAME_EDEFAULT;
+
 	/**
 	 * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -83,6 +90,7 @@
 	 * @ordered
 	 */
 	protected static final String DESCRIPTION_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -102,6 +110,7 @@
 	 * @ordered
 	 */
 	protected static final boolean IS_LAYER_ENABLED_INTERNAL_EDEFAULT = false;
+
 	/**
 	 * The default value of the '{@link #isLayerEnabled() <em>Is Layer Enabled</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -111,6 +120,7 @@
 	 * @ordered
 	 */
 	protected static final boolean IS_LAYER_ENABLED_EDEFAULT = true;
+
 	/**
 	 * The cached value of the '{@link #isLayerEnabled() <em>Is Layer Enabled</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -120,6 +130,7 @@
 	 * @ordered
 	 */
 	protected boolean isLayerEnabled = IS_LAYER_ENABLED_EDEFAULT;
+
 	/**
 	 * The default value of the '{@link #isBranchEnabled() <em>Is Branch Enabled</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -129,6 +140,7 @@
 	 * @ordered
 	 */
 	protected static final boolean IS_BRANCH_ENABLED_EDEFAULT = true;
+
 	/**
 	 * The cached value of the '{@link #isBranchEnabled() <em>Is Branch Enabled</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -138,6 +150,7 @@
 	 * @ordered
 	 */
 	protected boolean isBranchEnabled = IS_BRANCH_ENABLED_EDEFAULT;
+
 	/**
 	 * The cached value of the '{@link #getOwningLayersStack() <em>Owning Layers Stack</em>}' reference.
 	 * <!-- begin-user-doc -->
@@ -157,6 +170,7 @@
 	 * @ordered
 	 */
 	protected static final LayerState STATE_EDEFAULT = LayerState.DETACHED;
+
 	/**
 	 * The cached value of the '{@link #getState() <em>State</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -166,8 +180,11 @@
 	 * @ordered
 	 */
 	protected LayerState state = STATE_EDEFAULT;
+
 	/**
 	 * Listener on this object container (i.e owner) attached/detached events
+	 * 
+	 * @generated NOT
 	 */
 	protected Adapter containerListener = new AdapterImpl() {
 		@Override
@@ -195,7 +212,6 @@
 
 	};
 
-
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -212,9 +228,12 @@
 
 	}
 
+
 	/**
 	 * Start the behaviors associated to this layer.
 	 * This method is called by one of the methods: {@link #startAfterReloading()} or {@link #attachToLayersStack(LayersStack)}.
+	 * 
+	 * @generated NOT
 	 */
 	protected void startBehaviors() {
 
@@ -300,7 +319,7 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
+	 * 
 	 * @generated NOT
 	 */
 	@Override
@@ -328,19 +347,14 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	@Override
 	public void setIsBranchEnabled(boolean newIsBranchEnabled) {
 		boolean oldIsBranchEnabled = isBranchEnabled;
 		isBranchEnabled = newIsBranchEnabled;
-		if (eNotificationRequired()) {
+		if (eNotificationRequired())
 			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.LAYER_EXPRESSION__IS_BRANCH_ENABLED, oldIsBranchEnabled, isBranchEnabled));
-		}
-
-		// Propagate to children.
-		// This is done in LayerOperation.
 	}
 
 	/**
@@ -409,6 +423,58 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ComputePropertyValueCommand getComputePropertyValueCommand(View view, Property property) throws LayersException {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(List<View> view, Property property) throws LayersException {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, List<Property> property) throws LayersException {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	@Override
+	public void attachToLayersStack(LayersStack owningLayersStack) {
+
+		// the owning stack
+		setOwningLayersStack(owningLayersStack);
+
+		// Start associated behavior
+		startBehaviors();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 *
 	 * @generated NOT
 	 */
@@ -426,7 +492,7 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
+	 * 
 	 * @generated NOT
 	 */
 	@Override
@@ -437,7 +503,7 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
+	 * 
 	 * @generated NOT
 	 */
 	@Override
@@ -465,9 +531,8 @@
 
 	/**
 	 * <!-- begin-user-doc -->
-	 * Subclass can overload in order to stop some behaviors.
 	 * <!-- end-user-doc -->
-	 *
+	 * 
 	 * @generated NOT
 	 */
 	@Override
@@ -482,7 +547,7 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
+	 * 
 	 * @generated NOT
 	 */
 	@Override
@@ -492,117 +557,6 @@
 
 	/**
 	 * <!-- begin-user-doc -->
-	 * Start this element after its reloading by EMF
-	 * This method is called recursively by the parent of this element. <br>
-	 * This default implementation start the associated behaviors.
-	 *
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	public void startAfterReloading() {
-		startBehaviors();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public ComputePropertyValueCommand getComputePropertyValueCommand(View view, Property property) throws LayersException {
-		// TODO: implement this method
-		// Ensure that you remove @generated or mark it @generated NOT
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EList<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(EList<View> view, Property property) throws LayersException {
-		// TODO: implement this method
-		// Ensure that you remove @generated or mark it @generated NOT
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EList<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, EList<Property> property) throws LayersException {
-		// TODO: implement this method
-		// Ensure that you remove @generated or mark it @generated NOT
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * This default implementation set the layerStack, and start behaviors.
-	 * This method can be overriden by subclasses. In this case, subclass must ensure that
-	 * the {@link #owningLayersStack} is set and the behaviors are started.
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void attachToLayersStack(LayersStack owningLayersStack) {
-
-		// the owning stack
-		setOwningLayersStack(owningLayersStack);
-
-		// Start associated behavior
-		startBehaviors();
-	}
-
-	/**
-	 * Init this Layer.
-	 * Called by the LayerStack as soon as the layer is added in the tree of layers.
-	 * This method can be subclassed to init a particular layer.
-	 *
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	public void initLayer(LayersStack owningLayersStack) {
-
-		// the owning stack
-		setOwningLayersStack(owningLayersStack);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public EList<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(List<View> view, Property property) throws LayersException {
-		// TODO: implement this method
-		// Ensure that you remove @generated or mark it @generated NOT
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public EList<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, List<Property> property) throws LayersException {
-		// TODO: implement this method
-		// Ensure that you remove @generated or mark it @generated NOT
-		throw new UnsupportedOperationException();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
@@ -730,16 +684,16 @@
 				catch (Throwable throwable) {
 					throw new InvocationTargetException(throwable);
 				}
-			case LayersPackage.LAYER_EXPRESSION___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY:
+			case LayersPackage.LAYER_EXPRESSION___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY:
 				try {
-					return getViewsComputePropertyValueCommand((EList<View>)arguments.get(0), (Property)arguments.get(1));
+					return getViewsComputePropertyValueCommand((List<View>)arguments.get(0), (Property)arguments.get(1));
 				}
 				catch (Throwable throwable) {
 					throw new InvocationTargetException(throwable);
 				}
-			case LayersPackage.LAYER_EXPRESSION___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST:
+			case LayersPackage.LAYER_EXPRESSION___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST:
 				try {
-					return getPropertiesComputePropertyValueCommand((View)arguments.get(0), (EList<Property>)arguments.get(1));
+					return getPropertiesComputePropertyValueCommand((View)arguments.get(0), (List<Property>)arguments.get(1));
 				}
 				catch (Throwable throwable) {
 					throw new InvocationTargetException(throwable);
@@ -794,7 +748,7 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (name: "); //$NON-NLS-1$
 		result.append(name);
 		result.append(", description: "); //$NON-NLS-1$
@@ -809,6 +763,38 @@
 		return result.toString();
 	}
 
+
+	/** Below is Custom code added to the class after generation, This MUST be removed during the next iteration of the model */
+	/**
+	 * <!-- begin-user-doc -->
+	 * Start this element after its reloading by EMF
+	 * This method is called recursively by the parent of this element. <br>
+	 * This default implementation start the associated behaviors.
+	 *
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated NOT
+	 */
+	public void startAfterReloading() {
+		startBehaviors();
+	}
+
+	/**
+	 * Init this Layer.
+	 * Called by the LayerStack as soon as the layer is added in the tree of layers.
+	 * This method can be subclassed to init a particular layer.
+	 *
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated NOT
+	 */
+	public void initLayer(LayersStack owningLayersStack) {
+
+		// the owning stack
+		setOwningLayersStack(owningLayersStack);
+	}
+
 	/**
 	 * This method is called when the container of this parent has changed.
 	 * Set the #owningLayerStack property and the {@link #isBranchEnabled()} property
@@ -822,6 +808,8 @@
 			setOwningLayersStack(newParent.getOwningLayersStack());
 			setIsBranchEnabled(newParent.isBranchEnabled());
 		}
-	};
+	}
+
+
 
 } // LayerExpressionImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerImpl.java
index 1ab2dcc..c94f60f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerImpl.java
@@ -1,18 +1,20 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.ecore.EClass;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Layer;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 
@@ -27,8 +29,7 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	protected LayerImpl() {
 		super();
@@ -44,5 +45,4 @@
 		return LayersPackage.Literals.LAYER;
 	}
 
-
-} // LayerImpl
+} //LayerImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerNamedStyleImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerNamedStyleImpl.java
index ca53ff3..f279b74 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerNamedStyleImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerNamedStyleImpl.java
@@ -1,26 +1,33 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.util.Collection;
+import java.util.List;
 
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
+
 import org.eclipse.gmf.runtime.notation.impl.NamedStyleImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerNamedStyle;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
@@ -73,8 +80,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EList<LayersStack> getLayersStack() {
+	public List<LayersStack> getLayersStack() {
 		if (layersStack == null) {
 			layersStack = new EObjectContainmentEList<LayersStack>(LayersStack.class, this, LayersPackage.LAYER_NAMED_STYLE__LAYERS_STACK);
 		}
@@ -155,4 +161,4 @@
 		return super.eIsSet(featureID);
 	}
 
-} // LayerNamedStyleImpl
+} //LayerNamedStyleImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerOperatorDescriptorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerOperatorDescriptorImpl.java
index fd7d319..9a776e9 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerOperatorDescriptorImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerOperatorDescriptorImpl.java
@@ -1,30 +1,37 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.List;
 
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.DefaultPropertyOperator;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
@@ -38,18 +45,18 @@
  * The following features are implemented:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorDescriptorImpl#getPropertyOperators <em>Property Operators</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorDescriptorImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorDescriptorImpl#getPropertyOperators <em>Property Operators</em>}</li>
+ * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorDescriptorImpl#getName <em>Name</em>}</li>
  * </ul>
  *
  * @generated
  */
 public class LayerOperatorDescriptorImpl extends EObjectImpl implements LayerOperatorDescriptor {
-
 	/**
 	 * The cached value of the '{@link #getPropertyOperators() <em>Property Operators</em>}' reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @see #getPropertyOperators()
 	 * @generated
 	 * @ordered
@@ -60,6 +67,7 @@
 	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @see #getName()
 	 * @generated
 	 * @ordered
@@ -70,6 +78,7 @@
 	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @see #getName()
 	 * @generated
 	 * @ordered
@@ -79,6 +88,7 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	protected LayerOperatorDescriptorImpl() {
@@ -88,6 +98,7 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
@@ -99,26 +110,17 @@
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	@Override
-	public EList<PropertyOperator> getPropertyOperators() {
-		if (propertyOperators == null) {
-			propertyOperators = new EObjectResolvingEList<PropertyOperator>(PropertyOperator.class, this, LayersPackage.LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS) {
-				// Allows double
-				@Override
-				protected boolean isUnique() {
-					return false;
-				}
-
-			};
-		}
-		return propertyOperators;
+	public List<PropertyOperator> getPropertyOperators() {
+		return null;
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
@@ -129,6 +131,7 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
@@ -143,15 +146,11 @@
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	@Override
 	public PropertyOperator getPropertyOperator(Property property) throws NotFoundException {
-		try {
-			return getPropertyOperators().get(property.getIndex());
-		} catch (IndexOutOfBoundsException e) {
-			throw new NotFoundException("Can't find operator for property '" + property.getName() + "' at index " + property.getIndex());
-		}
+		return null;
 	}
 
 	/**
@@ -159,22 +158,21 @@
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	@Override
 	public void setPropertyOperator(Property property, PropertyOperator operator) {
-
-		// Set the operator at the property's index.
-		getPropertyOperators().set(property.getIndex(), operator);
+		return;
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
-	public AbstractLayerOperator createLayerOperator() {
+	public LayerOperator createLayerOperator() {
 		// TODO: implement this method
 		// Ensure that you remove @generated or mark it @generated NOT
 		throw new UnsupportedOperationException();
@@ -186,37 +184,26 @@
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	@Override
-	public void setPropertyCollectionSize(int size, DefaultPropertyOperator defaultPropertyOperator) {
-
-		List<PropertyOperator> operators = getPropertyOperators();
-		int actualSize = operators.size();
-		// Check if we need to increase the size.
-		if (actualSize >= size) {
-			// do nothing
-			return;
-		}
-
-		// Add missing elements
-		for (int i = actualSize; i < size; i++) {
-			operators.add(defaultPropertyOperator);
-		}
+	public void setPropertyCollectionSize(int size, PropertyOperator defaultPropertyOperator) {
+		return;
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-			case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS:
-				return getPropertyOperators();
-			case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__NAME:
-				return getName();
+		case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS:
+			return getPropertyOperators();
+		case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__NAME:
+			return getName();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -224,19 +211,20 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@SuppressWarnings("unchecked")
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS:
-				getPropertyOperators().clear();
-				getPropertyOperators().addAll((Collection<? extends PropertyOperator>)newValue);
-				return;
-			case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__NAME:
-				setName((String)newValue);
-				return;
+		case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS:
+			getPropertyOperators().clear();
+			getPropertyOperators().addAll((Collection<? extends PropertyOperator>) newValue);
+			return;
+		case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__NAME:
+			setName((String) newValue);
+			return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -244,17 +232,18 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS:
-				getPropertyOperators().clear();
-				return;
-			case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__NAME:
-				setName(NAME_EDEFAULT);
-				return;
+		case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS:
+			getPropertyOperators().clear();
+			return;
+		case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__NAME:
+			setName(NAME_EDEFAULT);
+			return;
 		}
 		super.eUnset(featureID);
 	}
@@ -262,15 +251,16 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-			case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS:
-				return propertyOperators != null && !propertyOperators.isEmpty();
-			case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__NAME:
-				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+		case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS:
+			return propertyOperators != null && !propertyOperators.isEmpty();
+		case LayersPackage.LAYER_OPERATOR_DESCRIPTOR__NAME:
+			return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 		}
 		return super.eIsSet(featureID);
 	}
@@ -278,26 +268,26 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
 	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
 		switch (operationID) {
-			case LayersPackage.LAYER_OPERATOR_DESCRIPTOR___GET_PROPERTY_OPERATOR__PROPERTY:
-				try {
-					return getPropertyOperator((Property)arguments.get(0));
-				}
-				catch (Throwable throwable) {
-					throw new InvocationTargetException(throwable);
-				}
-			case LayersPackage.LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_OPERATOR__PROPERTY_PROPERTYOPERATOR:
-				setPropertyOperator((Property)arguments.get(0), (PropertyOperator)arguments.get(1));
-				return null;
-			case LayersPackage.LAYER_OPERATOR_DESCRIPTOR___CREATE_LAYER_OPERATOR:
-				return createLayerOperator();
-			case LayersPackage.LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_DEFAULTPROPERTYOPERATOR:
-				setPropertyCollectionSize((Integer)arguments.get(0), (DefaultPropertyOperator)arguments.get(1));
-				return null;
+		case LayersPackage.LAYER_OPERATOR_DESCRIPTOR___GET_PROPERTY_OPERATOR__PROPERTY:
+			try {
+				return getPropertyOperator((Property) arguments.get(0));
+			} catch (Throwable throwable) {
+				throw new InvocationTargetException(throwable);
+			}
+		case LayersPackage.LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_OPERATOR__PROPERTY_PROPERTYOPERATOR:
+			setPropertyOperator((Property) arguments.get(0), (PropertyOperator) arguments.get(1));
+			return null;
+		case LayersPackage.LAYER_OPERATOR_DESCRIPTOR___CREATE_LAYER_OPERATOR:
+			return createLayerOperator();
+		case LayersPackage.LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_PROPERTYOPERATOR:
+			setPropertyCollectionSize((Integer) arguments.get(0), (PropertyOperator) arguments.get(1));
+			return null;
 		}
 		return super.eInvoke(operationID, arguments);
 	}
@@ -305,13 +295,15 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
 	public String toString() {
-		if (eIsProxy()) return super.toString();
+		if (eIsProxy())
+			return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (name: "); //$NON-NLS-1$
 		result.append(name);
 		result.append(')');
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerOperatorDescriptorRegistryImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerOperatorDescriptorRegistryImpl.java
index bf4494a..0d50ac1 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerOperatorDescriptorRegistryImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerOperatorDescriptorRegistryImpl.java
@@ -1,36 +1,43 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
+import java.util.List;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.DefaultPropertyOperator;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptorRegistry;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator;
@@ -100,18 +107,15 @@
 	 * @generated
 	 * @ordered
 	 */
-	protected DefaultPropertyOperator defaultOperator;
+	protected PropertyOperator defaultOperator;
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	protected LayerOperatorDescriptorRegistryImpl() {
 		super();
-		// Set the defaultOperator
-		defaultOperator = LayersFactory.eINSTANCE.createDefaultPropertyOperator();
 	}
 
 	/**
@@ -129,8 +133,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EList<LayerOperatorDescriptor> getDescriptors() {
+	public List<LayerOperatorDescriptor> getDescriptors() {
 		if (descriptors == null) {
 			descriptors = new EObjectContainmentEList<LayerOperatorDescriptor>(LayerOperatorDescriptor.class, this, LayersPackage.LAYER_OPERATOR_DESCRIPTOR_REGISTRY__DESCRIPTORS);
 		}
@@ -142,8 +145,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EList<PropertyOperator> getPropertyOperators() {
+	public List<PropertyOperator> getPropertyOperators() {
 		if (propertyOperators == null) {
 			propertyOperators = new EObjectContainmentEList<PropertyOperator>(PropertyOperator.class, this, LayersPackage.LAYER_OPERATOR_DESCRIPTOR_REGISTRY__PROPERTY_OPERATORS);
 		}
@@ -155,7 +157,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public int getPropertyCollectionSize() {
 		return propertyCollectionSize;
 	}
@@ -163,23 +164,13 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public void setPropertyCollectionSize(int newPropertyCollectionSize) {
 		int oldPropertyCollectionSize = propertyCollectionSize;
 		propertyCollectionSize = newPropertyCollectionSize;
-		if (eNotificationRequired()) {
+		if (eNotificationRequired())
 			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.LAYER_OPERATOR_DESCRIPTOR_REGISTRY__PROPERTY_COLLECTION_SIZE, oldPropertyCollectionSize, propertyCollectionSize));
-		}
-
-		// Propagate the size to registered LayerOperator
-		if (newPropertyCollectionSize > oldPropertyCollectionSize) {
-			for (LayerOperatorDescriptor descriptor : getDescriptors()) {
-				descriptor.setPropertyCollectionSize(newPropertyCollectionSize, getDefaultOperator());
-			}
-		}
 	}
 
 	/**
@@ -187,11 +178,10 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public DefaultPropertyOperator getDefaultOperator() {
+	public PropertyOperator getDefaultOperator() {
 		if (defaultOperator != null && defaultOperator.eIsProxy()) {
 			InternalEObject oldDefaultOperator = (InternalEObject)defaultOperator;
-			defaultOperator = (DefaultPropertyOperator)eResolveProxy(oldDefaultOperator);
+			defaultOperator = (PropertyOperator)eResolveProxy(oldDefaultOperator);
 			if (defaultOperator != oldDefaultOperator) {
 				if (eNotificationRequired())
 					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LayersPackage.LAYER_OPERATOR_DESCRIPTOR_REGISTRY__DEFAULT_OPERATOR, oldDefaultOperator, defaultOperator));
@@ -205,116 +195,74 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public DefaultPropertyOperator basicGetDefaultOperator() {
+	public PropertyOperator basicGetDefaultOperator() {
 		return defaultOperator;
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public void addLayerOperatorDescriptor(LayerOperatorDescriptor descriptor) {
-
-		// Ensure descriptor size
-		descriptor.setPropertyCollectionSize(getPropertyCollectionSize(), getDefaultOperator());
-		// Add descriptor
-		getDescriptors().add(descriptor);
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public LayerOperatorDescriptor getLayerOperatorDescriptor(String name) throws NotFoundException {
-		if (name == null) {
-			throw new NotFoundException("Can't find LayerOperatorDescriptor for name 'null'.");
-		}
-		for (LayerOperatorDescriptor descriptor : getDescriptors()) {
-			if (name.equals(descriptor.getName())) {
-				return descriptor;
-			}
-		}
-		// Not found
-		throw new NotFoundException("Can't find LayerOperatorDescriptor for name '" + name + "'.");
-
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public void addPropertyOperator(PropertyOperator operator) {
-		getPropertyOperators().add(operator);
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public PropertyOperator getPropertyOperator(String name) throws NotFoundException {
-
-		if (name == null) {
-			throw new NotFoundException("Can't find PropertyOperator for name 'null'.");
-		}
-		for (PropertyOperator op : getPropertyOperators()) {
-			if (name.equals(op.getName())) {
-				return op;
-			}
-		}
-		// Not found
-		throw new NotFoundException("Can't find PropertyOperator for name '" + name + "'.");
-
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @throws NotFoundException
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public void attachOperatorToDescriptor(Property property, String operatorName, String layerDescriptorName) throws NotFoundException {
-
-		// Ensure that PropertiesCollectionSize can contain the property index.
-		if (getPropertyCollectionSize() <= property.getIndex()) {
-			setPropertyCollectionSize(property.getIndex());
-		}
-
-		// Attach the operator to the LayerOperator
-		PropertyOperator op = getPropertyOperator(operatorName);
-		LayerOperatorDescriptor layerOp = getLayerOperatorDescriptor(layerDescriptorName);
-
-		layerOp.setPropertyOperator(property, op);
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
-	public AbstractLayerOperator createLayerOperator(String layerOperatorID) throws LayersException {
-
-		LayerOperatorDescriptor desc = getLayerOperatorDescriptor(layerOperatorID);
-
-		AbstractLayerOperator newLayerOperator = desc.createLayerOperator();
-
-		// newLayerOperator.setApplication();
-		return newLayerOperator;
+	public LayerOperator createLayerOperator(String layerOperatorID) throws LayersException {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
@@ -475,11 +423,11 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (propertyCollectionSize: "); //$NON-NLS-1$
 		result.append(propertyCollectionSize);
 		result.append(')');
 		return result.toString();
 	}
 
-} // LayerOperatorDescriptorRegistryImpl
+} //LayerOperatorDescriptorRegistryImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerOperatorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerOperatorImpl.java
index c171609..51db472 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerOperatorImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerOperatorImpl.java
@@ -1,29 +1,39 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.Collection;
 
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersContainer;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
@@ -36,7 +46,9 @@
  * The following features are implemented:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorImpl#getLayers <em>Layers</em>}</li>
+ * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorImpl#getLayers <em>Layers</em>}</li>
+ * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorImpl#getLayerOperatorDescriptorName <em>Layer Operator Descriptor Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorImpl#getLayerOperatorDescriptor <em>Layer Operator Descriptor</em>}</li>
  * </ul>
  *
  * @generated
@@ -46,6 +58,7 @@
 	 * The cached value of the '{@link #getLayers() <em>Layers</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @see #getLayers()
 	 * @generated
 	 * @ordered
@@ -53,8 +66,42 @@
 	protected EList<LayerExpression> layers;
 
 	/**
+	 * The default value of the '{@link #getLayerOperatorDescriptorName() <em>Layer Operator Descriptor Name</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getLayerOperatorDescriptorName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String LAYER_OPERATOR_DESCRIPTOR_NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getLayerOperatorDescriptorName() <em>Layer Operator Descriptor Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getLayerOperatorDescriptorName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String layerOperatorDescriptorName = LAYER_OPERATOR_DESCRIPTOR_NAME_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getLayerOperatorDescriptor() <em>Layer Operator Descriptor</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @see #getLayerOperatorDescriptor()
+	 * @generated
+	 * @ordered
+	 */
+	protected LayerOperatorDescriptor layerOperatorDescriptor;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	protected LayerOperatorImpl() {
@@ -64,6 +111,7 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
@@ -74,10 +122,11 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
-	public EList<LayerExpression> getLayers() {
+	public List<LayerExpression> getLayers() {
 		if (layers == null) {
 			layers = new EObjectContainmentEList<LayerExpression>(LayerExpression.class, this, LayersPackage.LAYER_OPERATOR__LAYERS);
 		}
@@ -87,8 +136,76 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * 
+	 * @generated
+	 */
+	@Override
+	public String getLayerOperatorDescriptorName() {
+		return layerOperatorDescriptorName;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setLayerOperatorDescriptorName(String newLayerOperatorDescriptorName) {
+		String oldLayerOperatorDescriptorName = layerOperatorDescriptorName;
+		layerOperatorDescriptorName = newLayerOperatorDescriptorName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME, oldLayerOperatorDescriptorName, layerOperatorDescriptorName));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public LayerOperatorDescriptor getLayerOperatorDescriptor() {
+		if (layerOperatorDescriptor != null && layerOperatorDescriptor.eIsProxy()) {
+			InternalEObject oldLayerOperatorDescriptor = (InternalEObject) layerOperatorDescriptor;
+			layerOperatorDescriptor = (LayerOperatorDescriptor) eResolveProxy(oldLayerOperatorDescriptor);
+			if (layerOperatorDescriptor != oldLayerOperatorDescriptor) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LayersPackage.LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR, oldLayerOperatorDescriptor, layerOperatorDescriptor));
+			}
+		}
+		return layerOperatorDescriptor;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	public LayerOperatorDescriptor basicGetLayerOperatorDescriptor() {
+		return layerOperatorDescriptor;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setLayerOperatorDescriptor(LayerOperatorDescriptor newLayerOperatorDescriptor) {
+		LayerOperatorDescriptor oldLayerOperatorDescriptor = layerOperatorDescriptor;
+		layerOperatorDescriptor = newLayerOperatorDescriptor;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR, oldLayerOperatorDescriptor, layerOperatorDescriptor));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
 	 */
 	@Override
 	public void addLayer(LayerExpression layer) {
@@ -100,13 +217,40 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public boolean isDescriptorSet() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void resetDescriptor() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-			case LayersPackage.LAYER_OPERATOR__LAYERS:
-				return ((InternalEList<?>)getLayers()).basicRemove(otherEnd, msgs);
+		case LayersPackage.LAYER_OPERATOR__LAYERS:
+			return ((InternalEList<?>) getLayers()).basicRemove(otherEnd, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -114,13 +258,20 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-			case LayersPackage.LAYER_OPERATOR__LAYERS:
-				return getLayers();
+		case LayersPackage.LAYER_OPERATOR__LAYERS:
+			return getLayers();
+		case LayersPackage.LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME:
+			return getLayerOperatorDescriptorName();
+		case LayersPackage.LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR:
+			if (resolve)
+				return getLayerOperatorDescriptor();
+			return basicGetLayerOperatorDescriptor();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -128,16 +279,23 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@SuppressWarnings("unchecked")
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case LayersPackage.LAYER_OPERATOR__LAYERS:
-				getLayers().clear();
-				getLayers().addAll((Collection<? extends LayerExpression>)newValue);
-				return;
+		case LayersPackage.LAYER_OPERATOR__LAYERS:
+			getLayers().clear();
+			getLayers().addAll((Collection<? extends LayerExpression>) newValue);
+			return;
+		case LayersPackage.LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME:
+			setLayerOperatorDescriptorName((String) newValue);
+			return;
+		case LayersPackage.LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR:
+			setLayerOperatorDescriptor((LayerOperatorDescriptor) newValue);
+			return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -145,14 +303,21 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case LayersPackage.LAYER_OPERATOR__LAYERS:
-				getLayers().clear();
-				return;
+		case LayersPackage.LAYER_OPERATOR__LAYERS:
+			getLayers().clear();
+			return;
+		case LayersPackage.LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME:
+			setLayerOperatorDescriptorName(LAYER_OPERATOR_DESCRIPTOR_NAME_EDEFAULT);
+			return;
+		case LayersPackage.LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR:
+			setLayerOperatorDescriptor((LayerOperatorDescriptor) null);
+			return;
 		}
 		super.eUnset(featureID);
 	}
@@ -160,13 +325,18 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-			case LayersPackage.LAYER_OPERATOR__LAYERS:
-				return layers != null && !layers.isEmpty();
+		case LayersPackage.LAYER_OPERATOR__LAYERS:
+			return layers != null && !layers.isEmpty();
+		case LayersPackage.LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME:
+			return LAYER_OPERATOR_DESCRIPTOR_NAME_EDEFAULT == null ? layerOperatorDescriptorName != null : !LAYER_OPERATOR_DESCRIPTOR_NAME_EDEFAULT.equals(layerOperatorDescriptorName);
+		case LayersPackage.LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR:
+			return layerOperatorDescriptor != null;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -174,14 +344,17 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
 	public int eDerivedOperationID(int baseOperationID, Class<?> baseClass) {
 		if (baseClass == LayersContainer.class) {
 			switch (baseOperationID) {
-				case LayersPackage.LAYERS_CONTAINER___ADD_LAYER__LAYEREXPRESSION: return LayersPackage.LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION;
-				default: return -1;
+			case LayersPackage.LAYERS_CONTAINER___ADD_LAYER__LAYEREXPRESSION:
+				return LayersPackage.LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION;
+			default:
+				return -1;
 			}
 		}
 		return super.eDerivedOperationID(baseOperationID, baseClass);
@@ -190,35 +363,42 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@Override
 	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
 		switch (operationID) {
-			case LayersPackage.LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION:
-				addLayer((LayerExpression)arguments.get(0));
-				return null;
+		case LayersPackage.LAYER_OPERATOR___ADD_LAYER__LAYEREXPRESSION:
+			addLayer((LayerExpression) arguments.get(0));
+			return null;
+		case LayersPackage.LAYER_OPERATOR___IS_DESCRIPTOR_SET:
+			return isDescriptorSet();
+		case LayersPackage.LAYER_OPERATOR___RESET_DESCRIPTOR:
+			resetDescriptor();
+			return null;
 		}
 		return super.eInvoke(operationID, arguments);
 	}
 
 	/**
-	 * Get the LayersStack that own directly or indirectly this Layer.
-	 * Throw an exception if no {@link LayersStack} can be found. <br>
-	 * Lookup is done recursively in parent containers.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#getLayersStack()
-	 *
-	 * @return
-	 * @throws NotFoundException
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
 	 */
-	// @Override
-	// public LayersStack getLayersStack() throws NotFoundException {
-	// // TODO: performance improvment. It is possible to avoid the lookup
-	// // by caching the LayersStack, or by setting a corresponding property
-	// // in the model
-	// return (LayersStack)ECoreUtils.lookupAncestorOfType(this, LayersPackage.eINSTANCE.getLayersStack());
-	// }
+	@Override
+	public String toString() {
+		if (eIsProxy())
+			return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (layerOperatorDescriptorName: "); //$NON-NLS-1$
+		result.append(layerOperatorDescriptorName);
+		result.append(')');
+		return result.toString();
+	}
+
 
 	/**
 	 * Propagate the change to children
@@ -226,6 +406,8 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#setIsBranchEnabled(boolean)
 	 *
 	 * @param newIsBranchEnabled
+	 * 
+	 * @generated
 	 */
 	@Override
 	public void setIsBranchEnabled(boolean newIsBranchEnabled) {
@@ -244,6 +426,8 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#setOwningLayersStack(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack)
 	 *
 	 * @param newOwningLayersStack
+	 * 
+	 * @generated
 	 */
 	@Override
 	public void setOwningLayersStack(LayersStack newOwningLayersStack) {
@@ -264,7 +448,7 @@
 	 * <!-- end-user-doc -->
 	 *
 	 * @throws LayersException
-	 * @generated NOT
+	 * @generated
 	 */
 	@Override
 	public void attach() throws LayersException {
@@ -281,6 +465,7 @@
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#detach()
 	 *
 	 * @throws LayersException
+	 * @generated
 	 */
 	@Override
 	public void detach() throws LayersException {
@@ -297,7 +482,7 @@
 	 * <!-- end-user-doc -->
 	 *
 	 * @deprecated unless we need it again
-	 * @generated NOT
+	 * @generated
 	 */
 	@Deprecated
 	@Override
@@ -315,5 +500,4 @@
 		startBehaviors();
 	}
 
-
 } // LayerOperatorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerStackDescriptorRegistryImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerStackDescriptorRegistryImpl.java
index c81fec1..179b73f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerStackDescriptorRegistryImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayerStackDescriptorRegistryImpl.java
@@ -1,19 +1,22 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.ecore.EClass;
+
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerStackDescriptorRegistry;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 
@@ -44,4 +47,4 @@
 		return LayersPackage.Literals.LAYER_STACK_DESCRIPTOR_REGISTRY;
 	}
 
-} // LayerStackDescriptorRegistryImpl
+} //LayerStackDescriptorRegistryImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersFactoryForStackImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersFactoryForStackImpl.java
deleted file mode 100755
index b584f4f..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersFactoryForStackImpl.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Layer;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersContainer;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactoryForStack;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model <b>Factory</b>.
- * This factory allows to create Layers dedicated to a Application and {@link LayersStack} <!-- end-user-doc -->
- *
- * @generated
- */
-public class LayersFactoryForStackImpl implements LayersFactoryForStack {
-
-	/**
-	 * Index used to postfix the layer name.
-	 */
-	protected int newIndex = 0;
-
-	public final String LAYER_NAME_PREFIX = "layer";
-
-	/**
-	 * Creates the default factory implementation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated
-	 */
-	public static LayersFactoryForStack init() {
-		return new LayersFactoryForStackImpl();
-	}
-
-	/**
-	 * Creates an instance of the factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated
-	 */
-	public LayersFactoryForStackImpl() {
-		super();
-	}
-
-	public String findNewLayerName(LayersContainer parent) {
-
-		String proposedName = LAYER_NAME_PREFIX + newIndex++;
-
-		// Check if the name is available in the targetted container
-		if (parent instanceof LayerOperator) {
-			LayerOperator parentOperator = (LayerOperator) parent;
-			while (getLayerByName(parentOperator, proposedName) != null) {
-				proposedName = LAYER_NAME_PREFIX + newIndex++;
-			}
-		}
-		return proposedName;
-	}
-
-	/**
-	 * Get a layer by its name.
-	 *
-	 * @param parentOperator
-	 *            The container containing layers
-	 * @param name
-	 *            Name of the requested layer.
-	 * @return The requested layer, or null.
-	 */
-	private LayerExpression getLayerByName(LayerOperator parentOperator, String name) {
-
-
-		for (LayerExpression layer : parentOperator.getLayers()) {
-			if (name.equals(layer.getName())) {
-				return layer;
-			}
-		}
-		// Not found
-		return null;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public LayersStack createLayersStack() {
-		throw new UnsupportedOperationException("Not yet implemented");
-	}
-
-
-	/**
-	 *
-	 * @param layer
-	 *            The layer to init
-	 * @param parentLayer
-	 *            The parent Layer to which layer is added
-	 * @param owningStack
-	 *            The {@link LayersStack} owning the tree of layers
-	 * @param application
-	 *            The application required by layer.
-	 *
-	 * @return
-	 * @throws LayersException
-	 */
-	@Override
-	public LayerExpression initLayer(LayerExpression layer, LayersContainer parentLayer, LayersStack owningStack, LayersStackApplication application) throws LayersException {
-		// Init the created layer
-		layer.setApplication(application);
-		layer.setName(findNewLayerName(parentLayer));
-		parentLayer.addLayer(layer);
-		layer.setOwningLayersStack(owningStack);
-		// Start the layer
-		layer.attach();
-
-		return layer;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @throws LayersException
-	 * @generated NOT
-	 */
-	@Override
-	public Layer createLayer(LayersContainer parent, LayersStack owningStack, LayersStackApplication application) throws LayersException {
-		Layer layer = LayersFactory.eINSTANCE.createLayer();
-		// Init the created layer
-		initLayer(layer, parent, owningStack, application);
-
-		return layer;
-	}
-
-	@Override
-	public RegExpLayer createRegExpLayer(LayersContainer parent, LayersStack owningStack, LayersStackApplication application) throws LayersException {
-		RegExpLayer layer = LayersFactory.eINSTANCE.createRegExpLayer();
-		// Init the created layer
-		initLayer(layer, parent, owningStack, application);
-
-		return layer;
-	}
-
-	@Override
-	public TopLayerOperator createTopLayerOperator(LayersContainer parent, LayersStack owningStack, LayersStackApplication application) throws LayersException {
-		TopLayerOperator layer = LayersFactory.eINSTANCE.createTopLayerOperator();
-		// Init the created layer
-		initLayer(layer, parent, owningStack, application);
-
-		return layer;
-	}
-
-	@Override
-	public StackedLayerOperator createStackedLayerOperator(LayersContainer parent, LayersStack owningStack, LayersStackApplication application) throws LayersException {
-		StackedLayerOperator layer = LayersFactory.eINSTANCE.createStackedLayerOperator();
-		// Init the created layer
-		initLayer(layer, parent, owningStack, application);
-
-		return layer;
-	}
-
-	/**
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactoryForStack#createLayerOperator(java.lang.String, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersContainer, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack,
-	 *      org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication)
-	 *
-	 * @param layerOperatorID
-	 * @param parent
-	 * @param owningStack
-	 * @param application
-	 * @return
-	 * @throws LayersException
-	 */
-	@Override
-	public AbstractLayerOperator createLayerOperator(String layerOperatorID, LayersContainer parent, LayersStack owningStack, LayersStackApplication application) throws LayersException {
-		// Create a layer !
-		AbstractLayerOperator layerOperator = application.getLayerOperatorDescriptorRegistry().createLayerOperator(layerOperatorID);
-		// Init the created layer
-		initLayer(layerOperator, parent, owningStack, application);
-
-		return layerOperator;
-	}
-
-
-
-
-} // LayersFactoryImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersFactoryImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersFactoryImpl.java
index 359262b..bd3ee38 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersFactoryImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersFactoryImpl.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
@@ -18,14 +19,18 @@
 import org.eclipse.emf.ecore.EDataType;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
+
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.BadStateException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.*;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance;
 
 /**
  * <!-- begin-user-doc -->
@@ -77,7 +82,6 @@
 			case LayersPackage.LAYER_STACK_DESCRIPTOR_REGISTRY: return createLayerStackDescriptorRegistry();
 			case LayersPackage.PROPERTY_REGISTRY: return createPropertyRegistry();
 			case LayersPackage.PROPERTY: return createProperty();
-			case LayersPackage.METAMODEL: return createMetamodel();
 			case LayersPackage.TYPE_REGISTRY: return createTypeRegistry();
 			case LayersPackage.STRING_TO_TYPE_MAP: return (EObject)createStringToTypeMap();
 			case LayersPackage.LAYER_DESCRIPTOR_REGISTRY: return createLayerDescriptorRegistry();
@@ -88,46 +92,19 @@
 			case LayersPackage.LAYER_OPERATOR_DESCRIPTOR_REGISTRY: return createLayerOperatorDescriptorRegistry();
 			case LayersPackage.LAYER_OPERATOR_DESCRIPTOR: return createLayerOperatorDescriptor();
 			case LayersPackage.PROPERTY_OPERATOR: return createPropertyOperator();
-			case LayersPackage.DEFAULT_PROPERTY_OPERATOR: return createDefaultPropertyOperator();
 			case LayersPackage.STRING_TO_TYPE_INSTANCE_MAP: return (EObject)createStringToTypeInstanceMap();
 			case LayersPackage.FOLDER: return createFolder();
-			case LayersPackage.INT_INSTANCE: return createIntInstance();
-			case LayersPackage.BOOLEAN_INSTANCE: return createBooleanInstance();
-			case LayersPackage.STRING_INSTANCE: return createStringInstance();
-			case LayersPackage.INT_TYPE: return createIntType();
-			case LayersPackage.BOOLEAN_TYPE: return createBooleanType();
-			case LayersPackage.STRING_TYPE: return createStringType();
-			case LayersPackage.CUSTOM_TYPE: return createCustomType();
+			case LayersPackage.METAMODEL: return createMetamodel();
 			case LayersPackage.TOP_LAYER_OPERATOR: return createTopLayerOperator();
 			case LayersPackage.STACKED_LAYER_OPERATOR: return createStackedLayerOperator();
-			case LayersPackage.CUSTOM_LAYER_OPERATOR: return createCustomLayerOperator();
 			case LayersPackage.PROPERTY_INDEX: return createPropertyIndex();
 			case LayersPackage.STRING_TO_PROPERTY_INDEX_MAP: return (EObject)createStringToPropertyIndexMap();
 			case LayersPackage.SIMPLE_LAYER_DESCRIPTOR: return createSimpleLayerDescriptor();
-			case LayersPackage.REG_EXP_LAYER_DESCRIPTOR: return createRegExpLayerDescriptor();
 			case LayersPackage.NULL_INSTANCE: return createNullInstance();
-			case LayersPackage.REG_EXP_LAYER: return createRegExpLayer();
 			case LayersPackage.LAYER: return createLayer();
-			case LayersPackage.COLOR: return createColor();
-			case LayersPackage.COLOR_INSTANCE: return createColorInstance();
-			case LayersPackage.FILL_INSTANCE: return createFillInstance();
-			case LayersPackage.FILL: return createFill();
-			case LayersPackage.FILL_PROPERTY_SETTER: return createFillPropertySetter();
-			case LayersPackage.IS_VALID_PROPERTY_SETTER: return createIsValidPropertySetter();
 			case LayersPackage.NULL_PROPERTY_SETTER: return createNullPropertySetter();
-			case LayersPackage.LINE_TYPE: return createLineType();
-			case LayersPackage.LINE_INSTANCE: return createLineInstance();
-			case LayersPackage.LINE_PROPERTY_SETTER: return createLinePropertySetter();
-			case LayersPackage.FONT_PROPERTY_SETTER: return createFontPropertySetter();
-			case LayersPackage.FONT_INSTANCE: return createFontInstance();
-			case LayersPackage.FONT_TYPE: return createFontType();
-			case LayersPackage.IS_VISIBLE_PROPERTY_SETTER: return createIsVisiblePropertySetter();
 			case LayersPackage.TOP_LAYER_OPERATOR_DESCRIPTOR: return createTopLayerOperatorDescriptor();
 			case LayersPackage.STACKED_LAYER_OPERATOR_DESCRIPTOR: return createStackedLayerOperatorDescriptor();
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR: return createCustomPropertyOperator();
-			case LayersPackage.AND_STACKED_LAYER_OPERATOR_DESCRIPTOR: return createAndStackedLayerOperatorDescriptor();
-			case LayersPackage.OR_STACKED_LAYER_OPERATOR_DESCRIPTOR: return createOrStackedLayerOperatorDescriptor();
-			case LayersPackage.IS_ABSTRACT_UML_SETTER: return createIsAbstractUmlSetter();
 			case LayersPackage.ALL_VIEWS_DERIVED_LAYER: return createAllViewsDerivedLayer();
 			case LayersPackage.CSS_PROPERTY_SETTER: return createCSSPropertySetter();
 			case LayersPackage.CSS_TYPE: return createCSSType();
@@ -154,10 +131,6 @@
 				return createEventLevelFromString(eDataType, initialValue);
 			case LayersPackage.STRING:
 				return createStringFromString(eDataType, initialValue);
-			case LayersPackage.BOOLEAN:
-				return createbooleanFromString(eDataType, initialValue);
-			case LayersPackage.EPACKAGE:
-				return createEPackageFromString(eDataType, initialValue);
 			case LayersPackage.LAYERS_EXCEPTION:
 				return createLayersExceptionFromString(eDataType, initialValue);
 			case LayersPackage.INT:
@@ -168,10 +141,12 @@
 				return createNotFoundExceptionFromString(eDataType, initialValue);
 			case LayersPackage.COMPUTE_PROPERTY_VALUE_COMMAND:
 				return createComputePropertyValueCommandFromString(eDataType, initialValue);
+			case LayersPackage.BOOLEAN:
+				return createbooleanFromString(eDataType, initialValue);
+			case LayersPackage.EPACKAGE:
+				return createEPackageFromString(eDataType, initialValue);
 			case LayersPackage.OBJECT:
 				return createObjectFromString(eDataType, initialValue);
-			case LayersPackage.CUSTOM_PROPERTY_OPERTOR_INSTANCE:
-				return createCustomPropertyOpertorInstanceFromString(eDataType, initialValue);
 			default:
 				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
@@ -191,10 +166,6 @@
 				return convertEventLevelToString(eDataType, instanceValue);
 			case LayersPackage.STRING:
 				return convertStringToString(eDataType, instanceValue);
-			case LayersPackage.BOOLEAN:
-				return convertbooleanToString(eDataType, instanceValue);
-			case LayersPackage.EPACKAGE:
-				return convertEPackageToString(eDataType, instanceValue);
 			case LayersPackage.LAYERS_EXCEPTION:
 				return convertLayersExceptionToString(eDataType, instanceValue);
 			case LayersPackage.INT:
@@ -205,10 +176,12 @@
 				return convertNotFoundExceptionToString(eDataType, instanceValue);
 			case LayersPackage.COMPUTE_PROPERTY_VALUE_COMMAND:
 				return convertComputePropertyValueCommandToString(eDataType, instanceValue);
+			case LayersPackage.BOOLEAN:
+				return convertbooleanToString(eDataType, instanceValue);
+			case LayersPackage.EPACKAGE:
+				return convertEPackageToString(eDataType, instanceValue);
 			case LayersPackage.OBJECT:
 				return convertObjectToString(eDataType, instanceValue);
-			case LayersPackage.CUSTOM_PROPERTY_OPERTOR_INSTANCE:
-				return convertCustomPropertyOpertorInstanceToString(eDataType, instanceValue);
 			default:
 				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
@@ -219,7 +192,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayerNamedStyle createLayerNamedStyle() {
 		LayerNamedStyleImpl layerNamedStyle = new LayerNamedStyleImpl();
 		return layerNamedStyle;
@@ -230,7 +202,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayersStack createLayersStack() {
 		LayersStackImpl layersStack = new LayersStackImpl();
 		return layersStack;
@@ -241,7 +212,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayersStackApplication createLayersStackApplication() {
 		LayersStackApplicationImpl layersStackApplication = new LayersStackApplicationImpl();
 		return layersStackApplication;
@@ -252,7 +222,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayerStackDescriptorRegistry createLayerStackDescriptorRegistry() {
 		LayerStackDescriptorRegistryImpl layerStackDescriptorRegistry = new LayerStackDescriptorRegistryImpl();
 		return layerStackDescriptorRegistry;
@@ -263,7 +232,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public PropertyRegistry createPropertyRegistry() {
 		PropertyRegistryImpl propertyRegistry = new PropertyRegistryImpl();
 		return propertyRegistry;
@@ -274,7 +242,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public Property createProperty() {
 		PropertyImpl property = new PropertyImpl();
 		return property;
@@ -285,18 +252,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public Metamodel createMetamodel() {
-		MetamodelImpl metamodel = new MetamodelImpl();
-		return metamodel;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public TypeRegistry createTypeRegistry() {
 		TypeRegistryImpl typeRegistry = new TypeRegistryImpl();
 		return typeRegistry;
@@ -317,7 +272,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayerDescriptorRegistry createLayerDescriptorRegistry() {
 		LayerDescriptorRegistryImpl layerDescriptorRegistry = new LayerDescriptorRegistryImpl();
 		return layerDescriptorRegistry;
@@ -328,7 +282,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayerDescriptor createLayerDescriptor() {
 		LayerDescriptorImpl layerDescriptor = new LayerDescriptorImpl();
 		return layerDescriptor;
@@ -339,7 +292,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayerApplicationFactory createLayerApplicationFactory() {
 		LayerApplicationFactoryImpl layerApplicationFactory = new LayerApplicationFactoryImpl();
 		return layerApplicationFactory;
@@ -350,7 +302,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public PropertySetterRegistry createPropertySetterRegistry() {
 		PropertySetterRegistryImpl propertySetterRegistry = new PropertySetterRegistryImpl();
 		return propertySetterRegistry;
@@ -371,9 +322,9 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Map.Entry<String, TypeInstance> createStringToTypeInstanceMap() {
-		StringToTypeInstanceMapImpl stringToTypeInstanceMap = new StringToTypeInstanceMapImpl();
-		return stringToTypeInstanceMap;
+	public LayerOperatorDescriptorRegistry createLayerOperatorDescriptorRegistry() {
+		LayerOperatorDescriptorRegistryImpl layerOperatorDescriptorRegistry = new LayerOperatorDescriptorRegistryImpl();
+		return layerOperatorDescriptorRegistry;
 	}
 
 	/**
@@ -381,95 +332,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public Folder createFolder() {
-		FolderImpl folder = new FolderImpl();
-		return folder;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public IntInstance createIntInstance() {
-		IntInstanceImpl intInstance = new IntInstanceImpl();
-		return intInstance;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public BooleanInstance createBooleanInstance() {
-		BooleanInstanceImpl booleanInstance = new BooleanInstanceImpl();
-		return booleanInstance;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public StringInstance createStringInstance() {
-		StringInstanceImpl stringInstance = new StringInstanceImpl();
-		return stringInstance;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public IntType createIntType() {
-		IntTypeImpl intType = new IntTypeImpl();
-		return intType;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public BooleanType createBooleanType() {
-		BooleanTypeImpl booleanType = new BooleanTypeImpl();
-		return booleanType;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public StringType createStringType() {
-		StringTypeImpl stringType = new StringTypeImpl();
-		return stringType;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public CustomType createCustomType() {
-		CustomTypeImpl customType = new CustomTypeImpl();
-		return customType;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public LayerOperatorDescriptor createLayerOperatorDescriptor() {
 		LayerOperatorDescriptorImpl layerOperatorDescriptor = new LayerOperatorDescriptorImpl();
 		return layerOperatorDescriptor;
@@ -480,7 +342,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public PropertyOperator createPropertyOperator() {
 		PropertyOperatorImpl propertyOperator = new PropertyOperatorImpl();
 		return propertyOperator;
@@ -491,10 +352,9 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public DefaultPropertyOperator createDefaultPropertyOperator() {
-		DefaultPropertyOperatorImpl defaultPropertyOperator = new DefaultPropertyOperatorImpl();
-		return defaultPropertyOperator;
+	public Map.Entry<String, TypeInstance> createStringToTypeInstanceMap() {
+		StringToTypeInstanceMapImpl stringToTypeInstanceMap = new StringToTypeInstanceMapImpl();
+		return stringToTypeInstanceMap;
 	}
 
 	/**
@@ -502,7 +362,26 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
+	public Folder createFolder() {
+		FolderImpl folder = new FolderImpl();
+		return folder;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Metamodel createMetamodel() {
+		MetamodelImpl metamodel = new MetamodelImpl();
+		return metamodel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public TopLayerOperator createTopLayerOperator() {
 		TopLayerOperatorImpl topLayerOperator = new TopLayerOperatorImpl();
 		return topLayerOperator;
@@ -513,7 +392,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public StackedLayerOperator createStackedLayerOperator() {
 		StackedLayerOperatorImpl stackedLayerOperator = new StackedLayerOperatorImpl();
 		return stackedLayerOperator;
@@ -524,18 +402,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public CustomLayerOperator createCustomLayerOperator() {
-		CustomLayerOperatorImpl customLayerOperator = new CustomLayerOperatorImpl();
-		return customLayerOperator;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public PropertyIndex createPropertyIndex() {
 		PropertyIndexImpl propertyIndex = new PropertyIndexImpl();
 		return propertyIndex;
@@ -556,7 +422,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public SimpleLayerDescriptor createSimpleLayerDescriptor() {
 		SimpleLayerDescriptorImpl simpleLayerDescriptor = new SimpleLayerDescriptorImpl();
 		return simpleLayerDescriptor;
@@ -567,18 +432,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public RegExpLayerDescriptor createRegExpLayerDescriptor() {
-		RegExpLayerDescriptorImpl regExpLayerDescriptor = new RegExpLayerDescriptorImpl();
-		return regExpLayerDescriptor;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public NullInstance createNullInstance() {
 		NullInstanceImpl nullInstance = new NullInstanceImpl();
 		return nullInstance;
@@ -589,18 +442,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public RegExpLayer createRegExpLayer() {
-		RegExpLayerImpl regExpLayer = new RegExpLayerImpl();
-		return regExpLayer;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public Layer createLayer() {
 		LayerImpl layer = new LayerImpl();
 		return layer;
@@ -611,73 +452,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public Color createColor() {
-		ColorImpl color = new ColorImpl();
-		return color;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public ColorInstance createColorInstance() {
-		ColorInstanceImpl colorInstance = new ColorInstanceImpl();
-		return colorInstance;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public FillInstance createFillInstance() {
-		FillInstanceImpl fillInstance = new FillInstanceImpl();
-		return fillInstance;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Fill createFill() {
-		FillImpl fill = new FillImpl();
-		return fill;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public FillPropertySetter createFillPropertySetter() {
-		FillPropertySetterImpl fillPropertySetter = new FillPropertySetterImpl();
-		return fillPropertySetter;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public IsValidPropertySetter createIsValidPropertySetter() {
-		IsValidPropertySetterImpl isValidPropertySetter = new IsValidPropertySetterImpl();
-		return isValidPropertySetter;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public NullPropertySetter createNullPropertySetter() {
 		NullPropertySetterImpl nullPropertySetter = new NullPropertySetterImpl();
 		return nullPropertySetter;
@@ -688,95 +462,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public LineType createLineType() {
-		LineTypeImpl lineType = new LineTypeImpl();
-		return lineType;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public LineInstance createLineInstance() {
-		LineInstanceImpl lineInstance = new LineInstanceImpl();
-		return lineInstance;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public LinePropertySetter createLinePropertySetter() {
-		LinePropertySetterImpl linePropertySetter = new LinePropertySetterImpl();
-		return linePropertySetter;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public FontPropertySetter createFontPropertySetter() {
-		FontPropertySetterImpl fontPropertySetter = new FontPropertySetterImpl();
-		return fontPropertySetter;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public FontInstance createFontInstance() {
-		FontInstanceImpl fontInstance = new FontInstanceImpl();
-		return fontInstance;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public FontType createFontType() {
-		FontTypeImpl fontType = new FontTypeImpl();
-		return fontType;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public IsVisiblePropertySetter createIsVisiblePropertySetter() {
-		IsVisiblePropertySetterImpl isVisiblePropertySetter = new IsVisiblePropertySetterImpl();
-		return isVisiblePropertySetter;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public LayerOperatorDescriptorRegistry createLayerOperatorDescriptorRegistry() {
-		LayerOperatorDescriptorRegistryImpl layerOperatorDescriptorRegistry = new LayerOperatorDescriptorRegistryImpl();
-		return layerOperatorDescriptorRegistry;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public TopLayerOperatorDescriptor createTopLayerOperatorDescriptor() {
 		TopLayerOperatorDescriptorImpl topLayerOperatorDescriptor = new TopLayerOperatorDescriptorImpl();
 		return topLayerOperatorDescriptor;
@@ -787,7 +472,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public StackedLayerOperatorDescriptor createStackedLayerOperatorDescriptor() {
 		StackedLayerOperatorDescriptorImpl stackedLayerOperatorDescriptor = new StackedLayerOperatorDescriptorImpl();
 		return stackedLayerOperatorDescriptor;
@@ -798,51 +482,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public CustomPropertyOperator createCustomPropertyOperator() {
-		CustomPropertyOperatorImpl customPropertyOperator = new CustomPropertyOperatorImpl();
-		return customPropertyOperator;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public AndStackedLayerOperatorDescriptor createAndStackedLayerOperatorDescriptor() {
-		AndStackedLayerOperatorDescriptorImpl andStackedLayerOperatorDescriptor = new AndStackedLayerOperatorDescriptorImpl();
-		return andStackedLayerOperatorDescriptor;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public OrStackedLayerOperatorDescriptor createOrStackedLayerOperatorDescriptor() {
-		OrStackedLayerOperatorDescriptorImpl orStackedLayerOperatorDescriptor = new OrStackedLayerOperatorDescriptorImpl();
-		return orStackedLayerOperatorDescriptor;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public IsAbstractUmlSetter createIsAbstractUmlSetter() {
-		IsAbstractUmlSetterImpl isAbstractUmlSetter = new IsAbstractUmlSetterImpl();
-		return isAbstractUmlSetter;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public AllViewsDerivedLayer createAllViewsDerivedLayer() {
 		AllViewsDerivedLayerImpl allViewsDerivedLayer = new AllViewsDerivedLayerImpl();
 		return allViewsDerivedLayer;
@@ -971,8 +610,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Boolean createbooleanFromString(EDataType eDataType, String initialValue) {
-		return (Boolean)super.createFromString(eDataType, initialValue);
+	public LayersException createLayersExceptionFromString(EDataType eDataType, String initialValue) {
+		return (LayersException)super.createFromString(eDataType, initialValue);
 	}
 
 	/**
@@ -980,7 +619,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public String convertbooleanToString(EDataType eDataType, Object instanceValue) {
+	public String convertLayersExceptionToString(EDataType eDataType, Object instanceValue) {
 		return super.convertToString(eDataType, instanceValue);
 	}
 
@@ -989,8 +628,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EPackage createEPackageFromString(EDataType eDataType, String initialValue) {
-		return (EPackage)super.createFromString(eDataType, initialValue);
+	public Integer createintFromString(EDataType eDataType, String initialValue) {
+		return (Integer)super.createFromString(eDataType, initialValue);
 	}
 
 	/**
@@ -998,7 +637,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public String convertEPackageToString(EDataType eDataType, Object instanceValue) {
+	public String convertintToString(EDataType eDataType, Object instanceValue) {
 		return super.convertToString(eDataType, instanceValue);
 	}
 
@@ -1025,24 +664,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public LayersException createLayersExceptionFromString(EDataType eDataType, String initialValue) {
-		return (LayersException)super.createFromString(eDataType, initialValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public String convertLayersExceptionToString(EDataType eDataType, Object instanceValue) {
-		return super.convertToString(eDataType, instanceValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	public NotFoundException createNotFoundExceptionFromString(EDataType eDataType, String initialValue) {
 		return (NotFoundException)createLayersExceptionFromString(LayersPackage.Literals.LAYERS_EXCEPTION, initialValue);
 	}
@@ -1079,8 +700,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Integer createintFromString(EDataType eDataType, String initialValue) {
-		return (Integer)super.createFromString(eDataType, initialValue);
+	public Boolean createbooleanFromString(EDataType eDataType, String initialValue) {
+		return (Boolean)super.createFromString(eDataType, initialValue);
 	}
 
 	/**
@@ -1088,7 +709,25 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public String convertintToString(EDataType eDataType, Object instanceValue) {
+	public String convertbooleanToString(EDataType eDataType, Object instanceValue) {
+		return super.convertToString(eDataType, instanceValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EPackage createEPackageFromString(EDataType eDataType, String initialValue) {
+		return (EPackage)super.createFromString(eDataType, initialValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertEPackageToString(EDataType eDataType, Object instanceValue) {
 		return super.convertToString(eDataType, instanceValue);
 	}
 
@@ -1115,25 +754,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public CustomPropertyOperatorsInstance createCustomPropertyOpertorInstanceFromString(EDataType eDataType, String initialValue) {
-		return (CustomPropertyOperatorsInstance)super.createFromString(eDataType, initialValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public String convertCustomPropertyOpertorInstanceToString(EDataType eDataType, Object instanceValue) {
-		return super.convertToString(eDataType, instanceValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public LayersPackage getLayersPackage() {
 		return (LayersPackage)getEPackage();
 	}
@@ -1149,4 +769,4 @@
 		return LayersPackage.eINSTANCE;
 	}
 
-} // LayersFactoryImpl
+} //LayersFactoryImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersPackageImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersPackageImpl.java
index d7ff2d6..56dca8a 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersPackageImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersPackageImpl.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
@@ -22,46 +23,31 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.EcorePackage;
+
 import org.eclipse.emf.ecore.impl.EPackageImpl;
+
 import org.eclipse.gmf.runtime.notation.NotationPackage;
+
 import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.StylesheetsPackage;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.BadStateException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayer;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AllViewsDerivedLayer;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AndStackedLayerOperatorDescriptor;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ApplicationDependantElement;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanType;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSHideInstance;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSHidePropertySetter;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSHideType;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSInstance;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSPropertySetter;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSType;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Color;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomLayerOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomType;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.DefaultPropertyOperator;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.EventLevel;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Fill;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillPropertySetter;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Folder;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FolderElement;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontPropertySetter;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontType;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntType;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsAbstractUmlSetter;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsValidPropertySetter;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsVisiblePropertySetter;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Layer;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerApplicationFactory;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptor;
@@ -78,32 +64,23 @@
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LinePropertySetter;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineType;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullInstance;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullPropertySetter;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.OrStackedLayerOperatorDescriptor;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyIndex;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetterRegistry;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayerDescriptor;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.SimpleLayerDescriptor;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperator;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperatorDescriptor;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringType;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperatorDescriptor;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeRegistry;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance;
 
 /**
  * <!-- begin-user-doc -->
@@ -187,13 +164,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EClass metamodelEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	private EClass typeInstanceEClass = null;
 
 	/**
@@ -264,6 +234,41 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	private EClass layerOperatorDescriptorRegistryEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass layerOperatorDescriptorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass propertyOperatorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass layerOperatorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass layersContainerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	private EClass abstractLayerEClass = null;
 
 	/**
@@ -285,91 +290,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EClass intInstanceEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass booleanInstanceEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass stringInstanceEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass intTypeEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass booleanTypeEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass stringTypeEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass customTypeEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass layerOperatorEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass layersContainerEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass abstractLayerOperatorEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass layerOperatorDescriptorEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass propertyOperatorEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass defaultPropertyOperatorEClass = null;
+	private EClass metamodelEClass = null;
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -390,13 +311,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EClass customLayerOperatorEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	private EClass propertyIndexEClass = null;
 
 	/**
@@ -418,13 +332,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EClass regExpLayerDescriptorEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	private EClass nullInstanceEClass = null;
 
 	/**
@@ -432,13 +339,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EClass regExpLayerEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	private EClass layerEClass = null;
 
 	/**
@@ -446,48 +346,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EClass colorEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass colorInstanceEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass fillInstanceEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass fillEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass fillPropertySetterEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass isValidPropertySetterEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	private EClass nullPropertySetterEClass = null;
 
 	/**
@@ -495,62 +353,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EClass lineTypeEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass lineInstanceEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass linePropertySetterEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass fontPropertySetterEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass fontInstanceEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass fontTypeEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass isVisiblePropertySetterEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass layerOperatorDescriptorRegistryEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	private EClass topLayerOperatorDescriptorEClass = null;
 
 	/**
@@ -565,34 +367,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EClass customPropertyOperatorEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass andStackedLayerOperatorDescriptorEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass orStackedLayerOperatorDescriptorEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass isAbstractUmlSetterEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	private EClass allViewsDerivedLayerEClass = null;
 
 	/**
@@ -663,14 +437,14 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EDataType booleanEDataType = null;
+	private EDataType layersExceptionEDataType = null;
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EDataType ePackageEDataType = null;
+	private EDataType intEDataType = null;
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -684,13 +458,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EDataType layersExceptionEDataType = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	private EDataType notFoundExceptionEDataType = null;
 
 	/**
@@ -705,7 +472,14 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	private EDataType intEDataType = null;
+	private EDataType booleanEDataType = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EDataType ePackageEDataType = null;
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -715,13 +489,6 @@
 	private EDataType objectEDataType = null;
 
 	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EDataType customPropertyOpertorInstanceEDataType = null;
-
-	/**
 	 * Creates an instance of the model <b>Package</b>, registered with
 	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
 	 * package URI value.
@@ -729,7 +496,8 @@
 	 * factory method {@link #init init()}, which also performs
 	 * initialization of the package, or returns the registered package,
 	 * if one already exists.
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 * @see org.eclipse.emf.ecore.EPackage.Registry
 	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage#eNS_URI
 	 * @see #init()
@@ -748,10 +516,11 @@
 
 	/**
 	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
-	 * 
+	 *
 	 * <p>This method is used to initialize {@link LayersPackage#eINSTANCE} when that field is accessed.
 	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 * @see #eNS_URI
 	 * @see #createPackageContents()
 	 * @see #initializePackageContents()
@@ -761,7 +530,8 @@
 		if (isInited) return (LayersPackage)EPackage.Registry.INSTANCE.getEPackage(LayersPackage.eNS_URI);
 
 		// Obtain or create and register package
-		LayersPackageImpl theLayersPackage = (LayersPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof LayersPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new LayersPackageImpl());
+		Object registeredLayersPackage = EPackage.Registry.INSTANCE.get(eNS_URI);
+		LayersPackageImpl theLayersPackage = registeredLayersPackage instanceof LayersPackageImpl ? (LayersPackageImpl)registeredLayersPackage : new LayersPackageImpl();
 
 		isInited = true;
 
@@ -779,7 +549,6 @@
 		// Mark meta-data to indicate it can't be changed
 		theLayersPackage.freeze();
 
-  
 		// Update the registry and return the package
 		EPackage.Registry.INSTANCE.put(LayersPackage.eNS_URI, theLayersPackage);
 		return theLayersPackage;
@@ -790,7 +559,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getLayerNamedStyle() {
 		return layerNamedStyleEClass;
 	}
@@ -800,7 +568,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayerNamedStyle_LayersStack() {
 		return (EReference)layerNamedStyleEClass.getEStructuralFeatures().get(0);
 	}
@@ -810,7 +577,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getLayersStack() {
 		return layersStackEClass;
 	}
@@ -820,7 +586,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayersStack_Layers() {
 		return (EReference)layersStackEClass.getEStructuralFeatures().get(0);
 	}
@@ -830,7 +595,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getLayersStack_Name() {
 		return (EAttribute)layersStackEClass.getEStructuralFeatures().get(1);
 	}
@@ -840,7 +604,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getLayersStack_Description() {
 		return (EAttribute)layersStackEClass.getEStructuralFeatures().get(2);
 	}
@@ -850,7 +613,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayersStack_Diagram() {
 		return (EReference)layersStackEClass.getEStructuralFeatures().get(3);
 	}
@@ -860,7 +622,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getLayersStack_State() {
 		return (EAttribute)layersStackEClass.getEStructuralFeatures().get(4);
 	}
@@ -870,7 +631,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayersStack__GetComputePropertyValueCommand__View_Property() {
 		return layersStackEClass.getEOperations().get(0);
 	}
@@ -880,8 +640,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EOperation getLayersStack__GetPropertiesComputePropertyValueCommand__View_EList() {
+	public EOperation getLayersStack__GetPropertiesComputePropertyValueCommand__View_List() {
 		return layersStackEClass.getEOperations().get(1);
 	}
 
@@ -890,8 +649,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EOperation getLayersStack__GetViewsComputePropertyValueCommand__EList_Property() {
+	public EOperation getLayersStack__GetViewsComputePropertyValueCommand__List_Property() {
 		return layersStackEClass.getEOperations().get(2);
 	}
 
@@ -900,7 +658,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayersStack__StartAfterCreation() {
 		return layersStackEClass.getEOperations().get(3);
 	}
@@ -910,7 +667,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayersStack__AttachLayers() {
 		return layersStackEClass.getEOperations().get(4);
 	}
@@ -920,7 +676,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayersStack__Attach() {
 		return layersStackEClass.getEOperations().get(5);
 	}
@@ -930,7 +685,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayersStack__Detach() {
 		return layersStackEClass.getEOperations().get(6);
 	}
@@ -940,7 +694,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayersStack__EnterAttachedState() {
 		return layersStackEClass.getEOperations().get(7);
 	}
@@ -950,7 +703,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayersStack__ExitAttachedState() {
 		return layersStackEClass.getEOperations().get(8);
 	}
@@ -960,7 +712,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getLayerExpression() {
 		return layerExpressionEClass;
 	}
@@ -970,7 +721,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getLayerExpression_Name() {
 		return (EAttribute)layerExpressionEClass.getEStructuralFeatures().get(0);
 	}
@@ -980,7 +730,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getLayerExpression_Description() {
 		return (EAttribute)layerExpressionEClass.getEStructuralFeatures().get(1);
 	}
@@ -990,7 +739,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getLayerExpression_IsLayerEnabledInternal() {
 		return (EAttribute)layerExpressionEClass.getEStructuralFeatures().get(2);
 	}
@@ -1000,7 +748,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getLayerExpression_IsLayerEnabled() {
 		return (EAttribute)layerExpressionEClass.getEStructuralFeatures().get(3);
 	}
@@ -1010,7 +757,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getLayerExpression_IsBranchEnabled() {
 		return (EAttribute)layerExpressionEClass.getEStructuralFeatures().get(4);
 	}
@@ -1020,7 +766,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayerExpression_OwningLayersStack() {
 		return (EReference)layerExpressionEClass.getEStructuralFeatures().get(5);
 	}
@@ -1030,7 +775,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getLayerExpression_State() {
 		return (EAttribute)layerExpressionEClass.getEStructuralFeatures().get(6);
 	}
@@ -1040,7 +784,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayerExpression__GetComputePropertyValueCommand__View_Property() {
 		return layerExpressionEClass.getEOperations().get(0);
 	}
@@ -1050,8 +793,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EOperation getLayerExpression__GetViewsComputePropertyValueCommand__EList_Property() {
+	public EOperation getLayerExpression__GetViewsComputePropertyValueCommand__List_Property() {
 		return layerExpressionEClass.getEOperations().get(1);
 	}
 
@@ -1060,8 +802,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EOperation getLayerExpression__GetPropertiesComputePropertyValueCommand__View_EList() {
+	public EOperation getLayerExpression__GetPropertiesComputePropertyValueCommand__View_List() {
 		return layerExpressionEClass.getEOperations().get(2);
 	}
 
@@ -1070,7 +811,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayerExpression__AttachToLayersStack__LayersStack() {
 		return layerExpressionEClass.getEOperations().get(3);
 	}
@@ -1080,7 +820,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayerExpression__GetLayersStack() {
 		return layerExpressionEClass.getEOperations().get(4);
 	}
@@ -1090,7 +829,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayerExpression__EnterAttachedState() {
 		return layerExpressionEClass.getEOperations().get(5);
 	}
@@ -1100,7 +838,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayerExpression__Attach() {
 		return layerExpressionEClass.getEOperations().get(6);
 	}
@@ -1110,7 +847,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayerExpression__Detach() {
 		return layerExpressionEClass.getEOperations().get(7);
 	}
@@ -1120,7 +856,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayerExpression__ExitAttachedState() {
 		return layerExpressionEClass.getEOperations().get(8);
 	}
@@ -1130,7 +865,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getApplicationDependantElement() {
 		return applicationDependantElementEClass;
 	}
@@ -1140,7 +874,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getApplicationDependantElement_Application() {
 		return (EReference)applicationDependantElementEClass.getEStructuralFeatures().get(0);
 	}
@@ -1150,7 +883,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getLayersStackApplication() {
 		return layersStackApplicationEClass;
 	}
@@ -1160,7 +892,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayersStackApplication_LayersStacks() {
 		return (EReference)layersStackApplicationEClass.getEStructuralFeatures().get(0);
 	}
@@ -1170,7 +901,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayersStackApplication_LayerStackRegistry() {
 		return (EReference)layersStackApplicationEClass.getEStructuralFeatures().get(1);
 	}
@@ -1180,7 +910,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayersStackApplication_PropertyRegistry() {
 		return (EReference)layersStackApplicationEClass.getEStructuralFeatures().get(2);
 	}
@@ -1190,7 +919,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayersStackApplication_LayerDescriptorRegistry() {
 		return (EReference)layersStackApplicationEClass.getEStructuralFeatures().get(3);
 	}
@@ -1200,7 +928,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayersStackApplication_Factory() {
 		return (EReference)layersStackApplicationEClass.getEStructuralFeatures().get(4);
 	}
@@ -1210,7 +937,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayersStackApplication_PropertySetterRegistry() {
 		return (EReference)layersStackApplicationEClass.getEStructuralFeatures().get(5);
 	}
@@ -1220,7 +946,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayersStackApplication_LayerOperatorDescriptorRegistry() {
 		return (EReference)layersStackApplicationEClass.getEStructuralFeatures().get(6);
 	}
@@ -1230,7 +955,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayersStackApplication__GetLayersStackFor__Diagram() {
 		return layersStackApplicationEClass.getEOperations().get(0);
 	}
@@ -1240,7 +964,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayersStackApplication__RemoveLayersStackFor__Diagram() {
 		return layersStackApplicationEClass.getEOperations().get(1);
 	}
@@ -1250,7 +973,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayersStackApplication__IsLayersStackAttachedFor__Diagram() {
 		return layersStackApplicationEClass.getEOperations().get(2);
 	}
@@ -1260,7 +982,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayersStackApplication__CreateLayersStackFor__Diagram() {
 		return layersStackApplicationEClass.getEOperations().get(3);
 	}
@@ -1270,7 +991,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayersStackApplication__LookupLayersStackFor__Diagram() {
 		return layersStackApplicationEClass.getEOperations().get(4);
 	}
@@ -1280,7 +1000,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getFolderElement() {
 		return folderElementEClass;
 	}
@@ -1290,7 +1009,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getLayerStackDescriptorRegistry() {
 		return layerStackDescriptorRegistryEClass;
 	}
@@ -1300,7 +1018,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getPropertyRegistry() {
 		return propertyRegistryEClass;
 	}
@@ -1310,7 +1027,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getPropertyRegistry_Properties() {
 		return (EReference)propertyRegistryEClass.getEStructuralFeatures().get(0);
 	}
@@ -1320,7 +1036,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getPropertyRegistry_TypeRegistry() {
 		return (EReference)propertyRegistryEClass.getEStructuralFeatures().get(1);
 	}
@@ -1330,7 +1045,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getPropertyRegistry_PropertiesCount() {
 		return (EAttribute)propertyRegistryEClass.getEStructuralFeatures().get(2);
 	}
@@ -1340,7 +1054,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getPropertyRegistry__GetPropertyIndex__String() {
 		return propertyRegistryEClass.getEOperations().get(0);
 	}
@@ -1350,7 +1063,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getPropertyRegistry__GetProperty__String() {
 		return propertyRegistryEClass.getEOperations().get(1);
 	}
@@ -1360,7 +1072,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getPropertyRegistry__AddProperty__Property() {
 		return propertyRegistryEClass.getEOperations().get(2);
 	}
@@ -1370,7 +1081,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getProperty() {
 		return propertyEClass;
 	}
@@ -1380,7 +1090,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getProperty_Type() {
 		return (EReference)propertyEClass.getEStructuralFeatures().get(0);
 	}
@@ -1390,7 +1099,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getProperty_DefaultValue() {
 		return (EReference)propertyEClass.getEStructuralFeatures().get(1);
 	}
@@ -1400,7 +1108,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getProperty_Name() {
 		return (EAttribute)propertyEClass.getEStructuralFeatures().get(2);
 	}
@@ -1410,7 +1117,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getProperty_Description() {
 		return (EAttribute)propertyEClass.getEStructuralFeatures().get(3);
 	}
@@ -1420,7 +1126,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getProperty_Index() {
 		return (EAttribute)propertyEClass.getEStructuralFeatures().get(4);
 	}
@@ -1430,7 +1135,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getProperty__CreateInstance() {
 		return propertyEClass.getEOperations().get(0);
 	}
@@ -1440,7 +1144,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getType() {
 		return typeEClass;
 	}
@@ -1450,9 +1153,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EReference getType_Metamodel() {
-		return (EReference)typeEClass.getEStructuralFeatures().get(0);
+	public EAttribute getType_Name() {
+		return (EAttribute)typeEClass.getEStructuralFeatures().get(0);
 	}
 
 	/**
@@ -1460,8 +1162,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EAttribute getType_Name() {
+	public EAttribute getType_Description() {
 		return (EAttribute)typeEClass.getEStructuralFeatures().get(1);
 	}
 
@@ -1470,17 +1171,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EAttribute getType_Description() {
-		return (EAttribute)typeEClass.getEStructuralFeatures().get(2);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public EOperation getType__CreateInstance() {
 		return typeEClass.getEOperations().get(0);
 	}
@@ -1490,87 +1180,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EClass getMetamodel() {
-		return metamodelEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getMetamodel_Name() {
-		return (EAttribute)metamodelEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getMetamodel_Description() {
-		return (EAttribute)metamodelEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getMetamodel_Nsuri() {
-		return (EAttribute)metamodelEClass.getEStructuralFeatures().get(2);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getMetamodel_PluginID() {
-		return (EAttribute)metamodelEClass.getEStructuralFeatures().get(3);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getMetamodel_EPackageInstanceName() {
-		return (EAttribute)metamodelEClass.getEStructuralFeatures().get(4);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getMetamodel_IsTypeValid() {
-		return (EAttribute)metamodelEClass.getEStructuralFeatures().get(5);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getMetamodel__GetEPackage() {
-		return metamodelEClass.getEOperations().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public EClass getTypeInstance() {
 		return typeInstanceEClass;
 	}
@@ -1580,7 +1189,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getTypeInstance__SetValueFromString__String() {
 		return typeInstanceEClass.getEOperations().get(0);
 	}
@@ -1590,7 +1198,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getTypeInstance__SetValueFromInstance__TypeInstance() {
 		return typeInstanceEClass.getEOperations().get(1);
 	}
@@ -1600,7 +1207,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getComputePropertyValueCommandItf() {
 		return computePropertyValueCommandItfEClass;
 	}
@@ -1610,7 +1216,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getComputePropertyValueCommandItf__GetCmdValue() {
 		return computePropertyValueCommandItfEClass.getEOperations().get(0);
 	}
@@ -1620,7 +1225,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getTypeRegistry() {
 		return typeRegistryEClass;
 	}
@@ -1630,7 +1234,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getTypeRegistry_Types() {
 		return (EReference)typeRegistryEClass.getEStructuralFeatures().get(0);
 	}
@@ -1640,7 +1243,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getStringToTypeMap() {
 		return stringToTypeMapEClass;
 	}
@@ -1650,7 +1252,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getStringToTypeMap_Value() {
 		return (EReference)stringToTypeMapEClass.getEStructuralFeatures().get(0);
 	}
@@ -1660,7 +1261,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getStringToTypeMap_Key() {
 		return (EAttribute)stringToTypeMapEClass.getEStructuralFeatures().get(1);
 	}
@@ -1670,7 +1270,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getLayerDescriptorRegistry() {
 		return layerDescriptorRegistryEClass;
 	}
@@ -1680,7 +1279,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayerDescriptorRegistry_LayerDescriptors() {
 		return (EReference)layerDescriptorRegistryEClass.getEStructuralFeatures().get(0);
 	}
@@ -1690,7 +1288,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getLayerDescriptor() {
 		return layerDescriptorEClass;
 	}
@@ -1700,7 +1297,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayerDescriptor_PropertyRegistry() {
 		return (EReference)layerDescriptorEClass.getEStructuralFeatures().get(0);
 	}
@@ -1710,7 +1306,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getLayerApplicationFactory() {
 		return layerApplicationFactoryEClass;
 	}
@@ -1720,7 +1315,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayerApplicationFactory_Application() {
 		return (EReference)layerApplicationFactoryEClass.getEStructuralFeatures().get(0);
 	}
@@ -1730,7 +1324,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getPropertySetterRegistry() {
 		return propertySetterRegistryEClass;
 	}
@@ -1740,7 +1333,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getPropertySetterRegistry_PropertySetters() {
 		return (EReference)propertySetterRegistryEClass.getEStructuralFeatures().get(0);
 	}
@@ -1750,7 +1342,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getPropertySetterRegistry_SetterMap() {
 		return (EReference)propertySetterRegistryEClass.getEStructuralFeatures().get(1);
 	}
@@ -1760,7 +1351,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getPropertySetterRegistry_Application() {
 		return (EReference)propertySetterRegistryEClass.getEStructuralFeatures().get(2);
 	}
@@ -1770,7 +1360,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getPropertySetterRegistry__GetPropertySetter__Property() {
 		return propertySetterRegistryEClass.getEOperations().get(0);
 	}
@@ -1780,7 +1369,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getPropertySetterRegistry__GetPropertySetter__String() {
 		return propertySetterRegistryEClass.getEOperations().get(1);
 	}
@@ -1790,7 +1378,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getPropertySetterRegistry__AddPropertySetter__PropertySetter() {
 		return propertySetterRegistryEClass.getEOperations().get(2);
 	}
@@ -1800,7 +1387,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getPropertySetter() {
 		return propertySetterEClass;
 	}
@@ -1810,7 +1396,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getPropertySetter_Property() {
 		return (EReference)propertySetterEClass.getEStructuralFeatures().get(0);
 	}
@@ -1820,7 +1405,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getPropertySetter_PropertyName() {
 		return (EAttribute)propertySetterEClass.getEStructuralFeatures().get(1);
 	}
@@ -1830,7 +1414,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getPropertySetter__SetValue__View_TypeInstance() {
 		return propertySetterEClass.getEOperations().get(0);
 	}
@@ -1840,7 +1423,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getStringToPropertySetter() {
 		return stringToPropertySetterEClass;
 	}
@@ -1850,7 +1432,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getStringToPropertySetter_Key() {
 		return (EAttribute)stringToPropertySetterEClass.getEStructuralFeatures().get(0);
 	}
@@ -1860,7 +1441,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getStringToPropertySetter_Value() {
 		return (EReference)stringToPropertySetterEClass.getEStructuralFeatures().get(1);
 	}
@@ -1870,997 +1450,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EClass getAbstractLayer() {
-		return abstractLayerEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EReference getAbstractLayer_PropertyValues() {
-		return (EReference)abstractLayerEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EReference getAbstractLayer_PropertyValueMap() {
-		return (EReference)abstractLayerEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EReference getAbstractLayer_LayerDescriptor() {
-		return (EReference)abstractLayerEClass.getEStructuralFeatures().get(2);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EReference getAbstractLayer_Views() {
-		return (EReference)abstractLayerEClass.getEStructuralFeatures().get(3);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EReference getAbstractLayer_AttachedProperties() {
-		return (EReference)abstractLayerEClass.getEStructuralFeatures().get(4);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getAbstractLayer__AddPropertyInstance__Property() {
-		return abstractLayerEClass.getEOperations().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getAbstractLayer__RemovePropertyInstance__Property() {
-		return abstractLayerEClass.getEOperations().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getAbstractLayer__GetPropertyInstance__Property() {
-		return abstractLayerEClass.getEOperations().get(2);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getAbstractLayer__GetPropertyInstance__String() {
-		return abstractLayerEClass.getEOperations().get(3);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getStringToTypeInstanceMap() {
-		return stringToTypeInstanceMapEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getStringToTypeInstanceMap_Key() {
-		return (EAttribute)stringToTypeInstanceMapEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EReference getStringToTypeInstanceMap_Value() {
-		return (EReference)stringToTypeInstanceMapEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getFolder() {
-		return folderEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EReference getFolder_Elements() {
-		return (EReference)folderEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getFolder_Name() {
-		return (EAttribute)folderEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getIntInstance() {
-		return intInstanceEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getIntInstance_Value() {
-		return (EAttribute)intInstanceEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getBooleanInstance() {
-		return booleanInstanceEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getBooleanInstance_Value() {
-		return (EAttribute)booleanInstanceEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getStringInstance() {
-		return stringInstanceEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getStringInstance_Value() {
-		return (EAttribute)stringInstanceEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getIntType() {
-		return intTypeEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getBooleanType() {
-		return booleanTypeEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getStringType() {
-		return stringTypeEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getCustomType() {
-		return customTypeEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getCustomType_Classifier() {
-		return (EAttribute)customTypeEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getLayerOperator() {
-		return layerOperatorEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EReference getLayerOperator_Layers() {
-		return (EReference)layerOperatorEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getLayersContainer() {
-		return layersContainerEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getLayersContainer__AddLayer__LayerExpression() {
-		return layersContainerEClass.getEOperations().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getAbstractLayerOperator() {
-		return abstractLayerOperatorEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EReference getAbstractLayerOperator_LayerOperatorDescriptor() {
-		return (EReference)abstractLayerOperatorEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getAbstractLayerOperator_LayerOperatorDescriptorName() {
-		return (EAttribute)abstractLayerOperatorEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getAbstractLayerOperator__IsDescriptorSet() {
-		return abstractLayerOperatorEClass.getEOperations().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getAbstractLayerOperator__ResetDescriptor() {
-		return abstractLayerOperatorEClass.getEOperations().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getLayerOperatorDescriptor() {
-		return layerOperatorDescriptorEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EReference getLayerOperatorDescriptor_PropertyOperators() {
-		return (EReference)layerOperatorDescriptorEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getLayerOperatorDescriptor_Name() {
-		return (EAttribute)layerOperatorDescriptorEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getLayerOperatorDescriptor__GetPropertyOperator__Property() {
-		return layerOperatorDescriptorEClass.getEOperations().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getLayerOperatorDescriptor__SetPropertyOperator__Property_PropertyOperator() {
-		return layerOperatorDescriptorEClass.getEOperations().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getLayerOperatorDescriptor__CreateLayerOperator() {
-		return layerOperatorDescriptorEClass.getEOperations().get(2);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getLayerOperatorDescriptor__SetPropertyCollectionSize__int_DefaultPropertyOperator() {
-		return layerOperatorDescriptorEClass.getEOperations().get(3);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getPropertyOperator() {
-		return propertyOperatorEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getPropertyOperator_Name() {
-		return (EAttribute)propertyOperatorEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getPropertyOperator__GetComputePropertyValueCommand__EList() {
-		return propertyOperatorEClass.getEOperations().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getDefaultPropertyOperator() {
-		return defaultPropertyOperatorEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getTopLayerOperator() {
-		return topLayerOperatorEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getStackedLayerOperator() {
-		return stackedLayerOperatorEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getCustomLayerOperator() {
-		return customLayerOperatorEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getPropertyIndex() {
-		return propertyIndexEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EReference getPropertyIndex_Property() {
-		return (EReference)propertyIndexEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getPropertyIndex_Index() {
-		return (EAttribute)propertyIndexEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getStringToPropertyIndexMap() {
-		return stringToPropertyIndexMapEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EReference getStringToPropertyIndexMap_Value() {
-		return (EReference)stringToPropertyIndexMapEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getStringToPropertyIndexMap_Key() {
-		return (EAttribute)stringToPropertyIndexMapEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getSimpleLayerDescriptor() {
-		return simpleLayerDescriptorEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getRegExpLayerDescriptor() {
-		return regExpLayerDescriptorEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getNullInstance() {
-		return nullInstanceEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getNullInstance__GetInstance() {
-		return nullInstanceEClass.getEOperations().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getRegExpLayer() {
-		return regExpLayerEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getRegExpLayer_Expr() {
-		return (EAttribute)regExpLayerEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getRegExpLayer_Language() {
-		return (EAttribute)regExpLayerEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getRegExpLayer_IsDomainChangedEventDependant() {
-		return (EAttribute)regExpLayerEClass.getEStructuralFeatures().get(2);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getRegExpLayer_DomainChangedEventLevel() {
-		return (EAttribute)regExpLayerEClass.getEStructuralFeatures().get(3);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getRegExpLayer_IsDiagramChangedEventDependant() {
-		return (EAttribute)regExpLayerEClass.getEStructuralFeatures().get(4);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getRegExpLayer_DiagramChangedEventLevel() {
-		return (EAttribute)regExpLayerEClass.getEStructuralFeatures().get(5);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getRegExpLayer_ExpressionContextObjectType() {
-		return (EAttribute)regExpLayerEClass.getEStructuralFeatures().get(6);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getRegExpLayer__Activate__AbstractLayerOperator() {
-		return regExpLayerEClass.getEOperations().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getRegExpLayer__Deactivate__AbstractLayerOperator() {
-		return regExpLayerEClass.getEOperations().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getRegExpLayer__IsDerivedView__View() {
-		return regExpLayerEClass.getEOperations().get(2);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getRegExpLayer__AttachDerivedView__View() {
-		return regExpLayerEClass.getEOperations().get(3);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getRegExpLayer__AttachDerivedViews__EList() {
-		return regExpLayerEClass.getEOperations().get(4);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getRegExpLayer__AttachDerivedViews() {
-		return regExpLayerEClass.getEOperations().get(5);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getRegExpLayer__LookupDerivedViews__EList() {
-		return regExpLayerEClass.getEOperations().get(6);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getLayer() {
-		return layerEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getColor() {
-		return colorEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getColorInstance() {
-		return colorInstanceEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getColorInstance_Value() {
-		return (EAttribute)colorInstanceEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getFillInstance() {
-		return fillInstanceEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getFillInstance_Transparency() {
-		return (EAttribute)fillInstanceEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EReference getFillInstance_FillColor() {
-		return (EReference)fillInstanceEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getFill() {
-		return fillEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getFillPropertySetter() {
-		return fillPropertySetterEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getIsValidPropertySetter() {
-		return isValidPropertySetterEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getNullPropertySetter() {
-		return nullPropertySetterEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getLineType() {
-		return lineTypeEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getLineInstance() {
-		return lineInstanceEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getLineInstance_LineColor() {
-		return (EAttribute)lineInstanceEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getLineInstance_LineWith() {
-		return (EAttribute)lineInstanceEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getLinePropertySetter() {
-		return linePropertySetterEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getFontPropertySetter() {
-		return fontPropertySetterEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getFontInstance() {
-		return fontInstanceEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getFontInstance_FontColor() {
-		return (EAttribute)fontInstanceEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getFontInstance_FontName() {
-		return (EAttribute)fontInstanceEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getFontInstance_FontHeigh() {
-		return (EAttribute)fontInstanceEClass.getEStructuralFeatures().get(2);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getFontInstance_Bold() {
-		return (EAttribute)fontInstanceEClass.getEStructuralFeatures().get(3);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getFontType() {
-		return fontTypeEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getIsVisiblePropertySetter() {
-		return isVisiblePropertySetterEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public EClass getLayerOperatorDescriptorRegistry() {
 		return layerOperatorDescriptorRegistryEClass;
 	}
@@ -2870,7 +1459,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayerOperatorDescriptorRegistry_Descriptors() {
 		return (EReference)layerOperatorDescriptorRegistryEClass.getEStructuralFeatures().get(0);
 	}
@@ -2880,7 +1468,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayerOperatorDescriptorRegistry_PropertyOperators() {
 		return (EReference)layerOperatorDescriptorRegistryEClass.getEStructuralFeatures().get(1);
 	}
@@ -2890,7 +1477,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EAttribute getLayerOperatorDescriptorRegistry_PropertyCollectionSize() {
 		return (EAttribute)layerOperatorDescriptorRegistryEClass.getEStructuralFeatures().get(2);
 	}
@@ -2900,7 +1486,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getLayerOperatorDescriptorRegistry_DefaultOperator() {
 		return (EReference)layerOperatorDescriptorRegistryEClass.getEStructuralFeatures().get(3);
 	}
@@ -2910,7 +1495,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayerOperatorDescriptorRegistry__AddLayerOperatorDescriptor__LayerOperatorDescriptor() {
 		return layerOperatorDescriptorRegistryEClass.getEOperations().get(0);
 	}
@@ -2920,7 +1504,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayerOperatorDescriptorRegistry__GetLayerOperatorDescriptor__String() {
 		return layerOperatorDescriptorRegistryEClass.getEOperations().get(1);
 	}
@@ -2930,7 +1513,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayerOperatorDescriptorRegistry__AddPropertyOperator__PropertyOperator() {
 		return layerOperatorDescriptorRegistryEClass.getEOperations().get(2);
 	}
@@ -2940,7 +1522,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayerOperatorDescriptorRegistry__GetPropertyOperator__String() {
 		return layerOperatorDescriptorRegistryEClass.getEOperations().get(3);
 	}
@@ -2950,7 +1531,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayerOperatorDescriptorRegistry__AttachOperatorToDescriptor__Property_String_String() {
 		return layerOperatorDescriptorRegistryEClass.getEOperations().get(4);
 	}
@@ -2960,7 +1540,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EOperation getLayerOperatorDescriptorRegistry__CreateLayerOperator__String() {
 		return layerOperatorDescriptorRegistryEClass.getEOperations().get(5);
 	}
@@ -2970,7 +1549,537 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
+	public EClass getLayerOperatorDescriptor() {
+		return layerOperatorDescriptorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLayerOperatorDescriptor_PropertyOperators() {
+		return (EReference)layerOperatorDescriptorEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLayerOperatorDescriptor_Name() {
+		return (EAttribute)layerOperatorDescriptorEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getLayerOperatorDescriptor__GetPropertyOperator__Property() {
+		return layerOperatorDescriptorEClass.getEOperations().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getLayerOperatorDescriptor__SetPropertyOperator__Property_PropertyOperator() {
+		return layerOperatorDescriptorEClass.getEOperations().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getLayerOperatorDescriptor__CreateLayerOperator() {
+		return layerOperatorDescriptorEClass.getEOperations().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getLayerOperatorDescriptor__SetPropertyCollectionSize__int_PropertyOperator() {
+		return layerOperatorDescriptorEClass.getEOperations().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPropertyOperator() {
+		return propertyOperatorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPropertyOperator_Name() {
+		return (EAttribute)propertyOperatorEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPropertyOperator_Classname() {
+		return (EAttribute)propertyOperatorEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPropertyOperator_OperatorInstance() {
+		return (EReference)propertyOperatorEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPropertyOperator_ClassBundleID() {
+		return (EAttribute)propertyOperatorEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getPropertyOperator__GetComputePropertyValueCommand__List() {
+		return propertyOperatorEClass.getEOperations().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getPropertyOperator__ResetOperatorInstance() {
+		return propertyOperatorEClass.getEOperations().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLayerOperator() {
+		return layerOperatorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLayerOperator_Layers() {
+		return (EReference)layerOperatorEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getLayerOperator_LayerOperatorDescriptorName() {
+		return (EAttribute)layerOperatorEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getLayerOperator_LayerOperatorDescriptor() {
+		return (EReference)layerOperatorEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getLayerOperator__IsDescriptorSet() {
+		return layerOperatorEClass.getEOperations().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getLayerOperator__ResetDescriptor() {
+		return layerOperatorEClass.getEOperations().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLayersContainer() {
+		return layersContainerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getLayersContainer__AddLayer__LayerExpression() {
+		return layersContainerEClass.getEOperations().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getAbstractLayer() {
+		return abstractLayerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getAbstractLayer_PropertyValues() {
+		return (EReference)abstractLayerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getAbstractLayer_PropertyValueMap() {
+		return (EReference)abstractLayerEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getAbstractLayer_LayerDescriptor() {
+		return (EReference)abstractLayerEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getAbstractLayer_Views() {
+		return (EReference)abstractLayerEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getAbstractLayer_AttachedProperties() {
+		return (EReference)abstractLayerEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getAbstractLayer__AddPropertyInstance__Property() {
+		return abstractLayerEClass.getEOperations().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getAbstractLayer__RemovePropertyInstance__Property() {
+		return abstractLayerEClass.getEOperations().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getAbstractLayer__GetPropertyInstance__Property() {
+		return abstractLayerEClass.getEOperations().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getAbstractLayer__GetPropertyInstance__String() {
+		return abstractLayerEClass.getEOperations().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStringToTypeInstanceMap() {
+		return stringToTypeInstanceMapEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStringToTypeInstanceMap_Key() {
+		return (EAttribute)stringToTypeInstanceMapEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getStringToTypeInstanceMap_Value() {
+		return (EReference)stringToTypeInstanceMapEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getFolder() {
+		return folderEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getFolder_Elements() {
+		return (EReference)folderEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFolder_Name() {
+		return (EAttribute)folderEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getMetamodel() {
+		return metamodelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMetamodel_Name() {
+		return (EAttribute)metamodelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMetamodel_Description() {
+		return (EAttribute)metamodelEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMetamodel_Nsuri() {
+		return (EAttribute)metamodelEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMetamodel_PluginID() {
+		return (EAttribute)metamodelEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMetamodel_EPackageInstanceName() {
+		return (EAttribute)metamodelEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMetamodel_IsTypeValid() {
+		return (EAttribute)metamodelEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getMetamodel__GetEPackage() {
+		return metamodelEClass.getEOperations().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getTopLayerOperator() {
+		return topLayerOperatorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStackedLayerOperator() {
+		return stackedLayerOperatorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPropertyIndex() {
+		return propertyIndexEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPropertyIndex_Property() {
+		return (EReference)propertyIndexEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPropertyIndex_Index() {
+		return (EAttribute)propertyIndexEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStringToPropertyIndexMap() {
+		return stringToPropertyIndexMapEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getStringToPropertyIndexMap_Value() {
+		return (EReference)stringToPropertyIndexMapEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStringToPropertyIndexMap_Key() {
+		return (EAttribute)stringToPropertyIndexMapEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSimpleLayerDescriptor() {
+		return simpleLayerDescriptorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getNullInstance() {
+		return nullInstanceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EOperation getNullInstance__GetInstance() {
+		return nullInstanceEClass.getEOperations().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getLayer() {
+		return layerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getNullPropertySetter() {
+		return nullPropertySetterEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EClass getTopLayerOperatorDescriptor() {
 		return topLayerOperatorDescriptorEClass;
 	}
@@ -2980,7 +2089,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getStackedLayerOperatorDescriptor() {
 		return stackedLayerOperatorDescriptorEClass;
 	}
@@ -2990,87 +2098,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EClass getCustomPropertyOperator() {
-		return customPropertyOperatorEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getCustomPropertyOperator_Classname() {
-		return (EAttribute)customPropertyOperatorEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getCustomPropertyOperator_OperatorInstance() {
-		return (EAttribute)customPropertyOperatorEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EAttribute getCustomPropertyOperator_ClassBundleID() {
-		return (EAttribute)customPropertyOperatorEClass.getEStructuralFeatures().get(2);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EOperation getCustomPropertyOperator__ResetOperatorInstance() {
-		return customPropertyOperatorEClass.getEOperations().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getAndStackedLayerOperatorDescriptor() {
-		return andStackedLayerOperatorDescriptorEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getOrStackedLayerOperatorDescriptor() {
-		return orStackedLayerOperatorDescriptorEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EClass getIsAbstractUmlSetter() {
-		return isAbstractUmlSetterEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public EClass getAllViewsDerivedLayer() {
 		return allViewsDerivedLayerEClass;
 	}
@@ -3080,7 +2107,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getCSSPropertySetter() {
 		return cssPropertySetterEClass;
 	}
@@ -3090,7 +2116,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getCSSType() {
 		return cssTypeEClass;
 	}
@@ -3100,7 +2125,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EClass getCSSInstance() {
 		return cssInstanceEClass;
 	}
@@ -3110,7 +2134,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EReference getCSSInstance_Stylesheet() {
 		return (EReference)cssInstanceEClass.getEStructuralFeatures().get(0);
 	}
@@ -3174,7 +2197,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EEnum getLayerState() {
 		return layerStateEEnum;
 	}
@@ -3184,7 +2206,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EEnum getEventLevel() {
 		return eventLevelEEnum;
 	}
@@ -3194,7 +2215,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EDataType getString() {
 		return stringEDataType;
 	}
@@ -3204,37 +2224,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EDataType getboolean() {
-		return booleanEDataType;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EDataType getEPackage() {
-		return ePackageEDataType;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EDataType getBadStateException() {
-		return badStateExceptionEDataType;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public EDataType getLayersException() {
 		return layersExceptionEDataType;
 	}
@@ -3244,27 +2233,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EDataType getNotFoundException() {
-		return notFoundExceptionEDataType;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EDataType getComputePropertyValueCommand() {
-		return computePropertyValueCommandEDataType;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public EDataType getint() {
 		return intEDataType;
 	}
@@ -3274,7 +2242,51 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
+	public EDataType getBadStateException() {
+		return badStateExceptionEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EDataType getNotFoundException() {
+		return notFoundExceptionEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EDataType getComputePropertyValueCommand() {
+		return computePropertyValueCommandEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EDataType getboolean() {
+		return booleanEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EDataType getEPackage() {
+		return ePackageEDataType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EDataType getObject() {
 		return objectEDataType;
 	}
@@ -3284,17 +2296,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EDataType getCustomPropertyOpertorInstance() {
-		return customPropertyOpertorInstanceEDataType;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public LayersFactory getLayersFactory() {
 		return (LayersFactory)getEFactoryInstance();
 	}
@@ -3328,8 +2329,8 @@
 		createEReference(layersStackEClass, LAYERS_STACK__DIAGRAM);
 		createEAttribute(layersStackEClass, LAYERS_STACK__STATE);
 		createEOperation(layersStackEClass, LAYERS_STACK___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY);
-		createEOperation(layersStackEClass, LAYERS_STACK___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST);
-		createEOperation(layersStackEClass, LAYERS_STACK___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY);
+		createEOperation(layersStackEClass, LAYERS_STACK___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST);
+		createEOperation(layersStackEClass, LAYERS_STACK___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY);
 		createEOperation(layersStackEClass, LAYERS_STACK___START_AFTER_CREATION);
 		createEOperation(layersStackEClass, LAYERS_STACK___ATTACH_LAYERS);
 		createEOperation(layersStackEClass, LAYERS_STACK___ATTACH);
@@ -3346,8 +2347,8 @@
 		createEReference(layerExpressionEClass, LAYER_EXPRESSION__OWNING_LAYERS_STACK);
 		createEAttribute(layerExpressionEClass, LAYER_EXPRESSION__STATE);
 		createEOperation(layerExpressionEClass, LAYER_EXPRESSION___GET_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_PROPERTY);
-		createEOperation(layerExpressionEClass, LAYER_EXPRESSION___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY);
-		createEOperation(layerExpressionEClass, LAYER_EXPRESSION___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST);
+		createEOperation(layerExpressionEClass, LAYER_EXPRESSION___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY);
+		createEOperation(layerExpressionEClass, LAYER_EXPRESSION___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST);
 		createEOperation(layerExpressionEClass, LAYER_EXPRESSION___ATTACH_TO_LAYERS_STACK__LAYERSSTACK);
 		createEOperation(layerExpressionEClass, LAYER_EXPRESSION___GET_LAYERS_STACK);
 		createEOperation(layerExpressionEClass, LAYER_EXPRESSION___ENTER_ATTACHED_STATE);
@@ -3393,20 +2394,10 @@
 		createEOperation(propertyEClass, PROPERTY___CREATE_INSTANCE);
 
 		typeEClass = createEClass(TYPE);
-		createEReference(typeEClass, TYPE__METAMODEL);
 		createEAttribute(typeEClass, TYPE__NAME);
 		createEAttribute(typeEClass, TYPE__DESCRIPTION);
 		createEOperation(typeEClass, TYPE___CREATE_INSTANCE);
 
-		metamodelEClass = createEClass(METAMODEL);
-		createEAttribute(metamodelEClass, METAMODEL__NAME);
-		createEAttribute(metamodelEClass, METAMODEL__DESCRIPTION);
-		createEAttribute(metamodelEClass, METAMODEL__NSURI);
-		createEAttribute(metamodelEClass, METAMODEL__PLUGIN_ID);
-		createEAttribute(metamodelEClass, METAMODEL__EPACKAGE_INSTANCE_NAME);
-		createEAttribute(metamodelEClass, METAMODEL__IS_TYPE_VALID);
-		createEOperation(metamodelEClass, METAMODEL___GET_EPACKAGE);
-
 		typeInstanceEClass = createEClass(TYPE_INSTANCE);
 		createEOperation(typeInstanceEClass, TYPE_INSTANCE___SET_VALUE_FROM_STRING__STRING);
 		createEOperation(typeInstanceEClass, TYPE_INSTANCE___SET_VALUE_FROM_INSTANCE__TYPEINSTANCE);
@@ -3465,26 +2456,26 @@
 		createEOperation(layerOperatorDescriptorEClass, LAYER_OPERATOR_DESCRIPTOR___GET_PROPERTY_OPERATOR__PROPERTY);
 		createEOperation(layerOperatorDescriptorEClass, LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_OPERATOR__PROPERTY_PROPERTYOPERATOR);
 		createEOperation(layerOperatorDescriptorEClass, LAYER_OPERATOR_DESCRIPTOR___CREATE_LAYER_OPERATOR);
-		createEOperation(layerOperatorDescriptorEClass, LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_DEFAULTPROPERTYOPERATOR);
+		createEOperation(layerOperatorDescriptorEClass, LAYER_OPERATOR_DESCRIPTOR___SET_PROPERTY_COLLECTION_SIZE__INT_PROPERTYOPERATOR);
 
 		propertyOperatorEClass = createEClass(PROPERTY_OPERATOR);
 		createEAttribute(propertyOperatorEClass, PROPERTY_OPERATOR__NAME);
-		createEOperation(propertyOperatorEClass, PROPERTY_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST);
-
-		abstractLayerOperatorEClass = createEClass(ABSTRACT_LAYER_OPERATOR);
-		createEReference(abstractLayerOperatorEClass, ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR);
-		createEAttribute(abstractLayerOperatorEClass, ABSTRACT_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME);
-		createEOperation(abstractLayerOperatorEClass, ABSTRACT_LAYER_OPERATOR___IS_DESCRIPTOR_SET);
-		createEOperation(abstractLayerOperatorEClass, ABSTRACT_LAYER_OPERATOR___RESET_DESCRIPTOR);
+		createEAttribute(propertyOperatorEClass, PROPERTY_OPERATOR__CLASSNAME);
+		createEReference(propertyOperatorEClass, PROPERTY_OPERATOR__OPERATOR_INSTANCE);
+		createEAttribute(propertyOperatorEClass, PROPERTY_OPERATOR__CLASS_BUNDLE_ID);
+		createEOperation(propertyOperatorEClass, PROPERTY_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__LIST);
+		createEOperation(propertyOperatorEClass, PROPERTY_OPERATOR___RESET_OPERATOR_INSTANCE);
 
 		layerOperatorEClass = createEClass(LAYER_OPERATOR);
 		createEReference(layerOperatorEClass, LAYER_OPERATOR__LAYERS);
+		createEAttribute(layerOperatorEClass, LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME);
+		createEReference(layerOperatorEClass, LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR);
+		createEOperation(layerOperatorEClass, LAYER_OPERATOR___IS_DESCRIPTOR_SET);
+		createEOperation(layerOperatorEClass, LAYER_OPERATOR___RESET_DESCRIPTOR);
 
 		layersContainerEClass = createEClass(LAYERS_CONTAINER);
 		createEOperation(layersContainerEClass, LAYERS_CONTAINER___ADD_LAYER__LAYEREXPRESSION);
 
-		defaultPropertyOperatorEClass = createEClass(DEFAULT_PROPERTY_OPERATOR);
-
 		abstractLayerEClass = createEClass(ABSTRACT_LAYER);
 		createEReference(abstractLayerEClass, ABSTRACT_LAYER__PROPERTY_VALUES);
 		createEReference(abstractLayerEClass, ABSTRACT_LAYER__PROPERTY_VALUE_MAP);
@@ -3504,30 +2495,19 @@
 		createEReference(folderEClass, FOLDER__ELEMENTS);
 		createEAttribute(folderEClass, FOLDER__NAME);
 
-		intInstanceEClass = createEClass(INT_INSTANCE);
-		createEAttribute(intInstanceEClass, INT_INSTANCE__VALUE);
-
-		booleanInstanceEClass = createEClass(BOOLEAN_INSTANCE);
-		createEAttribute(booleanInstanceEClass, BOOLEAN_INSTANCE__VALUE);
-
-		stringInstanceEClass = createEClass(STRING_INSTANCE);
-		createEAttribute(stringInstanceEClass, STRING_INSTANCE__VALUE);
-
-		intTypeEClass = createEClass(INT_TYPE);
-
-		booleanTypeEClass = createEClass(BOOLEAN_TYPE);
-
-		stringTypeEClass = createEClass(STRING_TYPE);
-
-		customTypeEClass = createEClass(CUSTOM_TYPE);
-		createEAttribute(customTypeEClass, CUSTOM_TYPE__CLASSIFIER);
+		metamodelEClass = createEClass(METAMODEL);
+		createEAttribute(metamodelEClass, METAMODEL__NAME);
+		createEAttribute(metamodelEClass, METAMODEL__DESCRIPTION);
+		createEAttribute(metamodelEClass, METAMODEL__NSURI);
+		createEAttribute(metamodelEClass, METAMODEL__PLUGIN_ID);
+		createEAttribute(metamodelEClass, METAMODEL__EPACKAGE_INSTANCE_NAME);
+		createEAttribute(metamodelEClass, METAMODEL__IS_TYPE_VALID);
+		createEOperation(metamodelEClass, METAMODEL___GET_EPACKAGE);
 
 		topLayerOperatorEClass = createEClass(TOP_LAYER_OPERATOR);
 
 		stackedLayerOperatorEClass = createEClass(STACKED_LAYER_OPERATOR);
 
-		customLayerOperatorEClass = createEClass(CUSTOM_LAYER_OPERATOR);
-
 		propertyIndexEClass = createEClass(PROPERTY_INDEX);
 		createEReference(propertyIndexEClass, PROPERTY_INDEX__PROPERTY);
 		createEAttribute(propertyIndexEClass, PROPERTY_INDEX__INDEX);
@@ -3538,82 +2518,17 @@
 
 		simpleLayerDescriptorEClass = createEClass(SIMPLE_LAYER_DESCRIPTOR);
 
-		regExpLayerDescriptorEClass = createEClass(REG_EXP_LAYER_DESCRIPTOR);
-
 		nullInstanceEClass = createEClass(NULL_INSTANCE);
 		createEOperation(nullInstanceEClass, NULL_INSTANCE___GET_INSTANCE);
 
-		regExpLayerEClass = createEClass(REG_EXP_LAYER);
-		createEAttribute(regExpLayerEClass, REG_EXP_LAYER__EXPR);
-		createEAttribute(regExpLayerEClass, REG_EXP_LAYER__LANGUAGE);
-		createEAttribute(regExpLayerEClass, REG_EXP_LAYER__IS_DOMAIN_CHANGED_EVENT_DEPENDANT);
-		createEAttribute(regExpLayerEClass, REG_EXP_LAYER__DOMAIN_CHANGED_EVENT_LEVEL);
-		createEAttribute(regExpLayerEClass, REG_EXP_LAYER__IS_DIAGRAM_CHANGED_EVENT_DEPENDANT);
-		createEAttribute(regExpLayerEClass, REG_EXP_LAYER__DIAGRAM_CHANGED_EVENT_LEVEL);
-		createEAttribute(regExpLayerEClass, REG_EXP_LAYER__EXPRESSION_CONTEXT_OBJECT_TYPE);
-		createEOperation(regExpLayerEClass, REG_EXP_LAYER___ACTIVATE__ABSTRACTLAYEROPERATOR);
-		createEOperation(regExpLayerEClass, REG_EXP_LAYER___DEACTIVATE__ABSTRACTLAYEROPERATOR);
-		createEOperation(regExpLayerEClass, REG_EXP_LAYER___IS_DERIVED_VIEW__VIEW);
-		createEOperation(regExpLayerEClass, REG_EXP_LAYER___ATTACH_DERIVED_VIEW__VIEW);
-		createEOperation(regExpLayerEClass, REG_EXP_LAYER___ATTACH_DERIVED_VIEWS__ELIST);
-		createEOperation(regExpLayerEClass, REG_EXP_LAYER___ATTACH_DERIVED_VIEWS);
-		createEOperation(regExpLayerEClass, REG_EXP_LAYER___LOOKUP_DERIVED_VIEWS__ELIST);
-
 		layerEClass = createEClass(LAYER);
 
-		colorEClass = createEClass(COLOR);
-
-		colorInstanceEClass = createEClass(COLOR_INSTANCE);
-		createEAttribute(colorInstanceEClass, COLOR_INSTANCE__VALUE);
-
-		fillInstanceEClass = createEClass(FILL_INSTANCE);
-		createEAttribute(fillInstanceEClass, FILL_INSTANCE__TRANSPARENCY);
-		createEReference(fillInstanceEClass, FILL_INSTANCE__FILL_COLOR);
-
-		fillEClass = createEClass(FILL);
-
-		fillPropertySetterEClass = createEClass(FILL_PROPERTY_SETTER);
-
-		isValidPropertySetterEClass = createEClass(IS_VALID_PROPERTY_SETTER);
-
 		nullPropertySetterEClass = createEClass(NULL_PROPERTY_SETTER);
 
-		lineTypeEClass = createEClass(LINE_TYPE);
-
-		lineInstanceEClass = createEClass(LINE_INSTANCE);
-		createEAttribute(lineInstanceEClass, LINE_INSTANCE__LINE_COLOR);
-		createEAttribute(lineInstanceEClass, LINE_INSTANCE__LINE_WITH);
-
-		linePropertySetterEClass = createEClass(LINE_PROPERTY_SETTER);
-
-		fontPropertySetterEClass = createEClass(FONT_PROPERTY_SETTER);
-
-		fontInstanceEClass = createEClass(FONT_INSTANCE);
-		createEAttribute(fontInstanceEClass, FONT_INSTANCE__FONT_COLOR);
-		createEAttribute(fontInstanceEClass, FONT_INSTANCE__FONT_NAME);
-		createEAttribute(fontInstanceEClass, FONT_INSTANCE__FONT_HEIGH);
-		createEAttribute(fontInstanceEClass, FONT_INSTANCE__BOLD);
-
-		fontTypeEClass = createEClass(FONT_TYPE);
-
-		isVisiblePropertySetterEClass = createEClass(IS_VISIBLE_PROPERTY_SETTER);
-
 		topLayerOperatorDescriptorEClass = createEClass(TOP_LAYER_OPERATOR_DESCRIPTOR);
 
 		stackedLayerOperatorDescriptorEClass = createEClass(STACKED_LAYER_OPERATOR_DESCRIPTOR);
 
-		customPropertyOperatorEClass = createEClass(CUSTOM_PROPERTY_OPERATOR);
-		createEAttribute(customPropertyOperatorEClass, CUSTOM_PROPERTY_OPERATOR__CLASSNAME);
-		createEAttribute(customPropertyOperatorEClass, CUSTOM_PROPERTY_OPERATOR__OPERATOR_INSTANCE);
-		createEAttribute(customPropertyOperatorEClass, CUSTOM_PROPERTY_OPERATOR__CLASS_BUNDLE_ID);
-		createEOperation(customPropertyOperatorEClass, CUSTOM_PROPERTY_OPERATOR___RESET_OPERATOR_INSTANCE);
-
-		andStackedLayerOperatorDescriptorEClass = createEClass(AND_STACKED_LAYER_OPERATOR_DESCRIPTOR);
-
-		orStackedLayerOperatorDescriptorEClass = createEClass(OR_STACKED_LAYER_OPERATOR_DESCRIPTOR);
-
-		isAbstractUmlSetterEClass = createEClass(IS_ABSTRACT_UML_SETTER);
-
 		allViewsDerivedLayerEClass = createEClass(ALL_VIEWS_DERIVED_LAYER);
 
 		cssPropertySetterEClass = createEClass(CSS_PROPERTY_SETTER);
@@ -3638,15 +2553,14 @@
 
 		// Create data types
 		stringEDataType = createEDataType(STRING);
-		booleanEDataType = createEDataType(BOOLEAN);
-		ePackageEDataType = createEDataType(EPACKAGE);
 		layersExceptionEDataType = createEDataType(LAYERS_EXCEPTION);
 		intEDataType = createEDataType(INT);
 		badStateExceptionEDataType = createEDataType(BAD_STATE_EXCEPTION);
 		notFoundExceptionEDataType = createEDataType(NOT_FOUND_EXCEPTION);
 		computePropertyValueCommandEDataType = createEDataType(COMPUTE_PROPERTY_VALUE_COMMAND);
+		booleanEDataType = createEDataType(BOOLEAN);
+		ePackageEDataType = createEDataType(EPACKAGE);
 		objectEDataType = createEDataType(OBJECT);
-		customPropertyOpertorInstanceEDataType = createEDataType(CUSTOM_PROPERTY_OPERTOR_INSTANCE);
 	}
 
 	/**
@@ -3687,49 +2601,20 @@
 		layersStackApplicationEClass.getESuperTypes().add(this.getFolderElement());
 		propertyEClass.getESuperTypes().add(this.getFolderElement());
 		typeEClass.getESuperTypes().add(this.getFolderElement());
-		metamodelEClass.getESuperTypes().add(this.getFolderElement());
 		typeInstanceEClass.getESuperTypes().add(this.getComputePropertyValueCommandItf());
-		abstractLayerOperatorEClass.getESuperTypes().add(this.getLayerOperator());
 		layerOperatorEClass.getESuperTypes().add(this.getLayerExpression());
 		layerOperatorEClass.getESuperTypes().add(this.getLayersContainer());
-		defaultPropertyOperatorEClass.getESuperTypes().add(this.getPropertyOperator());
 		abstractLayerEClass.getESuperTypes().add(this.getLayerExpression());
 		folderEClass.getESuperTypes().add(this.getFolderElement());
-		intInstanceEClass.getESuperTypes().add(this.getTypeInstance());
-		booleanInstanceEClass.getESuperTypes().add(this.getTypeInstance());
-		stringInstanceEClass.getESuperTypes().add(this.getTypeInstance());
-		intTypeEClass.getESuperTypes().add(this.getType());
-		booleanTypeEClass.getESuperTypes().add(this.getType());
-		stringTypeEClass.getESuperTypes().add(this.getType());
-		customTypeEClass.getESuperTypes().add(this.getType());
-		topLayerOperatorEClass.getESuperTypes().add(this.getAbstractLayerOperator());
-		stackedLayerOperatorEClass.getESuperTypes().add(this.getAbstractLayerOperator());
-		customLayerOperatorEClass.getESuperTypes().add(this.getLayerOperator());
+		metamodelEClass.getESuperTypes().add(this.getFolderElement());
+		topLayerOperatorEClass.getESuperTypes().add(this.getLayerOperator());
+		stackedLayerOperatorEClass.getESuperTypes().add(this.getLayerOperator());
 		simpleLayerDescriptorEClass.getESuperTypes().add(this.getLayerDescriptor());
-		regExpLayerDescriptorEClass.getESuperTypes().add(this.getLayerDescriptor());
 		nullInstanceEClass.getESuperTypes().add(this.getTypeInstance());
-		regExpLayerEClass.getESuperTypes().add(this.getAbstractLayer());
 		layerEClass.getESuperTypes().add(this.getAbstractLayer());
-		colorEClass.getESuperTypes().add(this.getType());
-		colorInstanceEClass.getESuperTypes().add(this.getTypeInstance());
-		fillInstanceEClass.getESuperTypes().add(this.getTypeInstance());
-		fillEClass.getESuperTypes().add(this.getType());
-		fillPropertySetterEClass.getESuperTypes().add(this.getPropertySetter());
-		isValidPropertySetterEClass.getESuperTypes().add(this.getPropertySetter());
 		nullPropertySetterEClass.getESuperTypes().add(this.getPropertySetter());
-		lineTypeEClass.getESuperTypes().add(this.getType());
-		lineInstanceEClass.getESuperTypes().add(this.getTypeInstance());
-		linePropertySetterEClass.getESuperTypes().add(this.getPropertySetter());
-		fontPropertySetterEClass.getESuperTypes().add(this.getPropertySetter());
-		fontInstanceEClass.getESuperTypes().add(this.getTypeInstance());
-		fontTypeEClass.getESuperTypes().add(this.getType());
-		isVisiblePropertySetterEClass.getESuperTypes().add(this.getPropertySetter());
 		topLayerOperatorDescriptorEClass.getESuperTypes().add(this.getLayerOperatorDescriptor());
 		stackedLayerOperatorDescriptorEClass.getESuperTypes().add(this.getLayerOperatorDescriptor());
-		customPropertyOperatorEClass.getESuperTypes().add(this.getPropertyOperator());
-		andStackedLayerOperatorDescriptorEClass.getESuperTypes().add(this.getStackedLayerOperatorDescriptor());
-		orStackedLayerOperatorDescriptorEClass.getESuperTypes().add(this.getStackedLayerOperatorDescriptor());
-		isAbstractUmlSetterEClass.getESuperTypes().add(this.getPropertySetter());
 		allViewsDerivedLayerEClass.getESuperTypes().add(this.getAbstractLayer());
 		cssPropertySetterEClass.getESuperTypes().add(this.getPropertySetter());
 		cssTypeEClass.getESuperTypes().add(this.getType());
@@ -3754,12 +2639,12 @@
 		addEParameter(op, this.getProperty(), "property", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 		addEException(op, this.getLayersException());
 
-		op = initEOperation(getLayersStack__GetPropertiesComputePropertyValueCommand__View_EList(), this.getComputePropertyValueCommand(), "getPropertiesComputePropertyValueCommand", 0, -1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		op = initEOperation(getLayersStack__GetPropertiesComputePropertyValueCommand__View_List(), this.getComputePropertyValueCommand(), "getPropertiesComputePropertyValueCommand", 0, -1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
 		addEParameter(op, theNotationPackage.getView(), "view", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 		addEParameter(op, this.getProperty(), "property", 1, -1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
 		addEException(op, this.getLayersException());
 
-		op = initEOperation(getLayersStack__GetViewsComputePropertyValueCommand__EList_Property(), this.getComputePropertyValueCommand(), "getViewsComputePropertyValueCommand", 0, -1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		op = initEOperation(getLayersStack__GetViewsComputePropertyValueCommand__List_Property(), this.getComputePropertyValueCommand(), "getViewsComputePropertyValueCommand", 0, -1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
 		addEParameter(op, theNotationPackage.getView(), "view", 0, -1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
 		addEParameter(op, this.getProperty(), "property", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 		addEException(op, this.getLayersException());
@@ -3794,12 +2679,12 @@
 		addEParameter(op, this.getProperty(), "property", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 		addEException(op, this.getLayersException());
 
-		op = initEOperation(getLayerExpression__GetViewsComputePropertyValueCommand__EList_Property(), this.getComputePropertyValueCommand(), "getViewsComputePropertyValueCommand", 0, -1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		op = initEOperation(getLayerExpression__GetViewsComputePropertyValueCommand__List_Property(), this.getComputePropertyValueCommand(), "getViewsComputePropertyValueCommand", 0, -1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
 		addEParameter(op, theNotationPackage.getView(), "view", 0, -1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
 		addEParameter(op, this.getProperty(), "property", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 		addEException(op, this.getLayersException());
 
-		op = initEOperation(getLayerExpression__GetPropertiesComputePropertyValueCommand__View_EList(), this.getComputePropertyValueCommand(), "getPropertiesComputePropertyValueCommand", 0, -1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
+		op = initEOperation(getLayerExpression__GetPropertiesComputePropertyValueCommand__View_List(), this.getComputePropertyValueCommand(), "getPropertiesComputePropertyValueCommand", 0, -1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
 		addEParameter(op, theNotationPackage.getView(), "view", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 		addEParameter(op, this.getProperty(), "property", 1, -1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
 		addEException(op, this.getLayersException());
@@ -3880,22 +2765,11 @@
 		addEException(op, this.getBadStateException());
 
 		initEClass(typeEClass, Type.class, "Type", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEReference(getType_Metamodel(), this.getMetamodel(), null, "metamodel", null, 1, 1, Type.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 		initEAttribute(getType_Name(), this.getString(), "name", null, 1, 1, Type.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 		initEAttribute(getType_Description(), this.getString(), "description", null, 1, 1, Type.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 
 		initEOperation(getType__CreateInstance(), this.getTypeInstance(), "createInstance", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 
-		initEClass(metamodelEClass, Metamodel.class, "Metamodel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEAttribute(getMetamodel_Name(), this.getString(), "name", null, 1, 1, Metamodel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getMetamodel_Description(), this.getString(), "description", null, 1, 1, Metamodel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getMetamodel_Nsuri(), this.getString(), "nsuri", null, 1, 1, Metamodel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getMetamodel_PluginID(), this.getString(), "pluginID", null, 1, 1, Metamodel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getMetamodel_EPackageInstanceName(), this.getString(), "ePackageInstanceName", null, 1, 1, Metamodel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getMetamodel_IsTypeValid(), this.getboolean(), "isTypeValid", null, 1, 1, Metamodel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-
-		initEOperation(getMetamodel__GetEPackage(), this.getEPackage(), "getEPackage", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-
 		initEClass(typeInstanceEClass, TypeInstance.class, "TypeInstance", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
 		op = initEOperation(getTypeInstance__SetValueFromString__String(), null, "setValueFromString", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
@@ -3957,7 +2831,7 @@
 		initEReference(getLayerOperatorDescriptorRegistry_Descriptors(), this.getLayerOperatorDescriptor(), null, "descriptors", null, 0, -1, LayerOperatorDescriptorRegistry.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 		initEReference(getLayerOperatorDescriptorRegistry_PropertyOperators(), this.getPropertyOperator(), null, "propertyOperators", null, 0, -1, LayerOperatorDescriptorRegistry.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 		initEAttribute(getLayerOperatorDescriptorRegistry_PropertyCollectionSize(), this.getint(), "propertyCollectionSize", null, 1, 1, LayerOperatorDescriptorRegistry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEReference(getLayerOperatorDescriptorRegistry_DefaultOperator(), this.getDefaultPropertyOperator(), null, "defaultOperator", null, 1, 1, LayerOperatorDescriptorRegistry.class, IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLayerOperatorDescriptorRegistry_DefaultOperator(), this.getPropertyOperator(), null, "defaultOperator", null, 1, 1, LayerOperatorDescriptorRegistry.class, IS_TRANSIENT, !IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 
 		op = initEOperation(getLayerOperatorDescriptorRegistry__AddLayerOperatorDescriptor__LayerOperatorDescriptor(), null, "addLayerOperatorDescriptor", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 		addEParameter(op, this.getLayerOperatorDescriptor(), "descriptor", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
@@ -3979,7 +2853,7 @@
 		addEParameter(op, this.getString(), "layerDescriptorName", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 		addEException(op, this.getNotFoundException());
 
-		op = initEOperation(getLayerOperatorDescriptorRegistry__CreateLayerOperator__String(), this.getAbstractLayerOperator(), "createLayerOperator", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
+		op = initEOperation(getLayerOperatorDescriptorRegistry__CreateLayerOperator__String(), this.getLayerOperator(), "createLayerOperator", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 		addEParameter(op, this.getString(), "layerOperatorID", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 		addEException(op, this.getLayersException());
 
@@ -3995,37 +2869,39 @@
 		addEParameter(op, this.getProperty(), "property", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 		addEParameter(op, this.getPropertyOperator(), "operator", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 
-		initEOperation(getLayerOperatorDescriptor__CreateLayerOperator(), this.getAbstractLayerOperator(), "createLayerOperator", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
+		initEOperation(getLayerOperatorDescriptor__CreateLayerOperator(), this.getLayerOperator(), "createLayerOperator", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 
-		op = initEOperation(getLayerOperatorDescriptor__SetPropertyCollectionSize__int_DefaultPropertyOperator(), null, "setPropertyCollectionSize", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
+		op = initEOperation(getLayerOperatorDescriptor__SetPropertyCollectionSize__int_PropertyOperator(), null, "setPropertyCollectionSize", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 		addEParameter(op, this.getint(), "size", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-		addEParameter(op, this.getDefaultPropertyOperator(), "defaultPropertyOperator", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
+		addEParameter(op, this.getPropertyOperator(), "defaultPropertyOperator", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 
 		initEClass(propertyOperatorEClass, PropertyOperator.class, "PropertyOperator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEAttribute(getPropertyOperator_Name(), this.getString(), "name", null, 1, 1, PropertyOperator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getPropertyOperator_Classname(), this.getString(), "classname", null, 1, 1, PropertyOperator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+		initEReference(getPropertyOperator_OperatorInstance(), this.getPropertyOperator(), null, "operatorInstance", null, 1, 1, PropertyOperator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getPropertyOperator_ClassBundleID(), this.getString(), "classBundleID", null, 1, 1, PropertyOperator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 
-		op = initEOperation(getPropertyOperator__GetComputePropertyValueCommand__EList(), this.getComputePropertyValueCommand(), "getComputePropertyValueCommand", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
+		op = initEOperation(getPropertyOperator__GetComputePropertyValueCommand__List(), this.getComputePropertyValueCommand(), "getComputePropertyValueCommand", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 		addEParameter(op, this.getComputePropertyValueCommand(), "property", 0, -1, IS_UNIQUE, IS_ORDERED); //$NON-NLS-1$
 		addEException(op, this.getLayersException());
 
-		initEClass(abstractLayerOperatorEClass, AbstractLayerOperator.class, "AbstractLayerOperator", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEReference(getAbstractLayerOperator_LayerOperatorDescriptor(), this.getLayerOperatorDescriptor(), null, "layerOperatorDescriptor", null, 1, 1, AbstractLayerOperator.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getAbstractLayerOperator_LayerOperatorDescriptorName(), this.getString(), "layerOperatorDescriptorName", null, 1, 1, AbstractLayerOperator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-
-		initEOperation(getAbstractLayerOperator__IsDescriptorSet(), this.getboolean(), "isDescriptorSet", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-
-		initEOperation(getAbstractLayerOperator__ResetDescriptor(), null, "resetDescriptor", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
+		op = initEOperation(getPropertyOperator__ResetOperatorInstance(), null, "resetOperatorInstance", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
+		addEException(op, this.getLayersException());
 
 		initEClass(layerOperatorEClass, LayerOperator.class, "LayerOperator", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEReference(getLayerOperator_Layers(), this.getLayerExpression(), null, "layers", null, 0, -1, LayerOperator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getLayerOperator_LayerOperatorDescriptorName(), this.getString(), "layerOperatorDescriptorName", null, 1, 1, LayerOperator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+		initEReference(getLayerOperator_LayerOperatorDescriptor(), this.getLayerOperatorDescriptor(), null, "layerOperatorDescriptor", null, 1, 1, LayerOperator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+
+		initEOperation(getLayerOperator__IsDescriptorSet(), this.getboolean(), "isDescriptorSet", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
+
+		initEOperation(getLayerOperator__ResetDescriptor(), null, "resetDescriptor", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 
 		initEClass(layersContainerEClass, LayersContainer.class, "LayersContainer", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
 		op = initEOperation(getLayersContainer__AddLayer__LayerExpression(), null, "addLayer", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 		addEParameter(op, this.getLayerExpression(), "layer", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 
-		initEClass(defaultPropertyOperatorEClass, DefaultPropertyOperator.class, "DefaultPropertyOperator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
 		initEClass(abstractLayerEClass, AbstractLayer.class, "AbstractLayer", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEReference(getAbstractLayer_PropertyValues(), this.getTypeInstance(), null, "propertyValues", null, 0, -1, AbstractLayer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED); //$NON-NLS-1$
 		initEReference(getAbstractLayer_PropertyValueMap(), this.getStringToTypeInstanceMap(), null, "propertyValueMap", null, 0, -1, AbstractLayer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
@@ -4056,30 +2932,20 @@
 		initEReference(getFolder_Elements(), this.getFolderElement(), null, "elements", null, 0, -1, Folder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 		initEAttribute(getFolder_Name(), this.getString(), "name", null, 1, 1, Folder.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 
-		initEClass(intInstanceEClass, IntInstance.class, "IntInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEAttribute(getIntInstance_Value(), this.getint(), "value", null, 1, 1, IntInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+		initEClass(metamodelEClass, Metamodel.class, "Metamodel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getMetamodel_Name(), this.getString(), "name", null, 1, 1, Metamodel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getMetamodel_Description(), this.getString(), "description", null, 1, 1, Metamodel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getMetamodel_Nsuri(), this.getString(), "nsuri", null, 1, 1, Metamodel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getMetamodel_PluginID(), this.getString(), "pluginID", null, 1, 1, Metamodel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getMetamodel_EPackageInstanceName(), this.getString(), "ePackageInstanceName", null, 1, 1, Metamodel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+		initEAttribute(getMetamodel_IsTypeValid(), this.getboolean(), "isTypeValid", null, 1, 1, Metamodel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 
-		initEClass(booleanInstanceEClass, BooleanInstance.class, "BooleanInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEAttribute(getBooleanInstance_Value(), this.getboolean(), "value", null, 1, 1, BooleanInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-
-		initEClass(stringInstanceEClass, StringInstance.class, "StringInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEAttribute(getStringInstance_Value(), this.getString(), "value", null, 1, 1, StringInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-
-		initEClass(intTypeEClass, IntType.class, "IntType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
-		initEClass(booleanTypeEClass, BooleanType.class, "BooleanType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
-		initEClass(stringTypeEClass, StringType.class, "StringType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
-		initEClass(customTypeEClass, CustomType.class, "CustomType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEAttribute(getCustomType_Classifier(), this.getString(), "classifier", null, 1, 1, CustomType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+		initEOperation(getMetamodel__GetEPackage(), this.getEPackage(), "getEPackage", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 
 		initEClass(topLayerOperatorEClass, TopLayerOperator.class, "TopLayerOperator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
 		initEClass(stackedLayerOperatorEClass, StackedLayerOperator.class, "StackedLayerOperator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
-		initEClass(customLayerOperatorEClass, CustomLayerOperator.class, "CustomLayerOperator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
 		initEClass(propertyIndexEClass, PropertyIndex.class, "PropertyIndex", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEReference(getPropertyIndex_Property(), this.getProperty(), null, "property", null, 1, 1, PropertyIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 		initEAttribute(getPropertyIndex_Index(), this.getint(), "index", null, 1, 1, PropertyIndex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
@@ -4090,103 +2956,18 @@
 
 		initEClass(simpleLayerDescriptorEClass, SimpleLayerDescriptor.class, "SimpleLayerDescriptor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
-		initEClass(regExpLayerDescriptorEClass, RegExpLayerDescriptor.class, "RegExpLayerDescriptor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
 		initEClass(nullInstanceEClass, NullInstance.class, "NullInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
 		initEOperation(getNullInstance__GetInstance(), this.getNullInstance(), "getInstance", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
 
-		initEClass(regExpLayerEClass, RegExpLayer.class, "RegExpLayer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEAttribute(getRegExpLayer_Expr(), this.getString(), "expr", null, 1, 1, RegExpLayer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getRegExpLayer_Language(), this.getString(), "language", null, 1, 1, RegExpLayer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getRegExpLayer_IsDomainChangedEventDependant(), this.getboolean(), "isDomainChangedEventDependant", null, 1, 1, RegExpLayer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getRegExpLayer_DomainChangedEventLevel(), this.getEventLevel(), "domainChangedEventLevel", null, 1, 1, RegExpLayer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getRegExpLayer_IsDiagramChangedEventDependant(), this.getboolean(), "isDiagramChangedEventDependant", null, 1, 1, RegExpLayer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getRegExpLayer_DiagramChangedEventLevel(), this.getEventLevel(), "diagramChangedEventLevel", null, 1, 1, RegExpLayer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getRegExpLayer_ExpressionContextObjectType(), this.getString(), "expressionContextObjectType", null, 1, 1, RegExpLayer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-
-		op = initEOperation(getRegExpLayer__Activate__AbstractLayerOperator(), null, "activate", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-		addEParameter(op, this.getAbstractLayerOperator(), "newParentLayer", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-
-		op = initEOperation(getRegExpLayer__Deactivate__AbstractLayerOperator(), null, "deactivate", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-		addEParameter(op, this.getAbstractLayerOperator(), "oldParentLayer", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-
-		op = initEOperation(getRegExpLayer__IsDerivedView__View(), this.getboolean(), "isDerivedView", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-		addEParameter(op, theNotationPackage.getView(), "view", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-		addEException(op, this.getLayersException());
-
-		op = initEOperation(getRegExpLayer__AttachDerivedView__View(), null, "attachDerivedView", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-		addEParameter(op, theNotationPackage.getView(), "view", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-		addEException(op, this.getLayersException());
-
-		op = initEOperation(getRegExpLayer__AttachDerivedViews__EList(), null, "attachDerivedViews", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-		addEParameter(op, theNotationPackage.getView(), "views", 0, -1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-		addEException(op, this.getLayersException());
-
-		op = initEOperation(getRegExpLayer__AttachDerivedViews(), null, "attachDerivedViews", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-		addEException(op, this.getLayersException());
-
-		op = initEOperation(getRegExpLayer__LookupDerivedViews__EList(), theNotationPackage.getView(), "lookupDerivedViews", 0, -1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-		addEParameter(op, theNotationPackage.getView(), "views", 0, -1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-		addEException(op, this.getLayersException());
-
 		initEClass(layerEClass, Layer.class, "Layer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
-		initEClass(colorEClass, Color.class, "Color", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
-		initEClass(colorInstanceEClass, ColorInstance.class, "ColorInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEAttribute(getColorInstance_Value(), this.getint(), "value", null, 1, 1, ColorInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-
-		initEClass(fillInstanceEClass, FillInstance.class, "FillInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEAttribute(getFillInstance_Transparency(), this.getint(), "transparency", null, 1, 1, FillInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEReference(getFillInstance_FillColor(), this.getColorInstance(), null, "fillColor", null, 1, 1, FillInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-
-		initEClass(fillEClass, Fill.class, "Fill", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
-		initEClass(fillPropertySetterEClass, FillPropertySetter.class, "FillPropertySetter", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
-		initEClass(isValidPropertySetterEClass, IsValidPropertySetter.class, "IsValidPropertySetter", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
 		initEClass(nullPropertySetterEClass, NullPropertySetter.class, "NullPropertySetter", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
-		initEClass(lineTypeEClass, LineType.class, "LineType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
-		initEClass(lineInstanceEClass, LineInstance.class, "LineInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEAttribute(getLineInstance_LineColor(), this.getint(), "lineColor", null, 1, 1, LineInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getLineInstance_LineWith(), this.getint(), "lineWith", null, 1, 1, LineInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-
-		initEClass(linePropertySetterEClass, LinePropertySetter.class, "LinePropertySetter", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
-		initEClass(fontPropertySetterEClass, FontPropertySetter.class, "FontPropertySetter", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
-		initEClass(fontInstanceEClass, FontInstance.class, "FontInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEAttribute(getFontInstance_FontColor(), this.getint(), "fontColor", "15053796", 1, 1, FontInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
-		initEAttribute(getFontInstance_FontName(), this.getString(), "fontName", "Segoe UI", 1, 1, FontInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
-		initEAttribute(getFontInstance_FontHeigh(), this.getint(), "fontHeigh", "9", 1, 1, FontInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
-		initEAttribute(getFontInstance_Bold(), this.getboolean(), "bold", "true", 1, 1, FontInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
-
-		initEClass(fontTypeEClass, FontType.class, "FontType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
-		initEClass(isVisiblePropertySetterEClass, IsVisiblePropertySetter.class, "IsVisiblePropertySetter", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
 		initEClass(topLayerOperatorDescriptorEClass, TopLayerOperatorDescriptor.class, "TopLayerOperatorDescriptor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
 		initEClass(stackedLayerOperatorDescriptorEClass, StackedLayerOperatorDescriptor.class, "StackedLayerOperatorDescriptor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
-		initEClass(customPropertyOperatorEClass, CustomPropertyOperator.class, "CustomPropertyOperator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEAttribute(getCustomPropertyOperator_Classname(), this.getString(), "classname", null, 1, 1, CustomPropertyOperator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getCustomPropertyOperator_OperatorInstance(), this.getCustomPropertyOpertorInstance(), "operatorInstance", null, 1, 1, CustomPropertyOperator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEAttribute(getCustomPropertyOperator_ClassBundleID(), this.getString(), "classBundleID", null, 1, 1, CustomPropertyOperator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-
-		op = initEOperation(getCustomPropertyOperator__ResetOperatorInstance(), null, "resetOperatorInstance", 1, 1, IS_UNIQUE, !IS_ORDERED); //$NON-NLS-1$
-		addEException(op, this.getLayersException());
-
-		initEClass(andStackedLayerOperatorDescriptorEClass, AndStackedLayerOperatorDescriptor.class, "AndStackedLayerOperatorDescriptor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
-		initEClass(orStackedLayerOperatorDescriptorEClass, OrStackedLayerOperatorDescriptor.class, "OrStackedLayerOperatorDescriptor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
-		initEClass(isAbstractUmlSetterEClass, IsAbstractUmlSetter.class, "IsAbstractUmlSetter", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-
 		initEClass(allViewsDerivedLayerEClass, AllViewsDerivedLayer.class, "AllViewsDerivedLayer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
 		initEClass(cssPropertySetterEClass, CSSPropertySetter.class, "CSSPropertySetter", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
@@ -4216,15 +2997,14 @@
 
 		// Initialize data types
 		initEDataType(stringEDataType, String.class, "String", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEDataType(booleanEDataType, boolean.class, "boolean", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEDataType(ePackageEDataType, EPackage.class, "EPackage", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEDataType(layersExceptionEDataType, LayersException.class, "LayersException", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEDataType(intEDataType, int.class, "int", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEDataType(badStateExceptionEDataType, BadStateException.class, "BadStateException", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEDataType(notFoundExceptionEDataType, NotFoundException.class, "NotFoundException", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEDataType(computePropertyValueCommandEDataType, ComputePropertyValueCommand.class, "ComputePropertyValueCommand", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEDataType(booleanEDataType, boolean.class, "boolean", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEDataType(ePackageEDataType, EPackage.class, "EPackage", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEDataType(objectEDataType, Object.class, "Object", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEDataType(customPropertyOpertorInstanceEDataType, CustomPropertyOperatorsInstance.class, "CustomPropertyOpertorInstance", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
 		// Create resource
 		createResource(eNS_URI);
@@ -4243,12 +3023,12 @@
 	 * @generated
 	 */
 	protected void createUMLAnnotations() {
-		String source = "http://www.eclipse.org/uml2/2.0.0/UML"; //$NON-NLS-1$	
+		String source = "http://www.eclipse.org/uml2/2.0.0/UML"; //$NON-NLS-1$
 		addAnnotation
-		  (this, 
-		   source, 
+		  (this,
+		   source,
 		   new String[] {
-			 "originalName", "Layers" //$NON-NLS-1$ //$NON-NLS-2$
+			   "originalName", "Layers" //$NON-NLS-1$ //$NON-NLS-2$
 		   });
 	}
 
@@ -4259,19 +3039,19 @@
 	 * @generated
 	 */
 	protected void createExtendedMetaDataAnnotations() {
-		String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData"; //$NON-NLS-1$	
+		String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData"; //$NON-NLS-1$
 		addAnnotation
-		  (badStateExceptionEDataType, 
-		   source, 
+		  (badStateExceptionEDataType,
+		   source,
 		   new String[] {
-			 "baseType", "LayersException" //$NON-NLS-1$ //$NON-NLS-2$
-		   });	
+			   "baseType", "LayersException" //$NON-NLS-1$ //$NON-NLS-2$
+		   });
 		addAnnotation
-		  (notFoundExceptionEDataType, 
-		   source, 
+		  (notFoundExceptionEDataType,
+		   source,
 		   new String[] {
-			 "baseType", "LayersException" //$NON-NLS-1$ //$NON-NLS-2$
+			   "baseType", "LayersException" //$NON-NLS-1$ //$NON-NLS-2$
 		   });
 	}
 
-} // LayersPackageImpl
+} //LayersPackageImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersStackApplicationImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersStackApplicationImpl.java
index e359819..dc41196 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersStackApplicationImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersStackApplicationImpl.java
@@ -1,43 +1,49 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
+import java.util.List;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
+
 import org.eclipse.gmf.runtime.notation.Diagram;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerApplicationFactory;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptorRegistry;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptorRegistry;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerStackDescriptorRegistry;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetterRegistry;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.loaders.LayersConfigModel;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.loaders.RegistriesLoader;
 
 /**
  * <!-- begin-user-doc -->
@@ -58,8 +64,7 @@
  *
  * @generated
  */
-public class LayersStackApplicationImpl extends
-		FolderElementImpl implements LayersStackApplication {
+public class LayersStackApplicationImpl extends FolderElementImpl implements LayersStackApplication {
 	/**
 	 * The cached value of the '{@link #getLayersStacks() <em>Layers Stacks</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
@@ -79,6 +84,7 @@
 	 * @ordered
 	 */
 	protected LayerStackDescriptorRegistry layerStackRegistry;
+
 	/**
 	 * The cached value of the '{@link #getPropertyRegistry() <em>Property Registry</em>}' containment reference.
 	 * <!-- begin-user-doc -->
@@ -132,55 +138,13 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	protected LayersStackApplicationImpl() {
 		super();
-		init();
 	}
 
 	/**
-	 * Init the class
-	 * Create the internal objects : {@link PropertyRegistry}, {@link LayerStackDescriptorRegistry}.
-	 */
-	protected void init() {
-		// Create the PropertyRegistry
-		PropertyRegistry propertyRegistry = LayersFactory.eINSTANCE.createPropertyRegistry();
-		setPropertyRegistry(propertyRegistry);
-
-		// Create the LayerStackDescriptorRegistry
-		LayerStackDescriptorRegistry layerStackDescriptorRegistry = LayersFactory.eINSTANCE.createLayerStackDescriptorRegistry();
-		setLayerStackRegistry(layerStackDescriptorRegistry);
-
-		// Create the LayerDescriptorRegistry
-		LayerDescriptorRegistry layerDescriptorRegistry = LayersFactory.eINSTANCE.createLayerDescriptorRegistry();
-		setLayerDescriptorRegistry(layerDescriptorRegistry);
-
-		// Create the config model and the registries loader
-		LayersConfigModel configModel = LayersConfigModel.getInstance();
-		RegistriesLoader registriesLoader = new RegistriesLoader(configModel);
-
-		// Create the LayerOperatorDescriptorRegistry
-		LayerOperatorDescriptorRegistry layerOperatorDescriptorRegistry = LayersFactory.eINSTANCE.createLayerOperatorDescriptorRegistry();
-		layerOperatorDescriptorRegistry.setPropertyCollectionSize(propertyRegistry.getPropertiesCount());
-
-		registriesLoader.loadLayerOperatorDescriptorRegistry(layerOperatorDescriptorRegistry, propertyRegistry);
-		setLayerOperatorDescriptorRegistry(layerOperatorDescriptorRegistry);
-
-		// Create the LayerApplicationFactory
-		LayerApplicationFactory layerApplicationFactory = LayersFactory.eINSTANCE.createLayerApplicationFactory();
-		setFactory(layerApplicationFactory);
-
-		// Create the PropertySetterRegistry
-		PropertySetterRegistry propertySetterRegistry = LayersFactory.eINSTANCE.createPropertySetterRegistry();
-		propertySetterRegistry.setApplication(this);
-		setPropertySetterRegistry(propertySetterRegistry);
-
-	}
-
-
-	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -195,8 +159,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EList<LayersStack> getLayersStacks() {
+	public List<LayersStack> getLayersStacks() {
 		if (layersStacks == null) {
 			layersStacks = new EObjectContainmentEList<LayersStack>(LayersStack.class, this, LayersPackage.LAYERS_STACK_APPLICATION__LAYERS_STACKS);
 		}
@@ -208,7 +171,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayerStackDescriptorRegistry getLayerStackRegistry() {
 		return layerStackRegistry;
 	}
@@ -233,7 +195,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setLayerStackRegistry(LayerStackDescriptorRegistry newLayerStackRegistry) {
 		if (newLayerStackRegistry != layerStackRegistry) {
 			NotificationChain msgs = null;
@@ -253,7 +214,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public PropertyRegistry getPropertyRegistry() {
 		return propertyRegistry;
 	}
@@ -278,7 +238,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setPropertyRegistry(PropertyRegistry newPropertyRegistry) {
 		if (newPropertyRegistry != propertyRegistry) {
 			NotificationChain msgs = null;
@@ -298,7 +257,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayerDescriptorRegistry getLayerDescriptorRegistry() {
 		return layerDescriptorRegistry;
 	}
@@ -323,7 +281,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setLayerDescriptorRegistry(LayerDescriptorRegistry newLayerDescriptorRegistry) {
 		if (newLayerDescriptorRegistry != layerDescriptorRegistry) {
 			NotificationChain msgs = null;
@@ -343,7 +300,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayerApplicationFactory getFactory() {
 		return factory;
 	}
@@ -368,7 +324,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setFactory(LayerApplicationFactory newFactory) {
 		if (newFactory != factory) {
 			NotificationChain msgs = null;
@@ -388,7 +343,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public PropertySetterRegistry getPropertySetterRegistry() {
 		return propertySetterRegistry;
 	}
@@ -413,7 +367,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setPropertySetterRegistry(PropertySetterRegistry newPropertySetterRegistry) {
 		if (newPropertySetterRegistry != propertySetterRegistry) {
 			NotificationChain msgs = null;
@@ -433,7 +386,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayerOperatorDescriptorRegistry getLayerOperatorDescriptorRegistry() {
 		return layerOperatorDescriptorRegistry;
 	}
@@ -458,7 +410,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setLayerOperatorDescriptorRegistry(LayerOperatorDescriptorRegistry newLayerOperatorDescriptorRegistry) {
 		if (newLayerOperatorDescriptorRegistry != layerOperatorDescriptorRegistry) {
 			NotificationChain msgs = null;
@@ -476,99 +427,56 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
-	public void removeLayersStackFor(Diagram diagram) {
-
-		try {
-			LayersStack stack = lookupLayersStackFor(diagram);
-			getLayersStacks().remove(stack);
-		} catch (NotFoundException e) {
-			// silently fails
-		}
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public boolean isLayersStackAttachedFor(Diagram diagram) {
-		try {
-			lookupLayersStackFor(diagram);
-			return true;
-		} catch (NotFoundException e) {
-			// not found
-			return false;
-		}
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public LayersStack lookupLayersStackFor(Diagram diagram) throws NotFoundException {
-		for (LayersStack stack : getLayersStacks()) {
-			if (stack.getDiagram() == diagram) {
-				return stack;
-			}
-		}
-
-		// Not found
-		throw new NotFoundException("No LayersStack attached for diagram: " + diagram);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * Get the {@link LayersStack} for the specified diagram. Create it if
-	 * necessary.
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
 	public LayersStack getLayersStackFor(Diagram diagram) {
-		try {
-			return lookupLayersStackFor(diagram);
-		} catch (NotFoundException e) {
-			// Create a new one
-			return createLayersStackFor(diagram);
-		}
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
-	 * Create a new LayersStack for the specified diagram.
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
+	public void removeLayersStackFor(Diagram diagram) {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isLayersStackAttachedFor(Diagram diagram) {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public LayersStack createLayersStackFor(Diagram diagram) {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
 
-		// Create a new LayerStack and add it to application (this)
-		LayersStack layer = LayersFactory.eINSTANCE.createLayersStack();
-		layer.startAfterCreation();
-		layer.setDiagram(diagram);
-
-		// Create first layer in stack
-		TopLayerOperator rootLayer = LayersFactory.eINSTANCE.createTopLayerOperator();
-		rootLayer.setName("Top Layer");
-		rootLayer.setApplication(this);
-		layer.setLayers(rootLayer);
-
-		// attach stack to application
-		getLayersStacks().add(layer);
-
-
-		return layer;
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public LayersStack lookupLayersStackFor(Diagram diagram) throws NotFoundException {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
@@ -765,4 +673,4 @@
 		return super.eInvoke(operationID, arguments);
 	}
 
-} // LayersStackApplicationImpl
+} //LayersStackApplicationImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersStackImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersStackImpl.java
index 82c8ec5..0a258cc 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersStackImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LayersStackImpl.java
@@ -1,40 +1,45 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.List;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.gmf.runtime.notation.Diagram;
 import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.BadStateException;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerState;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.notifier.ILayersTreeEventListener;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.notifier.LayersTreeEventNotifier;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.notifier.LayersTreeEventNotifierFactory;
 
 /**
  * <!-- begin-user-doc -->
@@ -53,9 +58,7 @@
  *
  * @generated
  */
-public class LayersStackImpl extends
-
-		EObjectImpl implements LayersStack {
+public class LayersStackImpl extends EObjectImpl implements LayersStack {
 	/**
 	 * The cached value of the '{@link #getLayers() <em>Layers</em>}' containment reference.
 	 * <!-- begin-user-doc -->
@@ -75,6 +78,7 @@
 	 * @ordered
 	 */
 	protected static final String NAME_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -84,6 +88,7 @@
 	 * @ordered
 	 */
 	protected String name = NAME_EDEFAULT;
+
 	/**
 	 * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -93,6 +98,7 @@
 	 * @ordered
 	 */
 	protected static final String DESCRIPTION_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -134,57 +140,12 @@
 	protected LayerState state = STATE_EDEFAULT;
 
 	/**
-	 * Listener on layers tree events.
-	 * This listener take in charge the initialization of added layers.
-	 */
-	private ILayersTreeEventListener layersTreeEventListener = new ILayersTreeEventListener() {
-
-		@Override
-		public void layerSet(Notification notification) {
-			LayersStackImpl.this.layerAdded((LayerExpression) notification.getNewValue());
-		}
-
-		@Override
-		public void layerRemoved(Notification notification) {
-			// nothing to do
-
-		}
-
-		@Override
-		public void layerMoved(Notification notification) {
-			// nothing to do
-
-		}
-
-		@Override
-		public void layerAdded(Notification notification) {
-			LayersStackImpl.this.layerAdded((LayerExpression) notification.getNewValue());
-		}
-
-	};
-
-	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	protected LayersStackImpl() {
 		super();
-
-		// Now, init should be called explicitly after creation.
-		// init();
-	}
-
-	/**
-	 * Init this object.
-	 * Create a listener on tree events.
-	 */
-	private void init() {
-
-		LayersTreeEventNotifier layersTreeEventnotifier = LayersTreeEventNotifierFactory.instance.adapt(this);
-
-		layersTreeEventnotifier.addLayersModelEventListener(layersTreeEventListener);
 	}
 
 	/**
@@ -202,7 +163,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayerExpression getLayers() {
 		return layers;
 	}
@@ -227,7 +187,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setLayers(LayerExpression newLayers) {
 		if (newLayers != layers) {
 			NotificationChain msgs = null;
@@ -247,7 +206,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getName() {
 		return name;
 	}
@@ -257,7 +215,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setName(String newName) {
 		String oldName = name;
 		name = newName;
@@ -270,7 +227,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getDescription() {
 		return description;
 	}
@@ -280,7 +236,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setDescription(String newDescription) {
 		String oldDescription = description;
 		description = newDescription;
@@ -293,7 +248,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public Diagram getDiagram() {
 		if (diagram != null && diagram.eIsProxy()) {
 			InternalEObject oldDiagram = (InternalEObject)diagram;
@@ -320,7 +274,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setDiagram(Diagram newDiagram) {
 		Diagram oldDiagram = diagram;
 		diagram = newDiagram;
@@ -333,7 +286,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public LayerState getState() {
 		return state;
 	}
@@ -343,7 +295,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setState(LayerState newState) {
 		LayerState oldState = state;
 		state = newState == null ? STATE_EDEFAULT : newState;
@@ -356,7 +307,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void addLayer(LayerExpression layer) {
 		// TODO: implement this method
 		// Ensure that you remove @generated or mark it @generated NOT
@@ -366,27 +316,9 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @throws LayersException
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public ComputePropertyValueCommand getComputePropertyValueCommand(View view, Property property) throws LayersException {
-		LayerExpression layers = getLayers();
-		if (layers == null) {
-			throw new BadStateException("Layers should be set first.");
-		}
-
-		return layers.getComputePropertyValueCommand(view, property);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EList<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, EList<Property> property) throws LayersException {
 		// TODO: implement this method
 		// Ensure that you remove @generated or mark it @generated NOT
 		throw new UnsupportedOperationException();
@@ -397,8 +329,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public EList<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(EList<View> view, Property property) throws LayersException {
+	public List<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, List<Property> property) throws LayersException {
 		// TODO: implement this method
 		// Ensure that you remove @generated or mark it @generated NOT
 		throw new UnsupportedOperationException();
@@ -406,95 +337,24 @@
 
 	/**
 	 * <!-- begin-user-doc -->
-	 * Start this LayersStack after its creation. This method should be explicitly called by
-	 * user after the creation of a LayersStack.
 	 * <!-- end-user-doc -->
-	 *
-	 * @deprecated Not used anymore
-	 * @generated NOT
+	 * @generated
 	 */
-	@Deprecated
-	@Override
+	public List<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(List<View> view, Property property) throws LayersException {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public void startAfterCreation() {
-		// Ensure child is initialized, if any
-		if (getLayers() != null) {
-			getLayers().attachToLayersStack(this);
-		}
-
-		// Start local behaviors
-		init();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * Attach recursively the tree of layers.
-	 * <!-- end-user-doc -->
-	 *
-	 * @throws LayersException
-	 * @generated NOT
-	 */
-	@Override
-	public void attachLayers() throws LayersException {
-		// Ensure child is started, if any
-		if (getLayers() != null) {
-			getLayers().attach();
-		}
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void attach() throws LayersException {
-		// Stop if already in ATTACHED state.
-		if (getState() == LayerState.ATTACHED) {
-			return;
-		}
-
-		// Check required attributes
-		if (getDiagram() == null) {
-			throw new BadStateException("A required attribute is not set. The Layer can't be attached."
-					+ "[layerName=" + getName()
-					+ ", diagram=" + (getDiagram() == null ? "null" : "ok")
-					+ "]");
-		}
-
-		// Can go in attached mode
-		setState(LayerState.ATTACHED);
-		enterAttachedState();
-		attachLayers();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void detach() throws LayersException {
-		// Change the state
-		exitAttachedState();
-		setState(LayerState.DETACHED);
-		// Ensure child is started, if any
-		if (getLayers() != null) {
-			getLayers().detach();
-		}
-
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void enterAttachedState() throws LayersException {
-		init();
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
@@ -502,7 +362,50 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
+	public void attachLayers() throws LayersException {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void attach() throws LayersException {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void detach() throws LayersException {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void enterAttachedState() throws LayersException {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public void exitAttachedState() {
 		// TODO: implement this method
 		// Ensure that you remove @generated or mark it @generated NOT
@@ -512,41 +415,6 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @throws LayersException
-	 * @generated NOT
-	 */
-	@Override
-	public EList<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, List<Property> property) throws LayersException {
-		LayerExpression layers = getLayers();
-		if (layers == null) {
-			throw new BadStateException("Layers should be set first.");
-		}
-
-		return layers.getPropertiesComputePropertyValueCommand(view, property);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @throws BadStateException
-	 * @generated NOT
-	 */
-	@Override
-	public EList<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(List<View> view, Property property) throws LayersException {
-
-		LayerExpression layers = getLayers();
-		if (layers == null) {
-			throw new BadStateException("Layers should be set first.");
-		}
-
-		return layers.getViewsComputePropertyValueCommand(view, property);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -676,16 +544,16 @@
 				catch (Throwable throwable) {
 					throw new InvocationTargetException(throwable);
 				}
-			case LayersPackage.LAYERS_STACK___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_ELIST:
+			case LayersPackage.LAYERS_STACK___GET_PROPERTIES_COMPUTE_PROPERTY_VALUE_COMMAND__VIEW_LIST:
 				try {
-					return getPropertiesComputePropertyValueCommand((View)arguments.get(0), (EList<Property>)arguments.get(1));
+					return getPropertiesComputePropertyValueCommand((View)arguments.get(0), (List<Property>)arguments.get(1));
 				}
 				catch (Throwable throwable) {
 					throw new InvocationTargetException(throwable);
 				}
-			case LayersPackage.LAYERS_STACK___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST_PROPERTY:
+			case LayersPackage.LAYERS_STACK___GET_VIEWS_COMPUTE_PROPERTY_VALUE_COMMAND__LIST_PROPERTY:
 				try {
-					return getViewsComputePropertyValueCommand((EList<View>)arguments.get(0), (Property)arguments.get(1));
+					return getViewsComputePropertyValueCommand((List<View>)arguments.get(0), (Property)arguments.get(1));
 				}
 				catch (Throwable throwable) {
 					throw new InvocationTargetException(throwable);
@@ -741,7 +609,7 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (name: "); //$NON-NLS-1$
 		result.append(name);
 		result.append(", description: "); //$NON-NLS-1$
@@ -752,22 +620,4 @@
 		return result.toString();
 	}
 
-	/**
-	 * A layer has been added to the layerTree.
-	 * Init this layer.
-	 * This method is called by the listener on layerTree events.
-	 *
-	 * @param addedLayer
-	 *            The added layer.
-	 */
-	protected void layerAdded(LayerExpression addedLayer) {
-		// Stop if there is no layer
-		if (addedLayer == null) {
-			return;
-		}
-		// init the layer
-		addedLayer.attachToLayersStack(this);
-
-	}
-
-} // LayersStackImpl
+} //LayersStackImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LineInstanceImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LineInstanceImpl.java
deleted file mode 100755
index e9c3528..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LineInstanceImpl.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Line Instance</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LineInstanceImpl#getLineColor <em>Line Color</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LineInstanceImpl#getLineWith <em>Line With</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class LineInstanceImpl extends TypeInstanceImpl implements LineInstance {
-	/**
-	 * The default value of the '{@link #getLineColor() <em>Line Color</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getLineColor()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int LINE_COLOR_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getLineColor() <em>Line Color</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getLineColor()
-	 * @generated
-	 * @ordered
-	 */
-	protected int lineColor = LINE_COLOR_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getLineWith() <em>Line With</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getLineWith()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int LINE_WITH_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getLineWith() <em>Line With</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getLineWith()
-	 * @generated
-	 * @ordered
-	 */
-	protected int lineWith = LINE_WITH_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected LineInstanceImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.LINE_INSTANCE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public int getLineColor() {
-		return lineColor;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setLineColor(int newLineColor) {
-		int oldLineColor = lineColor;
-		lineColor = newLineColor;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.LINE_INSTANCE__LINE_COLOR, oldLineColor, lineColor));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public int getLineWith() {
-		return lineWith;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setLineWith(int newLineWith) {
-		int oldLineWith = lineWith;
-		lineWith = newLineWith;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.LINE_INSTANCE__LINE_WITH, oldLineWith, lineWith));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case LayersPackage.LINE_INSTANCE__LINE_COLOR:
-				return getLineColor();
-			case LayersPackage.LINE_INSTANCE__LINE_WITH:
-				return getLineWith();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case LayersPackage.LINE_INSTANCE__LINE_COLOR:
-				setLineColor((Integer)newValue);
-				return;
-			case LayersPackage.LINE_INSTANCE__LINE_WITH:
-				setLineWith((Integer)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case LayersPackage.LINE_INSTANCE__LINE_COLOR:
-				setLineColor(LINE_COLOR_EDEFAULT);
-				return;
-			case LayersPackage.LINE_INSTANCE__LINE_WITH:
-				setLineWith(LINE_WITH_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case LayersPackage.LINE_INSTANCE__LINE_COLOR:
-				return lineColor != LINE_COLOR_EDEFAULT;
-			case LayersPackage.LINE_INSTANCE__LINE_WITH:
-				return lineWith != LINE_WITH_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromString(String value) {
-
-		if (value == null || value.length() == 0) {
-			return;
-		}
-
-		// The value should contains the 2 values, separated by comma
-		// "lineColor, lineWith"
-		String[] values = value.split(",");
-		try {
-			setLineColor(Integer.parseInt(values[0].trim()));
-			setLineWith(Integer.parseInt(values[1].trim()));
-		} catch (NumberFormatException e) {
-			// fail silently
-		}
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromInstance(TypeInstance value) {
-
-		// Check if the value is of the right instance
-		if (!getClass().isInstance(value)) {
-			return;
-		}
-
-		LineInstance instance = (LineInstance) value;
-		setLineColor(instance.getLineColor());
-		setLineWith(instance.getLineWith());
-	}
-
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (lineColor: "); //$NON-NLS-1$
-		result.append(lineColor);
-		result.append(", lineWith: "); //$NON-NLS-1$
-		result.append(lineWith);
-		result.append(')');
-		return result.toString();
-	}
-
-} // LineInstanceImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LinePropertySetterImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LinePropertySetterImpl.java
deleted file mode 100755
index 9178d48..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LinePropertySetterImpl.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.gmf.runtime.notation.FontStyle;
-import org.eclipse.gmf.runtime.notation.LineStyle;
-import org.eclipse.gmf.runtime.notation.NotationPackage;
-import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LinePropertySetter;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Line Property Setter</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class LinePropertySetterImpl extends PropertySetterImpl implements LinePropertySetter {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected LinePropertySetterImpl() {
-		super();
-		setPropertyName("line");
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.LINE_PROPERTY_SETTER;
-	}
-
-	/**
-	 * Set the property of the specified view.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterImpl#setValue(org.eclipse.gmf.runtime.notation.View, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance)
-	 *
-	 * @param view
-	 * @param value
-	 */
-	@Override
-	public void setValue(View view, TypeInstance value) {
-
-
-		// Try to get the FontStyle object to modify
-		LineStyle style;
-		if (view instanceof FontStyle) {
-			// Try directly (case of Shape ...)
-			style = (LineStyle) view;
-		} else {
-			// Try as additionnal style
-			style = (LineStyle) view.getStyle(NotationPackage.eINSTANCE.getLineStyle());
-		}
-
-		// Set values
-		if (style != null) {
-
-
-			LineInstance lineValue = (LineInstance) value;
-
-			style.setLineColor(lineValue.getLineColor());
-			style.setLineWidth(lineValue.getLineWith());
-		}
-
-	}
-
-} // LinePropertySetterImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LineTypeImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LineTypeImpl.java
deleted file mode 100755
index 0a11233..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/LineTypeImpl.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineType;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Line Type</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class LineTypeImpl extends TypeImpl implements LineType {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected LineTypeImpl() {
-		super();
-		setName("LineType");
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.LINE_TYPE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public TypeInstance createInstance() {
-		LineInstance instance = LayersFactory.eINSTANCE.createLineInstance();
-		return instance;
-	}
-
-
-} // LineTypeImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/MetamodelImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/MetamodelImpl.java
index 456c552..7e991f3 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/MetamodelImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/MetamodelImpl.java
@@ -1,24 +1,29 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.lang.reflect.InvocationTargetException;
 
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EPackage;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel;
 
@@ -40,8 +45,7 @@
  *
  * @generated
  */
-public class MetamodelImpl extends
-		FolderElementImpl implements Metamodel {
+public class MetamodelImpl extends FolderElementImpl implements Metamodel {
 	/**
 	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -186,7 +190,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getName() {
 		return name;
 	}
@@ -196,7 +199,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setName(String newName) {
 		String oldName = name;
 		name = newName;
@@ -209,7 +211,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getDescription() {
 		return description;
 	}
@@ -219,7 +220,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setDescription(String newDescription) {
 		String oldDescription = description;
 		description = newDescription;
@@ -232,7 +232,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getNsuri() {
 		return nsuri;
 	}
@@ -242,7 +241,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setNsuri(String newNsuri) {
 		String oldNsuri = nsuri;
 		nsuri = newNsuri;
@@ -255,7 +253,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getPluginID() {
 		return pluginID;
 	}
@@ -265,7 +262,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setPluginID(String newPluginID) {
 		String oldPluginID = pluginID;
 		pluginID = newPluginID;
@@ -278,7 +274,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getEPackageInstanceName() {
 		return ePackageInstanceName;
 	}
@@ -288,7 +283,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setEPackageInstanceName(String newEPackageInstanceName) {
 		String oldEPackageInstanceName = ePackageInstanceName;
 		ePackageInstanceName = newEPackageInstanceName;
@@ -301,7 +295,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public boolean isTypeValid() {
 		return isTypeValid;
 	}
@@ -311,7 +304,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setIsTypeValid(boolean newIsTypeValid) {
 		boolean oldIsTypeValid = isTypeValid;
 		isTypeValid = newIsTypeValid;
@@ -324,7 +316,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public EPackage getEPackage() {
 		// TODO: implement this method
 		// Ensure that you remove @generated or mark it @generated NOT
@@ -462,7 +453,7 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (name: "); //$NON-NLS-1$
 		result.append(name);
 		result.append(", description: "); //$NON-NLS-1$
@@ -479,4 +470,4 @@
 		return result.toString();
 	}
 
-} // MetamodelImpl
+} //MetamodelImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/NullInstanceImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/NullInstanceImpl.java
index 06bca6b..4ef229c 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/NullInstanceImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/NullInstanceImpl.java
@@ -1,21 +1,24 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.lang.reflect.InvocationTargetException;
 
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullInstance;
 
@@ -51,7 +54,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public NullInstance getInstance() {
 		// TODO: implement this method
 		// Ensure that you remove @generated or mark it @generated NOT
@@ -72,4 +74,4 @@
 		return super.eInvoke(operationID, arguments);
 	}
 
-} // NullInstanceImpl
+} //NullInstanceImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/NullPropertySetterImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/NullPropertySetterImpl.java
index 081b122..400e674 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/NullPropertySetterImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/NullPropertySetterImpl.java
@@ -1,18 +1,20 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.ecore.EClass;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullPropertySetter;
 
@@ -27,12 +29,10 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	protected NullPropertySetterImpl() {
 		super();
-		setPropertyName("NullPropertySetter");
 	}
 
 	/**
@@ -45,4 +45,4 @@
 		return LayersPackage.Literals.NULL_PROPERTY_SETTER;
 	}
 
-} // NullPropertySetterImpl
+} //NullPropertySetterImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/OrStackedLayerOperatorDescriptorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/OrStackedLayerOperatorDescriptorImpl.java
deleted file mode 100755
index b100238..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/OrStackedLayerOperatorDescriptorImpl.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.OrStackedLayerOperatorDescriptor;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Or Stacked Layer Operator Descriptor</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class OrStackedLayerOperatorDescriptorImpl extends StackedLayerOperatorDescriptorImpl implements OrStackedLayerOperatorDescriptor {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected OrStackedLayerOperatorDescriptorImpl() {
-		super();
-		setName("OrStackedLayerOperator");
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.OR_STACKED_LAYER_OPERATOR_DESCRIPTOR;
-	}
-
-} // OrStackedLayerOperatorDescriptorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyImpl.java
index 7477a4d..37644e1 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyImpl.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
@@ -16,11 +17,16 @@
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.BadStateException;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type;
@@ -43,8 +49,7 @@
  *
  * @generated
  */
-public class PropertyImpl extends
-		FolderElementImpl implements Property {
+public class PropertyImpl extends FolderElementImpl implements Property {
 	/**
 	 * The cached value of the '{@link #getType() <em>Type</em>}' reference.
 	 * <!-- begin-user-doc -->
@@ -149,7 +154,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public Type getType() {
 		if (type != null && type.eIsProxy()) {
 			InternalEObject oldType = (InternalEObject)type;
@@ -176,7 +180,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setType(Type newType) {
 		Type oldType = type;
 		type = newType;
@@ -189,7 +192,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public TypeInstance getDefaultValue() {
 		return defaultValue;
 	}
@@ -214,7 +216,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setDefaultValue(TypeInstance newDefaultValue) {
 		if (newDefaultValue != defaultValue) {
 			NotificationChain msgs = null;
@@ -234,7 +235,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getName() {
 		return name;
 	}
@@ -244,7 +244,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setName(String newName) {
 		String oldName = name;
 		name = newName;
@@ -257,7 +256,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getDescription() {
 		return description;
 	}
@@ -267,7 +265,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setDescription(String newDescription) {
 		String oldDescription = description;
 		description = newDescription;
@@ -280,7 +277,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public int getIndex() {
 		return index;
 	}
@@ -290,7 +286,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setIndex(int newIndex) {
 		int oldIndex = index;
 		index = newIndex;
@@ -301,25 +296,12 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @throws BadStateException
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public TypeInstance createInstance() throws BadStateException {
-
-		if (type == null) {
-			throw new BadStateException("Property '" + getName() + "', type must be set to create an instance");
-		}
-
-		// Create an instance
-		TypeInstance instance = type.createInstance();
-		// Set the default value if needed
-		if (getDefaultValue() != null) {
-			instance.setValueFromInstance(getDefaultValue());
-		}
-
-		return instance;
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
@@ -463,7 +445,7 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (name: "); //$NON-NLS-1$
 		result.append(name);
 		result.append(", description: "); //$NON-NLS-1$
@@ -474,4 +456,4 @@
 		return result.toString();
 	}
 
-} // PropertyImpl
+} //PropertyImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyIndexImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyIndexImpl.java
index f24ce4a..838db63 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyIndexImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyIndexImpl.java
@@ -1,22 +1,26 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyIndex;
@@ -90,7 +94,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public Property getProperty() {
 		if (property != null && property.eIsProxy()) {
 			InternalEObject oldProperty = (InternalEObject)property;
@@ -117,7 +120,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setProperty(Property newProperty) {
 		Property oldProperty = property;
 		property = newProperty;
@@ -130,7 +132,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public int getIndex() {
 		return index;
 	}
@@ -140,7 +141,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setIndex(int newIndex) {
 		int oldIndex = index;
 		index = newIndex;
@@ -226,11 +226,11 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (index: "); //$NON-NLS-1$
 		result.append(index);
 		result.append(')');
 		return result.toString();
 	}
 
-} // PropertyIndexImpl
+} //PropertyIndexImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyOperatorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyOperatorImpl.java
index 0152f13..5685723 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyOperatorImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyOperatorImpl.java
@@ -1,26 +1,36 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.lang.reflect.InvocationTargetException;
 
+import java.util.List;
+
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator;
 
@@ -33,6 +43,9 @@
  * </p>
  * <ul>
  *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyOperatorImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyOperatorImpl#getClassname <em>Classname</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyOperatorImpl#getOperatorInstance <em>Operator Instance</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyOperatorImpl#getClassBundleID <em>Class Bundle ID</em>}</li>
  * </ul>
  *
  * @generated
@@ -59,6 +72,56 @@
 	protected String name = NAME_EDEFAULT;
 
 	/**
+	 * The default value of the '{@link #getClassname() <em>Classname</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getClassname()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CLASSNAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getClassname() <em>Classname</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getClassname()
+	 * @generated
+	 * @ordered
+	 */
+	protected String classname = CLASSNAME_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getOperatorInstance() <em>Operator Instance</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOperatorInstance()
+	 * @generated
+	 * @ordered
+	 */
+	protected PropertyOperator operatorInstance;
+
+	/**
+	 * The default value of the '{@link #getClassBundleID() <em>Class Bundle ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getClassBundleID()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String CLASS_BUNDLE_ID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getClassBundleID() <em>Class Bundle ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getClassBundleID()
+	 * @generated
+	 * @ordered
+	 */
+	protected String classBundleID = CLASS_BUNDLE_ID_EDEFAULT;
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -106,7 +169,104 @@
 	 * @generated
 	 */
 	@Override
-	public ComputePropertyValueCommand getComputePropertyValueCommand(EList<ComputePropertyValueCommand> property) throws LayersException {
+	public String getClassname() {
+		return classname;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setClassname(String newClassname) {
+		String oldClassname = classname;
+		classname = newClassname;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.PROPERTY_OPERATOR__CLASSNAME, oldClassname, classname));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public PropertyOperator getOperatorInstance() {
+		if (operatorInstance != null && operatorInstance.eIsProxy()) {
+			InternalEObject oldOperatorInstance = (InternalEObject)operatorInstance;
+			operatorInstance = (PropertyOperator)eResolveProxy(oldOperatorInstance);
+			if (operatorInstance != oldOperatorInstance) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LayersPackage.PROPERTY_OPERATOR__OPERATOR_INSTANCE, oldOperatorInstance, operatorInstance));
+			}
+		}
+		return operatorInstance;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PropertyOperator basicGetOperatorInstance() {
+		return operatorInstance;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOperatorInstance(PropertyOperator newOperatorInstance) {
+		PropertyOperator oldOperatorInstance = operatorInstance;
+		operatorInstance = newOperatorInstance;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.PROPERTY_OPERATOR__OPERATOR_INSTANCE, oldOperatorInstance, operatorInstance));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getClassBundleID() {
+		return classBundleID;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setClassBundleID(String newClassBundleID) {
+		String oldClassBundleID = classBundleID;
+		classBundleID = newClassBundleID;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.PROPERTY_OPERATOR__CLASS_BUNDLE_ID, oldClassBundleID, classBundleID));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ComputePropertyValueCommand getComputePropertyValueCommand(List<ComputePropertyValueCommand> property) throws LayersException {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void resetOperatorInstance() throws LayersException {
 		// TODO: implement this method
 		// Ensure that you remove @generated or mark it @generated NOT
 		throw new UnsupportedOperationException();
@@ -122,6 +282,13 @@
 		switch (featureID) {
 			case LayersPackage.PROPERTY_OPERATOR__NAME:
 				return getName();
+			case LayersPackage.PROPERTY_OPERATOR__CLASSNAME:
+				return getClassname();
+			case LayersPackage.PROPERTY_OPERATOR__OPERATOR_INSTANCE:
+				if (resolve) return getOperatorInstance();
+				return basicGetOperatorInstance();
+			case LayersPackage.PROPERTY_OPERATOR__CLASS_BUNDLE_ID:
+				return getClassBundleID();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -137,6 +304,15 @@
 			case LayersPackage.PROPERTY_OPERATOR__NAME:
 				setName((String)newValue);
 				return;
+			case LayersPackage.PROPERTY_OPERATOR__CLASSNAME:
+				setClassname((String)newValue);
+				return;
+			case LayersPackage.PROPERTY_OPERATOR__OPERATOR_INSTANCE:
+				setOperatorInstance((PropertyOperator)newValue);
+				return;
+			case LayersPackage.PROPERTY_OPERATOR__CLASS_BUNDLE_ID:
+				setClassBundleID((String)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -152,6 +328,15 @@
 			case LayersPackage.PROPERTY_OPERATOR__NAME:
 				setName(NAME_EDEFAULT);
 				return;
+			case LayersPackage.PROPERTY_OPERATOR__CLASSNAME:
+				setClassname(CLASSNAME_EDEFAULT);
+				return;
+			case LayersPackage.PROPERTY_OPERATOR__OPERATOR_INSTANCE:
+				setOperatorInstance((PropertyOperator)null);
+				return;
+			case LayersPackage.PROPERTY_OPERATOR__CLASS_BUNDLE_ID:
+				setClassBundleID(CLASS_BUNDLE_ID_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -166,6 +351,12 @@
 		switch (featureID) {
 			case LayersPackage.PROPERTY_OPERATOR__NAME:
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+			case LayersPackage.PROPERTY_OPERATOR__CLASSNAME:
+				return CLASSNAME_EDEFAULT == null ? classname != null : !CLASSNAME_EDEFAULT.equals(classname);
+			case LayersPackage.PROPERTY_OPERATOR__OPERATOR_INSTANCE:
+				return operatorInstance != null;
+			case LayersPackage.PROPERTY_OPERATOR__CLASS_BUNDLE_ID:
+				return CLASS_BUNDLE_ID_EDEFAULT == null ? classBundleID != null : !CLASS_BUNDLE_ID_EDEFAULT.equals(classBundleID);
 		}
 		return super.eIsSet(featureID);
 	}
@@ -179,9 +370,17 @@
 	@SuppressWarnings("unchecked")
 	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
 		switch (operationID) {
-			case LayersPackage.PROPERTY_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__ELIST:
+			case LayersPackage.PROPERTY_OPERATOR___GET_COMPUTE_PROPERTY_VALUE_COMMAND__LIST:
 				try {
-					return getComputePropertyValueCommand((EList<ComputePropertyValueCommand>)arguments.get(0));
+					return getComputePropertyValueCommand((List<ComputePropertyValueCommand>)arguments.get(0));
+				}
+				catch (Throwable throwable) {
+					throw new InvocationTargetException(throwable);
+				}
+			case LayersPackage.PROPERTY_OPERATOR___RESET_OPERATOR_INSTANCE:
+				try {
+					resetOperatorInstance();
+					return null;
 				}
 				catch (Throwable throwable) {
 					throw new InvocationTargetException(throwable);
@@ -199,9 +398,13 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (name: "); //$NON-NLS-1$
 		result.append(name);
+		result.append(", classname: "); //$NON-NLS-1$
+		result.append(classname);
+		result.append(", classBundleID: "); //$NON-NLS-1$
+		result.append(classBundleID);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyRegistryImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyRegistryImpl.java
index 2b22467..ad3982f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyRegistryImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertyRegistryImpl.java
@@ -1,37 +1,42 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.List;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeRegistry;
 
 /**
@@ -42,9 +47,9 @@
  * The following features are implemented:
  * </p>
  * <ul>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyRegistryImpl#getProperties <em>Properties</em>}</li>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyRegistryImpl#getTypeRegistry <em>Type Registry</em>}</li>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyRegistryImpl#getPropertiesCount <em>Properties Count</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyRegistryImpl#getProperties <em>Properties</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyRegistryImpl#getTypeRegistry <em>Type Registry</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyRegistryImpl#getPropertiesCount <em>Properties Count</em>}</li>
  * </ul>
  *
  * @generated
@@ -54,7 +59,6 @@
 	 * The cached value of the '{@link #getProperties() <em>Properties</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @see #getProperties()
 	 * @generated
 	 * @ordered
@@ -65,7 +69,6 @@
 	 * The cached value of the '{@link #getTypeRegistry() <em>Type Registry</em>}' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @see #getTypeRegistry()
 	 * @generated
 	 * @ordered
@@ -76,7 +79,6 @@
 	 * The default value of the '{@link #getPropertiesCount() <em>Properties Count</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @see #getPropertiesCount()
 	 * @generated
 	 * @ordered
@@ -86,70 +88,15 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	protected PropertyRegistryImpl() {
 		super();
-		// initialie transient ref
-		init();
-	}
-
-	/**
-	 * Init the transient references
-	 * Create the internal objects : TypeRegistry.
-	 */
-	protected void init() {
-		// Create the TypeRegistry
-		TypeRegistry typeRegistry = LayersFactory.eINSTANCE.createTypeRegistry();
-		setTypeRegistry(typeRegistry);
-
-		// Initialize the list of properties
-		// Properties to add
-		// name, type, defaultvalues
-		// colors: black=0 , fushia=15053796,
-		String[] properties = new String[] {
-				// "name", "String",
-				// "age", "int",
-				// "num", "int",
-				// "addr", "String",
-				// "isValid", "boolean", "true",
-				// "bgcolor", "Color",
-				// "fgcolor", "Color",
-
-				"css", "CSSType", "",
-				"cssHide", "CSSHideType", "",
-				// "isVisible", "boolean", "true",
-				// "isAbstract", "boolean", "false",
-				// "fill", "Fill", "0, 15053796", // "transparency, fillColor"
-				// "line", "LineType", "0, -1", // "lineColor, lineWith"
-				// "font", "FontType", "Segoe UI, 9, 0, false", // "FontName, FontHeight, FontColor, Bold"
-		};
-
-		for (int i = 0; i < properties.length; i += 3) {
-
-
-			Property property = LayersFactory.eINSTANCE.createProperty();
-			property.setName(properties[i]);
-			Type propertyType = typeRegistry.getTypes().get(properties[i + 1]);
-			property.setType(propertyType);
-			// Create Default value
-			String defaultValueStr = properties[i + 2];
-			if (defaultValueStr != null && defaultValueStr.length() > 0) {
-				TypeInstance defaultValue = propertyType.createInstance();
-				defaultValue.setValueFromString(defaultValueStr);
-				property.setDefaultValue(defaultValue);
-			}
-
-			addProperty(property);
-			// getProperties().add(property);
-		}
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
@@ -160,11 +107,9 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
-	@Override
-	public EList<Property> getProperties() {
+	public List<Property> getProperties() {
 		if (properties == null) {
 			properties = new EObjectContainmentEList<Property>(Property.class, this, LayersPackage.PROPERTY_REGISTRY__PROPERTIES);
 		}
@@ -174,10 +119,8 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
-	@Override
 	public TypeRegistry getTypeRegistry() {
 		return typeRegistry;
 	}
@@ -185,7 +128,6 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public NotificationChain basicSetTypeRegistry(TypeRegistry newTypeRegistry, NotificationChain msgs) {
@@ -193,10 +135,7 @@
 		typeRegistry = newTypeRegistry;
 		if (eNotificationRequired()) {
 			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY, oldTypeRegistry, newTypeRegistry);
-			if (msgs == null)
-				msgs = notification;
-			else
-				msgs.add(notification);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
 		}
 		return msgs;
 	}
@@ -204,108 +143,78 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
-	@Override
 	public void setTypeRegistry(TypeRegistry newTypeRegistry) {
 		if (newTypeRegistry != typeRegistry) {
 			NotificationChain msgs = null;
 			if (typeRegistry != null)
-				msgs = ((InternalEObject) typeRegistry).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY, null, msgs);
+				msgs = ((InternalEObject)typeRegistry).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY, null, msgs);
 			if (newTypeRegistry != null)
-				msgs = ((InternalEObject) newTypeRegistry).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY, null, msgs);
+				msgs = ((InternalEObject)newTypeRegistry).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY, null, msgs);
 			msgs = basicSetTypeRegistry(newTypeRegistry, msgs);
-			if (msgs != null)
-				msgs.dispatch();
-		} else if (eNotificationRequired())
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
 			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY, newTypeRegistry, newTypeRegistry));
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public int getPropertiesCount() {
-		return getProperties().size();
+		// TODO: implement this method to return the 'Properties Count' attribute
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public int getPropertyIndex(String propertyName) throws NotFoundException {
-
-		if (propertyName == null) {
-			throw new NotFoundException("Null not Allowed");
-		}
-		List<Property> props = getProperties();
-		for (int i = 0; i < props.size(); i++) {
-			if (propertyName.equals(props.get(i).getName())) {
-				return i;
-			}
-		}
-
-		// Not found
-		throw new NotFoundException("No property found with name '" + propertyName + "'");
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public Property getProperty(String propertyName) throws NotFoundException {
-
-		int index = getPropertyIndex(propertyName);
-		return getProperties().get(index);
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public void addProperty(Property property) {
-
-		// Check if the property already exist
-		try {
-			getProperty(property.getName());
-			// Already exist ==> return
-			return;
-		} catch (NotFoundException e) {
-			// ok
-		}
-
-		// set the index
-		property.setIndex(getProperties().size());
-		// Add the property
-		getProperties().add(property);
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-		case LayersPackage.PROPERTY_REGISTRY__PROPERTIES:
-			return ((InternalEList<?>) getProperties()).basicRemove(otherEnd, msgs);
-		case LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY:
-			return basicSetTypeRegistry(null, msgs);
+			case LayersPackage.PROPERTY_REGISTRY__PROPERTIES:
+				return ((InternalEList<?>)getProperties()).basicRemove(otherEnd, msgs);
+			case LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY:
+				return basicSetTypeRegistry(null, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -313,18 +222,17 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-		case LayersPackage.PROPERTY_REGISTRY__PROPERTIES:
-			return getProperties();
-		case LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY:
-			return getTypeRegistry();
-		case LayersPackage.PROPERTY_REGISTRY__PROPERTIES_COUNT:
-			return getPropertiesCount();
+			case LayersPackage.PROPERTY_REGISTRY__PROPERTIES:
+				return getProperties();
+			case LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY:
+				return getTypeRegistry();
+			case LayersPackage.PROPERTY_REGISTRY__PROPERTIES_COUNT:
+				return getPropertiesCount();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -332,20 +240,19 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@SuppressWarnings("unchecked")
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-		case LayersPackage.PROPERTY_REGISTRY__PROPERTIES:
-			getProperties().clear();
-			getProperties().addAll((Collection<? extends Property>) newValue);
-			return;
-		case LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY:
-			setTypeRegistry((TypeRegistry) newValue);
-			return;
+			case LayersPackage.PROPERTY_REGISTRY__PROPERTIES:
+				getProperties().clear();
+				getProperties().addAll((Collection<? extends Property>)newValue);
+				return;
+			case LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY:
+				setTypeRegistry((TypeRegistry)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -353,18 +260,17 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-		case LayersPackage.PROPERTY_REGISTRY__PROPERTIES:
-			getProperties().clear();
-			return;
-		case LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY:
-			setTypeRegistry((TypeRegistry) null);
-			return;
+			case LayersPackage.PROPERTY_REGISTRY__PROPERTIES:
+				getProperties().clear();
+				return;
+			case LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY:
+				setTypeRegistry((TypeRegistry)null);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -372,18 +278,17 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-		case LayersPackage.PROPERTY_REGISTRY__PROPERTIES:
-			return properties != null && !properties.isEmpty();
-		case LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY:
-			return typeRegistry != null;
-		case LayersPackage.PROPERTY_REGISTRY__PROPERTIES_COUNT:
-			return getPropertiesCount() != PROPERTIES_COUNT_EDEFAULT;
+			case LayersPackage.PROPERTY_REGISTRY__PROPERTIES:
+				return properties != null && !properties.isEmpty();
+			case LayersPackage.PROPERTY_REGISTRY__TYPE_REGISTRY:
+				return typeRegistry != null;
+			case LayersPackage.PROPERTY_REGISTRY__PROPERTIES_COUNT:
+				return getPropertiesCount() != PROPERTIES_COUNT_EDEFAULT;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -391,29 +296,30 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
 		switch (operationID) {
-		case LayersPackage.PROPERTY_REGISTRY___GET_PROPERTY_INDEX__STRING:
-			try {
-				return getPropertyIndex((String) arguments.get(0));
-			} catch (Throwable throwable) {
-				throw new InvocationTargetException(throwable);
-			}
-		case LayersPackage.PROPERTY_REGISTRY___GET_PROPERTY__STRING:
-			try {
-				return getProperty((String) arguments.get(0));
-			} catch (Throwable throwable) {
-				throw new InvocationTargetException(throwable);
-			}
-		case LayersPackage.PROPERTY_REGISTRY___ADD_PROPERTY__PROPERTY:
-			addProperty((Property) arguments.get(0));
-			return null;
+			case LayersPackage.PROPERTY_REGISTRY___GET_PROPERTY_INDEX__STRING:
+				try {
+					return getPropertyIndex((String)arguments.get(0));
+				}
+				catch (Throwable throwable) {
+					throw new InvocationTargetException(throwable);
+				}
+			case LayersPackage.PROPERTY_REGISTRY___GET_PROPERTY__STRING:
+				try {
+					return getProperty((String)arguments.get(0));
+				}
+				catch (Throwable throwable) {
+					throw new InvocationTargetException(throwable);
+				}
+			case LayersPackage.PROPERTY_REGISTRY___ADD_PROPERTY__PROPERTY:
+				addProperty((Property)arguments.get(0));
+				return null;
 		}
 		return super.eInvoke(operationID, arguments);
 	}
 
-} // PropertyRegistryImpl
+} //PropertyRegistryImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertySetterImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertySetterImpl.java
index c7737e4..250be69 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertySetterImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertySetterImpl.java
@@ -1,26 +1,32 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.lang.reflect.InvocationTargetException;
 
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.gmf.runtime.notation.View;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter;
@@ -60,6 +66,7 @@
 	 * @ordered
 	 */
 	protected static final String PROPERTY_NAME_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getPropertyName() <em>Property Name</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -94,7 +101,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public Property getProperty() {
 		if (property != null && property.eIsProxy()) {
 			InternalEObject oldProperty = (InternalEObject)property;
@@ -121,7 +127,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setProperty(Property newProperty) {
 		Property oldProperty = property;
 		property = newProperty;
@@ -134,7 +139,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getPropertyName() {
 		return propertyName;
 	}
@@ -144,7 +148,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setPropertyName(String newPropertyName) {
 		String oldPropertyName = propertyName;
 		propertyName = newPropertyName;
@@ -157,7 +160,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setValue(View view, TypeInstance value) {
 		// TODO: implement this method
 		// Ensure that you remove @generated or mark it @generated NOT
@@ -257,11 +259,11 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (propertyName: "); //$NON-NLS-1$
 		result.append(propertyName);
 		result.append(')');
 		return result.toString();
 	}
 
-} // PropertySetterImpl
+} //PropertySetterImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertySetterRegistryImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertySetterRegistryImpl.java
index 1791e20..12bd39d 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertySetterRegistryImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/PropertySetterRegistryImpl.java
@@ -1,41 +1,49 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.lang.reflect.InvocationTargetException;
+
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.EMap;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
 import org.eclipse.emf.ecore.util.EcoreEMap;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetterRegistry;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.util.PropertyIndexedList;
 
 /**
  * <!-- begin-user-doc -->
@@ -45,9 +53,9 @@
  * The following features are implemented:
  * </p>
  * <ul>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterRegistryImpl#getPropertySetters <em>Property Setters</em>}</li>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterRegistryImpl#getSetterMap <em>Setter Map</em>}</li>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterRegistryImpl#getApplication <em>Application</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterRegistryImpl#getPropertySetters <em>Property Setters</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterRegistryImpl#getSetterMap <em>Setter Map</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterRegistryImpl#getApplication <em>Application</em>}</li>
  * </ul>
  *
  * @generated
@@ -57,7 +65,6 @@
 	 * The cached value of the '{@link #getPropertySetters() <em>Property Setters</em>}' reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @see #getPropertySetters()
 	 * @generated
 	 * @ordered
@@ -68,7 +75,6 @@
 	 * The cached value of the '{@link #getSetterMap() <em>Setter Map</em>}' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @see #getSetterMap()
 	 * @generated
 	 * @ordered
@@ -78,33 +84,15 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	protected PropertySetterRegistryImpl() {
 		super();
-		init();
-	}
-
-	/**
-	 * Initialize the registry with some setters
-	 */
-	protected void init() {
-
-		// addPropertySetter(LayersFactory.eINSTANCE.createFillPropertySetter());
-		// addPropertySetter(LayersFactory.eINSTANCE.createIsValidPropertySetter());
-		// addPropertySetter(LayersFactory.eINSTANCE.createLinePropertySetter());
-		// addPropertySetter(LayersFactory.eINSTANCE.createFontPropertySetter());
-		// addPropertySetter(LayersFactory.eINSTANCE.createIsVisiblePropertySetter());
-		// addPropertySetter(LayersFactory.eINSTANCE.createIsAbstractUmlSetter());
-		addPropertySetter(LayersFactory.eINSTANCE.createCSSPropertySetter());
-		addPropertySetter(LayersFactory.eINSTANCE.createCSSHidePropertySetter());
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
@@ -115,17 +103,11 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
-	public EList<PropertySetter> getPropertySetters() {
-		// if (propertySetters == null) {
-		// propertySetters = new EObjectResolvingEList<PropertySetter>(PropertySetter.class, this, LayersPackage.PROPERTY_SETTER_REGISTRY__PROPERTY_SETTERS);
-		// }
+	public List<PropertySetter> getPropertySetters() {
 		if (propertySetters == null) {
-			propertySetters = new PropertyIndexedList<PropertySetter>(getSetterMap(), PropertySetter.class, this, LayersPackage.PROPERTY_SETTER_REGISTRY__PROPERTY_SETTERS, LayersPackage.PROPERTY_SETTER_REGISTRY__SETTER_MAP,
-					PropertySetter.NULL_PROPERTY_SETTER);
+			propertySetters = new EObjectResolvingEList<PropertySetter>(PropertySetter.class, this, LayersPackage.PROPERTY_SETTER_REGISTRY__PROPERTY_SETTERS);
 		}
 		return propertySetters;
 	}
@@ -133,140 +115,101 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
-	@Override
-	public EMap<String, PropertySetter> getSetterMap() {
+	public Map<String, PropertySetter> getSetterMap() {
 		if (setterMap == null) {
-			setterMap = new EcoreEMap<String, PropertySetter>(LayersPackage.Literals.STRING_TO_PROPERTY_SETTER, StringToPropertySetterImpl.class, this, LayersPackage.PROPERTY_SETTER_REGISTRY__SETTER_MAP);
+			setterMap = new EcoreEMap<String,PropertySetter>(LayersPackage.Literals.STRING_TO_PROPERTY_SETTER, StringToPropertySetterImpl.class, this, LayersPackage.PROPERTY_SETTER_REGISTRY__SETTER_MAP);
 		}
-		return setterMap;
+		return setterMap.map();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
-	@Override
 	public LayersStackApplication getApplication() {
-		if (eContainerFeatureID() != LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION)
-			return null;
-		return (LayersStackApplication) eInternalContainer();
+		if (eContainerFeatureID() != LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION) return null;
+		return (LayersStackApplication)eInternalContainer();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public NotificationChain basicSetApplication(LayersStackApplication newApplication, NotificationChain msgs) {
-		msgs = eBasicSetContainer((InternalEObject) newApplication, LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION, msgs);
+		msgs = eBasicSetContainer((InternalEObject)newApplication, LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION, msgs);
 		return msgs;
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public void setApplication(LayersStackApplication newApplication) {
 		if (newApplication != eInternalContainer() || (eContainerFeatureID() != LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION && newApplication != null)) {
-			if (EcoreUtil.isAncestor(this, newApplication)) {
-				throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
-			}
+			if (EcoreUtil.isAncestor(this, newApplication))
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$
 			NotificationChain msgs = null;
-			if (eInternalContainer() != null) {
+			if (eInternalContainer() != null)
 				msgs = eBasicRemoveFromContainer(msgs);
-			}
-			if (newApplication != null) {
-				msgs = ((InternalEObject) newApplication).eInverseAdd(this, LayersPackage.LAYERS_STACK_APPLICATION__PROPERTY_SETTER_REGISTRY, LayersStackApplication.class, msgs);
-			}
+			if (newApplication != null)
+				msgs = ((InternalEObject)newApplication).eInverseAdd(this, LayersPackage.LAYERS_STACK_APPLICATION__PROPERTY_SETTER_REGISTRY, LayersStackApplication.class, msgs);
 			msgs = basicSetApplication(newApplication, msgs);
-			if (msgs != null) {
-				msgs.dispatch();
-			}
-		} else if (eNotificationRequired()) {
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
 			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION, newApplication, newApplication));
-		}
-
-
-		// update the list of PropertySetters
-		if (newApplication != null) {
-			List<Property> list = newApplication.getPropertyRegistry().getProperties();
-			((PropertyIndexedList<PropertySetter>) getPropertySetters()).setPropertyList(list);
-		}
-		;
-
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public PropertySetter getPropertySetter(Property property) throws NotFoundException {
-
-		try {
-			return getPropertySetters().get(property.getIndex());
-		} catch (IndexOutOfBoundsException e) {
-			// Try by name
-			PropertySetter setter = getPropertySetter(property.getName());
-			if (setter != null) {
-				return setter;
-			}
-			throw new NotFoundException("No setter found for property '" + property.getName() + "'");
-		}
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public PropertySetter getPropertySetter(String property) throws NotFoundException {
-		return getSetterMap().get(property);
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public void addPropertySetter(PropertySetter setter) {
-
-		String key = setter.getPropertyName();
-		if (key == null || key.length() == 0) {
-			throw new UnsupportedOperationException("Setter must have a valid name.");
-		}
-
-		getSetterMap().put(key, setter);
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION:
-			if (eInternalContainer() != null)
-				msgs = eBasicRemoveFromContainer(msgs);
-			return basicSetApplication((LayersStackApplication) otherEnd, msgs);
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return basicSetApplication((LayersStackApplication)otherEnd, msgs);
 		}
 		return super.eInverseAdd(otherEnd, featureID, msgs);
 	}
@@ -274,16 +217,15 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__SETTER_MAP:
-			return ((InternalEList<?>) getSetterMap()).basicRemove(otherEnd, msgs);
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION:
-			return basicSetApplication(null, msgs);
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__SETTER_MAP:
+				return ((InternalEList<?>)((EMap.InternalMapView<String, PropertySetter>)getSetterMap()).eMap()).basicRemove(otherEnd, msgs);
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION:
+				return basicSetApplication(null, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -291,14 +233,13 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
 		switch (eContainerFeatureID()) {
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION:
-			return eInternalContainer().eInverseRemove(this, LayersPackage.LAYERS_STACK_APPLICATION__PROPERTY_SETTER_REGISTRY, LayersStackApplication.class, msgs);
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION:
+				return eInternalContainer().eInverseRemove(this, LayersPackage.LAYERS_STACK_APPLICATION__PROPERTY_SETTER_REGISTRY, LayersStackApplication.class, msgs);
 		}
 		return super.eBasicRemoveFromContainerFeature(msgs);
 	}
@@ -306,21 +247,18 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__PROPERTY_SETTERS:
-			return getPropertySetters();
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__SETTER_MAP:
-			if (coreType)
-				return getSetterMap();
-			else
-				return getSetterMap().map();
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION:
-			return getApplication();
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__PROPERTY_SETTERS:
+				return getPropertySetters();
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__SETTER_MAP:
+				if (coreType) return ((EMap.InternalMapView<String, PropertySetter>)getSetterMap()).eMap();
+				else return getSetterMap();
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION:
+				return getApplication();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -328,23 +266,22 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@SuppressWarnings("unchecked")
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__PROPERTY_SETTERS:
-			getPropertySetters().clear();
-			getPropertySetters().addAll((Collection<? extends PropertySetter>) newValue);
-			return;
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__SETTER_MAP:
-			((EStructuralFeature.Setting) getSetterMap()).set(newValue);
-			return;
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION:
-			setApplication((LayersStackApplication) newValue);
-			return;
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__PROPERTY_SETTERS:
+				getPropertySetters().clear();
+				getPropertySetters().addAll((Collection<? extends PropertySetter>)newValue);
+				return;
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__SETTER_MAP:
+				((EStructuralFeature.Setting)((EMap.InternalMapView<String, PropertySetter>)getSetterMap()).eMap()).set(newValue);
+				return;
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION:
+				setApplication((LayersStackApplication)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -352,21 +289,20 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__PROPERTY_SETTERS:
-			getPropertySetters().clear();
-			return;
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__SETTER_MAP:
-			getSetterMap().clear();
-			return;
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION:
-			setApplication((LayersStackApplication) null);
-			return;
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__PROPERTY_SETTERS:
+				getPropertySetters().clear();
+				return;
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__SETTER_MAP:
+				getSetterMap().clear();
+				return;
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION:
+				setApplication((LayersStackApplication)null);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -374,18 +310,17 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__PROPERTY_SETTERS:
-			return propertySetters != null && !propertySetters.isEmpty();
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__SETTER_MAP:
-			return setterMap != null && !setterMap.isEmpty();
-		case LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION:
-			return getApplication() != null;
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__PROPERTY_SETTERS:
+				return propertySetters != null && !propertySetters.isEmpty();
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__SETTER_MAP:
+				return setterMap != null && !setterMap.isEmpty();
+			case LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION:
+				return getApplication() != null;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -393,29 +328,30 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
 		switch (operationID) {
-		case LayersPackage.PROPERTY_SETTER_REGISTRY___GET_PROPERTY_SETTER__PROPERTY:
-			try {
-				return getPropertySetter((Property) arguments.get(0));
-			} catch (Throwable throwable) {
-				throw new InvocationTargetException(throwable);
-			}
-		case LayersPackage.PROPERTY_SETTER_REGISTRY___GET_PROPERTY_SETTER__STRING:
-			try {
-				return getPropertySetter((String) arguments.get(0));
-			} catch (Throwable throwable) {
-				throw new InvocationTargetException(throwable);
-			}
-		case LayersPackage.PROPERTY_SETTER_REGISTRY___ADD_PROPERTY_SETTER__PROPERTYSETTER:
-			addPropertySetter((PropertySetter) arguments.get(0));
-			return null;
+			case LayersPackage.PROPERTY_SETTER_REGISTRY___GET_PROPERTY_SETTER__PROPERTY:
+				try {
+					return getPropertySetter((Property)arguments.get(0));
+				}
+				catch (Throwable throwable) {
+					throw new InvocationTargetException(throwable);
+				}
+			case LayersPackage.PROPERTY_SETTER_REGISTRY___GET_PROPERTY_SETTER__STRING:
+				try {
+					return getPropertySetter((String)arguments.get(0));
+				}
+				catch (Throwable throwable) {
+					throw new InvocationTargetException(throwable);
+				}
+			case LayersPackage.PROPERTY_SETTER_REGISTRY___ADD_PROPERTY_SETTER__PROPERTYSETTER:
+				addPropertySetter((PropertySetter)arguments.get(0));
+				return null;
 		}
 		return super.eInvoke(operationID, arguments);
 	}
 
-} // PropertySetterRegistryImpl
+} //PropertySetterRegistryImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/RegExpLayerDescriptorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/RegExpLayerDescriptorImpl.java
deleted file mode 100755
index c28f4f0..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/RegExpLayerDescriptorImpl.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayerDescriptor;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Reg Exp Layer Descriptor</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class RegExpLayerDescriptorImpl extends LayerDescriptorImpl implements RegExpLayerDescriptor {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected RegExpLayerDescriptorImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.REG_EXP_LAYER_DESCRIPTOR;
-	}
-
-} // RegExpLayerDescriptorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/RegExpLayerImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/RegExpLayerImpl.java
deleted file mode 100755
index cbcb405..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/RegExpLayerImpl.java
+++ /dev/null
@@ -1,1077 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import static org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.Activator.log;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.query.conditions.eobjects.EObjectCondition;
-import org.eclipse.emf.query.statements.FROM;
-import org.eclipse.emf.query.statements.IQueryResult;
-import org.eclipse.emf.query.statements.SELECT;
-import org.eclipse.emf.query.statements.WHERE;
-import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.ocl.ecore.OCL;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.exprmatcher.ExpressionMatcher;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.EventLevel;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.notifier.DiagramViewEventNotifier;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.notifier.IDiagramViewEventListener;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.util.ObservableListView;
-
-import com.google.common.eventbus.Subscribe;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Reg Exp Layer</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerImpl#getExpr <em>Expr</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerImpl#getLanguage <em>Language</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerImpl#isDomainChangedEventDependant <em>Is Domain Changed Event Dependant</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerImpl#getDomainChangedEventLevel <em>Domain Changed Event Level</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerImpl#isDiagramChangedEventDependant <em>Is Diagram Changed Event Dependant</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerImpl#getDiagramChangedEventLevel <em>Diagram Changed Event Level</em>}</li>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.RegExpLayerImpl#getExpressionContextObjectType <em>Expression Context Object Type</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class RegExpLayerImpl extends AbstractLayerImpl implements RegExpLayer {
-	/**
-	 * The default value of the '{@link #getExpr() <em>Expr</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getExpr()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String EXPR_EDEFAULT = null;
-	/**
-	 * The cached value of the '{@link #getExpr() <em>Expr</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getExpr()
-	 * @generated
-	 * @ordered
-	 */
-	protected String expr = EXPR_EDEFAULT;
-	/**
-	 * The default value of the '{@link #getLanguage() <em>Language</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getLanguage()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String LANGUAGE_EDEFAULT = null;
-	/**
-	 * The cached value of the '{@link #getLanguage() <em>Language</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getLanguage()
-	 * @generated
-	 * @ordered
-	 */
-	protected String language = LANGUAGE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #isDomainChangedEventDependant() <em>Is Domain Changed Event Dependant</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isDomainChangedEventDependant()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final boolean IS_DOMAIN_CHANGED_EVENT_DEPENDANT_EDEFAULT = false;
-	/**
-	 * The cached value of the '{@link #isDomainChangedEventDependant() <em>Is Domain Changed Event Dependant</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isDomainChangedEventDependant()
-	 * @generated
-	 * @ordered
-	 */
-	protected boolean isDomainChangedEventDependant = IS_DOMAIN_CHANGED_EVENT_DEPENDANT_EDEFAULT;
-	/**
-	 * The default value of the '{@link #getDomainChangedEventLevel() <em>Domain Changed Event Level</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDomainChangedEventLevel()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final EventLevel DOMAIN_CHANGED_EVENT_LEVEL_EDEFAULT = EventLevel.LEVEL1;
-	/**
-	 * The cached value of the '{@link #getDomainChangedEventLevel() <em>Domain Changed Event Level</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDomainChangedEventLevel()
-	 * @generated
-	 * @ordered
-	 */
-	protected EventLevel domainChangedEventLevel = DOMAIN_CHANGED_EVENT_LEVEL_EDEFAULT;
-	/**
-	 * The default value of the '{@link #isDiagramChangedEventDependant() <em>Is Diagram Changed Event Dependant</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isDiagramChangedEventDependant()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final boolean IS_DIAGRAM_CHANGED_EVENT_DEPENDANT_EDEFAULT = false;
-	/**
-	 * The cached value of the '{@link #isDiagramChangedEventDependant() <em>Is Diagram Changed Event Dependant</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isDiagramChangedEventDependant()
-	 * @generated
-	 * @ordered
-	 */
-	protected boolean isDiagramChangedEventDependant = IS_DIAGRAM_CHANGED_EVENT_DEPENDANT_EDEFAULT;
-	/**
-	 * The default value of the '{@link #getDiagramChangedEventLevel() <em>Diagram Changed Event Level</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDiagramChangedEventLevel()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final EventLevel DIAGRAM_CHANGED_EVENT_LEVEL_EDEFAULT = EventLevel.LEVEL1;
-	/**
-	 * The cached value of the '{@link #getDiagramChangedEventLevel() <em>Diagram Changed Event Level</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDiagramChangedEventLevel()
-	 * @generated
-	 * @ordered
-	 */
-	protected EventLevel diagramChangedEventLevel = DIAGRAM_CHANGED_EVENT_LEVEL_EDEFAULT;
-	/**
-	 * The default value of the '{@link #getExpressionContextObjectType() <em>Expression Context Object Type</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getExpressionContextObjectType()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String EXPRESSION_CONTEXT_OBJECT_TYPE_EDEFAULT = null;
-	/**
-	 * The cached value of the '{@link #getExpressionContextObjectType() <em>Expression Context Object Type</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getExpressionContextObjectType()
-	 * @generated
-	 * @ordered
-	 */
-	protected String expressionContextObjectType = EXPRESSION_CONTEXT_OBJECT_TYPE_EDEFAULT;
-
-	protected DiagramViewEventNotifier diagramViewEventNotifier;
-
-	/**
-	 * Expression matcher computing the expr, and firing events when the matching elements change.
-	 */
-	protected ExpressionMatcher expressionMatcher;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected RegExpLayerImpl() {
-		super();
-
-		// Initialize expressionmatcher
-		// The expression Macher use this class views list.
-		// When expressionMatcher::refreshMatchingElements() is called, the provided list is refreshed.
-		// So, views is synchronized and events are fired.
-		expressionMatcher = new ExpressionMatcher(getViews());
-		resetExpressionMatcherRoots();
-
-	}
-
-	/**
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AbstractLayerImpl#startBehaviors()
-	 *
-	 */
-	@Override
-	protected void startBehaviors() {
-		// TODO Auto-generated method stub
-		super.startBehaviors();
-	}
-
-	/**
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#startAfterReloading()
-	 *
-	 */
-	@Override
-	public void startAfterReloading() {
-		// TODO Auto-generated method stub
-		super.startAfterReloading();
-	}
-
-	/**
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#attachToLayersStack(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack)
-	 *
-	 * @param owningLayersStack
-	 */
-	@Override
-	public void attachToLayersStack(LayersStack owningLayersStack) {
-		// TODO Auto-generated method stub
-		super.attachToLayersStack(owningLayersStack);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.REG_EXP_LAYER;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getExpr() {
-		return expr;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setExpr(String newExpr) {
-		String oldExpr = expr;
-		expr = newExpr;
-		// Try to set the expression
-		try {
-			// Check synchro between RegExp::views and ExpressionMatcher::matchingElements
-			// they can be unsync after the model was loaded by EMF
-			checkViewsAndMatchingElementsSync();
-			// First, reset expr roots. Do it because actually the roots are not properly set.
-			resetExpressionMatcherRoots();
-			// Change the expression, and recompute the matching elements.
-			expressionMatcher.setExpression(newExpr);
-			expressionMatcher.refreshMatchingElements();
-		} catch (LayersException e) {
-			// silently fails, but log the error.
-			log.error("Error - " + this.getClass().getSimpleName() + " - " + e.getMessage(), e);
-		}
-		if (eNotificationRequired()) {
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.REG_EXP_LAYER__EXPR, oldExpr, expr));
-		}
-	}
-
-	/**
-	 * Check synchro between RegExp::views and ExpressionMatcher::matchingElements
-	 * they can be unsync after the model was loaded by EMF.
-	 * <b>
-	 * This method is used to correct the bug where both list are unsync after the model was loaded by EMF.
-	 *
-	 * @Deprecated Not needed anymore
-	 */
-	private void checkViewsAndMatchingElementsSync() {
-
-		// // Check if both list have the same size.
-		// // We don't to check the content, because we want a quick check
-		// // Actually, unsync appear only after the model was reloded by EMF.
-		// if( getViews().size() == expressionMatcher.getMatchingElements().size() ) {
-		// // ok
-		// return;
-		// }
-		//
-		// // Sync is required
-		// List<View> matchElements = expressionMatcher.getMatchingElements().getUnnotifyingList();
-		// matchElements.clear();
-		// matchElements.addAll(getViews());
-
-	}
-
-	/**
-	 * OCL Condition computed from the expr.
-	 */
-	protected EObjectCondition condition;
-	protected OCL ocl;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getLanguage() {
-		return language;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setLanguage(String newLanguage) {
-		String oldLanguage = language;
-		language = newLanguage;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.REG_EXP_LAYER__LANGUAGE, oldLanguage, language));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean isDomainChangedEventDependant() {
-		return isDomainChangedEventDependant;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setIsDomainChangedEventDependant(boolean newIsDomainChangedEventDependant) {
-		boolean oldIsDomainChangedEventDependant = isDomainChangedEventDependant;
-		isDomainChangedEventDependant = newIsDomainChangedEventDependant;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.REG_EXP_LAYER__IS_DOMAIN_CHANGED_EVENT_DEPENDANT, oldIsDomainChangedEventDependant, isDomainChangedEventDependant));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EventLevel getDomainChangedEventLevel() {
-		return domainChangedEventLevel;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setDomainChangedEventLevel(EventLevel newDomainChangedEventLevel) {
-		EventLevel oldDomainChangedEventLevel = domainChangedEventLevel;
-		domainChangedEventLevel = newDomainChangedEventLevel == null ? DOMAIN_CHANGED_EVENT_LEVEL_EDEFAULT : newDomainChangedEventLevel;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.REG_EXP_LAYER__DOMAIN_CHANGED_EVENT_LEVEL, oldDomainChangedEventLevel, domainChangedEventLevel));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean isDiagramChangedEventDependant() {
-		return isDiagramChangedEventDependant;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setIsDiagramChangedEventDependant(boolean newIsDiagramChangedEventDependant) {
-		boolean oldIsDiagramChangedEventDependant = isDiagramChangedEventDependant;
-		isDiagramChangedEventDependant = newIsDiagramChangedEventDependant;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.REG_EXP_LAYER__IS_DIAGRAM_CHANGED_EVENT_DEPENDANT, oldIsDiagramChangedEventDependant, isDiagramChangedEventDependant));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EventLevel getDiagramChangedEventLevel() {
-		return diagramChangedEventLevel;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setDiagramChangedEventLevel(EventLevel newDiagramChangedEventLevel) {
-		EventLevel oldDiagramChangedEventLevel = diagramChangedEventLevel;
-		diagramChangedEventLevel = newDiagramChangedEventLevel == null ? DIAGRAM_CHANGED_EVENT_LEVEL_EDEFAULT : newDiagramChangedEventLevel;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.REG_EXP_LAYER__DIAGRAM_CHANGED_EVENT_LEVEL, oldDiagramChangedEventLevel, diagramChangedEventLevel));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getExpressionContextObjectType() {
-		return expressionContextObjectType;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setExpressionContextObjectType(String newExpressionContextObjectType) {
-		String oldExpressionContextObjectType = expressionContextObjectType;
-		expressionContextObjectType = newExpressionContextObjectType;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.REG_EXP_LAYER__EXPRESSION_CONTEXT_OBJECT_TYPE, oldExpressionContextObjectType, expressionContextObjectType));
-	}
-
-	/**
-	 * Listener on {@link ObservableListView} eventBus. This method is called each time a change occurs in the
-	 * result of the expression.
-	 * When the result change, the list of attached views is updated accordingly.
-	 *
-	 *
-	 * @param event
-	 */
-	@Subscribe
-	public void expressionResultChanged(ObservableListView<View>.ObservableListEvent event) {
-
-		if (log.isDebugEnabled()) {
-			log.debug(this.getClass().getSimpleName() + ".expressionResultChanged()");
-		}
-
-
-		if (!event.getAddedElements().isEmpty()) {
-			getViews().addAll(event.getAddedElements());
-		}
-		if (!event.getRemovedElements().isEmpty()) {
-			getViews().removeAll(event.getRemovedElements());
-		}
-
-	}
-
-	/**
-	 * This layer has just been added to a LayerStack.
-	 * Set the root of the expression.
-	 * Set the views to match the result of the expression.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#initLayer(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack)
-	 *
-	 * @param owningLayersStack
-	 */
-	@Override
-	public void initLayer(LayersStack owningLayersStack) {
-		super.initLayer(owningLayersStack);
-
-		resetExpressionMatcherRoots();
-		checkViewsAndMatchingElementsSync();
-
-		// // Synchronize the layer views with the result of expressionMatcher.
-		// // Try to minimize the number of events.
-		// // For that, freeze temporarily the events from this layer
-		// // Refresh the result and reset the views list while events are disabled.
-		// boolean isDeliveringEvents = eDeliver();
-		// eSetDeliver(false);
-		//
-		// expressionMatcher.refreshMatchingElements();
-		// List<View> toAdd = expressionMatcher.getMatchingElements();
-		// if( !toAdd.isEmpty() ) {
-		// getViews().clear();
-		// }
-		//
-		// // Reenable events
-		// eSetDeliver(true);
-		//
-		// // Set the views
-		//
-		// if( !toAdd.isEmpty() ) {
-		// getViews().addAll(expressionMatcher.getMatchingElements());
-		// }
-		// else {
-		// // If there is nothing to add, clear the list, in order to send appropriate event.
-		// getViews().clear();
-		// }
-
-
-	}
-
-	/**
-	 * Check if the associated Diagram has changed, and if true, change it in the ExpressionMatcher.
-	 * This does not compute the result.
-	 */
-	private void resetExpressionMatcherRoots() {
-
-		try {
-			expressionMatcher.setSearchRoots(getLayersStack().getDiagram());
-		} catch (NotFoundException e) {
-			// layerStack not found ==> no roots
-			expressionMatcher.setSearchRoots(Collections.EMPTY_LIST);
-		}
-
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @param newLayerParent
-	 * @generated NOT
-	 * @deprecated not used
-	 */
-	@Deprecated
-	@Override
-	public void activate(AbstractLayerOperator newLayerParent) {
-
-		// LayersStack layersStack;
-		// try {
-		// layersStack = newLayerParent.getLayersStack();
-		// } catch (NotFoundException e) {
-		// // silently fails
-		// return;
-		// }
-		//
-		// // Listen on view events
-		// if(diagramViewEventNotifier == null) {
-		// diagramViewEventNotifier = new DiagramViewEventNotifier(layersStack.getDiagram());
-		// return;
-		// }
-
-		// diagramViewEventNotifier.
-
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @param oldParentLayer
-	 * @generated NOT
-	 * @deprecated
-	 */
-	@Deprecated
-	@Override
-	public void deactivate(AbstractLayerOperator oldParentLayer) {
-
-		// if( oldParentLayer == null) {
-		// return;
-		// }
-		//
-		// LayersStack layersStack;
-		// try {
-		// layersStack = oldParentLayer.getLayersStack();
-		// } catch (NotFoundException e) {
-		// // silently fails
-		// return;
-		// }
-		//
-		// layersStack.getDiagram();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public boolean isDerivedView(View view) throws LayersException {
-
-		if (condition == null) {
-			return false;
-		}
-
-		// Create the OCL statement
-		SELECT statement = new SELECT(SELECT.UNBOUNDED, false,
-				new FROM(view), new WHERE(condition),
-				new NullProgressMonitor());
-
-		// Execute the OCL statement
-		IQueryResult results = statement.execute();
-
-		// the view is derived if the condition match the view.
-		return !results.isEmpty();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * Check if the view satisfy the expr condition.
-	 * If the condition is satisfied, ensure that the view is attached.
-	 * If the condition is not satisfied, ensure that the view is not attached.
-	 *
-	 *
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void attachDerivedView(View view) throws LayersException {
-		// TODO: implement this method
-		if (condition == null) {
-			return;
-		}
-
-		// Create the OCL statement
-		SELECT statement = new SELECT(SELECT.UNBOUNDED, false,
-				new FROM(view), new WHERE(condition),
-				new NullProgressMonitor());
-
-		// Execute the OCL statement
-		IQueryResult results = statement.execute();
-
-		//
-		if (!results.isEmpty()) {
-			// The condition is satisfied. Ensure the view is attached
-			List<View> attachedViews = getViews();
-			if (attachedViews.contains(view)) {
-				return;
-			}
-			attachedViews.add(view);
-		} else {
-			// The condition is not satisfied. Ensure the view is not attached.
-			getViews().remove(view);
-		}
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * Attach each view that satisfy the condition.
-	 * Detach each view that do not satisfy the condition.
-	 * TODO rename to updateDerivedViews() ?
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void attachDerivedViews(EList<View> views) throws LayersException {
-
-		if (condition == null) {
-			return;
-		}
-
-		// Create the OCL statement
-		SELECT statement = new SELECT(SELECT.UNBOUNDED, false,
-				new FROM(views), new WHERE(condition),
-				new NullProgressMonitor());
-
-		// Execute the OCL statement
-		IQueryResult results = statement.execute();
-
-		// viewsToCheck
-		// attachedViews -- list of views that are attached
-		// -- getViews()
-		// viewsToAttach -- list of views that should be attached
-		// -- query result
-		// toAdd - views that are in viewsToAttach, but not in attachedViews
-		// --
-		// toRemove - views that are in attachedViews, and viewsToCheck, but not in viewsToAttach
-
-		// Compute views to add
-		// This are views in the result, but not in the list of attached
-		// viewsToAdd = results - getViews()
-		List<View> viewsToAdd = new ArrayList<View>();
-		List<View> attachedViews = getViews();
-		for (Object o : results) {
-			View v = (View) o;
-			if (!attachedViews.contains(v)) {
-				viewsToAdd.add(v);
-			}
-		}
-
-		// Compute views to remove
-		// Their is two ways to compute it:
-		// - viewsToremove = diagramViews - results
-		// - or viewsToremove = getViews() - result
-		// Use the cheaper one.
-		// The computed viewsToRemove list contains also views that are not in the layer,
-		// But this is cheaper than checking for the existence.
-
-		List<View> viewsToRemove = new ArrayList<View>();
-		for (View v : (views.size() < getViews().size() ? views : getViews())) {
-			if (!results.contains(v)) {
-				viewsToRemove.add(v);
-			}
-		}
-
-		// Do operations
-		getViews().removeAll(viewsToRemove);
-		getViews().addAll(viewsToAdd);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * Update all views directly own by the diagram.
-	 *
-	 * If a view satisfy the expr condition, attach it to the Layer.
-	 * Remove all others view from the layer. <br>
-	 * To avoid multiple events, we compute the list of views to remove from the layer, and the list
-	 * of views to add to layer. Then, we preform two operations; removeAll(toRemove) and addAll(toAdd);
-	 *
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void attachDerivedViews() throws LayersException {
-
-		if (condition == null) {
-			return;
-		}
-
-		// Check views from the diagram.
-		@SuppressWarnings("unchecked")
-		EList<View> diagramViews = getLayersStack().getDiagram().getChildren();
-
-		// Create the OCL statement
-		SELECT statement = new SELECT(SELECT.UNBOUNDED, false,
-				new FROM(diagramViews), new WHERE(condition),
-				new NullProgressMonitor());
-
-		// Execute the OCL statement
-		IQueryResult results = statement.execute();
-
-		// Compute views to add
-		// This are views in the result, but not in the list of attached
-		// viewsToAdd = results - getViews()
-		List<View> viewsToAdd = new ArrayList<View>();
-		List<View> attachedViews = getViews();
-		for (Object o : results) {
-			View v = (View) o;
-			if (!attachedViews.contains(v)) {
-				viewsToAdd.add(v);
-			}
-		}
-
-		// Compute views to remove
-		// Their is two ways to compute it:
-		// - viewsToremove = diagramViews - results
-		// - or viewsToremove = getViews() - result
-		// Use the cheaper one.
-		// The computed viewsToRemove list contains also views that are not in the layer,
-		// But this is cheaper than checking for the existence.
-
-		// List<View> viewsToRemove = new ArrayList<View>();
-		// for( View v : (views.size()<getViews().size()?views:getViews()) ) {
-		// if( !results.contains(v)) {
-		// viewsToRemove.add(v);
-		// }
-		// }
-
-		// Do operations
-		getViews().retainAll(results);
-		// getViews().removeAll(viewsToRemove);
-		getViews().addAll(viewsToAdd);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public EList<View> lookupDerivedViews(EList<View> views) throws LayersException {
-		// if(condition == null) {
-		// return EList.EMPTY_LIST;
-		// }
-		//
-		// // Check views from the diagram.
-		// @SuppressWarnings("unchecked")
-		// EList<View> diagramViews = (EList<View>)getLayersStack().getDiagram().getChildren();
-		//
-		// // Create the OCL statement
-		// SELECT statement = new SELECT(SELECT.UNBOUNDED, false,
-		// new FROM(diagramViews), new WHERE(condition),
-		// new NullProgressMonitor());
-		//
-		// // Execute the OCL statement
-		// IQueryResult results = statement.execute();
-		// return new ;
-		return null;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case LayersPackage.REG_EXP_LAYER__EXPR:
-				return getExpr();
-			case LayersPackage.REG_EXP_LAYER__LANGUAGE:
-				return getLanguage();
-			case LayersPackage.REG_EXP_LAYER__IS_DOMAIN_CHANGED_EVENT_DEPENDANT:
-				return isDomainChangedEventDependant();
-			case LayersPackage.REG_EXP_LAYER__DOMAIN_CHANGED_EVENT_LEVEL:
-				return getDomainChangedEventLevel();
-			case LayersPackage.REG_EXP_LAYER__IS_DIAGRAM_CHANGED_EVENT_DEPENDANT:
-				return isDiagramChangedEventDependant();
-			case LayersPackage.REG_EXP_LAYER__DIAGRAM_CHANGED_EVENT_LEVEL:
-				return getDiagramChangedEventLevel();
-			case LayersPackage.REG_EXP_LAYER__EXPRESSION_CONTEXT_OBJECT_TYPE:
-				return getExpressionContextObjectType();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case LayersPackage.REG_EXP_LAYER__EXPR:
-				setExpr((String)newValue);
-				return;
-			case LayersPackage.REG_EXP_LAYER__LANGUAGE:
-				setLanguage((String)newValue);
-				return;
-			case LayersPackage.REG_EXP_LAYER__IS_DOMAIN_CHANGED_EVENT_DEPENDANT:
-				setIsDomainChangedEventDependant((Boolean)newValue);
-				return;
-			case LayersPackage.REG_EXP_LAYER__DOMAIN_CHANGED_EVENT_LEVEL:
-				setDomainChangedEventLevel((EventLevel)newValue);
-				return;
-			case LayersPackage.REG_EXP_LAYER__IS_DIAGRAM_CHANGED_EVENT_DEPENDANT:
-				setIsDiagramChangedEventDependant((Boolean)newValue);
-				return;
-			case LayersPackage.REG_EXP_LAYER__DIAGRAM_CHANGED_EVENT_LEVEL:
-				setDiagramChangedEventLevel((EventLevel)newValue);
-				return;
-			case LayersPackage.REG_EXP_LAYER__EXPRESSION_CONTEXT_OBJECT_TYPE:
-				setExpressionContextObjectType((String)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case LayersPackage.REG_EXP_LAYER__EXPR:
-				setExpr(EXPR_EDEFAULT);
-				return;
-			case LayersPackage.REG_EXP_LAYER__LANGUAGE:
-				setLanguage(LANGUAGE_EDEFAULT);
-				return;
-			case LayersPackage.REG_EXP_LAYER__IS_DOMAIN_CHANGED_EVENT_DEPENDANT:
-				setIsDomainChangedEventDependant(IS_DOMAIN_CHANGED_EVENT_DEPENDANT_EDEFAULT);
-				return;
-			case LayersPackage.REG_EXP_LAYER__DOMAIN_CHANGED_EVENT_LEVEL:
-				setDomainChangedEventLevel(DOMAIN_CHANGED_EVENT_LEVEL_EDEFAULT);
-				return;
-			case LayersPackage.REG_EXP_LAYER__IS_DIAGRAM_CHANGED_EVENT_DEPENDANT:
-				setIsDiagramChangedEventDependant(IS_DIAGRAM_CHANGED_EVENT_DEPENDANT_EDEFAULT);
-				return;
-			case LayersPackage.REG_EXP_LAYER__DIAGRAM_CHANGED_EVENT_LEVEL:
-				setDiagramChangedEventLevel(DIAGRAM_CHANGED_EVENT_LEVEL_EDEFAULT);
-				return;
-			case LayersPackage.REG_EXP_LAYER__EXPRESSION_CONTEXT_OBJECT_TYPE:
-				setExpressionContextObjectType(EXPRESSION_CONTEXT_OBJECT_TYPE_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case LayersPackage.REG_EXP_LAYER__EXPR:
-				return EXPR_EDEFAULT == null ? expr != null : !EXPR_EDEFAULT.equals(expr);
-			case LayersPackage.REG_EXP_LAYER__LANGUAGE:
-				return LANGUAGE_EDEFAULT == null ? language != null : !LANGUAGE_EDEFAULT.equals(language);
-			case LayersPackage.REG_EXP_LAYER__IS_DOMAIN_CHANGED_EVENT_DEPENDANT:
-				return isDomainChangedEventDependant != IS_DOMAIN_CHANGED_EVENT_DEPENDANT_EDEFAULT;
-			case LayersPackage.REG_EXP_LAYER__DOMAIN_CHANGED_EVENT_LEVEL:
-				return domainChangedEventLevel != DOMAIN_CHANGED_EVENT_LEVEL_EDEFAULT;
-			case LayersPackage.REG_EXP_LAYER__IS_DIAGRAM_CHANGED_EVENT_DEPENDANT:
-				return isDiagramChangedEventDependant != IS_DIAGRAM_CHANGED_EVENT_DEPENDANT_EDEFAULT;
-			case LayersPackage.REG_EXP_LAYER__DIAGRAM_CHANGED_EVENT_LEVEL:
-				return diagramChangedEventLevel != DIAGRAM_CHANGED_EVENT_LEVEL_EDEFAULT;
-			case LayersPackage.REG_EXP_LAYER__EXPRESSION_CONTEXT_OBJECT_TYPE:
-				return EXPRESSION_CONTEXT_OBJECT_TYPE_EDEFAULT == null ? expressionContextObjectType != null : !EXPRESSION_CONTEXT_OBJECT_TYPE_EDEFAULT.equals(expressionContextObjectType);
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	@SuppressWarnings("unchecked")
-	public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
-		switch (operationID) {
-			case LayersPackage.REG_EXP_LAYER___ACTIVATE__ABSTRACTLAYEROPERATOR:
-				activate((AbstractLayerOperator)arguments.get(0));
-				return null;
-			case LayersPackage.REG_EXP_LAYER___DEACTIVATE__ABSTRACTLAYEROPERATOR:
-				deactivate((AbstractLayerOperator)arguments.get(0));
-				return null;
-			case LayersPackage.REG_EXP_LAYER___IS_DERIVED_VIEW__VIEW:
-				try {
-					return isDerivedView((View)arguments.get(0));
-				}
-				catch (Throwable throwable) {
-					throw new InvocationTargetException(throwable);
-				}
-			case LayersPackage.REG_EXP_LAYER___ATTACH_DERIVED_VIEW__VIEW:
-				try {
-					attachDerivedView((View)arguments.get(0));
-					return null;
-				}
-				catch (Throwable throwable) {
-					throw new InvocationTargetException(throwable);
-				}
-			case LayersPackage.REG_EXP_LAYER___ATTACH_DERIVED_VIEWS__ELIST:
-				try {
-					attachDerivedViews((EList<View>)arguments.get(0));
-					return null;
-				}
-				catch (Throwable throwable) {
-					throw new InvocationTargetException(throwable);
-				}
-			case LayersPackage.REG_EXP_LAYER___ATTACH_DERIVED_VIEWS:
-				try {
-					attachDerivedViews();
-					return null;
-				}
-				catch (Throwable throwable) {
-					throw new InvocationTargetException(throwable);
-				}
-			case LayersPackage.REG_EXP_LAYER___LOOKUP_DERIVED_VIEWS__ELIST:
-				try {
-					return lookupDerivedViews((EList<View>)arguments.get(0));
-				}
-				catch (Throwable throwable) {
-					throw new InvocationTargetException(throwable);
-				}
-		}
-		return super.eInvoke(operationID, arguments);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (expr: "); //$NON-NLS-1$
-		result.append(expr);
-		result.append(", language: "); //$NON-NLS-1$
-		result.append(language);
-		result.append(", isDomainChangedEventDependant: "); //$NON-NLS-1$
-		result.append(isDomainChangedEventDependant);
-		result.append(", domainChangedEventLevel: "); //$NON-NLS-1$
-		result.append(domainChangedEventLevel);
-		result.append(", isDiagramChangedEventDependant: "); //$NON-NLS-1$
-		result.append(isDiagramChangedEventDependant);
-		result.append(", diagramChangedEventLevel: "); //$NON-NLS-1$
-		result.append(diagramChangedEventLevel);
-		result.append(", expressionContextObjectType: "); //$NON-NLS-1$
-		result.append(expressionContextObjectType);
-		result.append(')');
-		return result.toString();
-	}
-
-	/**
-	 * Called by the observers when a view is added.
-	 *
-	 * @param view
-	 */
-	protected void viewAdded(View view) {
-
-	}
-
-	/**
-	 * Called by the observers when a view is removed.
-	 *
-	 * @param view
-	 */
-	protected void viewRemoved(View view) {
-
-	}
-
-	// public class ViewEventAdapter extends {
-	//
-	// }
-
-	public class DiagramViewEventListener implements IDiagramViewEventListener {
-
-		@Override
-		public void diagramViewAdded(Notification msg) {
-			viewAdded((View) msg.getNewValue());
-
-		}
-
-		@Override
-		public void diagramViewRemoved(Notification msg) {
-			viewRemoved((View) msg.getNewValue());
-		}
-
-	}
-
-} // RegExpLayerImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/SimpleLayerDescriptorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/SimpleLayerDescriptorImpl.java
index 1158fe9..aba05ad 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/SimpleLayerDescriptorImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/SimpleLayerDescriptorImpl.java
@@ -1,18 +1,20 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.ecore.EClass;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.SimpleLayerDescriptor;
 
@@ -43,4 +45,4 @@
 		return LayersPackage.Literals.SIMPLE_LAYER_DESCRIPTOR;
 	}
 
-} // SimpleLayerDescriptorImpl
+} //SimpleLayerDescriptorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StackedLayerOperatorDescriptorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StackedLayerOperatorDescriptorImpl.java
index ec325c4..e8ad6ea 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StackedLayerOperatorDescriptorImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StackedLayerOperatorDescriptorImpl.java
@@ -1,22 +1,21 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperator;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperatorDescriptor;
 
 /**
@@ -30,44 +29,10 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated not
+	 * @generated
 	 */
 	protected StackedLayerOperatorDescriptorImpl() {
 		super();
-		init();
-	}
-
-	/**
-	 * Init the descriptor.
-	 */
-	private void init() {
-		setName("StackedLayerOperator");
-
-	}
-
-	/**
-	 * New instance creation counter.
-	 */
-	static int count = 0;
-
-	/**
-	 * Create the requested {@link StackedLayerOperator} and init it.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorDescriptorImpl#createLayerOperator()
-	 *
-	 * @return
-	 */
-	@Override
-	public AbstractLayerOperator createLayerOperator() {
-
-
-		StackedLayerOperator layerOperator = LayersFactory.eINSTANCE.createStackedLayerOperator();
-		layerOperator.setLayerOperatorDescriptor(this);
-		layerOperator.setLayerOperatorDescriptorName(this.getName());
-		layerOperator.setName(getName() + count++);
-
-		return layerOperator;
 	}
 
 	/**
@@ -80,4 +45,4 @@
 		return LayersPackage.Literals.STACKED_LAYER_OPERATOR_DESCRIPTOR;
 	}
 
-} // StackedLayerOperatorDescriptorImpl
+} //StackedLayerOperatorDescriptorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StackedLayerOperatorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StackedLayerOperatorImpl.java
index 0e0bf8d..40a7f81 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StackedLayerOperatorImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StackedLayerOperatorImpl.java
@@ -1,26 +1,20 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
-import static org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.Activator.log;
-
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
 import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayer;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperator;
 
@@ -31,20 +25,14 @@
  *
  * @generated
  */
-public class StackedLayerOperatorImpl extends AbstractLayerOperatorImpl implements StackedLayerOperator {
-
+public class StackedLayerOperatorImpl extends LayerOperatorImpl implements StackedLayerOperator {
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	protected StackedLayerOperatorImpl() {
 		super();
-
-		// Add an observer
-		Adapter adapter = new LayerDescriptorSynchronizer();
-		this.eAdapters().add(adapter);
 	}
 
 	/**
@@ -57,97 +45,4 @@
 		return LayersPackage.Literals.STACKED_LAYER_OPERATOR;
 	}
 
-	/**
-	 * Reset the descriptor accordingly to the descriptor name.
-	 * The descriptor is resseted only if the ::application and ::layerOperatorDescriptorName are set.
-	 * Nothing is done if one of the attribute is not set.
-	 * Nothing is done if the descriptor can not be found (maybe a log is issue).
-	 * <!-- begin-user-doc -->
-	 * Not used ?
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void resetDescriptor() {
-
-		if (getApplication() == null || getLayerOperatorDescriptorName() == null) {
-			// A property is not yet set.
-			// do nothing
-			return;
-		}
-
-		try {
-			LayerOperatorDescriptor descriptor = getApplication().getLayerOperatorDescriptorRegistry().getLayerOperatorDescriptor(getLayerOperatorDescriptorName());
-			setLayerOperatorDescriptor(descriptor);
-		} catch (NotFoundException e) {
-			// Not found
-			log.error(this.getClass().getName()
-					+ "- Can't get LayerOperatorDescriptor for descriptorName '" + getLayerOperatorDescriptorName() + "'.", e);
-		}
-	}
-
-	/**
-	 * This class listen to #propertyValueMap, and synchronize propertyValues accordingly.
-	 *
-	 *
-	 */
-	public class LayerDescriptorSynchronizer extends AdapterImpl {
-
-		@Override
-		public void notifyChanged(Notification msg) {
-			// System.err.println("event " + msg.getEventType());
-
-			switch (msg.getFeatureID(AbstractLayer.class)) {
-			case LayersPackage.STACKED_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME:
-				notifyDescriptorNameChanged(msg);
-				break;
-
-			case LayersPackage.STACKED_LAYER_OPERATOR__APPLICATION:
-				notifyLayerApplicationFeatureChanged(msg);
-				break;
-
-			default:
-				break;
-			}
-		}
-
-		/**
-		 * The {@link LayerImpl#propertyValueMap} has changed. Synchronize the {@link LayerImpl#propertyValues} list.
-		 *
-		 * @param msg
-		 */
-		protected void notifyDescriptorNameChanged(Notification msg) {
-			// System.err.println("descriptor name changed " + msg.getEventType());
-			switch (msg.getEventType()) {
-			case Notification.SET: {
-				// Name is set
-				resetDescriptor();
-				break;
-			}
-			default:
-				break;
-			}
-
-		}
-
-		/**
-		 * The {@link LayerImpl#propertyValueMap} has changed. Synchronize the {@link LayerImpl#propertyValues} list.
-		 *
-		 * @param msg
-		 */
-		protected void notifyLayerApplicationFeatureChanged(Notification msg) {
-			// System.err.println("application changed " + msg.getEventType());
-			switch (msg.getEventType()) {
-			case Notification.SET: {
-				// Application is set
-				resetDescriptor();
-				break;
-			}
-			}
-		}
-
-	}
-
-
-} // StackedLayerOperatorImpl
+} //StackedLayerOperatorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringInstanceImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringInstanceImpl.java
deleted file mode 100755
index a99d5fe..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringInstanceImpl.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>String Instance</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringInstanceImpl#getValue <em>Value</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class StringInstanceImpl extends TypeInstanceImpl implements StringInstance {
-	/**
-	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String VALUE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected String value = VALUE_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected StringInstanceImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.STRING_INSTANCE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String getValue() {
-		return value;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setValue(String newValue) {
-		String oldValue = value;
-		value = newValue;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.STRING_INSTANCE__VALUE, oldValue, value));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case LayersPackage.STRING_INSTANCE__VALUE:
-				return getValue();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case LayersPackage.STRING_INSTANCE__VALUE:
-				setValue((String)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case LayersPackage.STRING_INSTANCE__VALUE:
-				setValue(VALUE_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case LayersPackage.STRING_INSTANCE__VALUE:
-				return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromString(String value) {
-
-		if (value == null || value.length() == 0) {
-			return;
-		}
-
-		setValue(value.trim());
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public void setValueFromInstance(TypeInstance value) {
-
-		// Check if the value is of the right instance
-		if (!getClass().isInstance(value)) {
-			return;
-		}
-
-		StringInstance instance = (StringInstance) value;
-		setValue(instance.getValue());
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (value: "); //$NON-NLS-1$
-		result.append(value);
-		result.append(')');
-		return result.toString();
-	}
-
-} // StringInstanceImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToPropertyIndexMapImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToPropertyIndexMapImpl.java
index 4af9202..37736c5 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToPropertyIndexMapImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToPropertyIndexMapImpl.java
@@ -1,26 +1,31 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.BasicEMap;
 import org.eclipse.emf.common.util.EMap;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyIndex;
 
@@ -243,7 +248,7 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (key: "); //$NON-NLS-1$
 		result.append(key);
 		result.append(')');
@@ -262,7 +267,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public int getHash() {
 		if (hash == -1) {
 			Object theKey = getKey();
@@ -276,7 +280,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setHash(int hash) {
 		this.hash = hash;
 	}
@@ -286,7 +289,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getKey() {
 		return getTypedKey();
 	}
@@ -296,7 +298,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setKey(String key) {
 		setTypedKey(key);
 	}
@@ -306,7 +307,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public PropertyIndex getValue() {
 		return getTypedValue();
 	}
@@ -316,7 +316,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public PropertyIndex setValue(PropertyIndex value) {
 		PropertyIndex oldValue = getValue();
 		setTypedValue(value);
@@ -334,4 +333,4 @@
 		return container == null ? null : (EMap<String, PropertyIndex>)container.eGet(eContainmentFeature());
 	}
 
-} // StringToPropertyIndexMapImpl
+} //StringToPropertyIndexMapImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToPropertySetterImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToPropertySetterImpl.java
index 9ad299f..0ddb05a 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToPropertySetterImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToPropertySetterImpl.java
@@ -1,26 +1,31 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.BasicEMap;
 import org.eclipse.emf.common.util.EMap;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter;
 
@@ -243,7 +248,7 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (key: "); //$NON-NLS-1$
 		result.append(key);
 		result.append(')');
@@ -262,7 +267,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public int getHash() {
 		if (hash == -1) {
 			Object theKey = getKey();
@@ -276,7 +280,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setHash(int hash) {
 		this.hash = hash;
 	}
@@ -286,7 +289,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getKey() {
 		return getTypedKey();
 	}
@@ -296,7 +298,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setKey(String key) {
 		setTypedKey(key);
 	}
@@ -306,7 +307,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public PropertySetter getValue() {
 		return getTypedValue();
 	}
@@ -316,7 +316,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public PropertySetter setValue(PropertySetter value) {
 		PropertySetter oldValue = getValue();
 		setTypedValue(value);
@@ -334,4 +333,4 @@
 		return container == null ? null : (EMap<String, PropertySetter>)container.eGet(eContainmentFeature());
 	}
 
-} // StringToPropertySetterImpl
+} //StringToPropertySetterImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToTypeInstanceMapImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToTypeInstanceMapImpl.java
index c2518d0..9284b1d 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToTypeInstanceMapImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToTypeInstanceMapImpl.java
@@ -1,26 +1,31 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.BasicEMap;
 import org.eclipse.emf.common.util.EMap;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
 
@@ -172,59 +177,6 @@
 	 * @generated
 	 */
 	@Override
-	public String getKey() {
-		return getTypedKey();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setKey(String key) {
-		setTypedKey(key);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public TypeInstance getValue() {
-		return getTypedValue();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public TypeInstance setValue(TypeInstance value) {
-		TypeInstance oldValue = getValue();
-		setTypedValue(value);
-		return oldValue;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@SuppressWarnings("unchecked")
-	public EMap<String, TypeInstance> getEMap() {
-		EObject container = eContainer();
-		return container == null ? null : (EMap<String, TypeInstance>)container.eGet(eContainmentFeature());
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
 			case LayersPackage.STRING_TO_TYPE_INSTANCE_MAP__KEY:
@@ -296,7 +248,7 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (key: "); //$NON-NLS-1$
 		result.append(key);
 		result.append(')');
@@ -315,7 +267,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public int getHash() {
 		if (hash == -1) {
 			Object theKey = getKey();
@@ -329,9 +280,57 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setHash(int hash) {
 		this.hash = hash;
 	}
 
-} // StringToTypeInstanceMapImpl
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getKey() {
+		return getTypedKey();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setKey(String key) {
+		setTypedKey(key);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypeInstance getValue() {
+		return getTypedValue();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TypeInstance setValue(TypeInstance value) {
+		TypeInstance oldValue = getValue();
+		setTypedValue(value);
+		return oldValue;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	public EMap<String, TypeInstance> getEMap() {
+		EObject container = eContainer();
+		return container == null ? null : (EMap<String, TypeInstance>)container.eGet(eContainmentFeature());
+	}
+
+} //StringToTypeInstanceMapImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToTypeMapImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToTypeMapImpl.java
index 32d7a23..b193540 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToTypeMapImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringToTypeMapImpl.java
@@ -1,26 +1,31 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.BasicEMap;
 import org.eclipse.emf.common.util.EMap;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type;
 
@@ -243,7 +248,7 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (key: "); //$NON-NLS-1$
 		result.append(key);
 		result.append(')');
@@ -262,7 +267,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public int getHash() {
 		if (hash == -1) {
 			Object theKey = getKey();
@@ -276,7 +280,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setHash(int hash) {
 		this.hash = hash;
 	}
@@ -286,7 +289,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getKey() {
 		return getTypedKey();
 	}
@@ -296,7 +298,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setKey(String key) {
 		setTypedKey(key);
 	}
@@ -306,7 +307,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public Type getValue() {
 		return getTypedValue();
 	}
@@ -316,7 +316,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public Type setValue(Type value) {
 		Type oldValue = getValue();
 		setTypedValue(value);
@@ -334,4 +333,4 @@
 		return container == null ? null : (EMap<String, Type>)container.eGet(eContainmentFeature());
 	}
 
-} // StringToTypeMapImpl
+} //StringToTypeMapImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringTypeImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringTypeImpl.java
deleted file mode 100755
index 93649c4..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/StringTypeImpl.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
- */
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringType;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>String Type</b></em>'.
- * <!-- end-user-doc -->
- *
- * @generated
- */
-public class StringTypeImpl extends TypeImpl implements StringType {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	protected StringTypeImpl() {
-		super();
-		setName("String");
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
-	 */
-	@Override
-	public TypeInstance createInstance() {
-		return LayersFactory.eINSTANCE.createStringInstance();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return LayersPackage.Literals.STRING_TYPE;
-	}
-
-} // StringTypeImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TopLayerOperatorDescriptorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TopLayerOperatorDescriptorImpl.java
index bfff679..bd2655d 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TopLayerOperatorDescriptorImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TopLayerOperatorDescriptorImpl.java
@@ -1,23 +1,21 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperatorDescriptor;
 
 /**
@@ -31,43 +29,10 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	protected TopLayerOperatorDescriptorImpl() {
 		super();
-		init();
-	}
-
-	/**
-	 * Init the descriptor.
-	 */
-	private void init() {
-		setName("TopLayerOperator");
-
-	}
-
-	/**
-	 * New instance creation counter.
-	 */
-	static int count = 0;
-
-	/**
-	 * Create the requested {@link StackedLayerOperator} and init it.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorDescriptorImpl#createLayerOperator()
-	 *
-	 * @return
-	 */
-	@Override
-	public AbstractLayerOperator createLayerOperator() {
-
-
-		TopLayerOperator layerOperator = LayersFactory.eINSTANCE.createTopLayerOperator();
-		layerOperator.setLayerOperatorDescriptor(this);
-		layerOperator.setName(getName() + count++);
-
-		return layerOperator;
 	}
 
 	/**
@@ -80,4 +45,4 @@
 		return LayersPackage.Literals.TOP_LAYER_OPERATOR_DESCRIPTOR;
 	}
 
-} // TopLayerOperatorDescriptorImpl
+} //TopLayerOperatorDescriptorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TopLayerOperatorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TopLayerOperatorImpl.java
index 276a1f8..eae675a 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TopLayerOperatorImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TopLayerOperatorImpl.java
@@ -1,28 +1,21 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
-import java.util.List;
-
-import org.eclipse.emf.common.util.BasicEList;
-import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
-import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator;
 
 /**
@@ -32,7 +25,7 @@
  *
  * @generated
  */
-public class TopLayerOperatorImpl extends AbstractLayerOperatorImpl implements TopLayerOperator {
+public class TopLayerOperatorImpl extends LayerOperatorImpl implements TopLayerOperator {
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -52,116 +45,4 @@
 		return LayersPackage.Literals.TOP_LAYER_OPERATOR;
 	}
 
-	/**
-	 * Get the command to compute the required property value.
-	 * Walk all layers and return the first cmd that is not null for specified view and proerty.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#getComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property)
-	 *
-	 * @param view
-	 * @param property
-	 * @return
-	 * @throws LayersException
-	 */
-	@Override
-	public ComputePropertyValueCommand getComputePropertyValueCommand(View view, Property property) throws LayersException {
-
-		// Walk all layers and return the first cmd that is not null for specified view and proerty.
-		for (LayerExpression layer : getLayers()) {
-
-			ComputePropertyValueCommand cmd = layer.getComputePropertyValueCommand(view, property);
-			if (cmd != null) {
-				return cmd;
-			}
-		}
-		// Nothing found
-		return null;
-
-	}
-
-	/**
-	 * For each property, add the first property value in the list of result.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#getPropertiesComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, java.util.List)
-	 *
-	 * @param view
-	 * @param property
-	 * @return
-	 * @throws LayersException
-	 */
-	@Override
-	public EList<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, List<Property> properties) throws LayersException {
-
-		// Simple implementation
-		// TODO Check if we can optimize
-
-		// the result list
-		EList<ComputePropertyValueCommand> resCmds = new BasicEList<ComputePropertyValueCommand>(properties.size());
-		boolean isCmdFound = false;
-
-		for (Property property : properties) {
-			if (property == null) {
-				resCmds.add(null);
-				continue;
-			}
-
-			ComputePropertyValueCommand cmd = getComputePropertyValueCommand(view, property);
-			if (cmd != null) {
-				isCmdFound = true;
-			}
-			resCmds.add(cmd);
-
-
-		}
-		// Return appropriate result
-		if (isCmdFound) {
-			return resCmds;
-		} else {
-			// No command ==> null
-			return null;
-		}
-	}
-
-	/**
-	 * For each view, add the first property value in the list of result.
-	 *
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#getViewsComputePropertyValueCommand(java.util.List, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property)
-	 *
-	 * @param view
-	 * @param property
-	 * @return
-	 * @throws LayersException
-	 */
-	@Override
-	public EList<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(List<View> views, Property property) throws LayersException {
-
-		// Simple implementation
-		// TODO Check if we can optimize
-
-		// the result list
-		EList<ComputePropertyValueCommand> resCmds = new BasicEList<ComputePropertyValueCommand>(views.size());
-		boolean isCmdFound = false;
-
-		for (View view : views) {
-			if (view == null) {
-				resCmds.add(null);
-				continue;
-			}
-
-			ComputePropertyValueCommand cmd = getComputePropertyValueCommand(view, property);
-			if (cmd != null) {
-				isCmdFound = true;
-			}
-			resCmds.add(cmd);
-		}
-
-		// Return appropriate result
-		if (isCmdFound) {
-			return resCmds;
-		} else {
-			// No command ==> null
-			return null;
-		}
-	}
-} // TopLayerOperatorImpl
+} //TopLayerOperatorImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TypeImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TypeImpl.java
index 4fb8443..d3bf034 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TypeImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TypeImpl.java
@@ -1,26 +1,29 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.lang.reflect.InvocationTargetException;
 
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
 
@@ -32,25 +35,13 @@
  * The following features are implemented:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TypeImpl#getMetamodel <em>Metamodel</em>}</li>
  *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TypeImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TypeImpl#getDescription <em>Description</em>}</li>
  * </ul>
  *
  * @generated
  */
-public abstract class TypeImpl extends
-		FolderElementImpl implements Type {
-	/**
-	 * The cached value of the '{@link #getMetamodel() <em>Metamodel</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getMetamodel()
-	 * @generated
-	 * @ordered
-	 */
-	protected Metamodel metamodel;
-
+public abstract class TypeImpl extends FolderElementImpl implements Type {
 	/**
 	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -115,47 +106,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
-	public Metamodel getMetamodel() {
-		if (metamodel != null && metamodel.eIsProxy()) {
-			InternalEObject oldMetamodel = (InternalEObject)metamodel;
-			metamodel = (Metamodel)eResolveProxy(oldMetamodel);
-			if (metamodel != oldMetamodel) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, LayersPackage.TYPE__METAMODEL, oldMetamodel, metamodel));
-			}
-		}
-		return metamodel;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public Metamodel basicGetMetamodel() {
-		return metamodel;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void setMetamodel(Metamodel newMetamodel) {
-		Metamodel oldMetamodel = metamodel;
-		metamodel = newMetamodel;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.TYPE__METAMODEL, oldMetamodel, metamodel));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
 	public String getName() {
 		return name;
 	}
@@ -165,7 +115,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setName(String newName) {
 		String oldName = name;
 		name = newName;
@@ -178,7 +127,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public String getDescription() {
 		return description;
 	}
@@ -188,7 +136,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setDescription(String newDescription) {
 		String oldDescription = description;
 		description = newDescription;
@@ -201,7 +148,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public TypeInstance createInstance() {
 		// TODO: implement this method
 		// Ensure that you remove @generated or mark it @generated NOT
@@ -216,9 +162,6 @@
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-			case LayersPackage.TYPE__METAMODEL:
-				if (resolve) return getMetamodel();
-				return basicGetMetamodel();
 			case LayersPackage.TYPE__NAME:
 				return getName();
 			case LayersPackage.TYPE__DESCRIPTION:
@@ -235,9 +178,6 @@
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case LayersPackage.TYPE__METAMODEL:
-				setMetamodel((Metamodel)newValue);
-				return;
 			case LayersPackage.TYPE__NAME:
 				setName((String)newValue);
 				return;
@@ -256,9 +196,6 @@
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case LayersPackage.TYPE__METAMODEL:
-				setMetamodel((Metamodel)null);
-				return;
 			case LayersPackage.TYPE__NAME:
 				setName(NAME_EDEFAULT);
 				return;
@@ -277,8 +214,6 @@
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-			case LayersPackage.TYPE__METAMODEL:
-				return metamodel != null;
 			case LayersPackage.TYPE__NAME:
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case LayersPackage.TYPE__DESCRIPTION:
@@ -310,7 +245,7 @@
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
+		StringBuilder result = new StringBuilder(super.toString());
 		result.append(" (name: "); //$NON-NLS-1$
 		result.append(name);
 		result.append(", description: "); //$NON-NLS-1$
@@ -319,4 +254,4 @@
 		return result.toString();
 	}
 
-} // TypeImpl
+} //TypeImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TypeInstanceImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TypeInstanceImpl.java
index 151f0ab..a0415fe 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TypeInstanceImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TypeInstanceImpl.java
@@ -1,23 +1,28 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
 import java.lang.reflect.InvocationTargetException;
 
 import org.eclipse.emf.common.util.EList;
+
 import org.eclipse.emf.ecore.EClass;
+
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
 
@@ -51,14 +56,12 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
-	@Override
 	public TypeInstance getCmdValue() throws LayersException {
-		// By default, we return the instance itself, as there
-		// is nothing more to compute.
-		return this;
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
 	}
 
 	/**
@@ -66,7 +69,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setValueFromString(String value) {
 		// TODO: implement this method
 		// Ensure that you remove @generated or mark it @generated NOT
@@ -78,7 +80,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@Override
 	public void setValueFromInstance(TypeInstance value) {
 		// TODO: implement this method
 		// Ensure that you remove @generated or mark it @generated NOT
@@ -110,4 +111,4 @@
 		return super.eInvoke(operationID, arguments);
 	}
 
-} // TypeInstanceImpl
+} //TypeInstanceImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TypeRegistryImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TypeRegistryImpl.java
index d10c5f1..1884d75 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TypeRegistryImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/TypeRegistryImpl.java
@@ -1,26 +1,33 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl;
 
+import java.util.Map;
+
 import org.eclipse.emf.common.notify.NotificationChain;
+
 import org.eclipse.emf.common.util.EMap;
+
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.InternalEObject;
+
 import org.eclipse.emf.ecore.impl.EObjectImpl;
+
 import org.eclipse.emf.ecore.util.EcoreEMap;
 import org.eclipse.emf.ecore.util.InternalEList;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeRegistry;
@@ -33,7 +40,7 @@
  * The following features are implemented:
  * </p>
  * <ul>
- * <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TypeRegistryImpl#getTypes <em>Types</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TypeRegistryImpl#getTypes <em>Types</em>}</li>
  * </ul>
  *
  * @generated
@@ -43,7 +50,6 @@
 	 * The cached value of the '{@link #getTypes() <em>Types</em>}' map.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @see #getTypes()
 	 * @generated
 	 * @ordered
@@ -53,52 +59,15 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 *
-	 * @generated NOT
+	 * @generated
 	 */
 	protected TypeRegistryImpl() {
 		super();
-		init();
-	}
-
-	/**
-	 * Init the Registry.
-	 * Register standard types.
-	 */
-	protected void init() {
-
-		Type type = LayersFactory.eINSTANCE.createBooleanType();
-		getTypes().put(type.getName(), type);
-
-		type = LayersFactory.eINSTANCE.createIntType();
-		getTypes().put(type.getName(), type);
-
-		type = LayersFactory.eINSTANCE.createStringType();
-		getTypes().put(type.getName(), type);
-
-		// addType(LayersFactory.eINSTANCE.createColor());
-		// addType(LayersFactory.eINSTANCE.createFill());
-		// addType(LayersFactory.eINSTANCE.createLineType());
-		// addType(LayersFactory.eINSTANCE.createFontType());
-		addType(LayersFactory.eINSTANCE.createCSSType());
-		addType(LayersFactory.eINSTANCE.createCSSHideType());
-	}
-
-	/**
-	 * Add the type in the registry
-	 *
-	 * @param type
-	 */
-	public void addType(Type type) {
-		String typeName = type.getName();
-
-		getTypes().put(typeName, type);
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
@@ -109,28 +78,25 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
-	@Override
-	public EMap<String, Type> getTypes() {
+	public Map<String, Type> getTypes() {
 		if (types == null) {
-			types = new EcoreEMap<String, Type>(LayersPackage.Literals.STRING_TO_TYPE_MAP, StringToTypeMapImpl.class, this, LayersPackage.TYPE_REGISTRY__TYPES);
+			types = new EcoreEMap<String,Type>(LayersPackage.Literals.STRING_TO_TYPE_MAP, StringToTypeMapImpl.class, this, LayersPackage.TYPE_REGISTRY__TYPES);
 		}
-		return types;
+		return types.map();
 	}
 
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-		case LayersPackage.TYPE_REGISTRY__TYPES:
-			return ((InternalEList<?>) getTypes()).basicRemove(otherEnd, msgs);
+			case LayersPackage.TYPE_REGISTRY__TYPES:
+				return ((InternalEList<?>)((EMap.InternalMapView<String, Type>)getTypes()).eMap()).basicRemove(otherEnd, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -138,17 +104,14 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-		case LayersPackage.TYPE_REGISTRY__TYPES:
-			if (coreType)
-				return getTypes();
-			else
-				return getTypes().map();
+			case LayersPackage.TYPE_REGISTRY__TYPES:
+				if (coreType) return ((EMap.InternalMapView<String, Type>)getTypes()).eMap();
+				else return getTypes();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -156,15 +119,14 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-		case LayersPackage.TYPE_REGISTRY__TYPES:
-			((EStructuralFeature.Setting) getTypes()).set(newValue);
-			return;
+			case LayersPackage.TYPE_REGISTRY__TYPES:
+				((EStructuralFeature.Setting)((EMap.InternalMapView<String, Type>)getTypes()).eMap()).set(newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -172,15 +134,14 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-		case LayersPackage.TYPE_REGISTRY__TYPES:
-			getTypes().clear();
-			return;
+			case LayersPackage.TYPE_REGISTRY__TYPES:
+				getTypes().clear();
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -188,16 +149,15 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-		case LayersPackage.TYPE_REGISTRY__TYPES:
-			return types != null && !types.isEmpty();
+			case LayersPackage.TYPE_REGISTRY__TYPES:
+				return types != null && !types.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
 
-} // TypeRegistryImpl
+} //TypeRegistryImpl
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/LayersAdapterFactory.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/LayersAdapterFactory.java
index 2d82207..526db6f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/LayersAdapterFactory.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/LayersAdapterFactory.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.util;
 
@@ -16,11 +17,16 @@
 
 import org.eclipse.emf.common.notify.Adapter;
 import org.eclipse.emf.common.notify.Notifier;
+
 import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
 import org.eclipse.emf.ecore.EObject;
+
 import org.eclipse.gmf.runtime.notation.NamedStyle;
 import org.eclipse.gmf.runtime.notation.Style;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.*;
 
 /**
@@ -77,7 +83,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	protected LayersSwitch<Adapter> modelSwitch = new LayersSwitch<Adapter>() {
+	protected LayersSwitch<Adapter> modelSwitch =
+		new LayersSwitch<Adapter>() {
 			@Override
 			public Adapter caseLayerNamedStyle(LayerNamedStyle object) {
 				return createLayerNamedStyleAdapter();
@@ -119,10 +126,6 @@
 				return createTypeAdapter();
 			}
 			@Override
-			public Adapter caseMetamodel(Metamodel object) {
-				return createMetamodelAdapter();
-			}
-			@Override
 			public Adapter caseTypeInstance(TypeInstance object) {
 				return createTypeInstanceAdapter();
 			}
@@ -175,10 +178,6 @@
 				return createPropertyOperatorAdapter();
 			}
 			@Override
-			public Adapter caseAbstractLayerOperator(AbstractLayerOperator object) {
-				return createAbstractLayerOperatorAdapter();
-			}
-			@Override
 			public Adapter caseLayerOperator(LayerOperator object) {
 				return createLayerOperatorAdapter();
 			}
@@ -187,10 +186,6 @@
 				return createLayersContainerAdapter();
 			}
 			@Override
-			public Adapter caseDefaultPropertyOperator(DefaultPropertyOperator object) {
-				return createDefaultPropertyOperatorAdapter();
-			}
-			@Override
 			public Adapter caseAbstractLayer(AbstractLayer object) {
 				return createAbstractLayerAdapter();
 			}
@@ -203,32 +198,8 @@
 				return createFolderAdapter();
 			}
 			@Override
-			public Adapter caseIntInstance(IntInstance object) {
-				return createIntInstanceAdapter();
-			}
-			@Override
-			public Adapter caseBooleanInstance(BooleanInstance object) {
-				return createBooleanInstanceAdapter();
-			}
-			@Override
-			public Adapter caseStringInstance(StringInstance object) {
-				return createStringInstanceAdapter();
-			}
-			@Override
-			public Adapter caseIntType(IntType object) {
-				return createIntTypeAdapter();
-			}
-			@Override
-			public Adapter caseBooleanType(BooleanType object) {
-				return createBooleanTypeAdapter();
-			}
-			@Override
-			public Adapter caseStringType(StringType object) {
-				return createStringTypeAdapter();
-			}
-			@Override
-			public Adapter caseCustomType(CustomType object) {
-				return createCustomTypeAdapter();
+			public Adapter caseMetamodel(Metamodel object) {
+				return createMetamodelAdapter();
 			}
 			@Override
 			public Adapter caseTopLayerOperator(TopLayerOperator object) {
@@ -239,10 +210,6 @@
 				return createStackedLayerOperatorAdapter();
 			}
 			@Override
-			public Adapter caseCustomLayerOperator(CustomLayerOperator object) {
-				return createCustomLayerOperatorAdapter();
-			}
-			@Override
 			public Adapter casePropertyIndex(PropertyIndex object) {
 				return createPropertyIndexAdapter();
 			}
@@ -255,78 +222,18 @@
 				return createSimpleLayerDescriptorAdapter();
 			}
 			@Override
-			public Adapter caseRegExpLayerDescriptor(RegExpLayerDescriptor object) {
-				return createRegExpLayerDescriptorAdapter();
-			}
-			@Override
 			public Adapter caseNullInstance(NullInstance object) {
 				return createNullInstanceAdapter();
 			}
 			@Override
-			public Adapter caseRegExpLayer(RegExpLayer object) {
-				return createRegExpLayerAdapter();
-			}
-			@Override
 			public Adapter caseLayer(Layer object) {
 				return createLayerAdapter();
 			}
 			@Override
-			public Adapter caseColor(Color object) {
-				return createColorAdapter();
-			}
-			@Override
-			public Adapter caseColorInstance(ColorInstance object) {
-				return createColorInstanceAdapter();
-			}
-			@Override
-			public Adapter caseFillInstance(FillInstance object) {
-				return createFillInstanceAdapter();
-			}
-			@Override
-			public Adapter caseFill(Fill object) {
-				return createFillAdapter();
-			}
-			@Override
-			public Adapter caseFillPropertySetter(FillPropertySetter object) {
-				return createFillPropertySetterAdapter();
-			}
-			@Override
-			public Adapter caseIsValidPropertySetter(IsValidPropertySetter object) {
-				return createIsValidPropertySetterAdapter();
-			}
-			@Override
 			public Adapter caseNullPropertySetter(NullPropertySetter object) {
 				return createNullPropertySetterAdapter();
 			}
 			@Override
-			public Adapter caseLineType(LineType object) {
-				return createLineTypeAdapter();
-			}
-			@Override
-			public Adapter caseLineInstance(LineInstance object) {
-				return createLineInstanceAdapter();
-			}
-			@Override
-			public Adapter caseLinePropertySetter(LinePropertySetter object) {
-				return createLinePropertySetterAdapter();
-			}
-			@Override
-			public Adapter caseFontPropertySetter(FontPropertySetter object) {
-				return createFontPropertySetterAdapter();
-			}
-			@Override
-			public Adapter caseFontInstance(FontInstance object) {
-				return createFontInstanceAdapter();
-			}
-			@Override
-			public Adapter caseFontType(FontType object) {
-				return createFontTypeAdapter();
-			}
-			@Override
-			public Adapter caseIsVisiblePropertySetter(IsVisiblePropertySetter object) {
-				return createIsVisiblePropertySetterAdapter();
-			}
-			@Override
 			public Adapter caseTopLayerOperatorDescriptor(TopLayerOperatorDescriptor object) {
 				return createTopLayerOperatorDescriptorAdapter();
 			}
@@ -335,22 +242,6 @@
 				return createStackedLayerOperatorDescriptorAdapter();
 			}
 			@Override
-			public Adapter caseCustomPropertyOperator(CustomPropertyOperator object) {
-				return createCustomPropertyOperatorAdapter();
-			}
-			@Override
-			public Adapter caseAndStackedLayerOperatorDescriptor(AndStackedLayerOperatorDescriptor object) {
-				return createAndStackedLayerOperatorDescriptorAdapter();
-			}
-			@Override
-			public Adapter caseOrStackedLayerOperatorDescriptor(OrStackedLayerOperatorDescriptor object) {
-				return createOrStackedLayerOperatorDescriptorAdapter();
-			}
-			@Override
-			public Adapter caseIsAbstractUmlSetter(IsAbstractUmlSetter object) {
-				return createIsAbstractUmlSetterAdapter();
-			}
-			@Override
 			public Adapter caseAllViewsDerivedLayer(AllViewsDerivedLayer object) {
 				return createAllViewsDerivedLayerAdapter();
 			}
@@ -435,212 +326,254 @@
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Layer <em>Layer</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression <em>Layer Expression</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Layer
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression
 	 * @generated
 	 */
-	public Adapter createLayerAdapter() {
+	public Adapter createLayerExpressionAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Color <em>Color</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ApplicationDependantElement <em>Application Dependant Element</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Color
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ApplicationDependantElement
 	 * @generated
 	 */
-	public Adapter createColorAdapter() {
+	public Adapter createApplicationDependantElementAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance <em>Color Instance</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication <em>Stack Application</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication
 	 * @generated
 	 */
-	public Adapter createColorInstanceAdapter() {
+	public Adapter createLayersStackApplicationAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance <em>Fill Instance</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FolderElement <em>Folder Element</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FolderElement
 	 * @generated
 	 */
-	public Adapter createFillInstanceAdapter() {
+	public Adapter createFolderElementAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Fill <em>Fill</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerStackDescriptorRegistry <em>Layer Stack Descriptor Registry</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Fill
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerStackDescriptorRegistry
 	 * @generated
 	 */
-	public Adapter createFillAdapter() {
+	public Adapter createLayerStackDescriptorRegistryAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillPropertySetter <em>Fill Property Setter</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry <em>Property Registry</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillPropertySetter
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry
 	 * @generated
 	 */
-	public Adapter createFillPropertySetterAdapter() {
+	public Adapter createPropertyRegistryAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsValidPropertySetter <em>Is Valid Property Setter</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property <em>Property</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsValidPropertySetter
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property
 	 * @generated
 	 */
-	public Adapter createIsValidPropertySetterAdapter() {
+	public Adapter createPropertyAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullPropertySetter <em>Null Property Setter</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type <em>Type</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullPropertySetter
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type
 	 * @generated
 	 */
-	public Adapter createNullPropertySetterAdapter() {
+	public Adapter createTypeAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineType <em>Line Type</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance <em>Type Instance</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineType
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance
 	 * @generated
 	 */
-	public Adapter createLineTypeAdapter() {
+	public Adapter createTypeInstanceAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance <em>Line Instance</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand <em>Compute Property Value Command Itf</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LineInstance
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand
 	 * @generated
 	 */
-	public Adapter createLineInstanceAdapter() {
+	public Adapter createComputePropertyValueCommandItfAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LinePropertySetter <em>Line Property Setter</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeRegistry <em>Type Registry</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LinePropertySetter
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeRegistry
 	 * @generated
 	 */
-	public Adapter createLinePropertySetterAdapter() {
+	public Adapter createTypeRegistryAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontPropertySetter <em>Font Property Setter</em>}'.
+	 * Creates a new adapter for an object of class '{@link java.util.Map.Entry <em>String To Type Map</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontPropertySetter
+	 * @see java.util.Map.Entry
 	 * @generated
 	 */
-	public Adapter createFontPropertySetterAdapter() {
+	public Adapter createStringToTypeMapAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance <em>Font Instance</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptorRegistry <em>Layer Descriptor Registry</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontInstance
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptorRegistry
 	 * @generated
 	 */
-	public Adapter createFontInstanceAdapter() {
+	public Adapter createLayerDescriptorRegistryAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontType <em>Font Type</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptor <em>Layer Descriptor</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FontType
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptor
 	 * @generated
 	 */
-	public Adapter createFontTypeAdapter() {
+	public Adapter createLayerDescriptorAdapter() {
 		return null;
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsVisiblePropertySetter <em>Is Visible Property Setter</em>}'.
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerApplicationFactory <em>Layer Application Factory</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
 	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
 	 * <!-- end-user-doc -->
 	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsVisiblePropertySetter
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerApplicationFactory
 	 * @generated
 	 */
-	public Adapter createIsVisiblePropertySetterAdapter() {
+	public Adapter createLayerApplicationFactoryAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetterRegistry <em>Property Setter Registry</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetterRegistry
+	 * @generated
+	 */
+	public Adapter createPropertySetterRegistryAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter <em>Property Setter</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter
+	 * @generated
+	 */
+	public Adapter createPropertySetterAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.util.Map.Entry <em>String To Property Setter</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.util.Map.Entry
+	 * @generated
+	 */
+	public Adapter createStringToPropertySetterAdapter() {
 		return null;
 	}
 
@@ -659,6 +592,230 @@
 	}
 
 	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor <em>Layer Operator Descriptor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor
+	 * @generated
+	 */
+	public Adapter createLayerOperatorDescriptorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator <em>Property Operator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator
+	 * @generated
+	 */
+	public Adapter createPropertyOperatorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator <em>Layer Operator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator
+	 * @generated
+	 */
+	public Adapter createLayerOperatorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersContainer <em>Container</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersContainer
+	 * @generated
+	 */
+	public Adapter createLayersContainerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayer <em>Abstract Layer</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayer
+	 * @generated
+	 */
+	public Adapter createAbstractLayerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.util.Map.Entry <em>String To Type Instance Map</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.util.Map.Entry
+	 * @generated
+	 */
+	public Adapter createStringToTypeInstanceMapAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Folder <em>Folder</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Folder
+	 * @generated
+	 */
+	public Adapter createFolderAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel <em>Metamodel</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel
+	 * @generated
+	 */
+	public Adapter createMetamodelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator <em>Top Layer Operator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator
+	 * @generated
+	 */
+	public Adapter createTopLayerOperatorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperator <em>Stacked Layer Operator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperator
+	 * @generated
+	 */
+	public Adapter createStackedLayerOperatorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyIndex <em>Property Index</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyIndex
+	 * @generated
+	 */
+	public Adapter createPropertyIndexAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link java.util.Map.Entry <em>String To Property Index Map</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see java.util.Map.Entry
+	 * @generated
+	 */
+	public Adapter createStringToPropertyIndexMapAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.SimpleLayerDescriptor <em>Simple Layer Descriptor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.SimpleLayerDescriptor
+	 * @generated
+	 */
+	public Adapter createSimpleLayerDescriptorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullInstance <em>Null Instance</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullInstance
+	 * @generated
+	 */
+	public Adapter createNullInstanceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Layer <em>Layer</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Layer
+	 * @generated
+	 */
+	public Adapter createLayerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullPropertySetter <em>Null Property Setter</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullPropertySetter
+	 * @generated
+	 */
+	public Adapter createNullPropertySetterAdapter() {
+		return null;
+	}
+
+	/**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperatorDescriptor <em>Top Layer Operator Descriptor</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
@@ -687,62 +844,6 @@
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator <em>Custom Property Operator</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator
-	 * @generated
-	 */
-	public Adapter createCustomPropertyOperatorAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AndStackedLayerOperatorDescriptor <em>And Stacked Layer Operator Descriptor</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AndStackedLayerOperatorDescriptor
-	 * @generated
-	 */
-	public Adapter createAndStackedLayerOperatorDescriptorAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.OrStackedLayerOperatorDescriptor <em>Or Stacked Layer Operator Descriptor</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.OrStackedLayerOperatorDescriptor
-	 * @generated
-	 */
-	public Adapter createOrStackedLayerOperatorDescriptorAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsAbstractUmlSetter <em>Is Abstract Uml Setter</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IsAbstractUmlSetter
-	 * @generated
-	 */
-	public Adapter createIsAbstractUmlSetterAdapter() {
-		return null;
-	}
-
-	/**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AllViewsDerivedLayer <em>All Views Derived Layer</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
@@ -841,622 +942,6 @@
 	}
 
 	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance <em>Type Instance</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance
-	 * @generated
-	 */
-	public Adapter createTypeInstanceAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand <em>Compute Property Value Command Itf</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand
-	 * @generated
-	 */
-	public Adapter createComputePropertyValueCommandItfAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link java.util.Map.Entry <em>String To Type Instance Map</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see java.util.Map.Entry
-	 * @generated
-	 */
-	public Adapter createStringToTypeInstanceMapAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptor <em>Layer Descriptor</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptor
-	 * @generated
-	 */
-	public Adapter createLayerDescriptorAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerApplicationFactory <em>Layer Application Factory</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerApplicationFactory
-	 * @generated
-	 */
-	public Adapter createLayerApplicationFactoryAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetterRegistry <em>Property Setter Registry</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetterRegistry
-	 * @generated
-	 */
-	public Adapter createPropertySetterRegistryAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter <em>Property Setter</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter
-	 * @generated
-	 */
-	public Adapter createPropertySetterAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link java.util.Map.Entry <em>String To Property Setter</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see java.util.Map.Entry
-	 * @generated
-	 */
-	public Adapter createStringToPropertySetterAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayer <em>Abstract Layer</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayer
-	 * @generated
-	 */
-	public Adapter createAbstractLayerAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property <em>Property</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property
-	 * @generated
-	 */
-	public Adapter createPropertyAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FolderElement <em>Folder Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FolderElement
-	 * @generated
-	 */
-	public Adapter createFolderElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression <em>Layer Expression</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression
-	 * @generated
-	 */
-	public Adapter createLayerExpressionAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ApplicationDependantElement <em>Application Dependant Element</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ApplicationDependantElement
-	 * @generated
-	 */
-	public Adapter createApplicationDependantElementAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type <em>Type</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type
-	 * @generated
-	 */
-	public Adapter createTypeAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel <em>Metamodel</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel
-	 * @generated
-	 */
-	public Adapter createMetamodelAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Folder <em>Folder</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Folder
-	 * @generated
-	 */
-	public Adapter createFolderAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntInstance <em>Int Instance</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntInstance
-	 * @generated
-	 */
-	public Adapter createIntInstanceAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance <em>Boolean Instance</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance
-	 * @generated
-	 */
-	public Adapter createBooleanInstanceAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance <em>String Instance</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringInstance
-	 * @generated
-	 */
-	public Adapter createStringInstanceAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntType <em>Int Type</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.IntType
-	 * @generated
-	 */
-	public Adapter createIntTypeAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanType <em>Boolean Type</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanType
-	 * @generated
-	 */
-	public Adapter createBooleanTypeAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringType <em>String Type</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StringType
-	 * @generated
-	 */
-	public Adapter createStringTypeAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomType <em>Custom Type</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomType
-	 * @generated
-	 */
-	public Adapter createCustomTypeAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication <em>Stack Application</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication
-	 * @generated
-	 */
-	public Adapter createLayersStackApplicationAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerStackDescriptorRegistry <em>Layer Stack Descriptor Registry</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerStackDescriptorRegistry
-	 * @generated
-	 */
-	public Adapter createLayerStackDescriptorRegistryAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry <em>Property Registry</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry
-	 * @generated
-	 */
-	public Adapter createPropertyRegistryAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link java.util.Map.Entry <em>String To Property Index Map</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see java.util.Map.Entry
-	 * @generated
-	 */
-	public Adapter createStringToPropertyIndexMapAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.SimpleLayerDescriptor <em>Simple Layer Descriptor</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.SimpleLayerDescriptor
-	 * @generated
-	 */
-	public Adapter createSimpleLayerDescriptorAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayerDescriptor <em>Reg Exp Layer Descriptor</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayerDescriptor
-	 * @generated
-	 */
-	public Adapter createRegExpLayerDescriptorAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullInstance <em>Null Instance</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullInstance
-	 * @generated
-	 */
-	public Adapter createNullInstanceAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer <em>Reg Exp Layer</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer
-	 * @generated
-	 */
-	public Adapter createRegExpLayerAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyIndex <em>Property Index</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyIndex
-	 * @generated
-	 */
-	public Adapter createPropertyIndexAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeRegistry <em>Type Registry</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeRegistry
-	 * @generated
-	 */
-	public Adapter createTypeRegistryAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link java.util.Map.Entry <em>String To Type Map</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see java.util.Map.Entry
-	 * @generated
-	 */
-	public Adapter createStringToTypeMapAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptorRegistry <em>Layer Descriptor Registry</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptorRegistry
-	 * @generated
-	 */
-	public Adapter createLayerDescriptorRegistryAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator <em>Layer Operator</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator
-	 * @generated
-	 */
-	public Adapter createLayerOperatorAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersContainer <em>Container</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersContainer
-	 * @generated
-	 */
-	public Adapter createLayersContainerAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator <em>Abstract Layer Operator</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator
-	 * @generated
-	 */
-	public Adapter createAbstractLayerOperatorAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor <em>Layer Operator Descriptor</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor
-	 * @generated
-	 */
-	public Adapter createLayerOperatorDescriptorAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator <em>Property Operator</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator
-	 * @generated
-	 */
-	public Adapter createPropertyOperatorAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.DefaultPropertyOperator <em>Default Property Operator</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.DefaultPropertyOperator
-	 * @generated
-	 */
-	public Adapter createDefaultPropertyOperatorAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator <em>Top Layer Operator</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator
-	 * @generated
-	 */
-	public Adapter createTopLayerOperatorAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperator <em>Stacked Layer Operator</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperator
-	 * @generated
-	 */
-	public Adapter createStackedLayerOperatorAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomLayerOperator <em>Custom Layer Operator</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomLayerOperator
-	 * @generated
-	 */
-	public Adapter createCustomLayerOperatorAdapter() {
-		return null;
-	}
-
-	/**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.gmf.runtime.notation.Style <em>Style</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
@@ -1496,4 +981,4 @@
 		return null;
 	}
 
-} // LayersAdapterFactory
+} //LayersAdapterFactory
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/LayersSwitch.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/LayersSwitch.java
index 0433bcf..40a1f1f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/LayersSwitch.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/LayersSwitch.java
@@ -1,14 +1,15 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-/**
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
  */
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.util;
 
@@ -16,16 +17,21 @@
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
+
 import org.eclipse.emf.ecore.util.Switch;
+
 import org.eclipse.gmf.runtime.notation.NamedStyle;
 import org.eclipse.gmf.runtime.notation.Style;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
+
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.*;
 
 /**
  * <!-- begin-user-doc -->
  * The <b>Switch</b> for the model's inheritance hierarchy.
- * It supports the call {@link #doSwitch(EObject) doSwitch(object)} to invoke the <code>caseXXX</code> method for each class of the model,
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
  * starting with the actual class of the object
  * and proceeding up the inheritance hierarchy
  * until a non-null result is returned,
@@ -145,13 +151,6 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case LayersPackage.METAMODEL: {
-				Metamodel metamodel = (Metamodel)theEObject;
-				T result = caseMetamodel(metamodel);
-				if (result == null) result = caseFolderElement(metamodel);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			case LayersPackage.TYPE_INSTANCE: {
 				TypeInstance typeInstance = (TypeInstance)theEObject;
 				T result = caseTypeInstance(typeInstance);
@@ -231,16 +230,6 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case LayersPackage.ABSTRACT_LAYER_OPERATOR: {
-				AbstractLayerOperator abstractLayerOperator = (AbstractLayerOperator)theEObject;
-				T result = caseAbstractLayerOperator(abstractLayerOperator);
-				if (result == null) result = caseLayerOperator(abstractLayerOperator);
-				if (result == null) result = caseLayerExpression(abstractLayerOperator);
-				if (result == null) result = caseLayersContainer(abstractLayerOperator);
-				if (result == null) result = caseApplicationDependantElement(abstractLayerOperator);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			case LayersPackage.LAYER_OPERATOR: {
 				LayerOperator layerOperator = (LayerOperator)theEObject;
 				T result = caseLayerOperator(layerOperator);
@@ -256,13 +245,6 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case LayersPackage.DEFAULT_PROPERTY_OPERATOR: {
-				DefaultPropertyOperator defaultPropertyOperator = (DefaultPropertyOperator)theEObject;
-				T result = caseDefaultPropertyOperator(defaultPropertyOperator);
-				if (result == null) result = casePropertyOperator(defaultPropertyOperator);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			case LayersPackage.ABSTRACT_LAYER: {
 				AbstractLayer abstractLayer = (AbstractLayer)theEObject;
 				T result = caseAbstractLayer(abstractLayer);
@@ -284,66 +266,16 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case LayersPackage.INT_INSTANCE: {
-				IntInstance intInstance = (IntInstance)theEObject;
-				T result = caseIntInstance(intInstance);
-				if (result == null) result = caseTypeInstance(intInstance);
-				if (result == null) result = caseComputePropertyValueCommandItf(intInstance);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.BOOLEAN_INSTANCE: {
-				BooleanInstance booleanInstance = (BooleanInstance)theEObject;
-				T result = caseBooleanInstance(booleanInstance);
-				if (result == null) result = caseTypeInstance(booleanInstance);
-				if (result == null) result = caseComputePropertyValueCommandItf(booleanInstance);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.STRING_INSTANCE: {
-				StringInstance stringInstance = (StringInstance)theEObject;
-				T result = caseStringInstance(stringInstance);
-				if (result == null) result = caseTypeInstance(stringInstance);
-				if (result == null) result = caseComputePropertyValueCommandItf(stringInstance);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.INT_TYPE: {
-				IntType intType = (IntType)theEObject;
-				T result = caseIntType(intType);
-				if (result == null) result = caseType(intType);
-				if (result == null) result = caseFolderElement(intType);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.BOOLEAN_TYPE: {
-				BooleanType booleanType = (BooleanType)theEObject;
-				T result = caseBooleanType(booleanType);
-				if (result == null) result = caseType(booleanType);
-				if (result == null) result = caseFolderElement(booleanType);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.STRING_TYPE: {
-				StringType stringType = (StringType)theEObject;
-				T result = caseStringType(stringType);
-				if (result == null) result = caseType(stringType);
-				if (result == null) result = caseFolderElement(stringType);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.CUSTOM_TYPE: {
-				CustomType customType = (CustomType)theEObject;
-				T result = caseCustomType(customType);
-				if (result == null) result = caseType(customType);
-				if (result == null) result = caseFolderElement(customType);
+			case LayersPackage.METAMODEL: {
+				Metamodel metamodel = (Metamodel)theEObject;
+				T result = caseMetamodel(metamodel);
+				if (result == null) result = caseFolderElement(metamodel);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
 			case LayersPackage.TOP_LAYER_OPERATOR: {
 				TopLayerOperator topLayerOperator = (TopLayerOperator)theEObject;
 				T result = caseTopLayerOperator(topLayerOperator);
-				if (result == null) result = caseAbstractLayerOperator(topLayerOperator);
 				if (result == null) result = caseLayerOperator(topLayerOperator);
 				if (result == null) result = caseLayerExpression(topLayerOperator);
 				if (result == null) result = caseLayersContainer(topLayerOperator);
@@ -354,7 +286,6 @@
 			case LayersPackage.STACKED_LAYER_OPERATOR: {
 				StackedLayerOperator stackedLayerOperator = (StackedLayerOperator)theEObject;
 				T result = caseStackedLayerOperator(stackedLayerOperator);
-				if (result == null) result = caseAbstractLayerOperator(stackedLayerOperator);
 				if (result == null) result = caseLayerOperator(stackedLayerOperator);
 				if (result == null) result = caseLayerExpression(stackedLayerOperator);
 				if (result == null) result = caseLayersContainer(stackedLayerOperator);
@@ -362,16 +293,6 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case LayersPackage.CUSTOM_LAYER_OPERATOR: {
-				CustomLayerOperator customLayerOperator = (CustomLayerOperator)theEObject;
-				T result = caseCustomLayerOperator(customLayerOperator);
-				if (result == null) result = caseLayerOperator(customLayerOperator);
-				if (result == null) result = caseLayerExpression(customLayerOperator);
-				if (result == null) result = caseLayersContainer(customLayerOperator);
-				if (result == null) result = caseApplicationDependantElement(customLayerOperator);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			case LayersPackage.PROPERTY_INDEX: {
 				PropertyIndex propertyIndex = (PropertyIndex)theEObject;
 				T result = casePropertyIndex(propertyIndex);
@@ -391,13 +312,6 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case LayersPackage.REG_EXP_LAYER_DESCRIPTOR: {
-				RegExpLayerDescriptor regExpLayerDescriptor = (RegExpLayerDescriptor)theEObject;
-				T result = caseRegExpLayerDescriptor(regExpLayerDescriptor);
-				if (result == null) result = caseLayerDescriptor(regExpLayerDescriptor);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			case LayersPackage.NULL_INSTANCE: {
 				NullInstance nullInstance = (NullInstance)theEObject;
 				T result = caseNullInstance(nullInstance);
@@ -406,15 +320,6 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case LayersPackage.REG_EXP_LAYER: {
-				RegExpLayer regExpLayer = (RegExpLayer)theEObject;
-				T result = caseRegExpLayer(regExpLayer);
-				if (result == null) result = caseAbstractLayer(regExpLayer);
-				if (result == null) result = caseLayerExpression(regExpLayer);
-				if (result == null) result = caseApplicationDependantElement(regExpLayer);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			case LayersPackage.LAYER: {
 				Layer layer = (Layer)theEObject;
 				T result = caseLayer(layer);
@@ -424,52 +329,6 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case LayersPackage.COLOR: {
-				Color color = (Color)theEObject;
-				T result = caseColor(color);
-				if (result == null) result = caseType(color);
-				if (result == null) result = caseFolderElement(color);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.COLOR_INSTANCE: {
-				ColorInstance colorInstance = (ColorInstance)theEObject;
-				T result = caseColorInstance(colorInstance);
-				if (result == null) result = caseTypeInstance(colorInstance);
-				if (result == null) result = caseComputePropertyValueCommandItf(colorInstance);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.FILL_INSTANCE: {
-				FillInstance fillInstance = (FillInstance)theEObject;
-				T result = caseFillInstance(fillInstance);
-				if (result == null) result = caseTypeInstance(fillInstance);
-				if (result == null) result = caseComputePropertyValueCommandItf(fillInstance);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.FILL: {
-				Fill fill = (Fill)theEObject;
-				T result = caseFill(fill);
-				if (result == null) result = caseType(fill);
-				if (result == null) result = caseFolderElement(fill);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.FILL_PROPERTY_SETTER: {
-				FillPropertySetter fillPropertySetter = (FillPropertySetter)theEObject;
-				T result = caseFillPropertySetter(fillPropertySetter);
-				if (result == null) result = casePropertySetter(fillPropertySetter);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.IS_VALID_PROPERTY_SETTER: {
-				IsValidPropertySetter isValidPropertySetter = (IsValidPropertySetter)theEObject;
-				T result = caseIsValidPropertySetter(isValidPropertySetter);
-				if (result == null) result = casePropertySetter(isValidPropertySetter);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			case LayersPackage.NULL_PROPERTY_SETTER: {
 				NullPropertySetter nullPropertySetter = (NullPropertySetter)theEObject;
 				T result = caseNullPropertySetter(nullPropertySetter);
@@ -477,59 +336,6 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case LayersPackage.LINE_TYPE: {
-				LineType lineType = (LineType)theEObject;
-				T result = caseLineType(lineType);
-				if (result == null) result = caseType(lineType);
-				if (result == null) result = caseFolderElement(lineType);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.LINE_INSTANCE: {
-				LineInstance lineInstance = (LineInstance)theEObject;
-				T result = caseLineInstance(lineInstance);
-				if (result == null) result = caseTypeInstance(lineInstance);
-				if (result == null) result = caseComputePropertyValueCommandItf(lineInstance);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.LINE_PROPERTY_SETTER: {
-				LinePropertySetter linePropertySetter = (LinePropertySetter)theEObject;
-				T result = caseLinePropertySetter(linePropertySetter);
-				if (result == null) result = casePropertySetter(linePropertySetter);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.FONT_PROPERTY_SETTER: {
-				FontPropertySetter fontPropertySetter = (FontPropertySetter)theEObject;
-				T result = caseFontPropertySetter(fontPropertySetter);
-				if (result == null) result = casePropertySetter(fontPropertySetter);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.FONT_INSTANCE: {
-				FontInstance fontInstance = (FontInstance)theEObject;
-				T result = caseFontInstance(fontInstance);
-				if (result == null) result = caseTypeInstance(fontInstance);
-				if (result == null) result = caseComputePropertyValueCommandItf(fontInstance);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.FONT_TYPE: {
-				FontType fontType = (FontType)theEObject;
-				T result = caseFontType(fontType);
-				if (result == null) result = caseType(fontType);
-				if (result == null) result = caseFolderElement(fontType);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.IS_VISIBLE_PROPERTY_SETTER: {
-				IsVisiblePropertySetter isVisiblePropertySetter = (IsVisiblePropertySetter)theEObject;
-				T result = caseIsVisiblePropertySetter(isVisiblePropertySetter);
-				if (result == null) result = casePropertySetter(isVisiblePropertySetter);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			case LayersPackage.TOP_LAYER_OPERATOR_DESCRIPTOR: {
 				TopLayerOperatorDescriptor topLayerOperatorDescriptor = (TopLayerOperatorDescriptor)theEObject;
 				T result = caseTopLayerOperatorDescriptor(topLayerOperatorDescriptor);
@@ -544,36 +350,6 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case LayersPackage.CUSTOM_PROPERTY_OPERATOR: {
-				CustomPropertyOperator customPropertyOperator = (CustomPropertyOperator)theEObject;
-				T result = caseCustomPropertyOperator(customPropertyOperator);
-				if (result == null) result = casePropertyOperator(customPropertyOperator);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.AND_STACKED_LAYER_OPERATOR_DESCRIPTOR: {
-				AndStackedLayerOperatorDescriptor andStackedLayerOperatorDescriptor = (AndStackedLayerOperatorDescriptor)theEObject;
-				T result = caseAndStackedLayerOperatorDescriptor(andStackedLayerOperatorDescriptor);
-				if (result == null) result = caseStackedLayerOperatorDescriptor(andStackedLayerOperatorDescriptor);
-				if (result == null) result = caseLayerOperatorDescriptor(andStackedLayerOperatorDescriptor);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.OR_STACKED_LAYER_OPERATOR_DESCRIPTOR: {
-				OrStackedLayerOperatorDescriptor orStackedLayerOperatorDescriptor = (OrStackedLayerOperatorDescriptor)theEObject;
-				T result = caseOrStackedLayerOperatorDescriptor(orStackedLayerOperatorDescriptor);
-				if (result == null) result = caseStackedLayerOperatorDescriptor(orStackedLayerOperatorDescriptor);
-				if (result == null) result = caseLayerOperatorDescriptor(orStackedLayerOperatorDescriptor);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case LayersPackage.IS_ABSTRACT_UML_SETTER: {
-				IsAbstractUmlSetter isAbstractUmlSetter = (IsAbstractUmlSetter)theEObject;
-				T result = caseIsAbstractUmlSetter(isAbstractUmlSetter);
-				if (result == null) result = casePropertySetter(isAbstractUmlSetter);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			case LayersPackage.ALL_VIEWS_DERIVED_LAYER: {
 				AllViewsDerivedLayer allViewsDerivedLayer = (AllViewsDerivedLayer)theEObject;
 				T result = caseAllViewsDerivedLayer(allViewsDerivedLayer);
@@ -664,227 +440,272 @@
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Layer</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Layer Expression</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Layer</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Layer Expression</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseLayer(Layer object) {
+	public T caseLayerExpression(LayerExpression object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Color</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Application Dependant Element</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Color</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Application Dependant Element</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseColor(Color object) {
+	public T caseApplicationDependantElement(ApplicationDependantElement object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Color Instance</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Stack Application</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Color Instance</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Stack Application</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseColorInstance(ColorInstance object) {
+	public T caseLayersStackApplication(LayersStackApplication object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fill Instance</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Folder Element</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fill Instance</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Folder Element</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseFillInstance(FillInstance object) {
+	public T caseFolderElement(FolderElement object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fill</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Layer Stack Descriptor Registry</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fill</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Layer Stack Descriptor Registry</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseFill(Fill object) {
+	public T caseLayerStackDescriptorRegistry(LayerStackDescriptorRegistry object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Fill Property Setter</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Property Registry</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Fill Property Setter</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Property Registry</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseFillPropertySetter(FillPropertySetter object) {
+	public T casePropertyRegistry(PropertyRegistry object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Is Valid Property Setter</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Property</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Is Valid Property Setter</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Property</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseIsValidPropertySetter(IsValidPropertySetter object) {
+	public T caseProperty(Property object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Null Property Setter</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Type</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Null Property Setter</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Type</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseNullPropertySetter(NullPropertySetter object) {
+	public T caseType(Type object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Line Type</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Type Instance</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Line Type</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Type Instance</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseLineType(LineType object) {
+	public T caseTypeInstance(TypeInstance object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Line Instance</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Compute Property Value Command Itf</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Line Instance</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Compute Property Value Command Itf</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseLineInstance(LineInstance object) {
+	public T caseComputePropertyValueCommandItf(ComputePropertyValueCommand object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Line Property Setter</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Type Registry</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Line Property Setter</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Type Registry</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseLinePropertySetter(LinePropertySetter object) {
+	public T caseTypeRegistry(TypeRegistry object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Font Property Setter</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>String To Type Map</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Font Property Setter</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>String To Type Map</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseFontPropertySetter(FontPropertySetter object) {
+	public T caseStringToTypeMap(Map.Entry<String, Type> object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Font Instance</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Layer Descriptor Registry</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Font Instance</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Layer Descriptor Registry</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseFontInstance(FontInstance object) {
+	public T caseLayerDescriptorRegistry(LayerDescriptorRegistry object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Font Type</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Layer Descriptor</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Font Type</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Layer Descriptor</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseFontType(FontType object) {
+	public T caseLayerDescriptor(LayerDescriptor object) {
 		return null;
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Is Visible Property Setter</em>'.
+	 * Returns the result of interpreting the object as an instance of '<em>Layer Application Factory</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
 	 * returning a non-null result will terminate the switch.
 	 * <!-- end-user-doc -->
 	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Is Visible Property Setter</em>'.
+	 * @return the result of interpreting the object as an instance of '<em>Layer Application Factory</em>'.
 	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
 	 * @generated
 	 */
-	public T caseIsVisiblePropertySetter(IsVisiblePropertySetter object) {
+	public T caseLayerApplicationFactory(LayerApplicationFactory object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Property Setter Registry</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Property Setter Registry</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePropertySetterRegistry(PropertySetterRegistry object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Property Setter</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Property Setter</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePropertySetter(PropertySetter object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>String To Property Setter</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>String To Property Setter</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseStringToPropertySetter(Map.Entry<String, PropertySetter> object) {
 		return null;
 	}
 
@@ -904,6 +725,246 @@
 	}
 
 	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Layer Operator Descriptor</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Layer Operator Descriptor</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseLayerOperatorDescriptor(LayerOperatorDescriptor object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Property Operator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Property Operator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePropertyOperator(PropertyOperator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Layer Operator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Layer Operator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseLayerOperator(LayerOperator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Container</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Container</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseLayersContainer(LayersContainer object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Abstract Layer</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Abstract Layer</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseAbstractLayer(AbstractLayer object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>String To Type Instance Map</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>String To Type Instance Map</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseStringToTypeInstanceMap(Map.Entry<String, TypeInstance> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Folder</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Folder</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseFolder(Folder object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Metamodel</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Metamodel</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseMetamodel(Metamodel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Top Layer Operator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Top Layer Operator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTopLayerOperator(TopLayerOperator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Stacked Layer Operator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Stacked Layer Operator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseStackedLayerOperator(StackedLayerOperator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Property Index</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Property Index</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePropertyIndex(PropertyIndex object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>String To Property Index Map</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>String To Property Index Map</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseStringToPropertyIndexMap(Map.Entry<String, PropertyIndex> object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Simple Layer Descriptor</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Simple Layer Descriptor</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseSimpleLayerDescriptor(SimpleLayerDescriptor object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Null Instance</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Null Instance</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseNullInstance(NullInstance object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Layer</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Layer</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseLayer(Layer object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Null Property Setter</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Null Property Setter</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseNullPropertySetter(NullPropertySetter object) {
+		return null;
+	}
+
+	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Top Layer Operator Descriptor</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
@@ -934,66 +995,6 @@
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Custom Property Operator</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Custom Property Operator</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseCustomPropertyOperator(CustomPropertyOperator object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>And Stacked Layer Operator Descriptor</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>And Stacked Layer Operator Descriptor</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseAndStackedLayerOperatorDescriptor(AndStackedLayerOperatorDescriptor object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Or Stacked Layer Operator Descriptor</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Or Stacked Layer Operator Descriptor</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseOrStackedLayerOperatorDescriptor(OrStackedLayerOperatorDescriptor object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Is Abstract Uml Setter</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Is Abstract Uml Setter</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseIsAbstractUmlSetter(IsAbstractUmlSetter object) {
-		return null;
-	}
-
-	/**
 	 * Returns the result of interpreting the object as an instance of '<em>All Views Derived Layer</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
@@ -1099,666 +1100,6 @@
 	}
 
 	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Type Instance</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Type Instance</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseTypeInstance(TypeInstance object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Compute Property Value Command Itf</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Compute Property Value Command Itf</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseComputePropertyValueCommandItf(ComputePropertyValueCommand object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>String To Type Instance Map</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>String To Type Instance Map</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseStringToTypeInstanceMap(Map.Entry<String, TypeInstance> object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Layer Descriptor</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Layer Descriptor</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseLayerDescriptor(LayerDescriptor object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Layer Application Factory</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Layer Application Factory</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseLayerApplicationFactory(LayerApplicationFactory object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Property Setter Registry</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Property Setter Registry</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T casePropertySetterRegistry(PropertySetterRegistry object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Property Setter</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Property Setter</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T casePropertySetter(PropertySetter object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>String To Property Setter</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>String To Property Setter</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseStringToPropertySetter(Map.Entry<String, PropertySetter> object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Abstract Layer</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Abstract Layer</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseAbstractLayer(AbstractLayer object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Property</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Property</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseProperty(Property object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Folder Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Folder Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseFolderElement(FolderElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Layer Expression</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Layer Expression</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseLayerExpression(LayerExpression object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Application Dependant Element</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Application Dependant Element</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseApplicationDependantElement(ApplicationDependantElement object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Type</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Type</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseType(Type object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Metamodel</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Metamodel</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseMetamodel(Metamodel object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Folder</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Folder</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseFolder(Folder object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Int Instance</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Int Instance</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseIntInstance(IntInstance object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Boolean Instance</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Boolean Instance</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseBooleanInstance(BooleanInstance object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>String Instance</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>String Instance</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseStringInstance(StringInstance object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Int Type</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Int Type</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseIntType(IntType object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Boolean Type</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Boolean Type</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseBooleanType(BooleanType object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>String Type</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>String Type</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseStringType(StringType object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Custom Type</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Custom Type</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseCustomType(CustomType object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Stack Application</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Stack Application</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseLayersStackApplication(LayersStackApplication object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Layer Stack Descriptor Registry</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Layer Stack Descriptor Registry</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseLayerStackDescriptorRegistry(LayerStackDescriptorRegistry object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Property Registry</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Property Registry</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T casePropertyRegistry(PropertyRegistry object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>String To Property Index Map</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>String To Property Index Map</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseStringToPropertyIndexMap(Map.Entry<String, PropertyIndex> object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Simple Layer Descriptor</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Simple Layer Descriptor</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseSimpleLayerDescriptor(SimpleLayerDescriptor object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Reg Exp Layer Descriptor</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Reg Exp Layer Descriptor</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseRegExpLayerDescriptor(RegExpLayerDescriptor object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Null Instance</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Null Instance</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseNullInstance(NullInstance object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Reg Exp Layer</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Reg Exp Layer</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseRegExpLayer(RegExpLayer object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Property Index</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Property Index</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T casePropertyIndex(PropertyIndex object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Type Registry</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Type Registry</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseTypeRegistry(TypeRegistry object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>String To Type Map</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>String To Type Map</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseStringToTypeMap(Map.Entry<String, Type> object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Layer Descriptor Registry</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Layer Descriptor Registry</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseLayerDescriptorRegistry(LayerDescriptorRegistry object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Layer Operator</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Layer Operator</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseLayerOperator(LayerOperator object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Container</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Container</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseLayersContainer(LayersContainer object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Abstract Layer Operator</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Abstract Layer Operator</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseAbstractLayerOperator(AbstractLayerOperator object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Layer Operator Descriptor</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Layer Operator Descriptor</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseLayerOperatorDescriptor(LayerOperatorDescriptor object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Property Operator</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Property Operator</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T casePropertyOperator(PropertyOperator object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Default Property Operator</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Default Property Operator</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseDefaultPropertyOperator(DefaultPropertyOperator object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Top Layer Operator</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Top Layer Operator</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseTopLayerOperator(TopLayerOperator object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Stacked Layer Operator</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Stacked Layer Operator</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseStackedLayerOperator(StackedLayerOperator object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Custom Layer Operator</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Custom Layer Operator</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseCustomLayerOperator(CustomLayerOperator object) {
-		return null;
-	}
-
-	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Style</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
@@ -1804,4 +1145,4 @@
 		return null;
 	}
 
-} // LayersSwitch
+} //LayersSwitch
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/custom/CustomLayerOperatorConfigImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/custom/CustomLayerOperatorConfigImpl.java
new file mode 100755
index 0000000..a404f3c
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/custom/CustomLayerOperatorConfigImpl.java
@@ -0,0 +1,54 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl.custom;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl.LayerOperatorConfigImpl;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.InstanciationException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomLayerOperatorConfigImpl extends LayerOperatorConfigImpl {
+
+	/**
+	 * Create the requested descriptor
+	 *
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl.InstanciableElementImpl#createLayersOperatorDescriptor()
+	 *
+	 * @return
+	 * @throws NotFoundException
+	 */
+	@Override
+	public LayerOperatorDescriptor createLayersOperatorDescriptor() throws InstanciationException {
+
+		// Create instance of layer
+		EClassifier classifier = LayersPackage.eINSTANCE.getEClassifier(getClassname());
+		if (classifier == null) {
+			throw new InstanciationException("Can't create LayerOperatorDescriptor for name '" + getClassname() + "'");
+		}
+		LayerOperatorDescriptor res = (LayerOperatorDescriptor) LayersFactory.eINSTANCE.create((EClass) classifier);
+
+		// Set values
+		res.setName(getName());
+
+		return res;
+	}
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/custom/CustomLayersConfigFactory.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/custom/CustomLayersConfigFactory.java
new file mode 100755
index 0000000..4eef7b9
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/custom/CustomLayersConfigFactory.java
@@ -0,0 +1,57 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl.custom;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorConfig;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.OperatorBinding;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.OperatorConfig;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl.LayersConfigFactoryImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomLayersConfigFactory extends LayersConfigFactoryImpl {
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl.LayersConfigFactoryImpl#createLayerOperatorConfig()
+	 *
+	 * @return
+	 */
+	@Override
+	public LayerOperatorConfig createLayerOperatorConfig() {
+		return new CustomLayerOperatorConfigImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl.LayersConfigFactoryImpl#createOperatorBinding()
+	 *
+	 * @return
+	 */
+	@Override
+	public OperatorBinding createOperatorBinding() {
+		return new CustomOperatorBindingImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl.LayersConfigFactoryImpl#createOperatorConfig()
+	 *
+	 * @return
+	 */
+	@Override
+	public OperatorConfig createOperatorConfig() {
+		return new CustomOperatorConfigImpl();
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/custom/CustomOperatorBindingImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/custom/CustomOperatorBindingImpl.java
new file mode 100755
index 0000000..cbb1d39
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/custom/CustomOperatorBindingImpl.java
@@ -0,0 +1,36 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl.custom;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.LayerOperatorConfig;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl.OperatorBindingImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomOperatorBindingImpl extends OperatorBindingImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public LayerOperatorConfig basicGetLayerOperatorConfig() {
+		//
+		return getOwner().getLayerOperatorConfig();
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/custom/CustomOperatorConfigImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/custom/CustomOperatorConfigImpl.java
new file mode 100755
index 0000000..e3d9e66
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/configmodel/layersconfig/impl/custom/CustomOperatorConfigImpl.java
@@ -0,0 +1,166 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl.custom;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.ClassnameKind;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.impl.OperatorConfigImpl;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.InstanciationException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceException;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomOperatorConfigImpl extends OperatorConfigImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public PropertyOperator createOperatorDescriptor() throws InstanciationException {
+
+		switch (getClassnameKind()) {
+		case UNDEFINED:
+			// Try to find the exact type of classname
+			PropertyOperator res;
+
+			// Try as EMF instance
+			try {
+				res = createEmfInstance();
+				setClassnameKind(ClassnameKind.EMF_CLASSNAME);
+				return res;
+			} catch (InstanciationException e) {
+				// Not an EMF name. Try other solutions.
+			} catch (ClassCastException e) {
+				// specified class name is of wrong type
+				setClassnameKind(ClassnameKind.NOT_FOUND);
+				throw new InstanciationException("Can't create PropertyOperator for name '" + getClassname() + "'. Bad EMF type.");
+			}
+
+			// Try as java pojo
+			try {
+				res = createPojoInstance();
+				setClassnameKind(ClassnameKind.POJO_CLASSNAME);
+				return res;
+			} catch (InstanciationException e) {
+				setClassnameKind(ClassnameKind.NOT_FOUND);
+				throw e;
+			}
+
+
+		case EMF_CLASSNAME:
+			return createEmfInstance();
+
+		case POJO_CLASSNAME:
+			// Try to load a java class
+			return createPojoInstance();
+
+
+		case NOT_FOUND:
+			// We already are in error. Do nothing
+
+			break;
+
+		default:
+			break;
+		}
+
+		throw new InstanciationException("Can't create PropertyOperator for name '" + getClassname() + "'.");
+
+	}
+
+	/**
+	 * @return
+	 * @throws InstanciationException
+	 * 
+	 */
+	@Override
+	protected PropertyOperator createPojoInstance() throws InstanciationException {
+		try {
+			Class<?> opClass = loadClass();
+			PropertyOperator operator = LayersFactory.eINSTANCE.createPropertyOperator();
+			operator.setOperatorInstance((PropertyOperator) opClass.newInstance());
+			operator.setName(getName());
+
+			return operator;
+		} catch (Exception e) {
+			setClassnameKind(ClassnameKind.NOT_FOUND);
+			throw new InstanciationException("Can't create PropertyOperator for name '" + getClassname() + "'. " + e.getMessage());
+		}
+	}
+
+	/**
+	 * Create an EMF instance from the classname.
+	 *
+	 * @return
+	 * @throws InstanciationException
+	 * 
+	 */
+	@Override
+	protected PropertyOperator createEmfInstance() throws InstanciationException {
+		// Try to load an EMF type
+		EClassifier classifier = LayersPackage.eINSTANCE.getEClassifier(getClassname());
+		if (classifier == null) {
+			throw new InstanciationException("Can't create PropertyOperator for name '" + getClassname() + "'. Bad classname.");
+		}
+		PropertyOperator res;
+		try {
+			res = (PropertyOperator) LayersFactory.eINSTANCE.create((EClass) classifier);
+		} catch (ClassCastException e) {
+			// specified class name is of
+			throw new InstanciationException("Can't create PropertyOperator for name '" + getClassname() + "'. Bad type.");
+		}
+		return res;
+	}
+
+	/**
+	 * Load the Class object. Try from current ClassLoader, then try using the
+	 * plugin referenced in the serviceDescriptor.PluginId
+	 *
+	 * @return
+	 * @throws ServiceException
+	 * 
+	 */
+	private Class<?> loadClass() throws LayersException {
+		String classname = getClassname();
+		Class<?> classDesc;
+		try {
+			classDesc = Class.forName(classname);
+		} catch (ClassNotFoundException e1) {
+			// Try using bundle
+			try {
+				String bundleID = getBundleID();
+				Bundle bundle = Platform.getBundle(bundleID);
+				classDesc = bundle.loadClass(classname);
+			} catch (ClassNotFoundException e2) {
+				throw new LayersException("Can't find class for the name '" + classname + "'.", e2);
+			} catch (NullPointerException e) {
+				throw new LayersException("Can't find bundle '" + getBundleID()
+						+ "' for class for the name '" + classname + "'.", e);
+			}
+		}
+
+		return classDesc;
+	}
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/exprmatcher/ExpressionMatcher.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/exprmatcher/ExpressionMatcher.java
deleted file mode 100755
index aa8ef88..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/exprmatcher/ExpressionMatcher.java
+++ /dev/null
@@ -1,416 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2013 Cedric Dumoulin.
- *
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *  Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *
- *****************************************************************************/
-
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.exprmatcher;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.query.conditions.eobjects.EObjectCondition;
-import org.eclipse.emf.query.ocl.conditions.BooleanOCLCondition;
-import org.eclipse.emf.query.statements.FROM;
-import org.eclipse.emf.query.statements.IQueryResult;
-import org.eclipse.emf.query.statements.SELECT;
-import org.eclipse.emf.query.statements.WHERE;
-import org.eclipse.gmf.runtime.notation.NotationPackage;
-import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.ocl.ParserException;
-import org.eclipse.ocl.ecore.OCL;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.util.Collections3;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.util.ObservableListView;
-
-/**
- * This class evaluate its associated expression against the associated models.
- * It provide a list of elements matching the expression in the model.
- * The list of matching elements is synchronized by the matcher. The list can be provided at construction
- * time. The ExpressinMatcher takes care to minimize the number of write to the underlying list of matching elements.
- * Usually, there is two writes (see {@link Collections3#resetListTo(Collection, Collection)}. <br>
- * It is possible to be inform of changes in the underlying list by wrapping it in an {@link ObservableListView}.
- *
- *
- * @author cedric dumoulin
- *
- */
-public class ExpressionMatcher implements IValueChangedEventListener {
-
-	protected String expression = "";
-
-	/**
-	 * List of element matching the expression.
-	 * This class maintains the list.
-	 */
-	protected List<View> matchingElements;
-
-	/**
-	 * List of element used as starting point for search.
-	 */
-	protected List<EObject> searchRoots;
-
-	/**
-	 * OCL Condition computed from the expr.
-	 */
-	protected EObjectCondition condition;
-	protected OCL ocl;
-
-
-	/**
-	 *
-	 * Constructor.
-	 *
-	 */
-	public ExpressionMatcher() {
-		this.expression = "";
-		this.searchRoots = Collections.emptyList();
-		// init matchingElements
-		matchingElements = new ArrayList<View>();
-	}
-
-	/**
-	 *
-	 * Constructor.
-	 *
-	 * @param searchRoots
-	 * @throws LayersException
-	 */
-	public ExpressionMatcher(List<View> matchingElementsList) {
-		this.expression = "";
-		this.searchRoots = Collections.emptyList();
-		// init matchingElements
-		matchingElements = matchingElementsList;
-	}
-
-	/**
-	 *
-	 * Constructor.
-	 *
-	 * @param searchRoots
-	 * @throws LayersException
-	 */
-	// public ExpressionMatcher(List<EObject> searchRoots) {
-	// this.expression = "";
-	// setSearchRoots(searchRoots);
-	// // init matchingElements
-	// matchingElements = new ObservableListView<View>(new ArrayList<View>());
-	// }
-
-	/**
-	 *
-	 * Constructor.
-	 *
-	 * @param searchRoot
-	 * @throws LayersException
-	 */
-	public ExpressionMatcher(EObject searchRoot) {
-		this.expression = "";
-		setSearchRoots(Collections.singletonList(searchRoot));
-		// init matchingElements
-		matchingElements = new ArrayList<View>();
-	}
-
-	/**
-	 * Constructor.
-	 *
-	 * @param expression
-	 * @param searchRoots
-	 * @throws LayersException
-	 *             If the Condition can't be computed from the expression.
-	 */
-	public ExpressionMatcher(String expression, List<EObject> searchRoots) throws LayersException {
-		this.searchRoots = searchRoots;
-		matchingElements = new ArrayList<View>();
-
-		// compute expr
-		setExpression(expression);
-	}
-
-	/**
-	 * Constructor.
-	 *
-	 * @param expression
-	 * @param searchRoots
-	 * @throws LayersException
-	 *             If the Condition can't be computed from the expression.
-	 */
-	public ExpressionMatcher(String expression, List<View> matchingElementsList, List<EObject> searchRoots) throws LayersException {
-		this.searchRoots = searchRoots;
-		matchingElements = matchingElementsList;
-
-		// compute expr
-		setExpression(expression);
-	}
-
-	/**
-	 * Constructor.
-	 *
-	 * @param expression
-	 * @param searchRoots
-	 * @throws LayersException
-	 *             If the Condition can't be computed from the expression.
-	 */
-	public ExpressionMatcher(String expression, EObject searchRoot) throws LayersException {
-		this(expression, Collections.singletonList(searchRoot));
-	}
-
-	/**
-	 * Constructor.
-	 *
-	 * @param expression
-	 * @param searchRoots
-	 * @throws LayersException
-	 *             If the Condition can't be computed from the expression.
-	 */
-	public ExpressionMatcher(String expression, List<View> matchingElementsList, EObject searchRoot) throws LayersException {
-		this(expression, matchingElementsList, Collections.singletonList(searchRoot));
-	}
-
-	/**
-	 * Compute the condition from the expr.
-	 */
-	private void computeCondition() throws LayersException {
-		// silently fails if the expr is not set.
-		if (getExpression() == null || getExpression().length() == 0) {
-			return;
-		}
-
-		if (ocl == null) {
-			ocl = OCL.newInstance();
-		}
-		// Create the condition
-		try {
-			// If the 3rd args is null, this is a context free condition.
-
-			condition = new BooleanOCLCondition<EClassifier, EClass, EObject>(
-					ocl.getEnvironment(),
-					// "self.oclIsKindOf(Shape)",
-					// "self.oclIsKindOf(Shape) and self.oclAsType(Shape).visible = true",
-					// "self.oclAsType(Shape).visible = true",
-					getExpression(),
-					NotationPackage.Literals.VIEW
-			// null
-			);
-		} catch (ParserException e) {
-			// TODO Auto-generated catch block
-			condition = null;
-			throw new LayersException("Can't parse expression : " + e.getMessage(), e);
-		}
-
-	}
-
-	/**
-	 * Recompute the matching elements.
-	 * This lead to firing Events (added and removed)
-	 */
-	public void refreshMatchingElements() {
-
-
-		if (condition == null) {
-			// If the condition is not set, the list should be empty
-			if (!getMatchingElements().isEmpty()) {
-				resetMatchingElements(Collections.EMPTY_LIST);
-			}
-			return;
-		}
-
-		// Create the OCL statement
-		SELECT statement = new SELECT(SELECT.UNBOUNDED, false,
-				new FROM(getSearchRoots()), new WHERE(condition),
-				new NullProgressMonitor());
-
-		// Execute the OCL statement
-		IQueryResult results = statement.execute();
-
-		/**
-		 * Reset the matching elements with the new result.
-		 */
-		resetMatchingElements(results);
-	}
-
-	/**
-	 * Reset the {@link #matchingElements} and let it contain the specified collection.
-	 * This fire added and removed events.
-	 *
-	 * @param results
-	 */
-	@SuppressWarnings("unchecked")
-	private void resetMatchingElements(Collection<?> newElements) {
-
-		Collections3.resetListTo(matchingElements, (Collection<View>) newElements);
-		// matchingElements.resetTo((Collection<View>)newElements);
-
-		// // Compute views to add
-		// // This are views in the newElements, but not in the actual list of matchingElement
-		// // viewsToAdd = results - getViews()
-		// List<View> viewsToAdd = new ArrayList<View>();
-		// for( Object o : newElements ) {
-		// View v = (View)o;
-		// if( !getMatchingElements().contains(v)) {
-		// viewsToAdd.add(v);
-		// }
-		// }
-		//
-		// // Compute views to remove
-		// // Their is two ways to compute it:
-		// // - viewsToremove = diagramViews - results
-		// // - or viewsToremove = getViews() - result
-		// // Use the cheaper one.
-		// // The computed viewsToRemove list contains also views that are not in the layer,
-		// // But this is cheaper than checking for the existence.
-		//
-		// // List<View> viewsToRemove = new ArrayList<View>();
-		// // for( View v : (views.size()<getViews().size()?views:getViews()) ) {
-		// // if( !results.contains(v)) {
-		// // viewsToRemove.add(v);
-		// // }
-		// // }
-		//
-		// // Do operations
-		// getMatchingElements().retainAll(newElements);
-		// // getViews().removeAll(viewsToRemove);
-		// getMatchingElements().addAll(viewsToAdd);
-
-	}
-
-	/**
-	 * @return the expression
-	 */
-	public String getExpression() {
-		return expression;
-	}
-
-
-	/**
-	 * @param expression
-	 *            the expression to set
-	 * @throws LayersException
-	 *             If the Condition can't be computed from the expression.
-	 */
-	public void setExpression(String expression) throws LayersException {
-
-		if (expression == null || expression.length() == 0) {
-			// standardize noop expr
-			expression = "";
-		}
-		if (expression.equals(this.expression)) {
-			return;
-		}
-
-		this.expression = expression;
-
-		computeCondition();
-		refreshMatchingElements();
-	}
-
-
-	/**
-	 * @return the matchingElements
-	 */
-	public List<View> getMatchingElements() {
-		return matchingElements;
-	}
-
-
-	/**
-	 * @return the searchRoots
-	 */
-	public List<EObject> getSearchRoots() {
-		return searchRoots;
-	}
-
-	/**
-	 *
-	 * @param searchRoots
-	 */
-	public void setSearchRoots(List<EObject> searchRoots) {
-
-		// Remove any existing observers
-		removeSearchRootsObservers();
-
-		if (searchRoots == null) {
-			searchRoots = Collections.emptyList();
-		}
-		this.searchRoots = searchRoots;
-		// add observers on roots changes
-		addSearchRootsObservers();
-
-		// Do not refresh. Let user do it.
-	}
-
-	/**
-	 *
-	 * @param searchRoots
-	 */
-	public void setSearchRoots(EObject searchRoot) {
-		if (searchRoot == null) {
-			// Remove any existing observers
-			removeSearchRootsObservers();
-			searchRoots = Collections.emptyList();
-			return;
-		}
-
-		setSearchRoots(Collections.singletonList(searchRoot));
-	}
-
-	/**
-	 * Observes all searchRoots for changes. If a change occurs, refresh the matching elements.
-	 *
-	 */
-	protected void addSearchRootsObservers() {
-
-		if (searchRoots == null) {
-			return;
-		}
-
-
-		for (EObject root : searchRoots) {
-			ValueChangedEventNotifier notifier = ValueChangedEventNotifierFactory.instance.adapt(root);
-			notifier.addEventListener(this);
-		}
-	}
-
-	/**
-	 * Observes all searchRoots for changes. If a change occurs, refresh the matching elements.
-	 *
-	 */
-	protected void removeSearchRootsObservers() {
-
-		if (searchRoots == null) {
-			return;
-		}
-
-		for (EObject root : searchRoots) {
-			ValueChangedEventNotifier notifier = ValueChangedEventNotifierFactory.instance.adapt(root);
-			notifier.removeEventListener(this);
-		}
-	}
-
-	/**
-	 * Called when a value change in one of the elements of the observed roots.
-	 *
-	 * @param msg
-	 */
-	@Override
-	public void valueChanged(Notification msg) {
-		refreshMatchingElements();
-	}
-
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/exprmatcher/IValueChangedEventListener.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/exprmatcher/IValueChangedEventListener.java
deleted file mode 100755
index 96cfbca..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/exprmatcher/IValueChangedEventListener.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.exprmatcher;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EObject;
-
-
-/**
- * Class implementing this interface can listen to event from EObject.
- * This class is used by {@link ExpressionMatcher} to be informed when it need to be refreshed.
- *
- * @author cedric dumoulin
- *
- */
-public interface IValueChangedEventListener {
-
-	/**
-	 * Called by events when a property is changed in a {@link EObject}
-	 *
-	 * @param msg
-	 */
-	public void valueChanged(Notification msg);
-
-
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/exprmatcher/ValueChangedEventNotifier.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/exprmatcher/ValueChangedEventNotifier.java
deleted file mode 100755
index f07f347..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/exprmatcher/ValueChangedEventNotifier.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.exprmatcher;
-
-import static org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.Activator.log;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.util.EContentAdapter;
-import org.eclipse.gmf.runtime.notation.Diagram;
-import org.eclipse.gmf.runtime.notation.NotationPackage;
-import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.notifier.LayersTreeEventNotifier;
-import org.eclipse.uml2.uml.NamedElement;
-import org.eclipse.uml2.uml.UMLPackage;
-
-
-/**
- * An EMF {@link Adapter} listening on uml::NamedElement properties changes.
- *
- * This class listen to a {@link NamedElement} and send following events to listeners:
- * <ul>
- * <li>valueChanged</li>
- * </ul>
- *
- * @author cedric dumoulin
- *
- */
-public class ValueChangedEventNotifier extends EContentAdapter {
-
-	boolean isDisposed = false;
-
-	/**
-	 * List of listener to notify.
-	 */
-	protected List<IValueChangedEventListener> listeners = new ArrayList<IValueChangedEventListener>();
-
-	/**
-	 * Something happen on the tree of object
-	 *
-	 * @see org.eclipse.emf.ecore.util.EContentAdapter#notifyChanged(org.eclipse.emf.common.notify.Notification)
-	 *
-	 * @param msg
-	 */
-	@Override
-	public void notifyChanged(Notification notification) {
-
-		// Self atttach
-		super.notifyChanged(notification);
-
-		// Take into account the domain hierarchy found from the notation.
-
-		// Now, filter
-		if (isDiagramRootView(notification)) {
-			fireValueChangedEvent(notification);
-		} else if (isUmlDomainElementChanged(notification)) {
-			fireValueChangedEvent(notification);
-		}
-
-
-		// // We are only interested in NamedElement (from newValue if set, or oldValue if removed)
-		// Object newValue = notification.getNewValue();
-		// if( ! (newValue instanceof NamedElement || notification.getOldValue() instanceof NamedElement ) ) {
-		// return;
-		// }
-		// // Check diagram modification
-		// // There is 4 sources: View::persistedChildren and View::transientChildren
-		// // Diagram::persistedChildren and Diagram::transientChildren
-		// Object feature = notification.getFeature();
-		// if( feature == UMLPackage.eINSTANCE.getNamedElement()
-		// || feature == NotationPackage.eINSTANCE.getView_TransientChildren()
-		// || feature == NotationPackage.eINSTANCE.getDiagram_PersistedEdges()
-		// || feature == NotationPackage.eINSTANCE.getDiagram_TransientEdges() ) {
-		// // LayerOperator::layers || LayersStack::layers
-		// // check the event type.
-		// switch(notification.getEventType()) {
-		// case Notification.SET:
-		//
-		// break;
-		// case Notification.ADD:
-		// // A view is added
-		// fireValueChangedEvent(notification);
-		// break;
-		// case Notification.REMOVE:
-		// // A layer is removed
-		// fireDiagramViewRemovedEvent(notification);
-		// break;
-		// }
-		// }
-
-	};
-
-	/**
-	 * Return true if the notification indicates a change in a uml element.
-	 *
-	 * @param notification
-	 * @return
-	 */
-	private boolean isUmlDomainElementChanged(Notification notification) {
-		// Notifier should be the diagram
-		if (!(notification.getNotifier() instanceof NamedElement)) {
-			return false;
-		}
-
-		Object feature = notification.getFeature();
-
-		if (feature == UMLPackage.eINSTANCE.getNamedElement_Name()) {
-			// check the event type.
-			switch (notification.getEventType()) {
-			case Notification.SET:
-			case Notification.ADD:
-			case Notification.REMOVE:
-
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Return true if the notification indicates that a Diagram root view is modifified.
-	 *
-	 * @param notification
-	 * @return
-	 */
-	private boolean isDiagramRootView(Notification notification) {
-
-		// Notifier should be the diagram
-		if (!(notification.getNotifier() instanceof Diagram)) {
-			return false;
-		}
-
-		Object feature = notification.getFeature();
-
-		if (feature == NotationPackage.eINSTANCE.getView_PersistedChildren()
-				|| feature == NotationPackage.eINSTANCE.getView_TransientChildren()
-				|| feature == NotationPackage.eINSTANCE.getDiagram_PersistedEdges()
-				|| feature == NotationPackage.eINSTANCE.getDiagram_TransientEdges()) {
-			// LayerOperator::layers || LayersStack::layers
-			// check the event type.
-			switch (notification.getEventType()) {
-			case Notification.SET:
-			case Notification.ADD:
-			case Notification.REMOVE:
-
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * This Adapter is for {@link LayersTreeEventNotifier}.
-	 *
-	 * @see org.eclipse.emf.common.notify.impl.AdapterImpl#isAdapterForType(java.lang.Object)
-	 *
-	 * @param type
-	 * @return
-	 */
-	@Override
-	public boolean isAdapterForType(Object type) {
-		return type == ValueChangedEventNotifier.class;
-	}
-
-	/**
-	 * Constructor.
-	 *
-	 * @param layersModel
-	 */
-	public ValueChangedEventNotifier() {
-	}
-
-	/**
-	 * Dispose the synchronizer
-	 */
-	public void dispose() {
-
-		if (isDisposed()) {
-			return;
-		}
-
-		isDisposed = true;
-		listeners.clear();
-	}
-
-	/**
-	 * Return true if the object is disposed.
-	 *
-	 * @return
-	 */
-	public boolean isDisposed() {
-		return isDisposed == true;
-	}
-
-	/**
-	 * Add the specified listener to the list of listener.
-	 * Do not add it if the listener is already in the list.
-	 *
-	 * @param listener
-	 */
-	public void addEventListener(IValueChangedEventListener listener) {
-
-		if (listener == null) {
-			return;
-		}
-
-		// Check if exist
-		if (listeners.contains(listener)) {
-			return;
-		}
-
-		listeners.add(listener);
-	}
-
-	/**
-	 * Remove the specified listener from the list of listeners.
-	 *
-	 * @param listener
-	 */
-	public void removeEventListener(IValueChangedEventListener listener) {
-
-		listeners.remove(listener);
-	}
-
-	/**
-	 * Called by events when a {@link LayersStack} is added to the {@link LayersStackApplication}
-	 *
-	 * @param msg
-	 */
-	protected void fireValueChangedEvent(Notification msg) {
-		for (IValueChangedEventListener listener : listeners) {
-			listener.valueChanged(msg);
-		}
-	}
-
-	/**
-	 * Handle View::element hierarchy in the self adapt mechanism.
-	 * Handles a notification by calling {@link #handleContainment handleContainment} for any containment-based notification.
-	 */
-	@Override
-	protected void selfAdapt(Notification notification) {
-		if (log.isDebugEnabled()) {
-			log.debug(this.getClass().getSimpleName() + ".selfAdapt(" + notification + ")");
-		}
-
-		if (notification.getFeature() == NotationPackage.eINSTANCE.getView_Element()) {
-			handleContainment(notification);
-		} else {
-			super.selfAdapt(notification);
-		}
-	}
-
-	/**
-	 * Handle View::element hierarchy in the self adapt mechanism.
-	 *
-	 * @see org.eclipse.emf.ecore.util.EContentAdapter#setTarget(org.eclipse.emf.ecore.EObject)
-	 *
-	 * @param target
-	 */
-	@Override
-	protected void setTarget(EObject target) {
-		if (log.isDebugEnabled()) {
-			log.debug(this.getClass().getSimpleName() + ".setTarget(" + target + ")");
-		}
-
-		// Handle the View::element tree
-		if (target instanceof View) {
-			EObject extraTarget = ((View) target).getElement();
-			if (extraTarget != null) {
-				log.info(this.getClass().getSimpleName() + ".setExtraTarget(" + extraTarget + ")");
-				// copied from org.eclipse.emf.ecore.util.EContentAdapter.setTarget(EObject)
-				// basicSetTarget(target);
-				// Add the extra object
-				addAdapter(extraTarget);
-				// Add the content of the extra object
-				// for (Iterator<? extends Notifier> i = resolve() ?
-				// extraTarget.eContents().iterator() :
-				// ((InternalEList<? extends Notifier>)extraTarget.eContents()).basicIterator();
-				// i.hasNext(); )
-				// {
-				// Notifier notifier = i.next();
-				// addAdapter(notifier);
-				// }
-
-			}
-		}
-	}
-
-	/**
-	 * Handle View::element hierarchy in the self adapt mechanism.
-	 *
-	 * @see org.eclipse.emf.ecore.util.EContentAdapter#unsetTarget(org.eclipse.emf.ecore.EObject)
-	 *
-	 * @param target
-	 */
-	@Override
-	protected void unsetTarget(EObject target) {
-		// TODO Auto-generated method stub
-		super.unsetTarget(target);
-		// Handle the View::element tree
-		if (target instanceof View) {
-			EObject extraTarget = ((View) target).getElement();
-			if (extraTarget != null) {
-				// copied from org.eclipse.emf.ecore.util.EContentAdapter.setTarget(EObject)
-				// basicSetTarget(target);
-				// Remove the extra object
-				removeAdapter(extraTarget);
-				// Remove contents of the extra object
-				// for (Iterator<? extends Notifier> i = resolve() ?
-				// extraTarget.eContents().iterator() :
-				// ((InternalEList<? extends Notifier>)extraTarget.eContents()).basicIterator();
-				// i.hasNext(); )
-				// {
-				// Notifier notifier = i.next();
-				// removeAdapter(notifier);
-				// }
-
-			}
-		}
-	}
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/exprmatcher/ValueChangedEventNotifierFactory.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/exprmatcher/ValueChangedEventNotifierFactory.java
deleted file mode 100755
index fb0f66c..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/exprmatcher/ValueChangedEventNotifierFactory.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2013 Cedric Dumoulin.
- *
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *  Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *
- *****************************************************************************/
-
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.exprmatcher;
-
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
-
-/**
- * Factory used to create a {@link ValueChangedEventNotifier}.
- * The factory ensures that there is only one Notifier for a given {@link LayersStack}.
- *
- * @author cedric dumoulin
- *
- */
-public class ValueChangedEventNotifierFactory extends AdapterFactoryImpl {
-
-	/**
-	 * Global factory.
-	 */
-	static public ValueChangedEventNotifierFactory instance = new ValueChangedEventNotifierFactory();
-
-	/**
-	 * Convenience method.
-	 *
-	 * @param target
-	 * @return
-	 */
-	public ValueChangedEventNotifier adapt(Notifier target) {
-		return (ValueChangedEventNotifier) adapt(target, ValueChangedEventNotifier.class);
-	}
-
-	/**
-	 *
-	 * @see org.eclipse.emf.common.notify.impl.AdapterFactoryImpl#createAdapter(org.eclipse.emf.common.notify.Notifier)
-	 *
-	 * @param target
-	 * @return
-	 */
-	@Override
-	protected Adapter createAdapter(Notifier target) {
-		return new ValueChangedEventNotifier();
-	}
-
-	/**
-	 * This Factory is for {@link ValueChangedEventNotifier}.
-	 *
-	 * @see org.eclipse.emf.common.notify.impl.AdapterFactoryImpl#isFactoryForType(java.lang.Object)
-	 *
-	 * @param type
-	 * @return
-	 */
-	@Override
-	public boolean isFactoryForType(Object type) {
-		return type == ValueChangedEventNotifier.class;
-	}
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomAllViewsDerivedLayerImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomAllViewsDerivedLayerImpl.java
new file mode 100755
index 0000000..11e33d4
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomAllViewsDerivedLayerImpl.java
@@ -0,0 +1,66 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import static org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.Activator.log;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.AllViewsDerivedLayerImpl;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.util.DiagramViewToListSynchronizer;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomAllViewsDerivedLayerImpl extends AllViewsDerivedLayerImpl {
+	/**
+	 * Object used to synchronize a list with the diagram's views.
+	 *
+	 * @generated
+	 */
+	protected DiagramViewToListSynchronizer viewsListSynchronizer;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	protected CustomAllViewsDerivedLayerImpl() {
+		super();
+		// init the synchronizer
+		viewsListSynchronizer = new DiagramViewToListSynchronizer(getViews());
+	}
+
+	/**
+	 * This layer has just been added to a LayerStack.
+	 * Set the root of the expression.
+	 * Set the views to match the result of the expression.
+	 *
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#initLayer(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack)
+	 *
+	 * @param owningLayersStack
+	 */
+	@Override
+	public void initLayer(LayersStack owningLayersStack) {
+		super.initLayer(owningLayersStack);
+
+		if (log.isDebugEnabled()) {
+			log.debug(this.getClass().getSimpleName() + ".initLayer(" + owningLayersStack + ")");
+		}
+
+		// Set the diagram associated to this tree of layers
+		viewsListSynchronizer.setDiagram(owningLayersStack.getDiagram());
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSHideInstanceImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSHideInstanceImpl.java
new file mode 100755
index 0000000..82c968f
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSHideInstanceImpl.java
@@ -0,0 +1,38 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHideInstanceImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomCSSHideInstanceImpl extends CSSHideInstanceImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public TypeInstance getCmdValue() throws LayersException {
+		// By default, we return the instance itself, as there
+		// is nothing more to compute.
+		return this;
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSHidePropertySetterImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSHidePropertySetterImpl.java
new file mode 100755
index 0000000..233d801
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSHidePropertySetterImpl.java
@@ -0,0 +1,47 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHidePropertySetterImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomCSSHidePropertySetterImpl extends CSSHidePropertySetterImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 */
+	protected CustomCSSHidePropertySetterImpl() {
+		super();
+		setPropertyName("cssHide");
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterImpl#setValue(org.eclipse.gmf.runtime.notation.View, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance)
+	 *
+	 * @param view
+	 * @param value
+	 */
+	@Override
+	public void setValue(View view, TypeInstance value) {
+
+
+	}
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSHideTypeImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSHideTypeImpl.java
new file mode 100755
index 0000000..3356ac9
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSHideTypeImpl.java
@@ -0,0 +1,40 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSHideTypeImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomCSSHideTypeImpl extends CSSHideTypeImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 */
+	protected CustomCSSHideTypeImpl() {
+		super();
+		setName("CSSHideType");
+	}
+
+	@Override
+	public org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance createInstance() {
+		return LayersFactory.eINSTANCE.createCSSHideInstance();
+	};
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSInstanceImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSInstanceImpl.java
new file mode 100755
index 0000000..538f5cb
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSInstanceImpl.java
@@ -0,0 +1,37 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSInstanceImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomCSSInstanceImpl extends CSSInstanceImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public TypeInstance getCmdValue() throws LayersException {
+		// By default, we return the instance itself, as there
+		// is nothing more to compute.
+		return this;
+	}
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSPropertySetterImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSPropertySetterImpl.java
new file mode 100755
index 0000000..e31a8db
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSPropertySetterImpl.java
@@ -0,0 +1,156 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.StringListValueStyle;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForResource;
+import org.eclipse.papyrus.infra.gmfdiag.css.notation.CSSDiagram;
+import org.eclipse.papyrus.infra.gmfdiag.css.notation.CSSStyles;
+import org.eclipse.papyrus.infra.gmfdiag.css.properties.databinding.AddCSSStyleSheetCommand;
+import org.eclipse.papyrus.infra.gmfdiag.css.properties.databinding.AddCssClassStyleCommand;
+import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.EmbeddedStyleSheet;
+import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.StyleSheet;
+import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.StyleSheetReference;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSInstance;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSPropertySetterImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomCSSPropertySetterImpl extends CSSPropertySetterImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 */
+	protected CustomCSSPropertySetterImpl() {
+		super();
+		setPropertyName("css");
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterImpl#setValue(org.eclipse.gmf.runtime.notation.View, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance)
+	 *
+	 * @param view
+	 * @param value
+	 */
+	@Override
+	public void setValue(View view, TypeInstance value) {
+		Diagram d = view.getDiagram();
+		StyleSheet ass;
+		CSSDiagram cssD = null;
+		TransactionalEditingDomain ted = null;
+
+		EList<EStructuralFeature> features = view.eClass().getEStructuralFeatures();
+
+		CSSInstance associatedCSS = (CSSInstance) value;
+		StyleSheet sheet = associatedCSS.getStylesheet();
+
+		// System.err.println(view);
+		// System.err.println(value);
+
+		// CHeck if there is a styleSheet reference associated
+		if (sheet == null) {
+			return;
+		}
+
+		if (d instanceof CSSDiagram) {
+			cssD = (CSSDiagram) d;
+			// Get the Transactional Editing Domain associated to the diagram
+			try {
+				ted = ServiceUtilsForResource.getInstance().getTransactionalEditingDomain(view.eResource());
+			} catch (ServiceException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+
+			// TODO find a way to remove a reference
+			// if (!(cssD.getStyleSheets().isEmpty())) {
+			// RemoveAllCSSStyleSheetValueCommand racssvc = new RemoveAllCSSStyleSheetValueCommand(ted, cssD,
+			// CSSStyles.CSS_DIAGRAM_STYLESHEETS_KEY,
+			// NotationPackage.eINSTANCE.getEObjectListValueStyle(),
+			// NotationPackage.eINSTANCE.getEObjectListValueStyle_EObjectListValue(),
+			// Collections.singleton(sheet));
+			// racssvc.execute();
+			// System.out.println("done!");
+			// }
+
+			String sheetPath = ((StyleSheetReference) sheet).getPath();
+			boolean sheetIsApplied = false;
+			for (StyleSheet ss : cssD.getStyleSheets()) {
+				String ssPath = ((StyleSheetReference) ss).getPath();
+				if (sheetPath.equals(ssPath)) {
+					sheetIsApplied = true;
+					// There may be discrepancies in the memory addresses between the layer's CSS and the model's
+					// Always revert to the model's CSS as it is the one being used
+					sheet = ss;
+					break;
+				}
+			}
+
+			if (!sheetIsApplied) {
+				if (sheet instanceof StyleSheetReference) {
+					sheet = EcoreUtil.copy(sheet);
+				} else if (sheet instanceof EmbeddedStyleSheet) {
+					// TODO if needed
+				}
+
+				AddCSSStyleSheetCommand aacssc = new AddCSSStyleSheetCommand(ted, cssD,
+						CSSStyles.CSS_DIAGRAM_STYLESHEETS_KEY,
+						NotationPackage.eINSTANCE.getEObjectListValueStyle(),
+						NotationPackage.eINSTANCE.getEObjectListValueStyle_EObjectListValue(),
+						sheet);
+				aacssc.execute();
+			}
+
+			// Apply the style to the view if it has not been previously
+			String style = associatedCSS.getStyle();
+			if (style == null) {
+				return;
+			}
+
+			List<String> appliedStyles = new ArrayList<String>();
+			for (Object o : view.getStyles()) {
+				if (!(o instanceof StringListValueStyle)) {
+					continue;
+				}
+				StringListValueStyle slvs = (StringListValueStyle) o;
+				if (!slvs.getStringListValue().isEmpty()) {
+					appliedStyles.add((String) slvs.getStringListValue().get(0));
+				}
+			}
+			// There is a refresh problem on the style display in the property view,
+			// undo/redo multiply the style without applying it multiple times
+			if (appliedStyles.isEmpty() || !appliedStyles.contains(style)) {
+				AddCssClassStyleCommand accsc = new AddCssClassStyleCommand(ted, view, style);
+				accsc.execute();
+			}
+		}
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSTypeImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSTypeImpl.java
new file mode 100755
index 0000000..d4bc34b
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomCSSTypeImpl.java
@@ -0,0 +1,35 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.CSSTypeImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomCSSTypeImpl extends CSSTypeImpl {
+
+	protected CustomCSSTypeImpl() {
+		super();
+		setName("CSSType");
+	}
+
+
+	@Override
+	public org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance createInstance() {
+		return LayersFactory.eINSTANCE.createCSSInstance();
+	};
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomLayerOperatorDescriptorRegistryImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomLayerOperatorDescriptorRegistryImpl.java
new file mode 100755
index 0000000..164a3e6
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomLayerOperatorDescriptorRegistryImpl.java
@@ -0,0 +1,168 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorDescriptorRegistryImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomLayerOperatorDescriptorRegistryImpl extends LayerOperatorDescriptorRegistryImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	protected CustomLayerOperatorDescriptorRegistryImpl() {
+		super();
+		// Set the defaultOperator
+		defaultOperator = LayersFactory.eINSTANCE.createPropertyOperator();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public void setPropertyCollectionSize(int newPropertyCollectionSize) {
+		int oldPropertyCollectionSize = propertyCollectionSize;
+		propertyCollectionSize = newPropertyCollectionSize;
+		if (eNotificationRequired()) {
+			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.LAYER_OPERATOR_DESCRIPTOR_REGISTRY__PROPERTY_COLLECTION_SIZE, oldPropertyCollectionSize, propertyCollectionSize));
+		}
+
+		// Propagate the size to registered LayerOperator
+		if (newPropertyCollectionSize > oldPropertyCollectionSize) {
+			for (LayerOperatorDescriptor descriptor : getDescriptors()) {
+				descriptor.setPropertyCollectionSize(newPropertyCollectionSize, getDefaultOperator());
+			}
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public void addLayerOperatorDescriptor(LayerOperatorDescriptor descriptor) {
+
+		// Ensure descriptor size
+		descriptor.setPropertyCollectionSize(getPropertyCollectionSize(), getDefaultOperator());
+		// Add descriptor
+		getDescriptors().add(descriptor);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public LayerOperatorDescriptor getLayerOperatorDescriptor(String name) throws NotFoundException {
+		if (name == null) {
+			throw new NotFoundException("Can't find LayerOperatorDescriptor for name 'null'.");
+		}
+		for (LayerOperatorDescriptor descriptor : getDescriptors()) {
+			if (name.equals(descriptor.getName())) {
+				return descriptor;
+			}
+		}
+		// Not found
+		throw new NotFoundException("Can't find LayerOperatorDescriptor for name '" + name + "'.");
+
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public void addPropertyOperator(PropertyOperator operator) {
+		getPropertyOperators().add(operator);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public PropertyOperator getPropertyOperator(String name) throws NotFoundException {
+
+		if (name == null) {
+			throw new NotFoundException("Can't find PropertyOperator for name 'null'.");
+		}
+		for (PropertyOperator op : getPropertyOperators()) {
+			if (name.equals(op.getName())) {
+				return op;
+			}
+		}
+		// Not found
+		throw new NotFoundException("Can't find PropertyOperator for name '" + name + "'.");
+
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @throws NotFoundException
+	 */
+	@Override
+	public void attachOperatorToDescriptor(Property property, String operatorName, String layerDescriptorName) throws NotFoundException {
+
+		// Ensure that PropertiesCollectionSize can contain the property index.
+		if (getPropertyCollectionSize() <= property.getIndex()) {
+			setPropertyCollectionSize(property.getIndex());
+		}
+
+		// Attach the operator to the LayerOperator
+		PropertyOperator op = getPropertyOperator(operatorName);
+		LayerOperatorDescriptor layerOp = getLayerOperatorDescriptor(layerDescriptorName);
+
+		layerOp.setPropertyOperator(property, op);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public LayerOperator createLayerOperator(String layerOperatorID) throws LayersException {
+
+		LayerOperatorDescriptor desc = getLayerOperatorDescriptor(layerOperatorID);
+
+		LayerOperator newLayerOperator = desc.createLayerOperator();
+
+		// newLayerOperator.setApplication();
+		return newLayerOperator;
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomLayersFactory.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomLayersFactory.java
new file mode 100755
index 0000000..bec950c
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomLayersFactory.java
@@ -0,0 +1,234 @@
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AllViewsDerivedLayer;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSHideInstance;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSHidePropertySetter;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSHideType;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSInstance;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSPropertySetter;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CSSType;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptorRegistry;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Metamodel;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.NullPropertySetter;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetterRegistry;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperatorDescriptor;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperatorDescriptor;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeRegistry;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl;
+
+public class CustomLayersFactory extends LayersFactoryImpl {
+
+	public CustomLayersFactory() {
+		// should never be required
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createCSSType()
+	 *
+	 * @return
+	 */
+	@Override
+	public CSSType createCSSType() {
+		return new CustomCSSTypeImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createCSSPropertySetter()
+	 *
+	 * @return
+	 */
+	@Override
+	public CSSPropertySetter createCSSPropertySetter() {
+		return new CustomCSSPropertySetterImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createCSSHidePropertySetter()
+	 *
+	 * @return
+	 */
+	@Override
+	public CSSHidePropertySetter createCSSHidePropertySetter() {
+		return new CustomCSSHidePropertySetterImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createCSSHideType()
+	 *
+	 * @return
+	 */
+	@Override
+	public CSSHideType createCSSHideType() {
+		return new CustomCSSHideTypeImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createAllViewsDerivedLayer()
+	 *
+	 * @return
+	 */
+	@Override
+	public AllViewsDerivedLayer createAllViewsDerivedLayer() {
+		return new CustomAllViewsDerivedLayerImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createStackedLayerOperator()
+	 *
+	 * @return
+	 */
+	@Override
+	public StackedLayerOperator createStackedLayerOperator() {
+		return new CustomStackedLayerOperatorImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createTopLayerOperatorDescriptor()
+	 *
+	 * @return
+	 */
+	@Override
+	public TopLayerOperatorDescriptor createTopLayerOperatorDescriptor() {
+		return new CustomTopLayerOperatorDescriptorImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createStackedLayerOperatorDescriptor()
+	 *
+	 * @return
+	 */
+	@Override
+	public StackedLayerOperatorDescriptor createStackedLayerOperatorDescriptor() {
+		return new CustomStackedLayerOperatorDescriptorImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createCSSInstance()
+	 *
+	 * @return
+	 */
+	@Override
+	public CSSInstance createCSSInstance() {
+		return new CustomCSSInstanceImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createCSSHideInstance()
+	 *
+	 * @return
+	 */
+	@Override
+	public CSSHideInstance createCSSHideInstance() {
+		return new CustomCSSHideInstanceImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createTypeRegistry()
+	 *
+	 * @return
+	 */
+	@Override
+	public TypeRegistry createTypeRegistry() {
+		return new CustomTypeRegistryImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createPropertySetterRegistry()
+	 *
+	 * @return
+	 */
+	@Override
+	public PropertySetterRegistry createPropertySetterRegistry() {
+		return new CustomPropertySetterRegistryImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createLayersStack()
+	 *
+	 * @return
+	 */
+	@Override
+	public LayersStack createLayersStack() {
+		return new CustomLayersStackImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createPropertyRegistry()
+	 *
+	 * @return
+	 */
+	@Override
+	public PropertyRegistry createPropertyRegistry() {
+		return new CustomPropertyRegistryImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createCustomPropertyOperator()
+	 *
+	 * @return
+	 */
+	@Override
+	public PropertyOperator createPropertyOperator() {
+		return new CustomPropertyOperatorImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createLayerOperatorDescriptorRegistry()
+	 *
+	 * @return
+	 */
+	@Override
+	public LayerOperatorDescriptorRegistry createLayerOperatorDescriptorRegistry() {
+		return new CustomLayerOperatorDescriptorRegistryImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createLayersStackApplication()
+	 *
+	 * @return
+	 */
+	@Override
+	public LayersStackApplication createLayersStackApplication() {
+		return new CustomLayersStackApplicationImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createNullPropertySetter()
+	 *
+	 * @return
+	 */
+	@Override
+	public NullPropertySetter createNullPropertySetter() {
+		return new CustomNullPropertySetterImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createProperty()
+	 *
+	 * @return
+	 */
+	@Override
+	public Property createProperty() {
+		return new CustomPropertyImpl();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersFactoryImpl#createTopLayerOperator()
+	 *
+	 * @return
+	 */
+	@Override
+	public TopLayerOperator createTopLayerOperator() {
+		return new CustomTopLayerOperatorImpl();
+	}
+
+
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomLayersStackApplicationImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomLayersStackApplicationImpl.java
new file mode 100755
index 0000000..6bb4a74
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomLayersStackApplicationImpl.java
@@ -0,0 +1,179 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerApplicationFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerDescriptorRegistry;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptorRegistry;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerStackDescriptorRegistry;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetterRegistry;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersStackApplicationImpl;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.loaders.LayersConfigModel;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.loaders.RegistriesLoader;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomLayersStackApplicationImpl extends LayersStackApplicationImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	protected CustomLayersStackApplicationImpl() {
+		super();
+		init();
+	}
+
+	/**
+	 * Init the class
+	 * Create the internal objects : {@link PropertyRegistry}, {@link LayerStackDescriptorRegistry}.
+	 */
+	protected void init() {
+		// Create the PropertyRegistry
+		PropertyRegistry propertyRegistry = LayersFactory.eINSTANCE.createPropertyRegistry();
+		setPropertyRegistry(propertyRegistry);
+
+		// Create the LayerStackDescriptorRegistry
+		LayerStackDescriptorRegistry layerStackDescriptorRegistry = LayersFactory.eINSTANCE.createLayerStackDescriptorRegistry();
+		setLayerStackRegistry(layerStackDescriptorRegistry);
+
+		// Create the LayerDescriptorRegistry
+		LayerDescriptorRegistry layerDescriptorRegistry = LayersFactory.eINSTANCE.createLayerDescriptorRegistry();
+		setLayerDescriptorRegistry(layerDescriptorRegistry);
+
+		// Create the config model and the registries loader
+		LayersConfigModel configModel = LayersConfigModel.getInstance();
+		RegistriesLoader registriesLoader = new RegistriesLoader(configModel);
+
+		// Create the LayerOperatorDescriptorRegistry
+		LayerOperatorDescriptorRegistry layerOperatorDescriptorRegistry = LayersFactory.eINSTANCE.createLayerOperatorDescriptorRegistry();
+		layerOperatorDescriptorRegistry.setPropertyCollectionSize(propertyRegistry.getPropertiesCount());
+
+		registriesLoader.loadLayerOperatorDescriptorRegistry(layerOperatorDescriptorRegistry, propertyRegistry);
+		setLayerOperatorDescriptorRegistry(layerOperatorDescriptorRegistry);
+
+		// Create the LayerApplicationFactory
+		LayerApplicationFactory layerApplicationFactory = LayersFactory.eINSTANCE.createLayerApplicationFactory();
+		setFactory(layerApplicationFactory);
+
+		// Create the PropertySetterRegistry
+		PropertySetterRegistry propertySetterRegistry = LayersFactory.eINSTANCE.createPropertySetterRegistry();
+		propertySetterRegistry.setApplication(this);
+		setPropertySetterRegistry(propertySetterRegistry);
+
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public void removeLayersStackFor(Diagram diagram) {
+
+		try {
+			LayersStack stack = lookupLayersStackFor(diagram);
+			getLayersStacks().remove(stack);
+		} catch (NotFoundException e) {
+			// silently fails
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public boolean isLayersStackAttachedFor(Diagram diagram) {
+		try {
+			lookupLayersStackFor(diagram);
+			return true;
+		} catch (NotFoundException e) {
+			// not found
+			return false;
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public LayersStack lookupLayersStackFor(Diagram diagram) throws NotFoundException {
+		for (LayersStack stack : getLayersStacks()) {
+			if (stack.getDiagram() == diagram) {
+				return stack;
+			}
+		}
+
+		// Not found
+		throw new NotFoundException("No LayersStack attached for diagram: " + diagram);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Get the {@link LayersStack} for the specified diagram. Create it if
+	 * necessary.
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public LayersStack getLayersStackFor(Diagram diagram) {
+		try {
+			return lookupLayersStackFor(diagram);
+		} catch (NotFoundException e) {
+			// Create a new one
+			return createLayersStackFor(diagram);
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Create a new LayersStack for the specified diagram.
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public LayersStack createLayersStackFor(Diagram diagram) {
+
+		// Create a new LayerStack and add it to application (this)
+		LayersStack layer = LayersFactory.eINSTANCE.createLayersStack();
+		layer.startAfterCreation();
+		layer.setDiagram(diagram);
+
+		// Create first layer in stack
+		TopLayerOperator rootLayer = LayersFactory.eINSTANCE.createTopLayerOperator();
+		rootLayer.setName("Top Layer");
+		rootLayer.setApplication(this);
+		layer.setLayers(rootLayer);
+
+		// attach stack to application
+		getLayersStacks().add(layer);
+
+
+		return layer;
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomLayersStackImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomLayersStackImpl.java
new file mode 100755
index 0000000..5ec360d
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomLayersStackImpl.java
@@ -0,0 +1,247 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.BadStateException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerState;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayersStackImpl;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.notifier.ILayersTreeEventListener;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.notifier.LayersTreeEventNotifier;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.notifier.LayersTreeEventNotifierFactory;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomLayersStackImpl extends LayersStackImpl {
+
+
+
+	/**
+	 * Listener on layers tree events.
+	 * This listener take in charge the initialization of added layers.
+	 */
+	private ILayersTreeEventListener layersTreeEventListener = new ILayersTreeEventListener() {
+
+		@Override
+		public void layerSet(Notification notification) {
+			CustomLayersStackImpl.this.layerAdded((LayerExpression) notification.getNewValue());
+		}
+
+		@Override
+		public void layerRemoved(Notification notification) {
+			// nothing to do
+
+		}
+
+		@Override
+		public void layerMoved(Notification notification) {
+			// nothing to do
+
+		}
+
+		@Override
+		public void layerAdded(Notification notification) {
+			CustomLayersStackImpl.this.layerAdded((LayerExpression) notification.getNewValue());
+		}
+
+	};
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	protected CustomLayersStackImpl() {
+		super();
+
+		// Now, init should be called explicitly after creation.
+		// init();
+	}
+
+	/**
+	 * Init this object.
+	 * Create a listener on tree events.
+	 */
+	private void init() {
+
+		LayersTreeEventNotifier layersTreeEventnotifier = LayersTreeEventNotifierFactory.instance.adapt(this);
+
+		layersTreeEventnotifier.addLayersModelEventListener(layersTreeEventListener);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @throws LayersException
+	 */
+	@Override
+	public ComputePropertyValueCommand getComputePropertyValueCommand(View view, Property property) throws LayersException {
+		LayerExpression layers = getLayers();
+		if (layers == null) {
+			throw new BadStateException("Layers should be set first.");
+		}
+
+		return layers.getComputePropertyValueCommand(view, property);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Start this LayersStack after its creation. This method should be explicitly called by
+	 * user after the creation of a LayersStack.
+	 * <!-- end-user-doc -->
+	 *
+	 * @deprecated Not used anymore
+	 */
+	@Deprecated
+	@Override
+	public void startAfterCreation() {
+		// Ensure child is initialized, if any
+		if (getLayers() != null) {
+			getLayers().attachToLayersStack(this);
+		}
+
+		// Start local behaviors
+		init();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Attach recursively the tree of layers.
+	 * <!-- end-user-doc -->
+	 *
+	 * @throws LayersException
+	 */
+	@Override
+	public void attachLayers() throws LayersException {
+		// Ensure child is started, if any
+		if (getLayers() != null) {
+			getLayers().attach();
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public void attach() throws LayersException {
+		// Stop if already in ATTACHED state.
+		if (getState() == LayerState.ATTACHED) {
+			return;
+		}
+
+		// Check required attributes
+		if (getDiagram() == null) {
+			throw new BadStateException("A required attribute is not set. The Layer can't be attached."
+					+ "[layerName=" + getName()
+					+ ", diagram=" + (getDiagram() == null ? "null" : "ok")
+					+ "]");
+		}
+
+		// Can go in attached mode
+		setState(LayerState.ATTACHED);
+		enterAttachedState();
+		attachLayers();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public void detach() throws LayersException {
+		// Change the state
+		exitAttachedState();
+		setState(LayerState.DETACHED);
+		// Ensure child is started, if any
+		if (getLayers() != null) {
+			getLayers().detach();
+		}
+
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public void enterAttachedState() throws LayersException {
+		init();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @throws LayersException
+	 */
+	@Override
+	public List<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, List<Property> property) throws LayersException {
+		LayerExpression layers = getLayers();
+		if (layers == null) {
+			throw new BadStateException("Layers should be set first.");
+		}
+
+		return layers.getPropertiesComputePropertyValueCommand(view, property);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @throws BadStateException
+	 */
+	@Override
+	public List<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(List<View> view, Property property) throws LayersException {
+
+		LayerExpression layers = getLayers();
+		if (layers == null) {
+			throw new BadStateException("Layers should be set first.");
+		}
+
+		return layers.getViewsComputePropertyValueCommand(view, property);
+	}
+
+	/**
+	 * A layer has been added to the layerTree.
+	 * Init this layer.
+	 * This method is called by the listener on layerTree events.
+	 *
+	 * @param addedLayer
+	 *            The added layer.
+	 */
+	protected void layerAdded(LayerExpression addedLayer) {
+		// Stop if there is no layer
+		if (addedLayer == null) {
+			return;
+		}
+		// init the layer
+		addedLayer.attachToLayersStack(this);
+
+	}
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomNullPropertySetterImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomNullPropertySetterImpl.java
new file mode 100755
index 0000000..bf91a82
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomNullPropertySetterImpl.java
@@ -0,0 +1,33 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.NullPropertySetterImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomNullPropertySetterImpl extends NullPropertySetterImpl {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	protected CustomNullPropertySetterImpl() {
+		super();
+		setPropertyName("NullPropertySetter");
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomPropertyImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomPropertyImpl.java
new file mode 100755
index 0000000..562c028
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomPropertyImpl.java
@@ -0,0 +1,49 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.BadStateException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomPropertyImpl extends PropertyImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @throws BadStateException
+	 */
+	@Override
+	public TypeInstance createInstance() throws BadStateException {
+
+		if (type == null) {
+			throw new BadStateException("Property '" + getName() + "', type must be set to create an instance");
+		}
+
+		// Create an instance
+		TypeInstance instance = type.createInstance();
+		// Set the default value if needed
+		if (getDefaultValue() != null) {
+			instance.setValueFromInstance(getDefaultValue());
+		}
+
+		return instance;
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomPropertyOperatorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomPropertyOperatorImpl.java
new file mode 100755
index 0000000..648f72e
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomPropertyOperatorImpl.java
@@ -0,0 +1,137 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import static org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.Activator.log;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyOperatorImpl;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceException;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomPropertyOperatorImpl extends PropertyOperatorImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public void setClassname(String newClassname) {
+		String oldClassname = classname;
+		classname = newClassname;
+		if (eNotificationRequired()) {
+			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.PROPERTY_OPERATOR__CLASSNAME, oldClassname, classname));
+		}
+		// Reset the actual instance
+		setOperatorInstance(null);
+
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public PropertyOperator getOperatorInstance() {
+		if (operatorInstance == null) {
+			try {
+				resetOperatorInstance();
+			} catch (LayersException e) {
+				// TODO log the error
+				log.error("LOG-" + this.getClass().getName()
+						+ "- Can't set custom operator instance '" + e.getMessage() + "'.", e);
+
+			}
+		}
+
+		return operatorInstance;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @throws LayersException
+	 */
+	@Override
+	public void resetOperatorInstance() throws LayersException {
+		if (getClassname() == null) {
+			return;
+		}
+
+		Class<?> opClass = loadClass();
+		try {
+			setOperatorInstance((PropertyOperator) opClass.newInstance());
+		} catch (Exception e) {
+			throw new LayersException("Can't create instance for CustomOperator " + getName(), e);
+		}
+	}
+
+	/**
+	 *
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyOperatorImpl#getComputePropertyValueCommand(org.eclipse.emf.common.util.EList)
+	 *
+	 * @param property
+	 * @return
+	 * @throws LayersException
+	 */
+	@Override
+	public ComputePropertyValueCommand getComputePropertyValueCommand(List<ComputePropertyValueCommand> property) throws LayersException {
+		return getOperatorInstance().getComputePropertyValueCommand(property);
+	}
+
+	/**
+	 * Load the Class object. Try from current ClassLoader, then try using the
+	 * plugin referenced in the serviceDescriptor.PluginId
+	 *
+	 * @return
+	 * @throws ServiceException
+	 */
+	private Class<?> loadClass() throws LayersException {
+		String classname = getClassname();
+		Class<?> classDesc;
+		try {
+			classDesc = Class.forName(classname);
+		} catch (ClassNotFoundException e1) {
+			// Try using bundle
+			try {
+				String bundleID = getClassBundleID();
+				Bundle bundle = Platform.getBundle(bundleID);
+				classDesc = bundle.loadClass(classname);
+			} catch (ClassNotFoundException e2) {
+				throw new LayersException("Can't find class for the name '" + classname + "'.", e2);
+			} catch (NullPointerException e) {
+				throw new LayersException("Can't find bundle '" + getClassBundleID()
+						+ "' for class for the name '" + classname + "'.", e);
+			}
+		}
+
+		return classDesc;
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomPropertyRegistryImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomPropertyRegistryImpl.java
new file mode 100755
index 0000000..98a7687
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomPropertyRegistryImpl.java
@@ -0,0 +1,145 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import java.util.List;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeRegistry;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertyRegistryImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomPropertyRegistryImpl extends PropertyRegistryImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	protected CustomPropertyRegistryImpl() {
+		super();
+		// initialie transient ref
+		init();
+	}
+
+	/**
+	 * Init the transient references
+	 * Create the internal objects : TypeRegistry.
+	 */
+	protected void init() {
+		// Create the TypeRegistry
+		TypeRegistry typeRegistry = LayersFactory.eINSTANCE.createTypeRegistry();
+		setTypeRegistry(typeRegistry);
+
+		// Initialize the list of properties
+		String[] properties = new String[] {
+				"css", "CSSType", "",
+				"cssHide", "CSSHideType", "",
+		};
+
+		for (int i = 0; i < properties.length; i += 3) {
+
+
+			Property property = LayersFactory.eINSTANCE.createProperty();
+			property.setName(properties[i]);
+			Type propertyType = typeRegistry.getTypes().get(properties[i + 1]);
+			property.setType(propertyType);
+			// Create Default value
+			String defaultValueStr = properties[i + 2];
+			if (defaultValueStr != null && defaultValueStr.length() > 0) {
+				TypeInstance defaultValue = propertyType.createInstance();
+				defaultValue.setValueFromString(defaultValueStr);
+				property.setDefaultValue(defaultValue);
+			}
+
+			addProperty(property);
+			// getProperties().add(property);
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public int getPropertiesCount() {
+		return getProperties().size();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public int getPropertyIndex(String propertyName) throws NotFoundException {
+
+		if (propertyName == null) {
+			throw new NotFoundException("Null not Allowed");
+		}
+		List<Property> props = getProperties();
+		for (int i = 0; i < props.size(); i++) {
+			if (propertyName.equals(props.get(i).getName())) {
+				return i;
+			}
+		}
+
+		// Not found
+		throw new NotFoundException("No property found with name '" + propertyName + "'");
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public Property getProperty(String propertyName) throws NotFoundException {
+
+		int index = getPropertyIndex(propertyName);
+		return getProperties().get(index);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public void addProperty(Property property) {
+
+		// Check if the property already exist
+		try {
+			getProperty(property.getName());
+			// Already exist ==> return
+			return;
+		} catch (NotFoundException e) {
+			// ok
+		}
+
+		// set the index
+		property.setIndex(getProperties().size());
+		// Add the property
+		getProperties().add(property);
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomPropertySetterRegistryImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomPropertySetterRegistryImpl.java
new file mode 100755
index 0000000..584fd4f
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomPropertySetterRegistryImpl.java
@@ -0,0 +1,159 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertySetter;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.PropertySetterRegistryImpl;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.util.PropertyIndexedList;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomPropertySetterRegistryImpl extends PropertySetterRegistryImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	protected CustomPropertySetterRegistryImpl() {
+		super();
+		init();
+	}
+
+	/**
+	 * Initialize the registry with some setters
+	 */
+	protected void init() {
+		addPropertySetter(LayersFactory.eINSTANCE.createCSSPropertySetter());
+		addPropertySetter(LayersFactory.eINSTANCE.createCSSHidePropertySetter());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public EList<PropertySetter> getPropertySetters() {
+		// if (propertySetters == null) {
+		// propertySetters = new EObjectResolvingEList<PropertySetter>(PropertySetter.class, this, LayersPackage.PROPERTY_SETTER_REGISTRY__PROPERTY_SETTERS);
+		// }
+		if (propertySetters == null) {
+			propertySetters = new PropertyIndexedList<PropertySetter>(getSetterMap(), PropertySetter.class, this, LayersPackage.PROPERTY_SETTER_REGISTRY__PROPERTY_SETTERS, LayersPackage.PROPERTY_SETTER_REGISTRY__SETTER_MAP,
+					LayersFactory.eINSTANCE.createNullPropertySetter());
+		}
+		return propertySetters;
+	}
+
+
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public void setApplication(LayersStackApplication newApplication) {
+		if (newApplication != eInternalContainer() || (eContainerFeatureID() != LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION && newApplication != null)) {
+			if (EcoreUtil.isAncestor(this, newApplication)) {
+				throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+			}
+			NotificationChain msgs = null;
+			if (eInternalContainer() != null) {
+				msgs = eBasicRemoveFromContainer(msgs);
+			}
+			if (newApplication != null) {
+				msgs = ((InternalEObject) newApplication).eInverseAdd(this, LayersPackage.LAYERS_STACK_APPLICATION__PROPERTY_SETTER_REGISTRY, LayersStackApplication.class, msgs);
+			}
+			msgs = basicSetApplication(newApplication, msgs);
+			if (msgs != null) {
+				msgs.dispatch();
+			}
+		} else if (eNotificationRequired()) {
+			eNotify(new ENotificationImpl(this, Notification.SET, LayersPackage.PROPERTY_SETTER_REGISTRY__APPLICATION, newApplication, newApplication));
+		}
+
+
+		// update the list of PropertySetters
+		if (newApplication != null) {
+			List<Property> list = newApplication.getPropertyRegistry().getProperties();
+			((PropertyIndexedList<PropertySetter>) getPropertySetters()).setPropertyList(list);
+		}
+		;
+
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public PropertySetter getPropertySetter(Property property) throws NotFoundException {
+
+		try {
+			return getPropertySetters().get(property.getIndex());
+		} catch (IndexOutOfBoundsException e) {
+			// Try by name
+			PropertySetter setter = getPropertySetter(property.getName());
+			if (setter != null) {
+				return setter;
+			}
+			throw new NotFoundException("No setter found for property '" + property.getName() + "'");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public PropertySetter getPropertySetter(String property) throws NotFoundException {
+		return getSetterMap().get(property);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public void addPropertySetter(PropertySetter setter) {
+
+		String key = setter.getPropertyName();
+		if (key == null || key.length() == 0) {
+			throw new UnsupportedOperationException("Setter must have a valid name.");
+		}
+
+		getSetterMap().put(key, setter);
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomStackedLayerOperatorDescriptorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomStackedLayerOperatorDescriptorImpl.java
new file mode 100755
index 0000000..2aeb20f
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomStackedLayerOperatorDescriptorImpl.java
@@ -0,0 +1,149 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StackedLayerOperatorDescriptorImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomStackedLayerOperatorDescriptorImpl extends StackedLayerOperatorDescriptorImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	protected CustomStackedLayerOperatorDescriptorImpl() {
+		super();
+		init();
+	}
+
+	/**
+	 * Init the descriptor.
+	 */
+	private void init() {
+		setName("StackedLayerOperator");
+
+	}
+
+	/**
+	 * New instance creation counter.
+	 */
+	static int count = 0;
+
+	/**
+	 * Create the requested {@link StackedLayerOperator} and init it.
+	 *
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorDescriptorImpl#createLayerOperator()
+	 *
+	 * @return
+	 */
+	@Override
+	public LayerOperator createLayerOperator() {
+
+
+		StackedLayerOperator layerOperator = LayersFactory.eINSTANCE.createStackedLayerOperator();
+		layerOperator.setLayerOperatorDescriptor(this);
+		layerOperator.setLayerOperatorDescriptorName(this.getName());
+		layerOperator.setName(getName() + count++);
+
+		return layerOperator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public List<PropertyOperator> getPropertyOperators() {
+		if (propertyOperators == null) {
+			propertyOperators = new EObjectResolvingEList<PropertyOperator>(PropertyOperator.class, this, LayersPackage.LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS) {
+				// Allows double
+				@Override
+				protected boolean isUnique() {
+					return false;
+				}
+
+			};
+		}
+		return propertyOperators;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public PropertyOperator getPropertyOperator(Property property) throws NotFoundException {
+		try {
+			return getPropertyOperators().get(property.getIndex());
+		} catch (IndexOutOfBoundsException e) {
+			throw new NotFoundException("Can't find operator for property '" + property.getName() + "' at index " + property.getIndex());
+		}
+	}
+
+	/**
+	 * Set the operator at the property's index.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void setPropertyOperator(Property property, PropertyOperator operator) {
+
+		// Set the operator at the property's index.
+		getPropertyOperators().set(property.getIndex(), operator);
+	}
+
+	/**
+	 * Initialize all list indexed by Properties'index.
+	 * Increase the actual list in order that they can contains the specified number of properties.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void setPropertyCollectionSize(int size, PropertyOperator defaultPropertyOperator) {
+		List<PropertyOperator> operators = getPropertyOperators();
+		int actualSize = operators.size();
+		// Check if we need to increase the size.
+		if (actualSize >= size) {
+			// do nothing
+			return;
+		}
+
+		// Add missing elements
+		for (int i = actualSize; i < size; i++) {
+			operators.add(defaultPropertyOperator);
+		}
+	}
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomStackedLayerOperatorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomStackedLayerOperatorImpl.java
new file mode 100755
index 0000000..7ee5856
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomStackedLayerOperatorImpl.java
@@ -0,0 +1,254 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import static org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.Activator.log;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayer;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerImpl;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StackedLayerOperatorImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomStackedLayerOperatorImpl extends StackedLayerOperatorImpl {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	protected CustomStackedLayerOperatorImpl() {
+		super();
+
+		// Add an observer
+		Adapter adapter = new LayerDescriptorSynchronizer();
+		this.eAdapters().add(adapter);
+	}
+
+	/**
+	 * Reset the descriptor accordingly to the descriptor name.
+	 * The descriptor is resseted only if the ::application and ::layerOperatorDescriptorName are set.
+	 * Nothing is done if one of the attribute is not set.
+	 * Nothing is done if the descriptor can not be found (maybe a log is issue).
+	 * <!-- begin-user-doc -->
+	 * Not used ?
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public void resetDescriptor() {
+
+		if (getApplication() == null || getLayerOperatorDescriptorName() == null) {
+			// A property is not yet set.
+			// do nothing
+			return;
+		}
+
+		try {
+			LayerOperatorDescriptor descriptor = getApplication().getLayerOperatorDescriptorRegistry().getLayerOperatorDescriptor(getLayerOperatorDescriptorName());
+			setLayerOperatorDescriptor(descriptor);
+		} catch (NotFoundException e) {
+			// Not found
+			log.error(this.getClass().getName()
+					+ "- Can't get LayerOperatorDescriptor for descriptorName '" + getLayerOperatorDescriptorName() + "'.", e);
+		}
+	}
+
+	/**
+	 * This class listen to #propertyValueMap, and synchronize propertyValues accordingly.
+	 *
+	 *
+	 */
+	public class LayerDescriptorSynchronizer extends AdapterImpl {
+
+		@Override
+		public void notifyChanged(Notification msg) {
+			// System.err.println("event " + msg.getEventType());
+
+			switch (msg.getFeatureID(AbstractLayer.class)) {
+			case LayersPackage.STACKED_LAYER_OPERATOR__LAYER_OPERATOR_DESCRIPTOR_NAME:
+				notifyDescriptorNameChanged(msg);
+				break;
+
+			case LayersPackage.STACKED_LAYER_OPERATOR__APPLICATION:
+				notifyLayerApplicationFeatureChanged(msg);
+				break;
+
+			default:
+				break;
+			}
+		}
+
+		/**
+		 * The {@link LayerImpl#propertyValueMap} has changed. Synchronize the {@link LayerImpl#propertyValues} list.
+		 *
+		 * @param msg
+		 */
+		protected void notifyDescriptorNameChanged(Notification msg) {
+			// System.err.println("descriptor name changed " + msg.getEventType());
+			switch (msg.getEventType()) {
+			case Notification.SET: {
+				// Name is set
+				resetDescriptor();
+				break;
+			}
+			default:
+				break;
+			}
+
+		}
+
+		/**
+		 * The {@link LayerImpl#propertyValueMap} has changed. Synchronize the {@link LayerImpl#propertyValues} list.
+		 *
+		 * @param msg
+		 */
+		protected void notifyLayerApplicationFeatureChanged(Notification msg) {
+			// System.err.println("application changed " + msg.getEventType());
+			switch (msg.getEventType()) {
+			case Notification.SET: {
+				// Application is set
+				resetDescriptor();
+				break;
+			}
+			}
+		}
+
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void addLayer(LayerExpression layer) {
+		// getLayers().add(layer);
+		// Add layer on top of the stack.
+		getLayers().add(0, layer);
+	}
+
+	/**
+	 * Propagate the change to children
+	 *
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#setIsBranchEnabled(boolean)
+	 *
+	 * @param newIsBranchEnabled
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setIsBranchEnabled(boolean newIsBranchEnabled) {
+		// First, set the value.
+		super.setIsBranchEnabled(newIsBranchEnabled);
+		// Now, propagate
+		boolean value = isBranchEnabled();
+		for (LayerExpression layer : getLayers()) {
+			layer.setIsBranchEnabled(value);
+		}
+	}
+
+	/**
+	 * Set the value then propagate to children nodes.
+	 *
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#setOwningLayersStack(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack)
+	 *
+	 * @param newOwningLayersStack
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setOwningLayersStack(LayersStack newOwningLayersStack) {
+		// Set the value
+		super.setOwningLayersStack(newOwningLayersStack);
+		// Now propagate to children
+		LayersStack value = getOwningLayersStack();
+		for (LayerExpression layer : getLayers()) {
+			layer.setOwningLayersStack(value);
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Start this element after its reloading by EMF
+	 * This method is called recursively by the parent of this element.
+	 *
+	 * <!-- end-user-doc -->
+	 *
+	 * @throws LayersException
+	 * @generated
+	 */
+	@Override
+	public void attach() throws LayersException {
+		// Try to attach this Layer
+		super.attach();
+		// attach children
+		for (LayerExpression l : getLayers()) {
+			l.attach();
+		}
+	}
+
+	/**
+	 *
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#detach()
+	 *
+	 * @throws LayersException
+	 * @generated
+	 */
+	@Override
+	public void detach() throws LayersException {
+		// Detach this Layer
+		super.detach();
+		// detach children
+		for (LayerExpression l : getLayers()) {
+			l.detach();
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @deprecated unless we need it again
+	 * @generated
+	 */
+	@Deprecated
+	@Override
+	public void attachToLayersStack(LayersStack owningLayersStack) {
+
+		// the owning stack
+		setOwningLayersStack(owningLayersStack);
+
+		// Ensure child is started, if any
+		for (LayerExpression l : getLayers()) {
+			l.attachToLayersStack(owningLayersStack);
+		}
+
+		// Start local behaviors
+		startBehaviors();
+	}
+
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomTopLayerOperatorDescriptorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomTopLayerOperatorDescriptorImpl.java
new file mode 100755
index 0000000..c333ad9
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomTopLayerOperatorDescriptorImpl.java
@@ -0,0 +1,150 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.StackedLayerOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TopLayerOperatorDescriptorImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomTopLayerOperatorDescriptorImpl extends TopLayerOperatorDescriptorImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	protected CustomTopLayerOperatorDescriptorImpl() {
+		super();
+		init();
+	}
+
+	/**
+	 * Init the descriptor.
+	 */
+	private void init() {
+		setName("TopLayerOperator");
+
+	}
+
+	/**
+	 * New instance creation counter.
+	 */
+	static int count = 0;
+
+	/**
+	 * Create the requested {@link StackedLayerOperator} and init it.
+	 *
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorDescriptorImpl#createLayerOperator()
+	 *
+	 * @return
+	 */
+	@Override
+	public LayerOperator createLayerOperator() {
+
+
+		TopLayerOperator layerOperator = LayersFactory.eINSTANCE.createTopLayerOperator();
+		layerOperator.setLayerOperatorDescriptor(this);
+		layerOperator.setName(getName() + count++);
+
+		return layerOperator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public List<PropertyOperator> getPropertyOperators() {
+		if (propertyOperators == null) {
+			propertyOperators = new EObjectResolvingEList<PropertyOperator>(PropertyOperator.class, this, LayersPackage.LAYER_OPERATOR_DESCRIPTOR__PROPERTY_OPERATORS) {
+				// Allows double
+				@Override
+				protected boolean isUnique() {
+					return false;
+				}
+
+			};
+		}
+		return propertyOperators;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public PropertyOperator getPropertyOperator(Property property) throws NotFoundException {
+		try {
+			return getPropertyOperators().get(property.getIndex());
+		} catch (IndexOutOfBoundsException e) {
+			throw new NotFoundException("Can't find operator for property '" + property.getName() + "' at index " + property.getIndex());
+		}
+	}
+
+	/**
+	 * Set the operator at the property's index.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void setPropertyOperator(Property property, PropertyOperator operator) {
+
+		// Set the operator at the property's index.
+		getPropertyOperators().set(property.getIndex(), operator);
+	}
+
+	/**
+	 * Initialize all list indexed by Properties'index.
+	 * Increase the actual list in order that they can contains the specified number of properties.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void setPropertyCollectionSize(int size, PropertyOperator defaultPropertyOperator) {
+		List<PropertyOperator> operators = getPropertyOperators();
+		int actualSize = operators.size();
+		// Check if we need to increase the size.
+		if (actualSize >= size) {
+			// do nothing
+			return;
+		}
+
+		// Add missing elements
+		for (int i = actualSize; i < size; i++) {
+			operators.add(defaultPropertyOperator);
+		}
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomTopLayerOperatorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomTopLayerOperatorImpl.java
new file mode 100755
index 0000000..2ec8246
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomTopLayerOperatorImpl.java
@@ -0,0 +1,258 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TopLayerOperatorImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomTopLayerOperatorImpl extends TopLayerOperatorImpl {
+
+	/**
+	 * Get the command to compute the required property value.
+	 * Walk all layers and return the first cmd that is not null for specified view and property.
+	 *
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#getComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property)
+	 *
+	 * @param view
+	 * @param property
+	 * @return
+	 * @throws LayersException
+	 */
+	@Override
+	public ComputePropertyValueCommand getComputePropertyValueCommand(View view, Property property) throws LayersException {
+
+		// Walk all layers and return the first cmd that is not null for specified view and property.
+		for (LayerExpression layer : getLayers()) {
+
+			ComputePropertyValueCommand cmd = layer.getComputePropertyValueCommand(view, property);
+			if (cmd != null) {
+				return cmd;
+			}
+		}
+		// Nothing found
+		return null;
+
+	}
+
+	/**
+	 * For each property, add the first property value in the list of result.
+	 *
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#getPropertiesComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, java.util.List)
+	 *
+	 * @param view
+	 * @param property
+	 * @return
+	 * @throws LayersException
+	 */
+	@Override
+	public List<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, List<Property> properties) throws LayersException {
+
+		// Simple implementation
+		// TODO Check if we can optimize
+
+		// the result list
+		List<ComputePropertyValueCommand> resCmds = new ArrayList<ComputePropertyValueCommand>(properties.size());
+		boolean isCmdFound = false;
+
+		for (Property property : properties) {
+			if (property == null) {
+				resCmds.add(null);
+				continue;
+			}
+
+			ComputePropertyValueCommand cmd = getComputePropertyValueCommand(view, property);
+			if (cmd != null) {
+				isCmdFound = true;
+			}
+			resCmds.add(cmd);
+
+
+		}
+		// Return appropriate result
+		if (isCmdFound) {
+			return resCmds;
+		} else {
+			// No command ==> null
+			return null;
+		}
+	}
+
+	/**
+	 * For each view, add the first property value in the list of result.
+	 *
+	 *
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#getViewsComputePropertyValueCommand(java.util.List, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property)
+	 *
+	 * @param view
+	 * @param property
+	 * @return
+	 * @throws LayersException
+	 */
+	@Override
+	public List<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(List<View> views, Property property) throws LayersException {
+
+		// Simple implementation
+		// TODO Check if we can optimize
+
+		// the result list
+		List<ComputePropertyValueCommand> resCmds = new ArrayList<ComputePropertyValueCommand>(views.size());
+		boolean isCmdFound = false;
+
+		for (View view : views) {
+			if (view == null) {
+				resCmds.add(null);
+				continue;
+			}
+
+			ComputePropertyValueCommand cmd = getComputePropertyValueCommand(view, property);
+			if (cmd != null) {
+				isCmdFound = true;
+			}
+			resCmds.add(cmd);
+		}
+
+		// Return appropriate result
+		if (isCmdFound) {
+			return resCmds;
+		} else {
+			// No command ==> null
+			return null;
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void addLayer(LayerExpression layer) {
+		// getLayers().add(layer);
+		// Add layer on top of the stack.
+		getLayers().add(0, layer);
+	}
+
+	/**
+	 * Propagate the change to children
+	 *
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#setIsBranchEnabled(boolean)
+	 *
+	 * @param newIsBranchEnabled
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setIsBranchEnabled(boolean newIsBranchEnabled) {
+		// First, set the value.
+		super.setIsBranchEnabled(newIsBranchEnabled);
+		// Now, propagate
+		boolean value = isBranchEnabled();
+		for (LayerExpression layer : getLayers()) {
+			layer.setIsBranchEnabled(value);
+		}
+	}
+
+	/**
+	 * Set the value then propagate to children nodes.
+	 *
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#setOwningLayersStack(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack)
+	 *
+	 * @param newOwningLayersStack
+	 * 
+	 * @generated
+	 */
+	@Override
+	public void setOwningLayersStack(LayersStack newOwningLayersStack) {
+		// Set the value
+		super.setOwningLayersStack(newOwningLayersStack);
+		// Now propagate to children
+		LayersStack value = getOwningLayersStack();
+		for (LayerExpression layer : getLayers()) {
+			layer.setOwningLayersStack(value);
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Start this element after its reloading by EMF
+	 * This method is called recursively by the parent of this element.
+	 *
+	 * <!-- end-user-doc -->
+	 *
+	 * @throws LayersException
+	 * @generated
+	 */
+	@Override
+	public void attach() throws LayersException {
+		// Try to attach this Layer
+		super.attach();
+		// attach children
+		for (LayerExpression l : getLayers()) {
+			l.attach();
+		}
+	}
+
+	/**
+	 *
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#detach()
+	 *
+	 * @throws LayersException
+	 * @generated
+	 */
+	@Override
+	public void detach() throws LayersException {
+		// Detach this Layer
+		super.detach();
+		// detach children
+		for (LayerExpression l : getLayers()) {
+			l.detach();
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @deprecated unless we need it again
+	 * @generated
+	 */
+	@Deprecated
+	@Override
+	public void attachToLayersStack(LayersStack owningLayersStack) {
+
+		// the owning stack
+		setOwningLayersStack(owningLayersStack);
+
+		// Ensure child is started, if any
+		for (LayerExpression l : getLayers()) {
+			l.attachToLayersStack(owningLayersStack);
+		}
+
+		// Start local behaviors
+		startBehaviors();
+	}
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomTypeRegistryImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomTypeRegistryImpl.java
new file mode 100755
index 0000000..3ffdc61
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomTypeRegistryImpl.java
@@ -0,0 +1,56 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
+
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Type;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TypeRegistryImpl;
+
+/**
+ * @author QL238289
+ *
+ */
+public class CustomTypeRegistryImpl extends TypeRegistryImpl {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	protected CustomTypeRegistryImpl() {
+		super();
+		init();
+	}
+
+	/**
+	 * Init the Registry.
+	 * Register standard types.
+	 */
+	protected void init() {
+		addType(LayersFactory.eINSTANCE.createCSSType());
+		addType(LayersFactory.eINSTANCE.createCSSHideType());
+	}
+
+	/**
+	 * Add the type in the registry
+	 *
+	 * @param type
+	 */
+	public void addType(Type type) {
+		String typeName = type.getName();
+
+		getTypes().put(typeName, type);
+	}
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/loaders/LayerOperatorDescriptorRegistryLoader.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/loaders/LayerOperatorDescriptorRegistryLoader.java
index 9f5522c..2724e3e 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/loaders/LayerOperatorDescriptorRegistryLoader.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/loaders/LayerOperatorDescriptorRegistryLoader.java
@@ -1,121 +1,121 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.loaders;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptorRegistry;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.BooleanAndOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.BooleanOrOperator;
-
-
-/**
- * Class used to load a {@link LayerOperatorDescriptorRegistry}.
- *
- * @author cedric dumoulin
- *
- * @deprecated use {@link RegistriesLoader} instead.
- *
- */
-@Deprecated
-public class LayerOperatorDescriptorRegistryLoader implements ILayerOperatorDescriptorRegistryLoader {
-
-	/**
-	 * Load the specified registry. Initialize its Descriptors and its Operators.
-	 *
-	 * @param layerOperatorDescriptorRegistry
-	 * @param propertyRegistry
-	 */
-	public void loadRegistryOld(LayerOperatorDescriptorRegistry descriptorRegistry, PropertyRegistry propertyRegistry) {
-
-		// Custom operator declarations
-		// operatorName, operatorImplementationClass
-		String[] operatorDeclarations = new String[] {
-				"booleanOr", BooleanOrOperator.class.getName(),
-				"booleanAnd", BooleanAndOperator.class.getName(),
-
-		};
-
-		// Load operators
-		for (int i = 0; i < operatorDeclarations.length; i += 2) {
-			CustomPropertyOperator operator = LayersFactory.eINSTANCE.createCustomPropertyOperator();
-			operator.setName(operatorDeclarations[i]);
-			operator.setClassname(operatorDeclarations[i + 1]);
-			descriptorRegistry.addPropertyOperator(operator);
-		}
-
-		// AndLayerStackOperatorDescriptor
-		// propertyName, operatorName
-		String[] andDescriptorDeclarations = new String[] {
-				"isVisible", "booleanAnd",
-		};
-
-		LayerOperatorDescriptor andDescriptor = LayersFactory.eINSTANCE.createAndStackedLayerOperatorDescriptor();
-		descriptorRegistry.addLayerOperatorDescriptor(andDescriptor);
-
-		// attach operator to layer and property
-		String descriptorName = andDescriptor.getName();
-		for (int i = 0; i < andDescriptorDeclarations.length; i += 2) {
-			try {
-				descriptorRegistry.attachOperatorToDescriptor(propertyRegistry.getProperty(andDescriptorDeclarations[i]), andDescriptorDeclarations[i + 1], descriptorName);
-			} catch (NotFoundException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-		}
-
-		// OrLayerStackOperatorDescriptor
-		// propertyName, operatorName
-		String[] orDescriptorDeclarations = new String[] {
-				"isVisible", "booleanOr",
-		};
-
-		LayerOperatorDescriptor orDescriptor = LayersFactory.eINSTANCE.createOrStackedLayerOperatorDescriptor();
-		descriptorRegistry.addLayerOperatorDescriptor(orDescriptor);
-
-		// attach operator to layer and property
-		descriptorName = orDescriptor.getName();
-		for (int i = 0; i < orDescriptorDeclarations.length; i += 2) {
-			try {
-				descriptorRegistry.attachOperatorToDescriptor(propertyRegistry.getProperty(orDescriptorDeclarations[i]), orDescriptorDeclarations[i + 1], descriptorName);
-			} catch (NotFoundException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-		}
-	}
-
-	/**
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.loaders.ILayerOperatorDescriptorRegistryLoader#loadLayerOperatorDescriptorRegistry(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptorRegistry,
-	 *      org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry)
-	 *
-	 * @param descriptorRegistry
-	 * @param propertyRegistry
-	 */
-	@Override
-	public void loadLayerOperatorDescriptorRegistry(LayerOperatorDescriptorRegistry descriptorRegistry, PropertyRegistry propertyRegistry) {
-
-		createLayersConfigModel();
-
-	}
-
-	/**
-	 * Create a Model
-	 */
-	private void createLayersConfigModel() {
-		// TODO Auto-generated method stub
-
-	}
-
-}
+/// *******************************************************************************
+// * Copyright (c) 2013 CEA LIST.
+// * All rights reserved. This program and the accompanying materials
+// * are made available under the terms of the Eclipse Public License v1.0
+// * which accompanies this distribution, and is available at
+// * http://www.eclipse.org/legal/epl-v10.html
+// *
+// * Contributors:
+// * Cedric Dumoulin - cedric.dumoulin@lifl.fr
+// ******************************************************************************/
+// package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.loaders;
+//
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.CustomPropertyOperator;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptorRegistry;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.BooleanAndOperator;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.BooleanOrOperator;
+//
+//
+/// **
+// * Class used to load a {@link LayerOperatorDescriptorRegistry}.
+// *
+// * @author cedric dumoulin
+// *
+// * @deprecated use {@link RegistriesLoader} instead.
+// *
+// */
+// @Deprecated
+// public class LayerOperatorDescriptorRegistryLoader implements ILayerOperatorDescriptorRegistryLoader {
+//
+// /**
+// * Load the specified registry. Initialize its Descriptors and its Operators.
+// *
+// * @param layerOperatorDescriptorRegistry
+// * @param propertyRegistry
+// */
+// public void loadRegistryOld(LayerOperatorDescriptorRegistry descriptorRegistry, PropertyRegistry propertyRegistry) {
+//
+// // Custom operator declarations
+// // operatorName, operatorImplementationClass
+// String[] operatorDeclarations = new String[] {
+// "booleanOr", BooleanOrOperator.class.getName(),
+// "booleanAnd", BooleanAndOperator.class.getName(),
+//
+// };
+//
+// // Load operators
+// for (int i = 0; i < operatorDeclarations.length; i += 2) {
+// CustomPropertyOperator operator = LayersFactory.eINSTANCE.createCustomPropertyOperator();
+// operator.setName(operatorDeclarations[i]);
+// operator.setClassname(operatorDeclarations[i + 1]);
+// descriptorRegistry.addPropertyOperator(operator);
+// }
+//
+// // AndLayerStackOperatorDescriptor
+// // propertyName, operatorName
+// String[] andDescriptorDeclarations = new String[] {
+// "isVisible", "booleanAnd",
+// };
+//
+// LayerOperatorDescriptor andDescriptor = LayersFactory.eINSTANCE.createAndStackedLayerOperatorDescriptor();
+// descriptorRegistry.addLayerOperatorDescriptor(andDescriptor);
+//
+// // attach operator to layer and property
+// String descriptorName = andDescriptor.getName();
+// for (int i = 0; i < andDescriptorDeclarations.length; i += 2) {
+// try {
+// descriptorRegistry.attachOperatorToDescriptor(propertyRegistry.getProperty(andDescriptorDeclarations[i]), andDescriptorDeclarations[i + 1], descriptorName);
+// } catch (NotFoundException e) {
+// // TODO Auto-generated catch block
+// e.printStackTrace();
+// }
+// }
+//
+// // OrLayerStackOperatorDescriptor
+// // propertyName, operatorName
+// String[] orDescriptorDeclarations = new String[] {
+// "isVisible", "booleanOr",
+// };
+//
+// LayerOperatorDescriptor orDescriptor = LayersFactory.eINSTANCE.createOrStackedLayerOperatorDescriptor();
+// descriptorRegistry.addLayerOperatorDescriptor(orDescriptor);
+//
+// // attach operator to layer and property
+// descriptorName = orDescriptor.getName();
+// for (int i = 0; i < orDescriptorDeclarations.length; i += 2) {
+// try {
+// descriptorRegistry.attachOperatorToDescriptor(propertyRegistry.getProperty(orDescriptorDeclarations[i]), orDescriptorDeclarations[i + 1], descriptorName);
+// } catch (NotFoundException e) {
+// // TODO Auto-generated catch block
+// e.printStackTrace();
+// }
+// }
+// }
+//
+// /**
+// * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.loaders.ILayerOperatorDescriptorRegistryLoader#loadLayerOperatorDescriptorRegistry(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptorRegistry,
+// * org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.PropertyRegistry)
+// *
+// * @param descriptorRegistry
+// * @param propertyRegistry
+// */
+// @Override
+// public void loadLayerOperatorDescriptorRegistry(LayerOperatorDescriptorRegistry descriptorRegistry, PropertyRegistry propertyRegistry) {
+//
+// createLayersConfigModel();
+//
+// }
+//
+// /**
+// * Create a Model
+// */
+// private void createLayersConfigModel() {
+// // TODO Auto-generated method stub
+//
+// }
+//
+// }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/loaders/LayersConfigModel.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/loaders/LayersConfigModel.java
index 2ade37a..bb33d3e 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/loaders/LayersConfigModel.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/loaders/LayersConfigModel.java
@@ -37,9 +37,6 @@
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.PropertyId;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.configmodel.layersconfig.TypeConfig;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.BooleanAndOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.BooleanOrOperator;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.FillAverageOperator;
 
 
 /**
@@ -98,9 +95,9 @@
 
 		// Create Operators
 		Folder operatorFolder = createFolder(getRootFolder(), "operatorDesc");
-		OperatorConfig operatorBooleanAnd = createPropertyOperatorConfig(operatorFolder, "operatorBooleanAnd", BooleanAndOperator.class.getName());
-		OperatorConfig operatorBooleanOr = createPropertyOperatorConfig(operatorFolder, "operatorBooleanOr", BooleanOrOperator.class.getName());
-		OperatorConfig operatorFillAverage = createPropertyOperatorConfig(operatorFolder, "operatorFillAverage", FillAverageOperator.class.getName());
+		// OperatorConfig operatorBooleanAnd = createPropertyOperatorConfig(operatorFolder, "operatorBooleanAnd", BooleanAndOperator.class.getName());
+		// OperatorConfig operatorBooleanOr = createPropertyOperatorConfig(operatorFolder, "operatorBooleanOr", BooleanOrOperator.class.getName());
+		// OperatorConfig operatorFillAverage = createPropertyOperatorConfig(operatorFolder, "operatorFillAverage", FillAverageOperator.class.getName());
 
 
 		// Create basic types
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/BooleanAndOperator.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/BooleanAndOperator.java
index 7002f0c..de97d9d 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/BooleanAndOperator.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/BooleanAndOperator.java
@@ -1,93 +1,93 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-
-/**
- * @author cedric dumoulin
- *
- */
-public class BooleanAndOperator implements CustomPropertyOperatorsInstance {
-
-	public static final BooleanInstance FALSE_INSTANCE;
-	public static final BooleanInstance TRUE_INSTANCE;
-
-	static {
-		FALSE_INSTANCE = LayersFactory.eINSTANCE.createBooleanInstance();
-		FALSE_INSTANCE.setValue(false);
-		TRUE_INSTANCE = LayersFactory.eINSTANCE.createBooleanInstance();
-		TRUE_INSTANCE.setValue(true);
-	}
-
-	/**
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance#getComputePropertyValueCommand(org.eclipse.emf.common.util.EList)
-	 *
-	 * @param property
-	 * @return
-	 * @throws LayersException
-	 */
-	@Override
-	public ComputePropertyValueCommand getComputePropertyValueCommand(EList<ComputePropertyValueCommand> nestedCommand) throws LayersException {
-		return new BooleanAndOperatorCommand(nestedCommand);
-	}
-
-
-	/**
-	 * Class implementing an And command.
-	 *
-	 */
-	class BooleanAndOperatorCommand implements ComputePropertyValueCommand {
-
-		EList<ComputePropertyValueCommand> nestedCommand;
-
-		/**
-		 *
-		 * Constructor.
-		 *
-		 * @param nestedCommand
-		 */
-		public BooleanAndOperatorCommand(EList<ComputePropertyValueCommand> nestedCommand) {
-			this.nestedCommand = nestedCommand;
-		}
-
-		/**
-		 * Compute the value.
-		 *
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand#getCmdValue()
-		 *
-		 * @return
-		 * @throws LayersException
-		 */
-		@Override
-		public TypeInstance getCmdValue() throws LayersException {
-
-			// Do an boolean and: all value should be true.
-			// Return as soon as a false is encountered
-			for (ComputePropertyValueCommand curCmd : nestedCommand) {
-				boolean curCmdRes = ((BooleanInstance) curCmd.getCmdValue()).isValue();
-				if (curCmdRes == false) {
-					return FALSE_INSTANCE;
-				}
-			}
-
-			return TRUE_INSTANCE;
-		}
-
-	}
-}
+/// *******************************************************************************
+// * Copyright (c) 2013 CEA LIST.
+// * All rights reserved. This program and the accompanying materials
+// * are made available under the terms of the Eclipse Public License v1.0
+// * which accompanies this distribution, and is available at
+// * http://www.eclipse.org/legal/epl-v10.html
+// *
+// * Contributors:
+// * Cedric Dumoulin - cedric.dumoulin@lifl.fr
+// ******************************************************************************/
+// package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators;
+//
+// import org.eclipse.emf.common.util.EList;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
+//
+//
+/// **
+// * @author cedric dumoulin
+// *
+// */
+// public class BooleanAndOperator implements CustomPropertyOperatorsInstance {
+//
+// public static final BooleanInstance FALSE_INSTANCE;
+// public static final BooleanInstance TRUE_INSTANCE;
+//
+// static {
+// FALSE_INSTANCE = LayersFactory.eINSTANCE.createBooleanInstance();
+// FALSE_INSTANCE.setValue(false);
+// TRUE_INSTANCE = LayersFactory.eINSTANCE.createBooleanInstance();
+// TRUE_INSTANCE.setValue(true);
+// }
+//
+// /**
+// *
+// * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance#getComputePropertyValueCommand(org.eclipse.emf.common.util.EList)
+// *
+// * @param property
+// * @return
+// * @throws LayersException
+// */
+// @Override
+// public ComputePropertyValueCommand getComputePropertyValueCommand(EList<ComputePropertyValueCommand> nestedCommand) throws LayersException {
+// return new BooleanAndOperatorCommand(nestedCommand);
+// }
+//
+//
+// /**
+// * Class implementing an And command.
+// *
+// */
+// class BooleanAndOperatorCommand implements ComputePropertyValueCommand {
+//
+// EList<ComputePropertyValueCommand> nestedCommand;
+//
+// /**
+// *
+// * Constructor.
+// *
+// * @param nestedCommand
+// */
+// public BooleanAndOperatorCommand(EList<ComputePropertyValueCommand> nestedCommand) {
+// this.nestedCommand = nestedCommand;
+// }
+//
+// /**
+// * Compute the value.
+// *
+// * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand#getCmdValue()
+// *
+// * @return
+// * @throws LayersException
+// */
+// @Override
+// public TypeInstance getCmdValue() throws LayersException {
+//
+// // Do an boolean and: all value should be true.
+// // Return as soon as a false is encountered
+// for (ComputePropertyValueCommand curCmd : nestedCommand) {
+// boolean curCmdRes = ((BooleanInstance) curCmd.getCmdValue()).isValue();
+// if (curCmdRes == false) {
+// return FALSE_INSTANCE;
+// }
+// }
+//
+// return TRUE_INSTANCE;
+// }
+//
+// }
+// }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/BooleanOrOperator.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/BooleanOrOperator.java
index 9816faf..ed06fd0 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/BooleanOrOperator.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/BooleanOrOperator.java
@@ -1,93 +1,93 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-
-/**
- * @author cedric dumoulin
- *
- */
-public class BooleanOrOperator implements CustomPropertyOperatorsInstance {
-
-	public static final BooleanInstance FALSE_INSTANCE;
-	public static final BooleanInstance TRUE_INSTANCE;
-
-	static {
-		FALSE_INSTANCE = LayersFactory.eINSTANCE.createBooleanInstance();
-		FALSE_INSTANCE.setValue(false);
-		TRUE_INSTANCE = LayersFactory.eINSTANCE.createBooleanInstance();
-		TRUE_INSTANCE.setValue(true);
-	}
-
-	/**
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance#getComputePropertyValueCommand(org.eclipse.emf.common.util.EList)
-	 *
-	 * @param property
-	 * @return
-	 * @throws LayersException
-	 */
-	@Override
-	public ComputePropertyValueCommand getComputePropertyValueCommand(EList<ComputePropertyValueCommand> nestedCommand) throws LayersException {
-		return new BooleanOrOperatorCommand(nestedCommand);
-	}
-
-
-	/**
-	 * Class implementing an And command.
-	 *
-	 */
-	class BooleanOrOperatorCommand implements ComputePropertyValueCommand {
-
-		EList<ComputePropertyValueCommand> nestedCommand;
-
-		/**
-		 *
-		 * Constructor.
-		 *
-		 * @param nestedCommand
-		 */
-		public BooleanOrOperatorCommand(EList<ComputePropertyValueCommand> nestedCommand) {
-			this.nestedCommand = nestedCommand;
-		}
-
-		/**
-		 * Compute the value.
-		 *
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand#getCmdValue()
-		 *
-		 * @return
-		 * @throws LayersException
-		 */
-		@Override
-		public TypeInstance getCmdValue() throws LayersException {
-
-			// Do an boolean or: at least one value should be true.
-			// Return as soon as a true is encountered
-			for (ComputePropertyValueCommand curCmd : nestedCommand) {
-				boolean curCmdRes = ((BooleanInstance) curCmd.getCmdValue()).isValue();
-				if (curCmdRes == true) {
-					return TRUE_INSTANCE;
-				}
-			}
-
-			return FALSE_INSTANCE;
-		}
-
-	}
-}
+/// *******************************************************************************
+// * Copyright (c) 2013 CEA LIST.
+// * All rights reserved. This program and the accompanying materials
+// * are made available under the terms of the Eclipse Public License v1.0
+// * which accompanies this distribution, and is available at
+// * http://www.eclipse.org/legal/epl-v10.html
+// *
+// * Contributors:
+// * Cedric Dumoulin - cedric.dumoulin@lifl.fr
+// ******************************************************************************/
+// package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators;
+//
+// import org.eclipse.emf.common.util.EList;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
+//
+//
+/// **
+// * @author cedric dumoulin
+// *
+// */
+// public class BooleanOrOperator implements CustomPropertyOperatorsInstance {
+//
+// public static final BooleanInstance FALSE_INSTANCE;
+// public static final BooleanInstance TRUE_INSTANCE;
+//
+// static {
+// FALSE_INSTANCE = LayersFactory.eINSTANCE.createBooleanInstance();
+// FALSE_INSTANCE.setValue(false);
+// TRUE_INSTANCE = LayersFactory.eINSTANCE.createBooleanInstance();
+// TRUE_INSTANCE.setValue(true);
+// }
+//
+// /**
+// *
+// * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance#getComputePropertyValueCommand(org.eclipse.emf.common.util.EList)
+// *
+// * @param property
+// * @return
+// * @throws LayersException
+// */
+// @Override
+// public ComputePropertyValueCommand getComputePropertyValueCommand(EList<ComputePropertyValueCommand> nestedCommand) throws LayersException {
+// return new BooleanOrOperatorCommand(nestedCommand);
+// }
+//
+//
+// /**
+// * Class implementing an And command.
+// *
+// */
+// class BooleanOrOperatorCommand implements ComputePropertyValueCommand {
+//
+// EList<ComputePropertyValueCommand> nestedCommand;
+//
+// /**
+// *
+// * Constructor.
+// *
+// * @param nestedCommand
+// */
+// public BooleanOrOperatorCommand(EList<ComputePropertyValueCommand> nestedCommand) {
+// this.nestedCommand = nestedCommand;
+// }
+//
+// /**
+// * Compute the value.
+// *
+// * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand#getCmdValue()
+// *
+// * @return
+// * @throws LayersException
+// */
+// @Override
+// public TypeInstance getCmdValue() throws LayersException {
+//
+// // Do an boolean or: at least one value should be true.
+// // Return as soon as a true is encountered
+// for (ComputePropertyValueCommand curCmd : nestedCommand) {
+// boolean curCmdRes = ((BooleanInstance) curCmd.getCmdValue()).isValue();
+// if (curCmdRes == true) {
+// return TRUE_INSTANCE;
+// }
+// }
+//
+// return FALSE_INSTANCE;
+// }
+//
+// }
+// }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/CustomPropertyOperatorsInstance.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/CustomPropertyOperatorsInstance.java
deleted file mode 100755
index a4601be..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/CustomPropertyOperatorsInstance.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
-
-
-/**
- * Interface to be implemented by operators declared as "custom".
- *
- * @author cedric dumoulin
- *
- */
-public interface CustomPropertyOperatorsInstance {
-
-	/**
-	 * Return the command allowing to compute the value resulting on applying this operator on the specified properties.
-	 *
-	 * @param property
-	 * @return The command returning the result
-	 * @throws LayersException
-	 */
-	public ComputePropertyValueCommand getComputePropertyValueCommand(EList<ComputePropertyValueCommand> property) throws LayersException;
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/FillAverageOperator.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/FillAverageOperator.java
index 964f8fb..662d014 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/FillAverageOperator.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/operators/FillAverageOperator.java
@@ -1,101 +1,101 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
-
-
-/**
- * @author cedric dumoulin
- *
- */
-public class FillAverageOperator implements CustomPropertyOperatorsInstance {
-
-	public static final BooleanInstance FALSE_INSTANCE;
-	public static final BooleanInstance TRUE_INSTANCE;
-
-	static {
-		FALSE_INSTANCE = LayersFactory.eINSTANCE.createBooleanInstance();
-		FALSE_INSTANCE.setValue(false);
-		TRUE_INSTANCE = LayersFactory.eINSTANCE.createBooleanInstance();
-		TRUE_INSTANCE.setValue(true);
-	}
-
-	/**
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance#getComputePropertyValueCommand(org.eclipse.emf.common.util.EList)
-	 *
-	 * @param property
-	 * @return
-	 * @throws LayersException
-	 */
-	@Override
-	public ComputePropertyValueCommand getComputePropertyValueCommand(EList<ComputePropertyValueCommand> nestedCommand) throws LayersException {
-		return new FillAverageCommand(nestedCommand);
-	}
-
-
-	/**
-	 * Class implementing an And command.
-	 *
-	 */
-	class FillAverageCommand implements ComputePropertyValueCommand {
-
-		EList<ComputePropertyValueCommand> nestedCommand;
-
-		/**
-		 *
-		 * Constructor.
-		 *
-		 * @param nestedCommand
-		 */
-		public FillAverageCommand(EList<ComputePropertyValueCommand> nestedCommand) {
-			this.nestedCommand = nestedCommand;
-		}
-
-		/**
-		 * Compute the value.
-		 *
-		 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand#getCmdValue()
-		 *
-		 * @return
-		 * @throws LayersException
-		 */
-		@Override
-		public TypeInstance getCmdValue() throws LayersException {
-
-			int fill = 0;
-			int color = 0;
-			// compute the average values
-			for (ComputePropertyValueCommand curCmd : nestedCommand) {
-				FillInstance curValue = ((FillInstance) curCmd.getCmdValue());
-				fill += curValue.getTransparency();
-				color += curValue.getFillColor().getValue();
-			}
-
-			// Create a result
-			FillInstance res = LayersFactory.eINSTANCE.createFillInstance();
-			ColorInstance colorInstance = LayersFactory.eINSTANCE.createColorInstance();
-			res.setFillColor(colorInstance);
-			res.setTransparency(fill / nestedCommand.size());
-			res.getFillColor().setValue(color / nestedCommand.size());
-			return res;
-		}
-
-	}
-}
+/// *******************************************************************************
+// * Copyright (c) 2013 CEA LIST.
+// * All rights reserved. This program and the accompanying materials
+// * are made available under the terms of the Eclipse Public License v1.0
+// * which accompanies this distribution, and is available at
+// * http://www.eclipse.org/legal/epl-v10.html
+// *
+// * Contributors:
+// * Cedric Dumoulin - cedric.dumoulin@lifl.fr
+// ******************************************************************************/
+// package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators;
+//
+// import org.eclipse.emf.common.util.EList;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
+//
+//
+/// **
+// * @author cedric dumoulin
+// *
+// */
+// public class FillAverageOperator implements CustomPropertyOperatorsInstance {
+//
+// public static final BooleanInstance FALSE_INSTANCE;
+// public static final BooleanInstance TRUE_INSTANCE;
+//
+// static {
+// FALSE_INSTANCE = LayersFactory.eINSTANCE.createBooleanInstance();
+// FALSE_INSTANCE.setValue(false);
+// TRUE_INSTANCE = LayersFactory.eINSTANCE.createBooleanInstance();
+// TRUE_INSTANCE.setValue(true);
+// }
+//
+// /**
+// *
+// * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance#getComputePropertyValueCommand(org.eclipse.emf.common.util.EList)
+// *
+// * @param property
+// * @return
+// * @throws LayersException
+// */
+// @Override
+// public ComputePropertyValueCommand getComputePropertyValueCommand(EList<ComputePropertyValueCommand> nestedCommand) throws LayersException {
+// return new FillAverageCommand(nestedCommand);
+// }
+//
+//
+// /**
+// * Class implementing an And command.
+// *
+// */
+// class FillAverageCommand implements ComputePropertyValueCommand {
+//
+// EList<ComputePropertyValueCommand> nestedCommand;
+//
+// /**
+// *
+// * Constructor.
+// *
+// * @param nestedCommand
+// */
+// public FillAverageCommand(EList<ComputePropertyValueCommand> nestedCommand) {
+// this.nestedCommand = nestedCommand;
+// }
+//
+// /**
+// * Compute the value.
+// *
+// * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand#getCmdValue()
+// *
+// * @return
+// * @throws LayersException
+// */
+// @Override
+// public TypeInstance getCmdValue() throws LayersException {
+//
+// int fill = 0;
+// int color = 0;
+// // compute the average values
+// for (ComputePropertyValueCommand curCmd : nestedCommand) {
+// FillInstance curValue = ((FillInstance) curCmd.getCmdValue());
+// fill += curValue.getTransparency();
+// color += curValue.getFillColor().getValue();
+// }
+//
+// // Create a result
+// FillInstance res = LayersFactory.eINSTANCE.createFillInstance();
+// ColorInstance colorInstance = LayersFactory.eINSTANCE.createColorInstance();
+// res.setFillColor(colorInstance);
+// res.setTransparency(fill / nestedCommand.size());
+// res.getFillColor().setValue(color / nestedCommand.size());
+// return res;
+// }
+//
+// }
+// }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/resource/CustomLayersModelResource.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/resource/CustomLayersModelResource.java
new file mode 100755
index 0000000..7d76dc5
--- /dev/null
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/resource/CustomLayersModelResource.java
@@ -0,0 +1,41 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.resource;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.papyrus.emf.resources.AbstractEMFResourceWithUUID;
+
+/**
+ * @author QL238289
+ * 
+ *         This, in conjunction with the extension point org.eclipse.emf.ecore.extension_parser,
+ *         is used to make the layers resource serialize itself with xmi IDs instead of positional IDs
+ *
+ */
+public class CustomLayersModelResource extends AbstractEMFResourceWithUUID {
+
+	public static final String LAYERS_RESOURCE_FILE_EXTENSION = "layers"; //$NON-NLS-1$
+
+	/**
+	 * Constructor.
+	 *
+	 * @param uri
+	 */
+	public CustomLayersModelResource(URI uri) {
+		super(uri);
+	}
+
+
+
+}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/model/LayersModelResourceFactory.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/resource/LayersModelResourceFactory.java
similarity index 81%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/model/LayersModelResourceFactory.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/resource/LayersModelResourceFactory.java
index 71c58b5..cb90d88 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/model/LayersModelResourceFactory.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/resource/LayersModelResourceFactory.java
@@ -11,7 +11,7 @@
  *   
  *****************************************************************************/
 
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.model;
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.resource;
 
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -26,13 +26,12 @@
 	/**
 	 * @see org.eclipse.emf.ecore.resource.Resource.Factory#createResource(org.eclipse.emf.common.util.URI)
 	 *
-	 * @param resourceURI
+	 * @param uri
 	 * @return
 	 */
 	@Override
-	public Resource createResource(URI resourceURI) {
-		return null;
-		// return new LayersModelResource(resourceURI);
+	public Resource createResource(URI uri) {
+		return new CustomLayersModelResource(uri);
 	}
 
 }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/ECoreUtils.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/util/ECoreUtils.java
similarity index 89%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/ECoreUtils.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/util/ECoreUtils.java
index 17ab215..20572cc 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/ECoreUtils.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/util/ECoreUtils.java
@@ -1,14 +1,17 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.util;
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
+ */
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.util;
 
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/PropertyIndexedList.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/util/PropertyIndexedList.java
similarity index 95%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/PropertyIndexedList.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/util/PropertyIndexedList.java
index ee395d6..1dc3a4e 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/PropertyIndexedList.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/util/PropertyIndexedList.java
@@ -1,14 +1,17 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.util;
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
+ */
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.util;
 
 import static org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.Activator.log;
 
@@ -50,10 +53,9 @@
 	private static final long serialVersionUID = 1L;
 
 	/**
-	 * The backuped Map. The implementation should be an Observable Map from EMF.
-	 *
+	 * The backuped Map.
 	 */
-	protected EMap<String, T> map;
+	protected Map<String, T> map;
 
 	/**
 	 * The ordered list of Property, used to indexing this List.
@@ -96,7 +98,7 @@
 		MAP_FEATURE_ID = mapFeatureID;
 		NULL_VALUE = nullValue;
 		mapParentClasstype = layer.getClass();
-		this.map = map;
+		this.map = map.map();
 		init();
 	}
 
@@ -118,7 +120,7 @@
 		MAP_FEATURE_ID = mapFeatureID;
 		NULL_VALUE = nullValue;
 		mapParentClasstype = layer.getClass();
-		this.map = (EMap<String, T>) map;
+		this.map = map;
 		init();
 	}
 
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/PropertyUtils.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/util/PropertyUtils.java
similarity index 87%
rename from layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/PropertyUtils.java
rename to layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/util/PropertyUtils.java
index 2ba66b5..4e12832 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src-gen/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/util/PropertyUtils.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/util/PropertyUtils.java
@@ -1,14 +1,18 @@
 /*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
+/**
+ * Copyright (c) 2013, 2017 CEA LIST & LIFL 
+ * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- *
+ * 
  * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.util;
+ *   Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *   Quentin Le Menez quentin.lemenez@cea.fr
+ * 
+ */
+package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.util;
 
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit/.classpath b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit/.classpath
index ad32c83..eca7bdb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit/.classpath
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit/.settings/org.eclipse.jdt.core.prefs b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit/.settings/org.eclipse.jdt.core.prefs
index 94d61f0..b3aa6d6 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit/.settings/org.eclipse.jdt.core.prefs
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit/.settings/org.eclipse.jdt.core.prefs
@@ -1,10 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.8
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit/META-INF/MANIFEST.MF b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit/META-INF/MANIFEST.MF
index cc1b2d1..7f7502e 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit/META-INF/MANIFEST.MF
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit/META-INF/MANIFEST.MF
@@ -1,10 +1,10 @@
 Manifest-Version: 1.0
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.gmf.runtime.notation;bundle-version="1.5.0",
- org.eclipse.gmf.runtime.notation.edit;bundle-version="1.4.0",
- org.eclipse.emf.edit;bundle-version="2.9.0",
- org.eclipse.emf.ecore.edit;bundle-version="2.8.0"
+Require-Bundle: org.eclipse.ui;bundle-version="[3.110.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.15.0,4.0.0)",
+ org.eclipse.gmf.runtime.notation;bundle-version="[1.9.0,2.0.0)",
+ org.eclipse.gmf.runtime.notation.edit;bundle-version="[1.7.0,2.0.0)",
+ org.eclipse.emf.edit;bundle-version="[2.14.0,3.0.0)",
+ org.eclipse.emf.ecore.edit;bundle-version="[2.11.0,3.0.0)"
 Export-Package: org.eclipse.papyrus.internal.infra.gmfdiag.layers.notationmodel.edit
 Bundle-Vendor: %providerName
 Bundle-ActivationPolicy: lazy
@@ -14,4 +14,5 @@
 Bundle-ManifestVersion: 2
 Bundle-Activator: org.eclipse.papyrus.internal.infra.gmfdiag.layers.notationmodel.edit.Activator
 Bundle-SymbolicName: org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit;singleton:=true
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Automatic-Module-Name: org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/.classpath b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/.classpath
index ad32c83..eca7bdb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/.classpath
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/.settings/org.eclipse.jdt.core.prefs b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/.settings/org.eclipse.jdt.core.prefs
index 94d61f0..b3aa6d6 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/.settings/org.eclipse.jdt.core.prefs
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/.settings/org.eclipse.jdt.core.prefs
@@ -1,10 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.8
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/META-INF/MANIFEST.MF b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/META-INF/MANIFEST.MF
index 5e1aeb5..08fdb40 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/META-INF/MANIFEST.MF
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/META-INF/MANIFEST.MF
@@ -1,15 +1,16 @@
 Manifest-Version: 1.0
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.papyrus.infra.gmfdiag.layers.model;bundle-version="0.7.0",
- org.eclipse.emf.ecore;bundle-version="2.9.0",
- org.eclipse.papyrus.infra.core;bundle-version="1.2.0",
- org.eclipse.core.resources;bundle-version="3.8.100",
- org.eclipse.papyrus.infra.gmfdiag.common;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.papyrus.infra.core.log;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.emf,
- org.eclipse.emf.ecore.xmi,
- org.eclipse.papyrus.infra.gmfdiag.css,
- org.eclipse.papyrus.infra.gmfdiag.css.properties
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.15.0,4.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.layers.model;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.15.0,3.0.0)",
+ org.eclipse.papyrus.infra.core;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.13.0,4.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.common;bundle-version="[3.101.0,4.0.0)",
+ org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.papyrus.infra.emf;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.15.0,3.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.css;bundle-version="[2.3.0,3.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.css.properties;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.emf;bundle-version="[1.0.0,2.0.0)"
 Export-Package: org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime,
  org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.model,
  org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.service
@@ -21,4 +22,5 @@
 Bundle-ManifestVersion: 2
 Bundle-Activator: org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.Activator
 Bundle-SymbolicName: org.eclipse.papyrus.infra.gmfdiag.layers.runtime;singleton:=true
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Automatic-Module-Name: org.eclipse.papyrus.infra.gmfdiag.layers.runtime
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayerStackSynchronizer.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayerStackSynchronizer.java
index 22fe44c..eec0410 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayerStackSynchronizer.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayerStackSynchronizer.java
@@ -564,8 +564,9 @@
 	 */
 	@Override
 	public void layerSet(Notification notification) {
-		log.info(this.getClass().getSimpleName() + " layerSet(not implemented) " + notification.getNewValue());
-
+		if (log.isDebugEnabled()) {
+			log.info(this.getClass().getSimpleName() + " layerSet(not implemented) " + notification.getNewValue());
+		}
 	}
 
 
@@ -728,8 +729,9 @@
 	 */
 	@Override
 	public void viewMovedBetweenLayer(Notification notification) {
-		log.info(this.getClass().getSimpleName() + " viewMovedBetweenLayer(not implemented) " + notification.getNewValue());
-
+		if (log.isDebugEnabled()) {
+			log.info(this.getClass().getSimpleName() + " viewMovedBetweenLayer(not implemented) " + notification.getNewValue());
+		}
 	}
 
 
@@ -742,7 +744,9 @@
 	 */
 	@Override
 	public void diagramViewAdded(Notification msg) {
-		log.info(this.getClass().getSimpleName() + " diagramViewAdded(not implemented) " + msg.getNewValue());
+		if (log.isDebugEnabled()) {
+			log.info(this.getClass().getSimpleName() + " diagramViewAdded(not implemented) " + msg.getNewValue());
+		}
 
 		// WARNING !!!
 		// Some filtering should be done on the event.
@@ -762,7 +766,9 @@
 	 */
 	@Override
 	public void diagramViewRemoved(Notification msg) {
-		log.info(this.getClass().getSimpleName() + " diagramViewRemoved(not implemented) " + msg.getOldValue());
+		if (log.isDebugEnabled()) {
+			log.info(this.getClass().getSimpleName() + " diagramViewRemoved(not implemented) " + msg.getOldValue());
+		}
 
 		// WARNING !!!
 		// Some filtering should be done on the event.
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayersModelEventNotifier.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayersModelEventNotifier.java
index b0cd768..b8eeb3d 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayersModelEventNotifier.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayersModelEventNotifier.java
@@ -25,7 +25,7 @@
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringToTypeInstanceMapImpl;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.util.ECoreUtils;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.util.ECoreUtils;
 
 /**
  * This class listen to a {@link LayersStack} and send event to listeners.
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayersModelEventUtils.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayersModelEventUtils.java
index e8c2ba8..83107f4 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayersModelEventUtils.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayersModelEventUtils.java
@@ -19,7 +19,7 @@
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayer;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersPackage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.StringToTypeInstanceMapImpl;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.util.ECoreUtils;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.util.ECoreUtils;
 
 
 /**
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayersStackAndApplicationLifeCycleEventNotifier.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayersStackAndApplicationLifeCycleEventNotifier.java
index 301d3ec..f75dac2 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayersStackAndApplicationLifeCycleEventNotifier.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/LayersStackAndApplicationLifeCycleEventNotifier.java
@@ -40,7 +40,7 @@
 	 * States used in the state machine.
 	 */
 	protected enum State {
-		NoApplication, ApplicationCreated, disposed
+	NoApplication, ApplicationCreated, disposed
 	};
 
 	protected State state;
@@ -72,6 +72,7 @@
 		@Override
 		public void layersModelRootAdded(Notification msg) {
 			if (state == State.NoApplication) {
+				layersModel.shouldSave(true);
 				transitionNoApplicationToApplicationCreatedState();
 			}
 		}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/commands/HideLayerElementsCommand.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/commands/HideLayerElementsCommand.java
index cac3c9a..e3c6d26 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/commands/HideLayerElementsCommand.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/commands/HideLayerElementsCommand.java
@@ -118,7 +118,7 @@
 		// This used to call upon a style but the possibility of a style being present in multiple applied CSS broke the functionality
 		// The style strategy can be reintroduced if there is a way to only call upon one applied CSS instead of All of them
 
-		if (layer.isLayerEnabled() && !isAppliedCSS && null != cssToHide) {
+		if (!layer.isLayerEnabled() && !isAppliedCSS && null != cssToHide) {
 			AddCSSStyleSheetCommand acssc = new AddCSSStyleSheetCommand(ted, cssDiagram,
 					CSSStyles.CSS_DIAGRAM_STYLESHEETS_KEY,
 					NotationPackage.eINSTANCE.getEObjectListValueStyle(),
@@ -126,7 +126,7 @@
 					cssToHide);
 			acssc.execute();
 		}
-		if (!layer.isLayerEnabled() && isAppliedCSS && null != cssToHide) {
+		if (layer.isLayerEnabled() && isAppliedCSS && null != cssToHide) {
 			RemoveCSSStyleSheetCommand rcssc = new RemoveCSSStyleSheetCommand(ted, cssDiagram,
 					CSSStyles.CSS_DIAGRAM_STYLESHEETS_KEY,
 					NotationPackage.eINSTANCE.getEObjectListValueStyle(),
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/model/LayersModelResource.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/model/LayersModelResource.java
index 1a05b44..5e89711 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/model/LayersModelResource.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/model/LayersModelResource.java
@@ -14,10 +14,13 @@
 
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.papyrus.infra.core.resource.AbstractModelWithSharedResource;
 import org.eclipse.papyrus.infra.core.resource.IModel;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.Activator;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.LayersStackAndApplicationLifeCycleEventNotifier;
 
 
@@ -43,13 +46,15 @@
 
 	private LayersStackAndApplicationLifeCycleEventNotifier layersStackAndApplicationLifeCycleEventNotifier = null;
 
+	boolean isDirty = false;
+
 
 	/**
 	 * Constructor.
 	 *
 	 */
 	public LayersModelResource() {
-		this.modelKind = modelKind.master;
+		this.modelKind = modelKind.slave;
 	}
 
 
@@ -118,15 +123,38 @@
 	}
 
 	/**
+	 * This is used to avoid creating the resource if no stack has been created
+	 * 
+	 * @param isDirty
+	 */
+	public void shouldSave(boolean isDirty) {
+		this.isDirty = isDirty;
+	}
+
+	/**
 	 * @see org.eclipse.papyrus.infra.core.resource.AbstractModelWithSharedResource#saveModel()
 	 *
 	 * @throws IOException
 	 */
 	@Override
 	public void saveModel() throws IOException {
-		// TODO Override the saveModel method in order to remove the modelKind=master
-		// This should be saved if the resource has been modified and is not empty
-		// i.e. contains at least one reference to a CSS
+
+		if (isDirty) {
+			final ModelSet set = getModelManager();
+
+			for (Resource resource : getResources()) {
+				if (set.shouldSave(resource)) {
+					try {
+						resource.save(null);
+					} catch (IOException ex) {
+						// If an exception occurs, we should not prevent other resources from being saved.
+						// This would probably make things even worse. Catch and log.
+						Activator.log.error(ex);
+					}
+				}
+			}
+		}
+
 		super.saveModel();
 	}
 
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/notifier/AbstractDerivedViewLayerNotifier.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/notifier/AbstractDerivedViewLayerNotifier.java
index 6099bd2..ddd5078 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/notifier/AbstractDerivedViewLayerNotifier.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/notifier/AbstractDerivedViewLayerNotifier.java
@@ -1,134 +1,134 @@
-/*****************************************************************************
- * Copyright (c) 2013 Cedric Dumoulin.
- *
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *  Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *
- *****************************************************************************/
-
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.notifier;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer;
-
-/**
- * Common ancestor of DerivedViewLayerNotifier.
- * This class maintains a list of listeners. It allows to add and remove listeners.
- * If there is no more listener, stop listening on external events.
- * Start listening on external events as soon as there is a listener.
- *
- * @author cedric dumoulin
- *
- */
-public abstract class AbstractDerivedViewLayerNotifier {
-
-	/**
-	 * List of listeners that should be notified.
-	 */
-	protected List<RegExpLayer> listeners = new ArrayList<RegExpLayer>();
-
-	/**
-	 * Indicate if this Notifier is listening on externals events
-	 */
-	private boolean isListening = false;
-
-	/**
-	 * Attach the listener to this notifier.
-	 *
-	 * @param layer
-	 */
-	public void addListener(RegExpLayer listener) {
-		if (!listeners.contains(listener)) {
-			listeners.add(listener);
-			checkStartListening();
-		}
-	}
-
-	/**
-	 * Attach the listener to this notifier.
-	 *
-	 * @param layer
-	 */
-	public void removeListener(RegExpLayer listener) {
-		listeners.remove(listener);
-		checkStopListening();
-
-	}
-
-	/**
-	 * Attach the listener to this notifier.
-	 *
-	 * @param layer
-	 */
-	public void removeAllListeners() {
-		isListening = false;
-		listeners.clear();
-		stopListening();
-	}
-
-	/**
-	 * Check if we should start listening.
-	 * If the class is not listening on externals events, and there is some listeners, then
-	 * start listening (call {@link #startListening()} and set {@link #isListening()} to true.
-	 */
-	private void checkStartListening() {
-		if (!isListening() && listeners.size() > 0) {
-			isListening = true;
-			startListening();
-		}
-	}
-
-	/**
-	 * Check if we should stop listening.
-	 * If the class is listening on externals events, and there is no more listeners, then
-	 * stop listening (call {@link #stopListening()} and set {@link #isListening()} to false.
-	 */
-	private void checkStopListening() {
-		if (isListening() && listeners.size() == 0) {
-			isListening = false;
-			stopListening();
-		}
-	}
-
-	/**
-	 * fire the event to all registered listeners.
-	 */
-	public void fireEvent() {
-		for (RegExpLayer listener : listeners) {
-			// listener.evaluateExpr();
-		}
-	}
-
-	/**
-	 * Start listening on external events.
-	 * Should be implemented by subclass
-	 */
-	abstract protected void startListening();
-
-	/**
-	 * Stop listening on external events.
-	 * Should be implemented by subclass
-	 */
-	abstract protected void stopListening();
-
-	/**
-	 * Return true if this Notifier is listening on externals events.
-	 *
-	 * @return
-	 */
-	public boolean isListening() {
-		// This notifier is listening if there is some listener in the list
-		return isListening;
-	}
-
-
-
-}
+/// *****************************************************************************
+// * Copyright (c) 2013 Cedric Dumoulin.
+// *
+// *
+// * All rights reserved. This program and the accompanying materials
+// * are made available under the terms of the Eclipse Public License v1.0
+// * which accompanies this distribution, and is available at
+// * http://www.eclipse.org/legal/epl-v10.html
+// *
+// * Contributors:
+// * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+// *
+// *****************************************************************************/
+//
+// package org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.notifier;
+//
+// import java.util.ArrayList;
+// import java.util.List;
+//
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer;
+//
+/// **
+// * Common ancestor of DerivedViewLayerNotifier.
+// * This class maintains a list of listeners. It allows to add and remove listeners.
+// * If there is no more listener, stop listening on external events.
+// * Start listening on external events as soon as there is a listener.
+// *
+// * @author cedric dumoulin
+// *
+// */
+// public abstract class AbstractDerivedViewLayerNotifier {
+//
+// /**
+// * List of listeners that should be notified.
+// */
+// protected List<RegExpLayer> listeners = new ArrayList<RegExpLayer>();
+//
+// /**
+// * Indicate if this Notifier is listening on externals events
+// */
+// private boolean isListening = false;
+//
+// /**
+// * Attach the listener to this notifier.
+// *
+// * @param layer
+// */
+// public void addListener(RegExpLayer listener) {
+// if (!listeners.contains(listener)) {
+// listeners.add(listener);
+// checkStartListening();
+// }
+// }
+//
+// /**
+// * Attach the listener to this notifier.
+// *
+// * @param layer
+// */
+// public void removeListener(RegExpLayer listener) {
+// listeners.remove(listener);
+// checkStopListening();
+//
+// }
+//
+// /**
+// * Attach the listener to this notifier.
+// *
+// * @param layer
+// */
+// public void removeAllListeners() {
+// isListening = false;
+// listeners.clear();
+// stopListening();
+// }
+//
+// /**
+// * Check if we should start listening.
+// * If the class is not listening on externals events, and there is some listeners, then
+// * start listening (call {@link #startListening()} and set {@link #isListening()} to true.
+// */
+// private void checkStartListening() {
+// if (!isListening() && listeners.size() > 0) {
+// isListening = true;
+// startListening();
+// }
+// }
+//
+// /**
+// * Check if we should stop listening.
+// * If the class is listening on externals events, and there is no more listeners, then
+// * stop listening (call {@link #stopListening()} and set {@link #isListening()} to false.
+// */
+// private void checkStopListening() {
+// if (isListening() && listeners.size() == 0) {
+// isListening = false;
+// stopListening();
+// }
+// }
+//
+// /**
+// * fire the event to all registered listeners.
+// */
+// public void fireEvent() {
+// for (RegExpLayer listener : listeners) {
+// // listener.evaluateExpr();
+// }
+// }
+//
+// /**
+// * Start listening on external events.
+// * Should be implemented by subclass
+// */
+// abstract protected void startListening();
+//
+// /**
+// * Stop listening on external events.
+// * Should be implemented by subclass
+// */
+// abstract protected void stopListening();
+//
+// /**
+// * Return true if this Notifier is listening on externals events.
+// *
+// * @return
+// */
+// public boolean isListening() {
+// // This notifier is listening if there is some listener in the list
+// return isListening;
+// }
+//
+//
+//
+// }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/notifier/DiagramChangedEventNotifier.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/notifier/DiagramChangedEventNotifier.java
index 6bae920..329640e 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/notifier/DiagramChangedEventNotifier.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/notifier/DiagramChangedEventNotifier.java
@@ -1,67 +1,67 @@
-/*****************************************************************************
- * Copyright (c) 2013 Cedric Dumoulin.
- *
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *  Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *
- *****************************************************************************/
-
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.notifier;
-
-import org.eclipse.gmf.runtime.notation.Diagram;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
-
-/**
- * Notify listeners when a change occurs on an domain element associated to an element of the LayerStack's diagram.
- *
- * @author cedric dumoulin
- *
- */
-public class DiagramChangedEventNotifier extends AbstractDerivedViewLayerNotifier {
-
-	/**
-	 * {@link LayersStack} containing the {@link Diagram} on which this notifier is listening changes.
-	 */
-	protected LayersStack layersStack;
-
-	/**
-	 *
-	 * Constructor.
-	 *
-	 * @param layersStack
-	 */
-	public DiagramChangedEventNotifier(LayersStack layersStack) {
-		this.layersStack = layersStack;
-	}
-
-	/**
-	 * Start listening on externals events that should be relayed by this Notifier.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.notifier.AbstractDerivedViewLayerNotifier#startListening()
-	 *
-	 */
-	@Override
-	protected void startListening() {
-		// TODO Auto-generated method stub
-
-	}
-
-	/**
-	 * Start listening on externals events that should be relayed by this Notifier.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.notifier.AbstractDerivedViewLayerNotifier#stopListening()
-	 *
-	 */
-	@Override
-	protected void stopListening() {
-		// TODO Auto-generated method stub
-
-	}
-
-}
+/// *****************************************************************************
+// * Copyright (c) 2013 Cedric Dumoulin.
+// *
+// *
+// * All rights reserved. This program and the accompanying materials
+// * are made available under the terms of the Eclipse Public License v1.0
+// * which accompanies this distribution, and is available at
+// * http://www.eclipse.org/legal/epl-v10.html
+// *
+// * Contributors:
+// * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+// *
+// *****************************************************************************/
+//
+// package org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.notifier;
+//
+// import org.eclipse.gmf.runtime.notation.Diagram;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
+//
+/// **
+// * Notify listeners when a change occurs on an domain element associated to an element of the LayerStack's diagram.
+// *
+// * @author cedric dumoulin
+// *
+// */
+// public class DiagramChangedEventNotifier extends AbstractDerivedViewLayerNotifier {
+//
+// /**
+// * {@link LayersStack} containing the {@link Diagram} on which this notifier is listening changes.
+// */
+// protected LayersStack layersStack;
+//
+// /**
+// *
+// * Constructor.
+// *
+// * @param layersStack
+// */
+// public DiagramChangedEventNotifier(LayersStack layersStack) {
+// this.layersStack = layersStack;
+// }
+//
+// /**
+// * Start listening on externals events that should be relayed by this Notifier.
+// *
+// * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.notifier.AbstractDerivedViewLayerNotifier#startListening()
+// *
+// */
+// @Override
+// protected void startListening() {
+// // TODO Auto-generated method stub
+//
+// }
+//
+// /**
+// * Start listening on externals events that should be relayed by this Notifier.
+// *
+// * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.notifier.AbstractDerivedViewLayerNotifier#stopListening()
+// *
+// */
+// @Override
+// protected void stopListening() {
+// // TODO Auto-generated method stub
+//
+// }
+//
+// }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/notifier/DomainChangedEventNotifier.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/notifier/DomainChangedEventNotifier.java
index fea181d..f00a45d 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/notifier/DomainChangedEventNotifier.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.runtime/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/runtime/notifier/DomainChangedEventNotifier.java
@@ -1,67 +1,67 @@
-/*****************************************************************************
- * Copyright (c) 2013 Cedric Dumoulin.
- *
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *  Cedric Dumoulin  Cedric.dumoulin@lifl.fr - Initial API and implementation
- *
- *****************************************************************************/
-
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.notifier;
-
-import org.eclipse.gmf.runtime.notation.Diagram;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
-
-/**
- * Notify listeners when a change occurs on an domain element associated to an element of the LayerStack's diagram.
- *
- * @author cedric dumoulin
- *
- */
-public class DomainChangedEventNotifier extends AbstractDerivedViewLayerNotifier {
-
-	/**
-	 * {@link LayersStack} containing the {@link Diagram} on which this notifier is listening changes.
-	 */
-	protected LayersStack layersStack;
-
-	/**
-	 *
-	 * Constructor.
-	 *
-	 * @param layersStack
-	 */
-	public DomainChangedEventNotifier(LayersStack layersStack) {
-		this.layersStack = layersStack;
-	}
-
-	/**
-	 * Start listening on externals events that should be relayed by this Notifier.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.notifier.AbstractDerivedViewLayerNotifier#startListening()
-	 *
-	 */
-	@Override
-	protected void startListening() {
-		// TODO Auto-generated method stub
-
-	}
-
-	/**
-	 * Start listening on externals events that should be relayed by this Notifier.
-	 *
-	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.notifier.AbstractDerivedViewLayerNotifier#stopListening()
-	 *
-	 */
-	@Override
-	protected void stopListening() {
-		// TODO Auto-generated method stub
-
-	}
-
-}
+/// *****************************************************************************
+// * Copyright (c) 2013 Cedric Dumoulin.
+// *
+// *
+// * All rights reserved. This program and the accompanying materials
+// * are made available under the terms of the Eclipse Public License v1.0
+// * which accompanies this distribution, and is available at
+// * http://www.eclipse.org/legal/epl-v10.html
+// *
+// * Contributors:
+// * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+// *
+// *****************************************************************************/
+//
+// package org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.notifier;
+//
+// import org.eclipse.gmf.runtime.notation.Diagram;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
+//
+/// **
+// * Notify listeners when a change occurs on an domain element associated to an element of the LayerStack's diagram.
+// *
+// * @author cedric dumoulin
+// *
+// */
+// public class DomainChangedEventNotifier extends AbstractDerivedViewLayerNotifier {
+//
+// /**
+// * {@link LayersStack} containing the {@link Diagram} on which this notifier is listening changes.
+// */
+// protected LayersStack layersStack;
+//
+// /**
+// *
+// * Constructor.
+// *
+// * @param layersStack
+// */
+// public DomainChangedEventNotifier(LayersStack layersStack) {
+// this.layersStack = layersStack;
+// }
+//
+// /**
+// * Start listening on externals events that should be relayed by this Notifier.
+// *
+// * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.notifier.AbstractDerivedViewLayerNotifier#startListening()
+// *
+// */
+// @Override
+// protected void startListening() {
+// // TODO Auto-generated method stub
+//
+// }
+//
+// /**
+// * Start listening on externals events that should be relayed by this Notifier.
+// *
+// * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.notifier.AbstractDerivedViewLayerNotifier#stopListening()
+// *
+// */
+// @Override
+// protected void stopListening() {
+// // TODO Auto-generated method stub
+//
+// }
+//
+// }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/.classpath b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/.classpath
index ad32c83..eca7bdb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/.classpath
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/.settings/org.eclipse.jdt.core.prefs b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/.settings/org.eclipse.jdt.core.prefs
index 94d61f0..b3aa6d6 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,10 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.8
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/META-INF/MANIFEST.MF b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/META-INF/MANIFEST.MF
index 22c4a01..6c3006d 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/META-INF/MANIFEST.MF
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/META-INF/MANIFEST.MF
@@ -1,41 +1,41 @@
 Manifest-Version: 1.0
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.papyrus.infra.core.sasheditor;bundle-version="1.2.0",
- org.eclipse.ui.forms;bundle-version="3.5.200",
- org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.7.0",
- org.eclipse.emf;bundle-version="2.6.0",
- org.eclipse.papyrus.infra.core;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.gmfdiag.layers.runtime;bundle-version="0.7.0",
- org.eclipse.core.databinding,
- org.eclipse.core.databinding.beans,
- org.eclipse.core.databinding.observable,
- org.eclipse.core.databinding.property,
- org.eclipse.emf.databinding,
- org.eclipse.uml2.uml;bundle-version="4.1.0",
- org.eclipse.uml2.uml.edit;bundle-version="4.0.100",
- org.eclipse.emf.databinding.edit;bundle-version="1.3.0",
- org.eclipse.jface.databinding;bundle-version="1.6.200",
- org.eclipse.gmf.runtime.diagram.ui.properties,
- org.eclipse.ui.ide;bundle-version="3.9.0",
- org.eclipse.papyrus.infra.emf;bundle-version="1.2.0",
- org.eclipse.gmf.runtime.diagram.ui.resources.editor;bundle-version="1.7.0",
- org.eclipse.core.expressions;bundle-version="3.4.500",
- org.eclipse.papyrus.infra.gmfdiag.layers.model;bundle-version="0.7.0",
- org.eclipse.papyrus.views.modelexplorer;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.properties.ui;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.widgets;bundle-version="1.2.0",
- org.eclipse.ui.navigator;bundle-version="3.5.300",
- org.eclipse.gmf.runtime.notation.edit;bundle-version="1.7.0",
- org.eclipse.papyrus.infra.services.labelprovider;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.gmfdiag.hyperlink;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.core.log;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.ui;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.gmfdiag.layers.model.edit;bundle-version="0.7.0",
- org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit,
- org.eclipse.papyrus.infra.gmfdiag.css.properties,
- org.eclipse.papyrus.infra.internationalization.utils,
- org.eclipse.papyrus.infra.viewpoints.policy
+Require-Bundle: org.eclipse.ui;bundle-version="[3.110.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.15.0,4.0.0)",
+ org.eclipse.papyrus.infra.core.sasheditor;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.ui.forms;bundle-version="[3.7.0,4.0.0)",
+ org.eclipse.gmf.runtime.diagram.ui;bundle-version="[1.8.0,2.0.0)",
+ org.eclipse.emf;bundle-version="[2.8.0,3.0.0)",
+ org.eclipse.papyrus.infra.core;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.layers.runtime;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.core.databinding;bundle-version="[1.7.0,2.0.0)",
+ org.eclipse.core.databinding.beans;bundle-version="[1.4.0,2.0.0)",
+ org.eclipse.core.databinding.observable;bundle-version="[1.6.0,2.0.0)",
+ org.eclipse.core.databinding.property;bundle-version="[1.6.0,2.0.0)",
+ org.eclipse.emf.databinding;bundle-version="[1.5.0,2.0.0)",
+ org.eclipse.uml2.uml;bundle-version="[5.4.0,6.0.0)",
+ org.eclipse.uml2.uml.edit;bundle-version="[5.4.0,6.0.0)",
+ org.eclipse.emf.databinding.edit;bundle-version="[1.5.0,2.0.0)",
+ org.eclipse.jface.databinding;bundle-version="[1.8.0,2.0.0)",
+ org.eclipse.gmf.runtime.diagram.ui.properties;bundle-version="[1.7.0,2.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.14.0,4.0.0)",
+ org.eclipse.papyrus.infra.emf;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.gmf.runtime.diagram.ui.resources.editor;bundle-version="[1.7.0,2.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.6.0,4.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.layers.model;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.papyrus.views.modelexplorer;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.infra.properties.ui;bundle-version="[3.3.0,4.0.0)",
+ org.eclipse.papyrus.infra.widgets;bundle-version="[3.3.0,4.0.0)",
+ org.eclipse.ui.navigator;bundle-version="[3.7.0,4.0.0)",
+ org.eclipse.gmf.runtime.notation.edit;bundle-version="[1.7.0,2.0.0)",
+ org.eclipse.papyrus.infra.services.labelprovider;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.hyperlink;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.papyrus.infra.ui;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.layers.model.edit;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.layers.notationmodel.edit;bundle-version="[0.8.0,1.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.css.properties;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.infra.internationalization.utils;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.papyrus.infra.viewpoints.policy;bundle-version="[3.0.0,4.0.0)"
 Bundle-Vendor: %providerName
 Bundle-ActivationPolicy: lazy
 Bundle-Version: 0.8.0.qualifier
@@ -44,4 +44,5 @@
 Bundle-ManifestVersion: 2
 Bundle-Activator: org.eclipse.papyrus.internal.infra.gmfdiag.layers.ui.Activator
 Bundle-SymbolicName: org.eclipse.papyrus.infra.gmfdiag.layers.ui;singleton:=true
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Automatic-Module-Name: org.eclipse.papyrus.infra.gmfdiag.layers.ui
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/layers.ctx b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/layers.ctx
index b1f6b9f..c104a4f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/layers.ctx
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/layers.ctx
@@ -1,1722 +1,1081 @@
 <?xml version="1.0" encoding="ASCII"?>
-<contexts:Context xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:constraints="http://www.eclipse.org/papyrus/constraints/0.9" xmlns:contexts="http://www.eclipse.org/papyrus/properties/contexts/0.9" xmi:id="_umc1gHX6Eeipp8d5W3Vl9g" name="layers">
-  <tabs xmi:id="_Zixx8HX7Eeipp8d5W3Vl9g" label="Layers" id="layers" priority="10">
-    <sections xmi:id="_Zixx8XX7Eeipp8d5W3Vl9g" name="Single LayerNamedStyle" sectionFile="ui/SingleLayerNamedStyle.xwt">
+<contexts:Context xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:constraints="http://www.eclipse.org/papyrus/constraints/0.9" xmlns:contexts="http://www.eclipse.org/papyrus/properties/contexts/0.9" xmi:id="_PEETIMAEEeic_M-KksGsuA" name="layers">
+  <tabs xmi:id="_pzEsYMAEEeic_M-KksGsuA" label="Layers" id="layers" priority="10">
+    <sections xmi:id="_pzN2UMAEEeic_M-KksGsuA" name="Single LayerNamedStyle" sectionFile="ui/SingleLayerNamedStyle.xwt">
       <widget href="ui/SingleLayerNamedStyle.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zixx8nX7Eeipp8d5W3Vl9g" name="Single LayersStack" sectionFile="ui/SingleLayersStack.xwt">
+    <sections xmi:id="_pzRgsMAEEeic_M-KksGsuA" name="Single LayersStack" sectionFile="ui/SingleLayersStack.xwt">
       <widget href="ui/SingleLayersStack.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zixx83X7Eeipp8d5W3Vl9g" name="Single LayerExpression" sectionFile="ui/SingleLayerExpression.xwt">
+    <sections xmi:id="_pzRgscAEEeic_M-KksGsuA" name="Single LayerExpression" sectionFile="ui/SingleLayerExpression.xwt">
       <widget href="ui/SingleLayerExpression.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZAHX7Eeipp8d5W3Vl9g" name="Single ApplicationDependantElement" sectionFile="ui/SingleApplicationDependantElement.xwt">
+    <sections xmi:id="_pzSHwMAEEeic_M-KksGsuA" name="Single ApplicationDependantElement" sectionFile="ui/SingleApplicationDependantElement.xwt">
       <widget href="ui/SingleApplicationDependantElement.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZAXX7Eeipp8d5W3Vl9g" name="Single LayersStackApplication" sectionFile="ui/SingleLayersStackApplication.xwt">
+    <sections xmi:id="_pzSHwcAEEeic_M-KksGsuA" name="Single LayersStackApplication" sectionFile="ui/SingleLayersStackApplication.xwt">
       <widget href="ui/SingleLayersStackApplication.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZAnX7Eeipp8d5W3Vl9g" name="Single FolderElement" sectionFile="ui/SingleFolderElement.xwt">
+    <sections xmi:id="_pzSu0MAEEeic_M-KksGsuA" name="Single FolderElement" sectionFile="ui/SingleFolderElement.xwt">
       <widget href="ui/SingleFolderElement.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZA3X7Eeipp8d5W3Vl9g" name="Single LayerStackDescriptorRegistry" sectionFile="ui/SingleLayerStackDescriptorRegistry.xwt">
+    <sections xmi:id="_pzSu0cAEEeic_M-KksGsuA" name="Single LayerStackDescriptorRegistry" sectionFile="ui/SingleLayerStackDescriptorRegistry.xwt">
       <widget href="ui/SingleLayerStackDescriptorRegistry.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZBHX7Eeipp8d5W3Vl9g" name="Single PropertyRegistry" sectionFile="ui/SinglePropertyRegistry.xwt">
+    <sections xmi:id="_pzTV4MAEEeic_M-KksGsuA" name="Single PropertyRegistry" sectionFile="ui/SinglePropertyRegistry.xwt">
       <widget href="ui/SinglePropertyRegistry.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZBXX7Eeipp8d5W3Vl9g" name="Single Property" sectionFile="ui/SingleProperty.xwt">
+    <sections xmi:id="_pzTV4cAEEeic_M-KksGsuA" name="Single Property" sectionFile="ui/SingleProperty.xwt">
       <widget href="ui/SingleProperty.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZBnX7Eeipp8d5W3Vl9g" name="Single Type" sectionFile="ui/SingleType.xwt">
+    <sections xmi:id="_pzTV4sAEEeic_M-KksGsuA" name="Single Type" sectionFile="ui/SingleType.xwt">
       <widget href="ui/SingleType.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZB3X7Eeipp8d5W3Vl9g" name="Single Metamodel" sectionFile="ui/SingleMetamodel.xwt">
-      <widget href="ui/SingleMetamodel.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZiyZCHX7Eeipp8d5W3Vl9g" name="Single TypeInstance" sectionFile="ui/SingleTypeInstance.xwt">
+    <sections xmi:id="_pzTV48AEEeic_M-KksGsuA" name="Single TypeInstance" sectionFile="ui/SingleTypeInstance.xwt">
       <widget href="ui/SingleTypeInstance.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZCXX7Eeipp8d5W3Vl9g" name="Single ComputePropertyValueCommandItf" sectionFile="ui/SingleComputePropertyValueCommandItf.xwt">
+    <sections xmi:id="_pzTV5MAEEeic_M-KksGsuA" name="Single ComputePropertyValueCommandItf" sectionFile="ui/SingleComputePropertyValueCommandItf.xwt">
       <widget href="ui/SingleComputePropertyValueCommandItf.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZCnX7Eeipp8d5W3Vl9g" name="Single TypeRegistry" sectionFile="ui/SingleTypeRegistry.xwt">
+    <sections xmi:id="_pzT88MAEEeic_M-KksGsuA" name="Single TypeRegistry" sectionFile="ui/SingleTypeRegistry.xwt">
       <widget href="ui/SingleTypeRegistry.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZC3X7Eeipp8d5W3Vl9g" name="Single StringToTypeMap" sectionFile="ui/SingleStringToTypeMap.xwt">
+    <sections xmi:id="_pzT88cAEEeic_M-KksGsuA" name="Single StringToTypeMap" sectionFile="ui/SingleStringToTypeMap.xwt">
       <widget href="ui/SingleStringToTypeMap.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZDHX7Eeipp8d5W3Vl9g" name="Single LayerDescriptorRegistry" sectionFile="ui/SingleLayerDescriptorRegistry.xwt">
+    <sections xmi:id="_pzT88sAEEeic_M-KksGsuA" name="Single LayerDescriptorRegistry" sectionFile="ui/SingleLayerDescriptorRegistry.xwt">
       <widget href="ui/SingleLayerDescriptorRegistry.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZDXX7Eeipp8d5W3Vl9g" name="Single LayerDescriptor" sectionFile="ui/SingleLayerDescriptor.xwt">
+    <sections xmi:id="_pzT888AEEeic_M-KksGsuA" name="Single LayerDescriptor" sectionFile="ui/SingleLayerDescriptor.xwt">
       <widget href="ui/SingleLayerDescriptor.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZDnX7Eeipp8d5W3Vl9g" name="Single LayerApplicationFactory" sectionFile="ui/SingleLayerApplicationFactory.xwt">
+    <sections xmi:id="_pzT89MAEEeic_M-KksGsuA" name="Single LayerApplicationFactory" sectionFile="ui/SingleLayerApplicationFactory.xwt">
       <widget href="ui/SingleLayerApplicationFactory.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZD3X7Eeipp8d5W3Vl9g" name="Single PropertySetterRegistry" sectionFile="ui/SinglePropertySetterRegistry.xwt">
+    <sections xmi:id="_pzUkAMAEEeic_M-KksGsuA" name="Single PropertySetterRegistry" sectionFile="ui/SinglePropertySetterRegistry.xwt">
       <widget href="ui/SinglePropertySetterRegistry.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZEHX7Eeipp8d5W3Vl9g" name="Single PropertySetter" sectionFile="ui/SinglePropertySetter.xwt">
+    <sections xmi:id="_pzUkAcAEEeic_M-KksGsuA" name="Single PropertySetter" sectionFile="ui/SinglePropertySetter.xwt">
       <widget href="ui/SinglePropertySetter.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZEXX7Eeipp8d5W3Vl9g" name="Single StringToPropertySetter" sectionFile="ui/SingleStringToPropertySetter.xwt">
+    <sections xmi:id="_pzUkAsAEEeic_M-KksGsuA" name="Single StringToPropertySetter" sectionFile="ui/SingleStringToPropertySetter.xwt">
       <widget href="ui/SingleStringToPropertySetter.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZEnX7Eeipp8d5W3Vl9g" name="Single LayerOperatorDescriptorRegistry" sectionFile="ui/SingleLayerOperatorDescriptorRegistry.xwt">
+    <sections xmi:id="_pzUkA8AEEeic_M-KksGsuA" name="Single LayerOperatorDescriptorRegistry" sectionFile="ui/SingleLayerOperatorDescriptorRegistry.xwt">
       <widget href="ui/SingleLayerOperatorDescriptorRegistry.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiyZE3X7Eeipp8d5W3Vl9g" name="Single LayerOperatorDescriptor" sectionFile="ui/SingleLayerOperatorDescriptor.xwt">
+    <sections xmi:id="_pzUkBMAEEeic_M-KksGsuA" name="Single LayerOperatorDescriptor" sectionFile="ui/SingleLayerOperatorDescriptor.xwt">
       <widget href="ui/SingleLayerOperatorDescriptor.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZizAEHX7Eeipp8d5W3Vl9g" name="Single PropertyOperator" sectionFile="ui/SinglePropertyOperator.xwt">
+    <sections xmi:id="_pzUkBcAEEeic_M-KksGsuA" name="Single PropertyOperator" sectionFile="ui/SinglePropertyOperator.xwt">
       <widget href="ui/SinglePropertyOperator.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZizAEXX7Eeipp8d5W3Vl9g" name="Single AbstractLayerOperator" sectionFile="ui/SingleAbstractLayerOperator.xwt">
-      <widget href="ui/SingleAbstractLayerOperator.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZizAEnX7Eeipp8d5W3Vl9g" name="Single LayerOperator" sectionFile="ui/SingleLayerOperator.xwt">
+    <sections xmi:id="_pzVLEMAEEeic_M-KksGsuA" name="Single LayerOperator" sectionFile="ui/SingleLayerOperator.xwt">
       <widget href="ui/SingleLayerOperator.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZizAE3X7Eeipp8d5W3Vl9g" name="Single LayersContainer" sectionFile="ui/SingleLayersContainer.xwt">
+    <sections xmi:id="_pzVLEcAEEeic_M-KksGsuA" name="Single LayersContainer" sectionFile="ui/SingleLayersContainer.xwt">
       <widget href="ui/SingleLayersContainer.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZizAFHX7Eeipp8d5W3Vl9g" name="Single DefaultPropertyOperator" sectionFile="ui/SingleDefaultPropertyOperator.xwt">
-      <widget href="ui/SingleDefaultPropertyOperator.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZizAFXX7Eeipp8d5W3Vl9g" name="Single AbstractLayer" sectionFile="ui/SingleAbstractLayer.xwt">
+    <sections xmi:id="_pzVLEsAEEeic_M-KksGsuA" name="Single AbstractLayer" sectionFile="ui/SingleAbstractLayer.xwt">
       <widget href="ui/SingleAbstractLayer.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZizAFnX7Eeipp8d5W3Vl9g" name="Single StringToTypeInstanceMap" sectionFile="ui/SingleStringToTypeInstanceMap.xwt">
+    <sections xmi:id="_pzVyIMAEEeic_M-KksGsuA" name="Single StringToTypeInstanceMap" sectionFile="ui/SingleStringToTypeInstanceMap.xwt">
       <widget href="ui/SingleStringToTypeInstanceMap.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZizAF3X7Eeipp8d5W3Vl9g" name="Single Folder" sectionFile="ui/SingleFolder.xwt">
+    <sections xmi:id="_pzVyIcAEEeic_M-KksGsuA" name="Single Folder" sectionFile="ui/SingleFolder.xwt">
       <widget href="ui/SingleFolder.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZizAGHX7Eeipp8d5W3Vl9g" name="Single IntInstance" sectionFile="ui/SingleIntInstance.xwt">
-      <widget href="ui/SingleIntInstance.xwt#/"/>
+    <sections xmi:id="_pzVyIsAEEeic_M-KksGsuA" name="Single Metamodel" sectionFile="ui/SingleMetamodel.xwt">
+      <widget href="ui/SingleMetamodel.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZizAGXX7Eeipp8d5W3Vl9g" name="Single BooleanInstance" sectionFile="ui/SingleBooleanInstance.xwt">
-      <widget href="ui/SingleBooleanInstance.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZizAGnX7Eeipp8d5W3Vl9g" name="Single StringInstance" sectionFile="ui/SingleStringInstance.xwt">
-      <widget href="ui/SingleStringInstance.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZizAG3X7Eeipp8d5W3Vl9g" name="Single IntType" sectionFile="ui/SingleIntType.xwt">
-      <widget href="ui/SingleIntType.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZizAHHX7Eeipp8d5W3Vl9g" name="Single BooleanType" sectionFile="ui/SingleBooleanType.xwt">
-      <widget href="ui/SingleBooleanType.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZizAHXX7Eeipp8d5W3Vl9g" name="Single StringType" sectionFile="ui/SingleStringType.xwt">
-      <widget href="ui/SingleStringType.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZizAHnX7Eeipp8d5W3Vl9g" name="Single CustomType" sectionFile="ui/SingleCustomType.xwt">
-      <widget href="ui/SingleCustomType.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZiznIHX7Eeipp8d5W3Vl9g" name="Single TopLayerOperator" sectionFile="ui/SingleTopLayerOperator.xwt">
+    <sections xmi:id="_pzVyI8AEEeic_M-KksGsuA" name="Single TopLayerOperator" sectionFile="ui/SingleTopLayerOperator.xwt">
       <widget href="ui/SingleTopLayerOperator.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiznIXX7Eeipp8d5W3Vl9g" name="Single StackedLayerOperator" sectionFile="ui/SingleStackedLayerOperator.xwt">
+    <sections xmi:id="_pzWZMMAEEeic_M-KksGsuA" name="Single StackedLayerOperator" sectionFile="ui/SingleStackedLayerOperator.xwt">
       <widget href="ui/SingleStackedLayerOperator.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiznInX7Eeipp8d5W3Vl9g" name="Single CustomLayerOperator" sectionFile="ui/SingleCustomLayerOperator.xwt">
-      <widget href="ui/SingleCustomLayerOperator.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZiznI3X7Eeipp8d5W3Vl9g" name="Single PropertyIndex" sectionFile="ui/SinglePropertyIndex.xwt">
+    <sections xmi:id="_pzWZMcAEEeic_M-KksGsuA" name="Single PropertyIndex" sectionFile="ui/SinglePropertyIndex.xwt">
       <widget href="ui/SinglePropertyIndex.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiznJHX7Eeipp8d5W3Vl9g" name="Single StringToPropertyIndexMap" sectionFile="ui/SingleStringToPropertyIndexMap.xwt">
+    <sections xmi:id="_pzWZMsAEEeic_M-KksGsuA" name="Single StringToPropertyIndexMap" sectionFile="ui/SingleStringToPropertyIndexMap.xwt">
       <widget href="ui/SingleStringToPropertyIndexMap.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiznJXX7Eeipp8d5W3Vl9g" name="Single SimpleLayerDescriptor" sectionFile="ui/SingleSimpleLayerDescriptor.xwt">
+    <sections xmi:id="_pzWZM8AEEeic_M-KksGsuA" name="Single SimpleLayerDescriptor" sectionFile="ui/SingleSimpleLayerDescriptor.xwt">
       <widget href="ui/SingleSimpleLayerDescriptor.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiznJnX7Eeipp8d5W3Vl9g" name="Single RegExpLayerDescriptor" sectionFile="ui/SingleRegExpLayerDescriptor.xwt">
-      <widget href="ui/SingleRegExpLayerDescriptor.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZiznJ3X7Eeipp8d5W3Vl9g" name="Single NullInstance" sectionFile="ui/SingleNullInstance.xwt">
+    <sections xmi:id="_pzWZNMAEEeic_M-KksGsuA" name="Single NullInstance" sectionFile="ui/SingleNullInstance.xwt">
       <widget href="ui/SingleNullInstance.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiznKHX7Eeipp8d5W3Vl9g" name="Single RegExpLayer" sectionFile="ui/SingleRegExpLayer.xwt">
-      <widget href="ui/SingleRegExpLayer.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZiznKXX7Eeipp8d5W3Vl9g" name="Single Layer" sectionFile="ui/SingleLayer.xwt">
+    <sections xmi:id="_pzXAQMAEEeic_M-KksGsuA" name="Single Layer" sectionFile="ui/SingleLayer.xwt">
       <widget href="ui/SingleLayer.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZiznKnX7Eeipp8d5W3Vl9g" name="Single Color" sectionFile="ui/SingleColor.xwt">
-      <widget href="ui/SingleColor.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZiznK3X7Eeipp8d5W3Vl9g" name="Single ColorInstance" sectionFile="ui/SingleColorInstance.xwt">
-      <widget href="ui/SingleColorInstance.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZiznLHX7Eeipp8d5W3Vl9g" name="Single FillInstance" sectionFile="ui/SingleFillInstance.xwt">
-      <widget href="ui/SingleFillInstance.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZiznLXX7Eeipp8d5W3Vl9g" name="Single Fill" sectionFile="ui/SingleFill.xwt">
-      <widget href="ui/SingleFill.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZiznLnX7Eeipp8d5W3Vl9g" name="Single FillPropertySetter" sectionFile="ui/SingleFillPropertySetter.xwt">
-      <widget href="ui/SingleFillPropertySetter.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi0OMHX7Eeipp8d5W3Vl9g" name="Single IsValidPropertySetter" sectionFile="ui/SingleIsValidPropertySetter.xwt">
-      <widget href="ui/SingleIsValidPropertySetter.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi0OMXX7Eeipp8d5W3Vl9g" name="Single NullPropertySetter" sectionFile="ui/SingleNullPropertySetter.xwt">
+    <sections xmi:id="_pzXAQcAEEeic_M-KksGsuA" name="Single NullPropertySetter" sectionFile="ui/SingleNullPropertySetter.xwt">
       <widget href="ui/SingleNullPropertySetter.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi0OMnX7Eeipp8d5W3Vl9g" name="Single LineType" sectionFile="ui/SingleLineType.xwt">
-      <widget href="ui/SingleLineType.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi0OM3X7Eeipp8d5W3Vl9g" name="Single LineInstance" sectionFile="ui/SingleLineInstance.xwt">
-      <widget href="ui/SingleLineInstance.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi0ONHX7Eeipp8d5W3Vl9g" name="Single LinePropertySetter" sectionFile="ui/SingleLinePropertySetter.xwt">
-      <widget href="ui/SingleLinePropertySetter.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi0ONXX7Eeipp8d5W3Vl9g" name="Single FontPropertySetter" sectionFile="ui/SingleFontPropertySetter.xwt">
-      <widget href="ui/SingleFontPropertySetter.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi0ONnX7Eeipp8d5W3Vl9g" name="Single FontInstance" sectionFile="ui/SingleFontInstance.xwt">
-      <widget href="ui/SingleFontInstance.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi0ON3X7Eeipp8d5W3Vl9g" name="Single FontType" sectionFile="ui/SingleFontType.xwt">
-      <widget href="ui/SingleFontType.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi0OOHX7Eeipp8d5W3Vl9g" name="Single IsVisiblePropertySetter" sectionFile="ui/SingleIsVisiblePropertySetter.xwt">
-      <widget href="ui/SingleIsVisiblePropertySetter.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi0OOXX7Eeipp8d5W3Vl9g" name="Single TopLayerOperatorDescriptor" sectionFile="ui/SingleTopLayerOperatorDescriptor.xwt">
+    <sections xmi:id="_pzXAQsAEEeic_M-KksGsuA" name="Single TopLayerOperatorDescriptor" sectionFile="ui/SingleTopLayerOperatorDescriptor.xwt">
       <widget href="ui/SingleTopLayerOperatorDescriptor.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi0OOnX7Eeipp8d5W3Vl9g" name="Single StackedLayerOperatorDescriptor" sectionFile="ui/SingleStackedLayerOperatorDescriptor.xwt">
+    <sections xmi:id="_pzXAQ8AEEeic_M-KksGsuA" name="Single StackedLayerOperatorDescriptor" sectionFile="ui/SingleStackedLayerOperatorDescriptor.xwt">
       <widget href="ui/SingleStackedLayerOperatorDescriptor.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi0OO3X7Eeipp8d5W3Vl9g" name="Single CustomPropertyOperator" sectionFile="ui/SingleCustomPropertyOperator.xwt">
-      <widget href="ui/SingleCustomPropertyOperator.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi0OPHX7Eeipp8d5W3Vl9g" name="Single AndStackedLayerOperatorDescriptor" sectionFile="ui/SingleAndStackedLayerOperatorDescriptor.xwt">
-      <widget href="ui/SingleAndStackedLayerOperatorDescriptor.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi0OPXX7Eeipp8d5W3Vl9g" name="Single OrStackedLayerOperatorDescriptor" sectionFile="ui/SingleOrStackedLayerOperatorDescriptor.xwt">
-      <widget href="ui/SingleOrStackedLayerOperatorDescriptor.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi0OPnX7Eeipp8d5W3Vl9g" name="Single IsAbstractUmlSetter" sectionFile="ui/SingleIsAbstractUmlSetter.xwt">
-      <widget href="ui/SingleIsAbstractUmlSetter.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi0OP3X7Eeipp8d5W3Vl9g" name="Single AllViewsDerivedLayer" sectionFile="ui/SingleAllViewsDerivedLayer.xwt">
+    <sections xmi:id="_pzXARMAEEeic_M-KksGsuA" name="Single AllViewsDerivedLayer" sectionFile="ui/SingleAllViewsDerivedLayer.xwt">
       <widget href="ui/SingleAllViewsDerivedLayer.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi0OQHX7Eeipp8d5W3Vl9g" name="Single CSSPropertySetter" sectionFile="ui/SingleCSSPropertySetter.xwt">
+    <sections xmi:id="_pzXARcAEEeic_M-KksGsuA" name="Single CSSPropertySetter" sectionFile="ui/SingleCSSPropertySetter.xwt">
       <widget href="ui/SingleCSSPropertySetter.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi0OQXX7Eeipp8d5W3Vl9g" name="Single CSSType" sectionFile="ui/SingleCSSType.xwt">
+    <sections xmi:id="_pzXnUMAEEeic_M-KksGsuA" name="Single CSSType" sectionFile="ui/SingleCSSType.xwt">
       <widget href="ui/SingleCSSType.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01QHX7Eeipp8d5W3Vl9g" name="Single CSSInstance" sectionFile="ui/SingleCSSInstance.xwt">
+    <sections xmi:id="_pzXnUcAEEeic_M-KksGsuA" name="Single CSSInstance" sectionFile="ui/SingleCSSInstance.xwt">
       <widget href="ui/SingleCSSInstance.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01QXX7Eeipp8d5W3Vl9g" name="Single CSSHidePropertySetter" sectionFile="ui/SingleCSSHidePropertySetter.xwt">
+    <sections xmi:id="_pzXnUsAEEeic_M-KksGsuA" name="Single CSSHidePropertySetter" sectionFile="ui/SingleCSSHidePropertySetter.xwt">
       <widget href="ui/SingleCSSHidePropertySetter.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01QnX7Eeipp8d5W3Vl9g" name="Single CSSHideType" sectionFile="ui/SingleCSSHideType.xwt">
+    <sections xmi:id="_pzXnU8AEEeic_M-KksGsuA" name="Single CSSHideType" sectionFile="ui/SingleCSSHideType.xwt">
       <widget href="ui/SingleCSSHideType.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01Q3X7Eeipp8d5W3Vl9g" name="Single CSSHideInstance" sectionFile="ui/SingleCSSHideInstance.xwt">
+    <sections xmi:id="_pzXnVMAEEeic_M-KksGsuA" name="Single CSSHideInstance" sectionFile="ui/SingleCSSHideInstance.xwt">
       <widget href="ui/SingleCSSHideInstance.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01RHX7Eeipp8d5W3Vl9g" name="Multiple LayerNamedStyle" sectionFile="ui/MultipleLayerNamedStyle.xwt">
+    <sections xmi:id="_pzXnVcAEEeic_M-KksGsuA" name="Multiple LayerNamedStyle" sectionFile="ui/MultipleLayerNamedStyle.xwt">
       <widget href="ui/MultipleLayerNamedStyle.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01RXX7Eeipp8d5W3Vl9g" name="Multiple LayersStack" sectionFile="ui/MultipleLayersStack.xwt">
+    <sections xmi:id="_pzXnVsAEEeic_M-KksGsuA" name="Multiple LayersStack" sectionFile="ui/MultipleLayersStack.xwt">
       <widget href="ui/MultipleLayersStack.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01RnX7Eeipp8d5W3Vl9g" name="Multiple LayerExpression" sectionFile="ui/MultipleLayerExpression.xwt">
+    <sections xmi:id="_pzXnV8AEEeic_M-KksGsuA" name="Multiple LayerExpression" sectionFile="ui/MultipleLayerExpression.xwt">
       <widget href="ui/MultipleLayerExpression.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01R3X7Eeipp8d5W3Vl9g" name="Multiple ApplicationDependantElement" sectionFile="ui/MultipleApplicationDependantElement.xwt">
+    <sections xmi:id="_pzYOYMAEEeic_M-KksGsuA" name="Multiple ApplicationDependantElement" sectionFile="ui/MultipleApplicationDependantElement.xwt">
       <widget href="ui/MultipleApplicationDependantElement.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01SHX7Eeipp8d5W3Vl9g" name="Multiple LayersStackApplication" sectionFile="ui/MultipleLayersStackApplication.xwt">
+    <sections xmi:id="_pzYOYcAEEeic_M-KksGsuA" name="Multiple LayersStackApplication" sectionFile="ui/MultipleLayersStackApplication.xwt">
       <widget href="ui/MultipleLayersStackApplication.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01SXX7Eeipp8d5W3Vl9g" name="Multiple FolderElement" sectionFile="ui/MultipleFolderElement.xwt">
+    <sections xmi:id="_pzYOYsAEEeic_M-KksGsuA" name="Multiple FolderElement" sectionFile="ui/MultipleFolderElement.xwt">
       <widget href="ui/MultipleFolderElement.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01SnX7Eeipp8d5W3Vl9g" name="Multiple LayerStackDescriptorRegistry" sectionFile="ui/MultipleLayerStackDescriptorRegistry.xwt">
+    <sections xmi:id="_pzYOY8AEEeic_M-KksGsuA" name="Multiple LayerStackDescriptorRegistry" sectionFile="ui/MultipleLayerStackDescriptorRegistry.xwt">
       <widget href="ui/MultipleLayerStackDescriptorRegistry.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01S3X7Eeipp8d5W3Vl9g" name="Multiple PropertyRegistry" sectionFile="ui/MultiplePropertyRegistry.xwt">
+    <sections xmi:id="_pzYOZMAEEeic_M-KksGsuA" name="Multiple PropertyRegistry" sectionFile="ui/MultiplePropertyRegistry.xwt">
       <widget href="ui/MultiplePropertyRegistry.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01THX7Eeipp8d5W3Vl9g" name="Multiple Property" sectionFile="ui/MultipleProperty.xwt">
+    <sections xmi:id="_pzYOZcAEEeic_M-KksGsuA" name="Multiple Property" sectionFile="ui/MultipleProperty.xwt">
       <widget href="ui/MultipleProperty.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01TXX7Eeipp8d5W3Vl9g" name="Multiple Type" sectionFile="ui/MultipleType.xwt">
+    <sections xmi:id="_pzYOZsAEEeic_M-KksGsuA" name="Multiple Type" sectionFile="ui/MultipleType.xwt">
       <widget href="ui/MultipleType.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01TnX7Eeipp8d5W3Vl9g" name="Multiple Metamodel" sectionFile="ui/MultipleMetamodel.xwt">
-      <widget href="ui/MultipleMetamodel.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi01T3X7Eeipp8d5W3Vl9g" name="Multiple TypeInstance" sectionFile="ui/MultipleTypeInstance.xwt">
+    <sections xmi:id="_pzYOZ8AEEeic_M-KksGsuA" name="Multiple TypeInstance" sectionFile="ui/MultipleTypeInstance.xwt">
       <widget href="ui/MultipleTypeInstance.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi01UHX7Eeipp8d5W3Vl9g" name="Multiple ComputePropertyValueCommandItf" sectionFile="ui/MultipleComputePropertyValueCommandItf.xwt">
+    <sections xmi:id="_pzYOaMAEEeic_M-KksGsuA" name="Multiple ComputePropertyValueCommandItf" sectionFile="ui/MultipleComputePropertyValueCommandItf.xwt">
       <widget href="ui/MultipleComputePropertyValueCommandItf.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi1cUHX7Eeipp8d5W3Vl9g" name="Multiple TypeRegistry" sectionFile="ui/MultipleTypeRegistry.xwt">
+    <sections xmi:id="_pzYOacAEEeic_M-KksGsuA" name="Multiple TypeRegistry" sectionFile="ui/MultipleTypeRegistry.xwt">
       <widget href="ui/MultipleTypeRegistry.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi1cUXX7Eeipp8d5W3Vl9g" name="Multiple StringToTypeMap" sectionFile="ui/MultipleStringToTypeMap.xwt">
+    <sections xmi:id="_pzYOasAEEeic_M-KksGsuA" name="Multiple StringToTypeMap" sectionFile="ui/MultipleStringToTypeMap.xwt">
       <widget href="ui/MultipleStringToTypeMap.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi1cUnX7Eeipp8d5W3Vl9g" name="Multiple LayerDescriptorRegistry" sectionFile="ui/MultipleLayerDescriptorRegistry.xwt">
+    <sections xmi:id="_pzY1cMAEEeic_M-KksGsuA" name="Multiple LayerDescriptorRegistry" sectionFile="ui/MultipleLayerDescriptorRegistry.xwt">
       <widget href="ui/MultipleLayerDescriptorRegistry.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi1cU3X7Eeipp8d5W3Vl9g" name="Multiple LayerDescriptor" sectionFile="ui/MultipleLayerDescriptor.xwt">
+    <sections xmi:id="_pzY1ccAEEeic_M-KksGsuA" name="Multiple LayerDescriptor" sectionFile="ui/MultipleLayerDescriptor.xwt">
       <widget href="ui/MultipleLayerDescriptor.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi1cVHX7Eeipp8d5W3Vl9g" name="Multiple LayerApplicationFactory" sectionFile="ui/MultipleLayerApplicationFactory.xwt">
+    <sections xmi:id="_pzY1csAEEeic_M-KksGsuA" name="Multiple LayerApplicationFactory" sectionFile="ui/MultipleLayerApplicationFactory.xwt">
       <widget href="ui/MultipleLayerApplicationFactory.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi1cVXX7Eeipp8d5W3Vl9g" name="Multiple PropertySetterRegistry" sectionFile="ui/MultiplePropertySetterRegistry.xwt">
+    <sections xmi:id="_pzY1c8AEEeic_M-KksGsuA" name="Multiple PropertySetterRegistry" sectionFile="ui/MultiplePropertySetterRegistry.xwt">
       <widget href="ui/MultiplePropertySetterRegistry.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi1cVnX7Eeipp8d5W3Vl9g" name="Multiple PropertySetter" sectionFile="ui/MultiplePropertySetter.xwt">
+    <sections xmi:id="_pzY1dMAEEeic_M-KksGsuA" name="Multiple PropertySetter" sectionFile="ui/MultiplePropertySetter.xwt">
       <widget href="ui/MultiplePropertySetter.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi1cV3X7Eeipp8d5W3Vl9g" name="Multiple StringToPropertySetter" sectionFile="ui/MultipleStringToPropertySetter.xwt">
+    <sections xmi:id="_pzY1dcAEEeic_M-KksGsuA" name="Multiple StringToPropertySetter" sectionFile="ui/MultipleStringToPropertySetter.xwt">
       <widget href="ui/MultipleStringToPropertySetter.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi1cWHX7Eeipp8d5W3Vl9g" name="Multiple LayerOperatorDescriptorRegistry" sectionFile="ui/MultipleLayerOperatorDescriptorRegistry.xwt">
+    <sections xmi:id="_pzY1dsAEEeic_M-KksGsuA" name="Multiple LayerOperatorDescriptorRegistry" sectionFile="ui/MultipleLayerOperatorDescriptorRegistry.xwt">
       <widget href="ui/MultipleLayerOperatorDescriptorRegistry.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi1cWXX7Eeipp8d5W3Vl9g" name="Multiple LayerOperatorDescriptor" sectionFile="ui/MultipleLayerOperatorDescriptor.xwt">
+    <sections xmi:id="_pzY1d8AEEeic_M-KksGsuA" name="Multiple LayerOperatorDescriptor" sectionFile="ui/MultipleLayerOperatorDescriptor.xwt">
       <widget href="ui/MultipleLayerOperatorDescriptor.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi1cWnX7Eeipp8d5W3Vl9g" name="Multiple PropertyOperator" sectionFile="ui/MultiplePropertyOperator.xwt">
+    <sections xmi:id="_pzY1eMAEEeic_M-KksGsuA" name="Multiple PropertyOperator" sectionFile="ui/MultiplePropertyOperator.xwt">
       <widget href="ui/MultiplePropertyOperator.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi1cW3X7Eeipp8d5W3Vl9g" name="Multiple AbstractLayerOperator" sectionFile="ui/MultipleAbstractLayerOperator.xwt">
-      <widget href="ui/MultipleAbstractLayerOperator.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi1cXHX7Eeipp8d5W3Vl9g" name="Multiple LayerOperator" sectionFile="ui/MultipleLayerOperator.xwt">
+    <sections xmi:id="_pzZcgMAEEeic_M-KksGsuA" name="Multiple LayerOperator" sectionFile="ui/MultipleLayerOperator.xwt">
       <widget href="ui/MultipleLayerOperator.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi1cXXX7Eeipp8d5W3Vl9g" name="Multiple LayersContainer" sectionFile="ui/MultipleLayersContainer.xwt">
+    <sections xmi:id="_pzZcgcAEEeic_M-KksGsuA" name="Multiple LayersContainer" sectionFile="ui/MultipleLayersContainer.xwt">
       <widget href="ui/MultipleLayersContainer.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi1cXnX7Eeipp8d5W3Vl9g" name="Multiple DefaultPropertyOperator" sectionFile="ui/MultipleDefaultPropertyOperator.xwt">
-      <widget href="ui/MultipleDefaultPropertyOperator.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi2DYHX7Eeipp8d5W3Vl9g" name="Multiple AbstractLayer" sectionFile="ui/MultipleAbstractLayer.xwt">
+    <sections xmi:id="_pzZcgsAEEeic_M-KksGsuA" name="Multiple AbstractLayer" sectionFile="ui/MultipleAbstractLayer.xwt">
       <widget href="ui/MultipleAbstractLayer.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi2DYXX7Eeipp8d5W3Vl9g" name="Multiple StringToTypeInstanceMap" sectionFile="ui/MultipleStringToTypeInstanceMap.xwt">
+    <sections xmi:id="_pzZcg8AEEeic_M-KksGsuA" name="Multiple StringToTypeInstanceMap" sectionFile="ui/MultipleStringToTypeInstanceMap.xwt">
       <widget href="ui/MultipleStringToTypeInstanceMap.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi2DYnX7Eeipp8d5W3Vl9g" name="Multiple Folder" sectionFile="ui/MultipleFolder.xwt">
+    <sections xmi:id="_pzZchMAEEeic_M-KksGsuA" name="Multiple Folder" sectionFile="ui/MultipleFolder.xwt">
       <widget href="ui/MultipleFolder.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi2DY3X7Eeipp8d5W3Vl9g" name="Multiple IntInstance" sectionFile="ui/MultipleIntInstance.xwt">
-      <widget href="ui/MultipleIntInstance.xwt#/"/>
+    <sections xmi:id="_pzZchcAEEeic_M-KksGsuA" name="Multiple Metamodel" sectionFile="ui/MultipleMetamodel.xwt">
+      <widget href="ui/MultipleMetamodel.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi2DZHX7Eeipp8d5W3Vl9g" name="Multiple BooleanInstance" sectionFile="ui/MultipleBooleanInstance.xwt">
-      <widget href="ui/MultipleBooleanInstance.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi2DZXX7Eeipp8d5W3Vl9g" name="Multiple StringInstance" sectionFile="ui/MultipleStringInstance.xwt">
-      <widget href="ui/MultipleStringInstance.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi2DZnX7Eeipp8d5W3Vl9g" name="Multiple IntType" sectionFile="ui/MultipleIntType.xwt">
-      <widget href="ui/MultipleIntType.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi2DZ3X7Eeipp8d5W3Vl9g" name="Multiple BooleanType" sectionFile="ui/MultipleBooleanType.xwt">
-      <widget href="ui/MultipleBooleanType.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi2DaHX7Eeipp8d5W3Vl9g" name="Multiple StringType" sectionFile="ui/MultipleStringType.xwt">
-      <widget href="ui/MultipleStringType.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi2DaXX7Eeipp8d5W3Vl9g" name="Multiple CustomType" sectionFile="ui/MultipleCustomType.xwt">
-      <widget href="ui/MultipleCustomType.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi2DanX7Eeipp8d5W3Vl9g" name="Multiple TopLayerOperator" sectionFile="ui/MultipleTopLayerOperator.xwt">
+    <sections xmi:id="_pzZchsAEEeic_M-KksGsuA" name="Multiple TopLayerOperator" sectionFile="ui/MultipleTopLayerOperator.xwt">
       <widget href="ui/MultipleTopLayerOperator.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi2Da3X7Eeipp8d5W3Vl9g" name="Multiple StackedLayerOperator" sectionFile="ui/MultipleStackedLayerOperator.xwt">
+    <sections xmi:id="_pzaDkMAEEeic_M-KksGsuA" name="Multiple StackedLayerOperator" sectionFile="ui/MultipleStackedLayerOperator.xwt">
       <widget href="ui/MultipleStackedLayerOperator.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi2DbHX7Eeipp8d5W3Vl9g" name="Multiple CustomLayerOperator" sectionFile="ui/MultipleCustomLayerOperator.xwt">
-      <widget href="ui/MultipleCustomLayerOperator.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi2DbXX7Eeipp8d5W3Vl9g" name="Multiple PropertyIndex" sectionFile="ui/MultiplePropertyIndex.xwt">
+    <sections xmi:id="_pzaDkcAEEeic_M-KksGsuA" name="Multiple PropertyIndex" sectionFile="ui/MultiplePropertyIndex.xwt">
       <widget href="ui/MultiplePropertyIndex.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi2qcHX7Eeipp8d5W3Vl9g" name="Multiple StringToPropertyIndexMap" sectionFile="ui/MultipleStringToPropertyIndexMap.xwt">
+    <sections xmi:id="_pzaDksAEEeic_M-KksGsuA" name="Multiple StringToPropertyIndexMap" sectionFile="ui/MultipleStringToPropertyIndexMap.xwt">
       <widget href="ui/MultipleStringToPropertyIndexMap.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi2qcXX7Eeipp8d5W3Vl9g" name="Multiple SimpleLayerDescriptor" sectionFile="ui/MultipleSimpleLayerDescriptor.xwt">
+    <sections xmi:id="_pzaDk8AEEeic_M-KksGsuA" name="Multiple SimpleLayerDescriptor" sectionFile="ui/MultipleSimpleLayerDescriptor.xwt">
       <widget href="ui/MultipleSimpleLayerDescriptor.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi2qcnX7Eeipp8d5W3Vl9g" name="Multiple RegExpLayerDescriptor" sectionFile="ui/MultipleRegExpLayerDescriptor.xwt">
-      <widget href="ui/MultipleRegExpLayerDescriptor.xwt#/"/>
-    </sections>
-    <sections xmi:id="_Zi2qc3X7Eeipp8d5W3Vl9g" name="Multiple NullInstance" sectionFile="ui/MultipleNullInstance.xwt">
+    <sections xmi:id="_pzaDlMAEEeic_M-KksGsuA" name="Multiple NullInstance" sectionFile="ui/MultipleNullInstance.xwt">
       <widget href="ui/MultipleNullInstance.xwt#/"/>
     </sections>
-    <sections xmi:id="_Zi2qdHX7Eeipp8d5W3Vl9g" name="Multiple RegExpLayer" sectionFile="ui/MultipleRegExpLayer.xwt">
-      <widget href="ui/MultipleRegExpLayer.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjCQoHX7Eeipp8d5W3Vl9g" name="Multiple Layer" sectionFile="ui/MultipleLayer.xwt">
+    <sections xmi:id="_pzaDlcAEEeic_M-KksGsuA" name="Multiple Layer" sectionFile="ui/MultipleLayer.xwt">
       <widget href="ui/MultipleLayer.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZjCQoXX7Eeipp8d5W3Vl9g" name="Multiple Color" sectionFile="ui/MultipleColor.xwt">
-      <widget href="ui/MultipleColor.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjCQonX7Eeipp8d5W3Vl9g" name="Multiple ColorInstance" sectionFile="ui/MultipleColorInstance.xwt">
-      <widget href="ui/MultipleColorInstance.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjCQo3X7Eeipp8d5W3Vl9g" name="Multiple FillInstance" sectionFile="ui/MultipleFillInstance.xwt">
-      <widget href="ui/MultipleFillInstance.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjCQpHX7Eeipp8d5W3Vl9g" name="Multiple Fill" sectionFile="ui/MultipleFill.xwt">
-      <widget href="ui/MultipleFill.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjCQpXX7Eeipp8d5W3Vl9g" name="Multiple FillPropertySetter" sectionFile="ui/MultipleFillPropertySetter.xwt">
-      <widget href="ui/MultipleFillPropertySetter.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjCQpnX7Eeipp8d5W3Vl9g" name="Multiple IsValidPropertySetter" sectionFile="ui/MultipleIsValidPropertySetter.xwt">
-      <widget href="ui/MultipleIsValidPropertySetter.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjCQp3X7Eeipp8d5W3Vl9g" name="Multiple NullPropertySetter" sectionFile="ui/MultipleNullPropertySetter.xwt">
+    <sections xmi:id="_pzaDlsAEEeic_M-KksGsuA" name="Multiple NullPropertySetter" sectionFile="ui/MultipleNullPropertySetter.xwt">
       <widget href="ui/MultipleNullPropertySetter.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZjCQqHX7Eeipp8d5W3Vl9g" name="Multiple LineType" sectionFile="ui/MultipleLineType.xwt">
-      <widget href="ui/MultipleLineType.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjCQqXX7Eeipp8d5W3Vl9g" name="Multiple LineInstance" sectionFile="ui/MultipleLineInstance.xwt">
-      <widget href="ui/MultipleLineInstance.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjCQqnX7Eeipp8d5W3Vl9g" name="Multiple LinePropertySetter" sectionFile="ui/MultipleLinePropertySetter.xwt">
-      <widget href="ui/MultipleLinePropertySetter.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjCQq3X7Eeipp8d5W3Vl9g" name="Multiple FontPropertySetter" sectionFile="ui/MultipleFontPropertySetter.xwt">
-      <widget href="ui/MultipleFontPropertySetter.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjCQrHX7Eeipp8d5W3Vl9g" name="Multiple FontInstance" sectionFile="ui/MultipleFontInstance.xwt">
-      <widget href="ui/MultipleFontInstance.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjCQrXX7Eeipp8d5W3Vl9g" name="Multiple FontType" sectionFile="ui/MultipleFontType.xwt">
-      <widget href="ui/MultipleFontType.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjCQrnX7Eeipp8d5W3Vl9g" name="Multiple IsVisiblePropertySetter" sectionFile="ui/MultipleIsVisiblePropertySetter.xwt">
-      <widget href="ui/MultipleIsVisiblePropertySetter.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjC3sHX7Eeipp8d5W3Vl9g" name="Multiple TopLayerOperatorDescriptor" sectionFile="ui/MultipleTopLayerOperatorDescriptor.xwt">
+    <sections xmi:id="_pzaDl8AEEeic_M-KksGsuA" name="Multiple TopLayerOperatorDescriptor" sectionFile="ui/MultipleTopLayerOperatorDescriptor.xwt">
       <widget href="ui/MultipleTopLayerOperatorDescriptor.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZjC3sXX7Eeipp8d5W3Vl9g" name="Multiple StackedLayerOperatorDescriptor" sectionFile="ui/MultipleStackedLayerOperatorDescriptor.xwt">
+    <sections xmi:id="_pzaDmMAEEeic_M-KksGsuA" name="Multiple StackedLayerOperatorDescriptor" sectionFile="ui/MultipleStackedLayerOperatorDescriptor.xwt">
       <widget href="ui/MultipleStackedLayerOperatorDescriptor.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZjC3snX7Eeipp8d5W3Vl9g" name="Multiple CustomPropertyOperator" sectionFile="ui/MultipleCustomPropertyOperator.xwt">
-      <widget href="ui/MultipleCustomPropertyOperator.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjC3s3X7Eeipp8d5W3Vl9g" name="Multiple AndStackedLayerOperatorDescriptor" sectionFile="ui/MultipleAndStackedLayerOperatorDescriptor.xwt">
-      <widget href="ui/MultipleAndStackedLayerOperatorDescriptor.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjC3tHX7Eeipp8d5W3Vl9g" name="Multiple OrStackedLayerOperatorDescriptor" sectionFile="ui/MultipleOrStackedLayerOperatorDescriptor.xwt">
-      <widget href="ui/MultipleOrStackedLayerOperatorDescriptor.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjC3tXX7Eeipp8d5W3Vl9g" name="Multiple IsAbstractUmlSetter" sectionFile="ui/MultipleIsAbstractUmlSetter.xwt">
-      <widget href="ui/MultipleIsAbstractUmlSetter.xwt#/"/>
-    </sections>
-    <sections xmi:id="_ZjC3tnX7Eeipp8d5W3Vl9g" name="Multiple AllViewsDerivedLayer" sectionFile="ui/MultipleAllViewsDerivedLayer.xwt">
+    <sections xmi:id="_pzaqoMAEEeic_M-KksGsuA" name="Multiple AllViewsDerivedLayer" sectionFile="ui/MultipleAllViewsDerivedLayer.xwt">
       <widget href="ui/MultipleAllViewsDerivedLayer.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZjC3t3X7Eeipp8d5W3Vl9g" name="Multiple CSSPropertySetter" sectionFile="ui/MultipleCSSPropertySetter.xwt">
+    <sections xmi:id="_pzaqocAEEeic_M-KksGsuA" name="Multiple CSSPropertySetter" sectionFile="ui/MultipleCSSPropertySetter.xwt">
       <widget href="ui/MultipleCSSPropertySetter.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZjC3uHX7Eeipp8d5W3Vl9g" name="Multiple CSSType" sectionFile="ui/MultipleCSSType.xwt">
+    <sections xmi:id="_pzaqosAEEeic_M-KksGsuA" name="Multiple CSSType" sectionFile="ui/MultipleCSSType.xwt">
       <widget href="ui/MultipleCSSType.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZjC3uXX7Eeipp8d5W3Vl9g" name="Multiple CSSInstance" sectionFile="ui/MultipleCSSInstance.xwt">
+    <sections xmi:id="_pzaqo8AEEeic_M-KksGsuA" name="Multiple CSSInstance" sectionFile="ui/MultipleCSSInstance.xwt">
       <widget href="ui/MultipleCSSInstance.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZjC3unX7Eeipp8d5W3Vl9g" name="Multiple CSSHidePropertySetter" sectionFile="ui/MultipleCSSHidePropertySetter.xwt">
+    <sections xmi:id="_pzaqpMAEEeic_M-KksGsuA" name="Multiple CSSHidePropertySetter" sectionFile="ui/MultipleCSSHidePropertySetter.xwt">
       <widget href="ui/MultipleCSSHidePropertySetter.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZjC3u3X7Eeipp8d5W3Vl9g" name="Multiple CSSHideType" sectionFile="ui/MultipleCSSHideType.xwt">
+    <sections xmi:id="_pzaqpcAEEeic_M-KksGsuA" name="Multiple CSSHideType" sectionFile="ui/MultipleCSSHideType.xwt">
       <widget href="ui/MultipleCSSHideType.xwt#/"/>
     </sections>
-    <sections xmi:id="_ZjC3vHX7Eeipp8d5W3Vl9g" name="Multiple CSSHideInstance" sectionFile="ui/MultipleCSSHideInstance.xwt">
+    <sections xmi:id="_pzaqpsAEEeic_M-KksGsuA" name="Multiple CSSHideInstance" sectionFile="ui/MultipleCSSHideInstance.xwt">
       <widget href="ui/MultipleCSSHideInstance.xwt#/"/>
     </sections>
   </tabs>
-  <views xmi:id="_umc1gXX6Eeipp8d5W3Vl9g" name="Single LayerNamedStyle" sections="_Zixx8XX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc32nX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1gnX6Eeipp8d5W3Vl9g" name="isSingleLayerNamedStyle">
+  <views xmi:id="_PEETIcAEEeic_M-KksGsuA" name="Single LayerNamedStyle" sections="_pzN2UMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7icAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEETIsAEEeic_M-KksGsuA" name="isSingleLayerNamedStyle">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1g3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1hHX6Eeipp8d5W3Vl9g" name="className" value="LayerNamedStyle"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEETI8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEETJMAEEeic_M-KksGsuA" name="className" value="LayerNamedStyle"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1hXX6Eeipp8d5W3Vl9g" name="Single LayersStack" sections="_Zixx8nX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc33HX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1hnX6Eeipp8d5W3Vl9g" name="isSingleLayersStack">
+  <views xmi:id="_PEETJcAEEeic_M-KksGsuA" name="Single LayersStack" sections="_pzRgsMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7i8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEETJsAEEeic_M-KksGsuA" name="isSingleLayersStack">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1h3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1iHX6Eeipp8d5W3Vl9g" name="className" value="LayersStack"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEETJ8AEEeic_M-KksGsuA" name="className" value="LayersStack"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEETKMAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1iXX6Eeipp8d5W3Vl9g" name="Single LayerExpression" sections="_Zixx83X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc34nX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1inX6Eeipp8d5W3Vl9g" name="isSingleLayerExpression">
+  <views xmi:id="_PEETKcAEEeic_M-KksGsuA" name="Single LayerExpression" sections="_pzRgscAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7kcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEETKsAEEeic_M-KksGsuA" name="isSingleLayerExpression">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1i3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1jHX6Eeipp8d5W3Vl9g" name="className" value="LayerExpression"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEETK8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEETLMAEEeic_M-KksGsuA" name="className" value="LayerExpression"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1jXX6Eeipp8d5W3Vl9g" name="Single ApplicationDependantElement" sections="_ZiyZAHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc36nX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1jnX6Eeipp8d5W3Vl9g" name="isSingleApplicationDependantElement">
+  <views xmi:id="_PEETLcAEEeic_M-KksGsuA" name="Single ApplicationDependantElement" sections="_pzSHwMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7mcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEETLsAEEeic_M-KksGsuA" name="isSingleApplicationDependantElement">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1j3X6Eeipp8d5W3Vl9g" name="className" value="ApplicationDependantElement"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1kHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEETL8AEEeic_M-KksGsuA" name="className" value="ApplicationDependantElement"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEETMMAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1kXX6Eeipp8d5W3Vl9g" name="Single LayersStackApplication" sections="_ZiyZAXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc37HX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1knX6Eeipp8d5W3Vl9g" name="isSingleLayersStackApplication">
+  <views xmi:id="_PEETMcAEEeic_M-KksGsuA" name="Single LayersStackApplication" sections="_pzSHwcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7m8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEETMsAEEeic_M-KksGsuA" name="isSingleLayersStackApplication">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1k3X6Eeipp8d5W3Vl9g" name="className" value="LayersStackApplication"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1lHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEETM8AEEeic_M-KksGsuA" name="className" value="LayersStackApplication"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEETNMAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1lXX6Eeipp8d5W3Vl9g" name="Single FolderElement" sections="_ZiyZAnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc39HX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1lnX6Eeipp8d5W3Vl9g" name="isSingleFolderElement">
+  <views xmi:id="_PEETNcAEEeic_M-KksGsuA" name="Single FolderElement" sections="_pzSu0MAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7o8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEETNsAEEeic_M-KksGsuA" name="isSingleFolderElement">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1l3X6Eeipp8d5W3Vl9g" name="className" value="FolderElement"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1mHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEETN8AEEeic_M-KksGsuA" name="className" value="FolderElement"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEETOMAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1mXX6Eeipp8d5W3Vl9g" name="Single LayerStackDescriptorRegistry" sections="_ZiyZA3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc39XX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1mnX6Eeipp8d5W3Vl9g" name="isSingleLayerStackDescriptorRegistry">
+  <views xmi:id="_PEE6MMAEEeic_M-KksGsuA" name="Single LayerStackDescriptorRegistry" sections="_pzSu0cAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7pMAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6McAEEeic_M-KksGsuA" name="isSingleLayerStackDescriptorRegistry">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1m3X6Eeipp8d5W3Vl9g" name="className" value="LayerStackDescriptorRegistry"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1nHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6MsAEEeic_M-KksGsuA" name="className" value="LayerStackDescriptorRegistry"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6M8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1nXX6Eeipp8d5W3Vl9g" name="Single PropertyRegistry" sections="_ZiyZBHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc39nX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1nnX6Eeipp8d5W3Vl9g" name="isSinglePropertyRegistry">
+  <views xmi:id="_PEE6NMAEEeic_M-KksGsuA" name="Single PropertyRegistry" sections="_pzTV4MAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7pcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6NcAEEeic_M-KksGsuA" name="isSinglePropertyRegistry">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1n3X6Eeipp8d5W3Vl9g" name="className" value="PropertyRegistry"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1oHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6NsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6N8AEEeic_M-KksGsuA" name="className" value="PropertyRegistry"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1oXX6Eeipp8d5W3Vl9g" name="Single Property" sections="_ZiyZBXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc3-nX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1onX6Eeipp8d5W3Vl9g" name="isSingleProperty">
+  <views xmi:id="_PEE6OMAEEeic_M-KksGsuA" name="Single Property" sections="_pzTV4cAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7qcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6OcAEEeic_M-KksGsuA" name="isSingleProperty">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1o3X6Eeipp8d5W3Vl9g" name="className" value="Property"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1pHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6OsAEEeic_M-KksGsuA" name="className" value="Property"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6O8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1pXX6Eeipp8d5W3Vl9g" name="Single Type" sections="_ZiyZBnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4AHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1pnX6Eeipp8d5W3Vl9g" name="isSingleType">
+  <views xmi:id="_PEE6PMAEEeic_M-KksGsuA" name="Single Type" sections="_pzTV4sAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7r8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6PcAEEeic_M-KksGsuA" name="isSingleType">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1p3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1qHX6Eeipp8d5W3Vl9g" name="className" value="Type"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6PsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6P8AEEeic_M-KksGsuA" name="className" value="Type"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1qXX6Eeipp8d5W3Vl9g" name="Single Metamodel" sections="_ZiyZB3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4BHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1qnX6Eeipp8d5W3Vl9g" name="isSingleMetamodel">
+  <views xmi:id="_PEE6QMAEEeic_M-KksGsuA" name="Single TypeInstance" sections="_pzTV48AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7ssAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6QcAEEeic_M-KksGsuA" name="isSingleTypeInstance">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1q3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1rHX6Eeipp8d5W3Vl9g" name="className" value="Metamodel"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6QsAEEeic_M-KksGsuA" name="className" value="TypeInstance"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6Q8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1rXX6Eeipp8d5W3Vl9g" name="Single TypeInstance" sections="_ZiyZCHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4C3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1rnX6Eeipp8d5W3Vl9g" name="isSingleTypeInstance">
+  <views xmi:id="_PEE6RMAEEeic_M-KksGsuA" name="Single ComputePropertyValueCommandItf" sections="_pzTV5MAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7s8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6RcAEEeic_M-KksGsuA" name="isSingleComputePropertyValueCommandItf">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1r3X6Eeipp8d5W3Vl9g" name="className" value="TypeInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1sHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6RsAEEeic_M-KksGsuA" name="className" value="ComputePropertyValueCommandItf"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6R8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1sXX6Eeipp8d5W3Vl9g" name="Single ComputePropertyValueCommandItf" sections="_ZiyZCXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4DHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1snX6Eeipp8d5W3Vl9g" name="isSingleComputePropertyValueCommandItf">
+  <views xmi:id="_PEE6SMAEEeic_M-KksGsuA" name="Single TypeRegistry" sections="_pzT88MAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7tMAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6ScAEEeic_M-KksGsuA" name="isSingleTypeRegistry">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1s3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1tHX6Eeipp8d5W3Vl9g" name="className" value="ComputePropertyValueCommandItf"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6SsAEEeic_M-KksGsuA" name="className" value="TypeRegistry"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6S8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1tXX6Eeipp8d5W3Vl9g" name="Single TypeRegistry" sections="_ZiyZCnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4DXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1tnX6Eeipp8d5W3Vl9g" name="isSingleTypeRegistry">
+  <views xmi:id="_PEE6TMAEEeic_M-KksGsuA" name="Single StringToTypeMap" sections="_pzT88cAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7tsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6TcAEEeic_M-KksGsuA" name="isSingleStringToTypeMap">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1t3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1uHX6Eeipp8d5W3Vl9g" name="className" value="TypeRegistry"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6TsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6T8AEEeic_M-KksGsuA" name="className" value="StringToTypeMap"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1uXX6Eeipp8d5W3Vl9g" name="Single StringToTypeMap" sections="_ZiyZC3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4D3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1unX6Eeipp8d5W3Vl9g" name="isSingleStringToTypeMap">
+  <views xmi:id="_PEE6UMAEEeic_M-KksGsuA" name="Single LayerDescriptorRegistry" sections="_pzT88sAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7ucAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6UcAEEeic_M-KksGsuA" name="isSingleLayerDescriptorRegistry">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1u3X6Eeipp8d5W3Vl9g" name="className" value="StringToTypeMap"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1vHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6UsAEEeic_M-KksGsuA" name="className" value="LayerDescriptorRegistry"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6U8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1vXX6Eeipp8d5W3Vl9g" name="Single LayerDescriptorRegistry" sections="_ZiyZDHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4EnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1vnX6Eeipp8d5W3Vl9g" name="isSingleLayerDescriptorRegistry">
+  <views xmi:id="_PEE6VMAEEeic_M-KksGsuA" name="Single LayerDescriptor" sections="_pzT888AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7u8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6VcAEEeic_M-KksGsuA" name="isSingleLayerDescriptor">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1v3X6Eeipp8d5W3Vl9g" name="className" value="LayerDescriptorRegistry"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1wHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6VsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6V8AEEeic_M-KksGsuA" name="className" value="LayerDescriptor"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1wXX6Eeipp8d5W3Vl9g" name="Single LayerDescriptor" sections="_ZiyZDXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4FHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1wnX6Eeipp8d5W3Vl9g" name="isSingleLayerDescriptor">
+  <views xmi:id="_PEE6WMAEEeic_M-KksGsuA" name="Single LayerApplicationFactory" sections="_pzT89MAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7vcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6WcAEEeic_M-KksGsuA" name="isSingleLayerApplicationFactory">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1w3X6Eeipp8d5W3Vl9g" name="className" value="LayerDescriptor"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1xHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6WsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6W8AEEeic_M-KksGsuA" name="className" value="LayerApplicationFactory"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1xXX6Eeipp8d5W3Vl9g" name="Single LayerApplicationFactory" sections="_ZiyZDnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4FnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1xnX6Eeipp8d5W3Vl9g" name="isSingleLayerApplicationFactory">
+  <views xmi:id="_PEE6XMAEEeic_M-KksGsuA" name="Single PropertySetterRegistry" sections="_pzUkAMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7v8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6XcAEEeic_M-KksGsuA" name="isSinglePropertySetterRegistry">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1x3X6Eeipp8d5W3Vl9g" name="className" value="LayerApplicationFactory"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1yHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6XsAEEeic_M-KksGsuA" name="className" value="PropertySetterRegistry"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6X8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1yXX6Eeipp8d5W3Vl9g" name="Single PropertySetterRegistry" sections="_ZiyZD3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4GHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1ynX6Eeipp8d5W3Vl9g" name="isSinglePropertySetterRegistry">
+  <views xmi:id="_PEE6YMAEEeic_M-KksGsuA" name="Single PropertySetter" sections="_pzUkAcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7w8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6YcAEEeic_M-KksGsuA" name="isSinglePropertySetter">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1y3X6Eeipp8d5W3Vl9g" name="className" value="PropertySetterRegistry"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1zHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6YsAEEeic_M-KksGsuA" name="className" value="PropertySetter"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6Y8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1zXX6Eeipp8d5W3Vl9g" name="Single PropertySetter" sections="_ZiyZEHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4HHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1znX6Eeipp8d5W3Vl9g" name="isSinglePropertySetter">
+  <views xmi:id="_PEE6ZMAEEeic_M-KksGsuA" name="Single StringToPropertySetter" sections="_pzUkAsAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7xsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6ZcAEEeic_M-KksGsuA" name="isSingleStringToPropertySetter">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1z3X6Eeipp8d5W3Vl9g" name="className" value="PropertySetter"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc10HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6ZsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6Z8AEEeic_M-KksGsuA" name="className" value="StringToPropertySetter"/>
     </constraints>
   </views>
-  <views xmi:id="_umc10XX6Eeipp8d5W3Vl9g" name="Single StringToPropertySetter" sections="_ZiyZEXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4H3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc10nX6Eeipp8d5W3Vl9g" name="isSingleStringToPropertySetter">
+  <views xmi:id="_PEE6aMAEEeic_M-KksGsuA" name="Single LayerOperatorDescriptorRegistry" sections="_pzUkA8AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7ycAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6acAEEeic_M-KksGsuA" name="isSingleLayerOperatorDescriptorRegistry">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc103X6Eeipp8d5W3Vl9g" name="className" value="StringToPropertySetter"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc11HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6asAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6a8AEEeic_M-KksGsuA" name="className" value="LayerOperatorDescriptorRegistry"/>
     </constraints>
   </views>
-  <views xmi:id="_umc11XX6Eeipp8d5W3Vl9g" name="Single LayerOperatorDescriptorRegistry" sections="_ZiyZEnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4InX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc11nX6Eeipp8d5W3Vl9g" name="isSingleLayerOperatorDescriptorRegistry">
+  <views xmi:id="_PEE6bMAEEeic_M-KksGsuA" name="Single LayerOperatorDescriptor" sections="_pzUkBMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7zsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6bcAEEeic_M-KksGsuA" name="isSingleLayerOperatorDescriptor">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc113X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc12HX6Eeipp8d5W3Vl9g" name="className" value="LayerOperatorDescriptorRegistry"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6bsAEEeic_M-KksGsuA" name="className" value="LayerOperatorDescriptor"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6b8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc12XX6Eeipp8d5W3Vl9g" name="Single LayerOperatorDescriptor" sections="_ZiyZE3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4J3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc12nX6Eeipp8d5W3Vl9g" name="isSingleLayerOperatorDescriptor">
+  <views xmi:id="_PEE6cMAEEeic_M-KksGsuA" name="Single PropertyOperator" sections="_pzUkBcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE70cAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6ccAEEeic_M-KksGsuA" name="isSinglePropertyOperator">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc123X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc13HX6Eeipp8d5W3Vl9g" name="className" value="LayerOperatorDescriptor"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6csAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6c8AEEeic_M-KksGsuA" name="className" value="PropertyOperator"/>
     </constraints>
   </views>
-  <views xmi:id="_umc13XX6Eeipp8d5W3Vl9g" name="Single PropertyOperator" sections="_ZizAEHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4KnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc13nX6Eeipp8d5W3Vl9g" name="isSinglePropertyOperator">
+  <views xmi:id="_PEE6dMAEEeic_M-KksGsuA" name="Single LayerOperator" sections="_pzVLEMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE71sAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6dcAEEeic_M-KksGsuA" name="isSingleLayerOperator">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc133X6Eeipp8d5W3Vl9g" name="className" value="PropertyOperator"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc14HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6dsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6d8AEEeic_M-KksGsuA" name="className" value="LayerOperator"/>
     </constraints>
   </views>
-  <views xmi:id="_umc14XX6Eeipp8d5W3Vl9g" name="Single AbstractLayerOperator" sections="_ZizAEXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4LHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc14nX6Eeipp8d5W3Vl9g" name="isSingleAbstractLayerOperator">
+  <views xmi:id="_PEE6eMAEEeic_M-KksGsuA" name="Single LayersContainer" sections="_pzVLEcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE72sAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6ecAEEeic_M-KksGsuA" name="isSingleLayersContainer">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc143X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc15HX6Eeipp8d5W3Vl9g" name="className" value="AbstractLayerOperator"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6esAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6e8AEEeic_M-KksGsuA" name="className" value="LayersContainer"/>
     </constraints>
   </views>
-  <views xmi:id="_umc15XX6Eeipp8d5W3Vl9g" name="Single LayerOperator" sections="_ZizAEnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4L3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc15nX6Eeipp8d5W3Vl9g" name="isSingleLayerOperator">
+  <views xmi:id="_PEE6fMAEEeic_M-KksGsuA" name="Single AbstractLayer" sections="_pzVLEsAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE728AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6fcAEEeic_M-KksGsuA" name="isSingleAbstractLayer">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc153X6Eeipp8d5W3Vl9g" name="className" value="LayerOperator"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc16HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6fsAEEeic_M-KksGsuA" name="className" value="AbstractLayer"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6f8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc16XX6Eeipp8d5W3Vl9g" name="Single LayersContainer" sections="_ZizAE3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4MXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc16nX6Eeipp8d5W3Vl9g" name="isSingleLayersContainer">
+  <views xmi:id="_PEE6gMAEEeic_M-KksGsuA" name="Single StringToTypeInstanceMap" sections="_pzVyIMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE74cAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6gcAEEeic_M-KksGsuA" name="isSingleStringToTypeInstanceMap">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc163X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc17HX6Eeipp8d5W3Vl9g" name="className" value="LayersContainer"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6gsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6g8AEEeic_M-KksGsuA" name="className" value="StringToTypeInstanceMap"/>
     </constraints>
   </views>
-  <views xmi:id="_umc17XX6Eeipp8d5W3Vl9g" name="Single DefaultPropertyOperator" sections="_ZizAFHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4MnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc17nX6Eeipp8d5W3Vl9g" name="isSingleDefaultPropertyOperator">
+  <views xmi:id="_PEE6hMAEEeic_M-KksGsuA" name="Single Folder" sections="_pzVyIcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE75MAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6hcAEEeic_M-KksGsuA" name="isSingleFolder">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc173X6Eeipp8d5W3Vl9g" name="className" value="DefaultPropertyOperator"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc18HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6hsAEEeic_M-KksGsuA" name="className" value="Folder"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6h8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc18XX6Eeipp8d5W3Vl9g" name="Single AbstractLayer" sections="_ZizAFXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4M3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc18nX6Eeipp8d5W3Vl9g" name="isSingleAbstractLayer">
+  <views xmi:id="_PEE6iMAEEeic_M-KksGsuA" name="Single Metamodel" sections="_pzVyIsAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE758AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6icAEEeic_M-KksGsuA" name="isSingleMetamodel">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc183X6Eeipp8d5W3Vl9g" name="className" value="AbstractLayer"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc19HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6isAEEeic_M-KksGsuA" name="className" value="Metamodel"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6i8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc19XX6Eeipp8d5W3Vl9g" name="Single StringToTypeInstanceMap" sections="_ZizAFnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4OXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc19nX6Eeipp8d5W3Vl9g" name="isSingleStringToTypeInstanceMap">
+  <views xmi:id="_PEE6jMAEEeic_M-KksGsuA" name="Single TopLayerOperator" sections="_pzVyI8AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhRcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6jcAEEeic_M-KksGsuA" name="isSingleTopLayerOperator">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc193X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1-HX6Eeipp8d5W3Vl9g" name="className" value="StringToTypeInstanceMap"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6jsAEEeic_M-KksGsuA" name="className" value="TopLayerOperator"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6j8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1-XX6Eeipp8d5W3Vl9g" name="Single Folder" sections="_ZizAF3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4PHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1-nX6Eeipp8d5W3Vl9g" name="isSingleFolder">
+  <views xmi:id="_PEE6kMAEEeic_M-KksGsuA" name="Single StackedLayerOperator" sections="_pzWZMMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhRsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6kcAEEeic_M-KksGsuA" name="isSingleStackedLayerOperator">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1-3X6Eeipp8d5W3Vl9g" name="className" value="Folder"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1_HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6ksAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6k8AEEeic_M-KksGsuA" name="className" value="StackedLayerOperator"/>
     </constraints>
   </views>
-  <views xmi:id="_umc1_XX6Eeipp8d5W3Vl9g" name="Single IntInstance" sections="_ZizAGHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4P3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc1_nX6Eeipp8d5W3Vl9g" name="isSingleIntInstance">
+  <views xmi:id="_PEE6lMAEEeic_M-KksGsuA" name="Single PropertyIndex" sections="_pzWZMcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhR8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6lcAEEeic_M-KksGsuA" name="isSinglePropertyIndex">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc1_3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2AHX6Eeipp8d5W3Vl9g" name="className" value="IntInstance"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6lsAEEeic_M-KksGsuA" name="className" value="PropertyIndex"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6l8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2AXX6Eeipp8d5W3Vl9g" name="Single BooleanInstance" sections="_ZizAGXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4QXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2AnX6Eeipp8d5W3Vl9g" name="isSingleBooleanInstance">
+  <views xmi:id="_PEE6mMAEEeic_M-KksGsuA" name="Single StringToPropertyIndexMap" sections="_pzWZMsAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhSsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6mcAEEeic_M-KksGsuA" name="isSingleStringToPropertyIndexMap">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2A3X6Eeipp8d5W3Vl9g" name="className" value="BooleanInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2BHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6msAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6m8AEEeic_M-KksGsuA" name="className" value="StringToPropertyIndexMap"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2BXX6Eeipp8d5W3Vl9g" name="Single StringInstance" sections="_ZizAGnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4Q3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2BnX6Eeipp8d5W3Vl9g" name="isSingleStringInstance">
+  <views xmi:id="_PEE6nMAEEeic_M-KksGsuA" name="Single SimpleLayerDescriptor" sections="_pzWZM8AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhTcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6ncAEEeic_M-KksGsuA" name="isSingleSimpleLayerDescriptor">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2B3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2CHX6Eeipp8d5W3Vl9g" name="className" value="StringInstance"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6nsAEEeic_M-KksGsuA" name="className" value="SimpleLayerDescriptor"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6n8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2CXX6Eeipp8d5W3Vl9g" name="Single IntType" sections="_ZizAG3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4RXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2CnX6Eeipp8d5W3Vl9g" name="isSingleIntType">
+  <views xmi:id="_PEE6oMAEEeic_M-KksGsuA" name="Single NullInstance" sections="_pzWZNMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhTsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6ocAEEeic_M-KksGsuA" name="isSingleNullInstance">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2C3X6Eeipp8d5W3Vl9g" name="className" value="IntType"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2DHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6osAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6o8AEEeic_M-KksGsuA" name="className" value="NullInstance"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2DXX6Eeipp8d5W3Vl9g" name="Single BooleanType" sections="_ZizAHHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4RnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2DnX6Eeipp8d5W3Vl9g" name="isSingleBooleanType">
+  <views xmi:id="_PEE6pMAEEeic_M-KksGsuA" name="Single Layer" sections="_pzXAQMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhT8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6pcAEEeic_M-KksGsuA" name="isSingleLayer">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2D3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2EHX6Eeipp8d5W3Vl9g" name="className" value="BooleanType"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6psAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6p8AEEeic_M-KksGsuA" name="className" value="Layer"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2EXX6Eeipp8d5W3Vl9g" name="Single StringType" sections="_ZizAHXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4R3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2EnX6Eeipp8d5W3Vl9g" name="isSingleStringType">
+  <views xmi:id="_PEE6qMAEEeic_M-KksGsuA" name="Single NullPropertySetter" sections="_pzXAQcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhUMAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6qcAEEeic_M-KksGsuA" name="isSingleNullPropertySetter">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2E3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2FHX6Eeipp8d5W3Vl9g" name="className" value="StringType"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6qsAEEeic_M-KksGsuA" name="className" value="NullPropertySetter"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6q8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2FXX6Eeipp8d5W3Vl9g" name="Single CustomType" sections="_ZizAHnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4SHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2FnX6Eeipp8d5W3Vl9g" name="isSingleCustomType">
+  <views xmi:id="_PEE6rMAEEeic_M-KksGsuA" name="Single TopLayerOperatorDescriptor" sections="_pzXAQsAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhUcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6rcAEEeic_M-KksGsuA" name="isSingleTopLayerOperatorDescriptor">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2F3X6Eeipp8d5W3Vl9g" name="className" value="CustomType"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2GHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6rsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6r8AEEeic_M-KksGsuA" name="className" value="TopLayerOperatorDescriptor"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2GXX6Eeipp8d5W3Vl9g" name="Single TopLayerOperator" sections="_ZiznIHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4SnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2GnX6Eeipp8d5W3Vl9g" name="isSingleTopLayerOperator">
+  <views xmi:id="_PEE6sMAEEeic_M-KksGsuA" name="Single StackedLayerOperatorDescriptor" sections="_pzXAQ8AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhUsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6scAEEeic_M-KksGsuA" name="isSingleStackedLayerOperatorDescriptor">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2G3X6Eeipp8d5W3Vl9g" name="className" value="TopLayerOperator"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2HHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6ssAEEeic_M-KksGsuA" name="className" value="StackedLayerOperatorDescriptor"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6s8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2HXX6Eeipp8d5W3Vl9g" name="Single StackedLayerOperator" sections="_ZiznIXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4S3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2HnX6Eeipp8d5W3Vl9g" name="isSingleStackedLayerOperator">
+  <views xmi:id="_PEE6tMAEEeic_M-KksGsuA" name="Single AllViewsDerivedLayer" sections="_pzXARMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhU8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6tcAEEeic_M-KksGsuA" name="isSingleAllViewsDerivedLayer">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2H3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2IHX6Eeipp8d5W3Vl9g" name="className" value="StackedLayerOperator"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6tsAEEeic_M-KksGsuA" name="className" value="AllViewsDerivedLayer"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6t8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2IXX6Eeipp8d5W3Vl9g" name="Single CustomLayerOperator" sections="_ZiznInX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4THX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2InX6Eeipp8d5W3Vl9g" name="isSingleCustomLayerOperator">
+  <views xmi:id="_PEE6uMAEEeic_M-KksGsuA" name="Single CSSPropertySetter" sections="_pzXARcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhVMAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6ucAEEeic_M-KksGsuA" name="isSingleCSSPropertySetter">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2I3X6Eeipp8d5W3Vl9g" name="className" value="CustomLayerOperator"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2JHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6usAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6u8AEEeic_M-KksGsuA" name="className" value="CSSPropertySetter"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2JXX6Eeipp8d5W3Vl9g" name="Single PropertyIndex" sections="_ZiznI3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4TXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2JnX6Eeipp8d5W3Vl9g" name="isSinglePropertyIndex">
+  <views xmi:id="_PEE6vMAEEeic_M-KksGsuA" name="Single CSSType" sections="_pzXnUMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhVcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6vcAEEeic_M-KksGsuA" name="isSingleCSSType">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2J3X6Eeipp8d5W3Vl9g" name="className" value="PropertyIndex"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2KHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6vsAEEeic_M-KksGsuA" name="className" value="CSSType"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6v8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2KXX6Eeipp8d5W3Vl9g" name="Single StringToPropertyIndexMap" sections="_ZiznJHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4UHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2KnX6Eeipp8d5W3Vl9g" name="isSingleStringToPropertyIndexMap">
+  <views xmi:id="_PEE6wMAEEeic_M-KksGsuA" name="Single CSSInstance" sections="_pzXnUcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhVsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6wcAEEeic_M-KksGsuA" name="isSingleCSSInstance">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2K3X6Eeipp8d5W3Vl9g" name="className" value="StringToPropertyIndexMap"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2LHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6wsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6w8AEEeic_M-KksGsuA" name="className" value="CSSInstance"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2LXX6Eeipp8d5W3Vl9g" name="Single SimpleLayerDescriptor" sections="_ZiznJXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4U3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2LnX6Eeipp8d5W3Vl9g" name="isSingleSimpleLayerDescriptor">
+  <views xmi:id="_PEE6xMAEEeic_M-KksGsuA" name="Single CSSHidePropertySetter" sections="_pzXnUsAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhWcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6xcAEEeic_M-KksGsuA" name="isSingleCSSHidePropertySetter">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2L3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2MHX6Eeipp8d5W3Vl9g" name="className" value="SimpleLayerDescriptor"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6xsAEEeic_M-KksGsuA" name="className" value="CSSHidePropertySetter"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6x8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2MXX6Eeipp8d5W3Vl9g" name="Single RegExpLayerDescriptor" sections="_ZiznJnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4VHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2MnX6Eeipp8d5W3Vl9g" name="isSingleRegExpLayerDescriptor">
+  <views xmi:id="_PEE6yMAEEeic_M-KksGsuA" name="Single CSSHideType" sections="_pzXnU8AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhWsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6ycAEEeic_M-KksGsuA" name="isSingleCSSHideType">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2M3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2NHX6Eeipp8d5W3Vl9g" name="className" value="RegExpLayerDescriptor"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6ysAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6y8AEEeic_M-KksGsuA" name="className" value="CSSHideType"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2NXX6Eeipp8d5W3Vl9g" name="Single NullInstance" sections="_ZiznJ3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4VXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2NnX6Eeipp8d5W3Vl9g" name="isSingleNullInstance">
+  <views xmi:id="_PEE6zMAEEeic_M-KksGsuA" name="Single CSSHideInstance" sections="_pzXnVMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhW8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6zcAEEeic_M-KksGsuA" name="isSingleCSSHideInstance">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2N3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2OHX6Eeipp8d5W3Vl9g" name="className" value="NullInstance"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6zsAEEeic_M-KksGsuA" name="className" value="CSSHideInstance"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6z8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2OXX6Eeipp8d5W3Vl9g" name="Single RegExpLayer" sections="_ZiznKHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4VnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2OnX6Eeipp8d5W3Vl9g" name="isSingleRegExpLayer">
+  <views xmi:id="_PEE60MAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple LayerNamedStyle" sections="_pzXnVcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7icAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE60cAEEeic_M-KksGsuA" name="isMultipleLayerNamedStyle">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2O3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2PHX6Eeipp8d5W3Vl9g" name="className" value="RegExpLayer"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE60sAEEeic_M-KksGsuA" name="className" value="LayerNamedStyle"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE608AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2PXX6Eeipp8d5W3Vl9g" name="Single Layer" sections="_ZiznKXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4XnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2PnX6Eeipp8d5W3Vl9g" name="isSingleLayer">
+  <views xmi:id="_PEE61MAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple LayersStack" sections="_pzXnVsAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7i8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE61cAEEeic_M-KksGsuA" name="isMultipleLayersStack">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2P3X6Eeipp8d5W3Vl9g" name="className" value="Layer"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2QHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE61sAEEeic_M-KksGsuA" name="className" value="LayersStack"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE618AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2QXX6Eeipp8d5W3Vl9g" name="Single Color" sections="_ZiznKnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4X3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2QnX6Eeipp8d5W3Vl9g" name="isSingleColor">
+  <views xmi:id="_PEE62MAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple LayerExpression" sections="_pzXnV8AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7kcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE62cAEEeic_M-KksGsuA" name="isMultipleLayerExpression">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2Q3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2RHX6Eeipp8d5W3Vl9g" name="className" value="Color"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE62sAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE628AEEeic_M-KksGsuA" name="className" value="LayerExpression"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2RXX6Eeipp8d5W3Vl9g" name="Single ColorInstance" sections="_ZiznK3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4YHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2RnX6Eeipp8d5W3Vl9g" name="isSingleColorInstance">
+  <views xmi:id="_PEE63MAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple ApplicationDependantElement" sections="_pzYOYMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7mcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE63cAEEeic_M-KksGsuA" name="isMultipleApplicationDependantElement">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2R3X6Eeipp8d5W3Vl9g" name="className" value="ColorInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2SHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE63sAEEeic_M-KksGsuA" name="className" value="ApplicationDependantElement"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE638AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2SXX6Eeipp8d5W3Vl9g" name="Single FillInstance" sections="_ZiznLHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4YnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2SnX6Eeipp8d5W3Vl9g" name="isSingleFillInstance">
+  <views xmi:id="_PEE64MAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple LayersStackApplication" sections="_pzYOYcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7m8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE64cAEEeic_M-KksGsuA" name="isMultipleLayersStackApplication">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2S3X6Eeipp8d5W3Vl9g" name="className" value="FillInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2THX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE64sAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE648AEEeic_M-KksGsuA" name="className" value="LayersStackApplication"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2TXX6Eeipp8d5W3Vl9g" name="Single Fill" sections="_ZiznLXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4ZXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2TnX6Eeipp8d5W3Vl9g" name="isSingleFill">
+  <views xmi:id="_PEE65MAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple FolderElement" sections="_pzYOYsAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7o8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE65cAEEeic_M-KksGsuA" name="isMultipleFolderElement">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2T3X6Eeipp8d5W3Vl9g" name="className" value="Fill"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2UHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE65sAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE658AEEeic_M-KksGsuA" name="className" value="FolderElement"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2UXX6Eeipp8d5W3Vl9g" name="Single FillPropertySetter" sections="_ZiznLnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4ZnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2UnX6Eeipp8d5W3Vl9g" name="isSingleFillPropertySetter">
+  <views xmi:id="_PEE66MAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple LayerStackDescriptorRegistry" sections="_pzYOY8AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7pMAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE66cAEEeic_M-KksGsuA" name="isMultipleLayerStackDescriptorRegistry">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2U3X6Eeipp8d5W3Vl9g" name="className" value="FillPropertySetter"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2VHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE66sAEEeic_M-KksGsuA" name="className" value="LayerStackDescriptorRegistry"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE668AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2VXX6Eeipp8d5W3Vl9g" name="Single IsValidPropertySetter" sections="_Zi0OMHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4Z3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2VnX6Eeipp8d5W3Vl9g" name="isSingleIsValidPropertySetter">
+  <views xmi:id="_PEE67MAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple PropertyRegistry" sections="_pzYOZMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7pcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE67cAEEeic_M-KksGsuA" name="isMultiplePropertyRegistry">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2V3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2WHX6Eeipp8d5W3Vl9g" name="className" value="IsValidPropertySetter"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE67sAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE678AEEeic_M-KksGsuA" name="className" value="PropertyRegistry"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2WXX6Eeipp8d5W3Vl9g" name="Single NullPropertySetter" sections="_Zi0OMXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4aHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2WnX6Eeipp8d5W3Vl9g" name="isSingleNullPropertySetter">
+  <views xmi:id="_PEE68MAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple Property" sections="_pzYOZcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7qcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE68cAEEeic_M-KksGsuA" name="isMultipleProperty">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2W3X6Eeipp8d5W3Vl9g" name="className" value="NullPropertySetter"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2XHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE68sAEEeic_M-KksGsuA" name="className" value="Property"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE688AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2XXX6Eeipp8d5W3Vl9g" name="Single LineType" sections="_Zi0OMnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4aXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2XnX6Eeipp8d5W3Vl9g" name="isSingleLineType">
+  <views xmi:id="_PEE69MAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple Type" sections="_pzYOZsAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7r8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE69cAEEeic_M-KksGsuA" name="isMultipleType">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2X3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2YHX6Eeipp8d5W3Vl9g" name="className" value="LineType"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE69sAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE698AEEeic_M-KksGsuA" name="className" value="Type"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2YXX6Eeipp8d5W3Vl9g" name="Single LineInstance" sections="_Zi0OM3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4anX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2YnX6Eeipp8d5W3Vl9g" name="isSingleLineInstance">
+  <views xmi:id="_PEE6-MAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple TypeInstance" sections="_pzYOZ8AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7ssAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6-cAEEeic_M-KksGsuA" name="isMultipleTypeInstance">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2Y3X6Eeipp8d5W3Vl9g" name="className" value="LineInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2ZHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6-sAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6-8AEEeic_M-KksGsuA" name="className" value="TypeInstance"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2ZXX6Eeipp8d5W3Vl9g" name="Single LinePropertySetter" sections="_Zi0ONHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4bXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2ZnX6Eeipp8d5W3Vl9g" name="isSingleLinePropertySetter">
+  <views xmi:id="_PEE6_MAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple ComputePropertyValueCommandItf" sections="_pzYOaMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7s8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE6_cAEEeic_M-KksGsuA" name="isMultipleComputePropertyValueCommandItf">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2Z3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2aHX6Eeipp8d5W3Vl9g" name="className" value="LinePropertySetter"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6_sAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE6_8AEEeic_M-KksGsuA" name="className" value="ComputePropertyValueCommandItf"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2aXX6Eeipp8d5W3Vl9g" name="Single FontPropertySetter" sections="_Zi0ONXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4bnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2anX6Eeipp8d5W3Vl9g" name="isSingleFontPropertySetter">
+  <views xmi:id="_PEE7AMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple TypeRegistry" sections="_pzYOacAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7tMAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7AcAEEeic_M-KksGsuA" name="isMultipleTypeRegistry">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2a3X6Eeipp8d5W3Vl9g" name="className" value="FontPropertySetter"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2bHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7AsAEEeic_M-KksGsuA" name="className" value="TypeRegistry"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7A8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2bXX6Eeipp8d5W3Vl9g" name="Single FontInstance" sections="_Zi0ONnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4b3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2bnX6Eeipp8d5W3Vl9g" name="isSingleFontInstance">
+  <views xmi:id="_PEE7BMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple StringToTypeMap" sections="_pzYOasAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7tsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7BcAEEeic_M-KksGsuA" name="isMultipleStringToTypeMap">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2b3X6Eeipp8d5W3Vl9g" name="className" value="FontInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2cHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7BsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7B8AEEeic_M-KksGsuA" name="className" value="StringToTypeMap"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2cXX6Eeipp8d5W3Vl9g" name="Single FontType" sections="_Zi0ON3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4dHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2cnX6Eeipp8d5W3Vl9g" name="isSingleFontType">
+  <views xmi:id="_PEE7CMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple LayerDescriptorRegistry" sections="_pzY1cMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7ucAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7CcAEEeic_M-KksGsuA" name="isMultipleLayerDescriptorRegistry">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2c3X6Eeipp8d5W3Vl9g" name="className" value="FontType"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2dHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7CsAEEeic_M-KksGsuA" name="className" value="LayerDescriptorRegistry"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7C8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2dXX6Eeipp8d5W3Vl9g" name="Single IsVisiblePropertySetter" sections="_Zi0OOHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4dXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2dnX6Eeipp8d5W3Vl9g" name="isSingleIsVisiblePropertySetter">
+  <views xmi:id="_PEE7DMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple LayerDescriptor" sections="_pzY1ccAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7u8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7DcAEEeic_M-KksGsuA" name="isMultipleLayerDescriptor">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2d3X6Eeipp8d5W3Vl9g" name="className" value="IsVisiblePropertySetter"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2eHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7DsAEEeic_M-KksGsuA" name="className" value="LayerDescriptor"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7D8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2eXX6Eeipp8d5W3Vl9g" name="Single TopLayerOperatorDescriptor" sections="_Zi0OOXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4dnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2enX6Eeipp8d5W3Vl9g" name="isSingleTopLayerOperatorDescriptor">
+  <views xmi:id="_PEE7EMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple LayerApplicationFactory" sections="_pzY1csAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7vcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7EcAEEeic_M-KksGsuA" name="isMultipleLayerApplicationFactory">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2e3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2fHX6Eeipp8d5W3Vl9g" name="className" value="TopLayerOperatorDescriptor"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7EsAEEeic_M-KksGsuA" name="className" value="LayerApplicationFactory"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7E8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2fXX6Eeipp8d5W3Vl9g" name="Single StackedLayerOperatorDescriptor" sections="_Zi0OOnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4d3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2fnX6Eeipp8d5W3Vl9g" name="isSingleStackedLayerOperatorDescriptor">
+  <views xmi:id="_PEE7FMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple PropertySetterRegistry" sections="_pzY1c8AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7v8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7FcAEEeic_M-KksGsuA" name="isMultiplePropertySetterRegistry">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2f3X6Eeipp8d5W3Vl9g" name="className" value="StackedLayerOperatorDescriptor"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2gHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7FsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7F8AEEeic_M-KksGsuA" name="className" value="PropertySetterRegistry"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2gXX6Eeipp8d5W3Vl9g" name="Single CustomPropertyOperator" sections="_Zi0OO3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4eHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2gnX6Eeipp8d5W3Vl9g" name="isSingleCustomPropertyOperator">
+  <views xmi:id="_PEE7GMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple PropertySetter" sections="_pzY1dMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7w8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7GcAEEeic_M-KksGsuA" name="isMultiplePropertySetter">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2g3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2hHX6Eeipp8d5W3Vl9g" name="className" value="CustomPropertyOperator"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7GsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7G8AEEeic_M-KksGsuA" name="className" value="PropertySetter"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2hXX6Eeipp8d5W3Vl9g" name="Single AndStackedLayerOperatorDescriptor" sections="_Zi0OPHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4fHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2hnX6Eeipp8d5W3Vl9g" name="isSingleAndStackedLayerOperatorDescriptor">
+  <views xmi:id="_PEE7HMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple StringToPropertySetter" sections="_pzY1dcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7xsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7HcAEEeic_M-KksGsuA" name="isMultipleStringToPropertySetter">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2h3X6Eeipp8d5W3Vl9g" name="className" value="AndStackedLayerOperatorDescriptor"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2iHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7HsAEEeic_M-KksGsuA" name="className" value="StringToPropertySetter"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7H8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2iXX6Eeipp8d5W3Vl9g" name="Single OrStackedLayerOperatorDescriptor" sections="_Zi0OPXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4fXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2inX6Eeipp8d5W3Vl9g" name="isSingleOrStackedLayerOperatorDescriptor">
+  <views xmi:id="_PEE7IMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple LayerOperatorDescriptorRegistry" sections="_pzY1dsAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7ycAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7IcAEEeic_M-KksGsuA" name="isMultipleLayerOperatorDescriptorRegistry">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2i3X6Eeipp8d5W3Vl9g" name="className" value="OrStackedLayerOperatorDescriptor"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2jHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7IsAEEeic_M-KksGsuA" name="className" value="LayerOperatorDescriptorRegistry"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7I8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2jXX6Eeipp8d5W3Vl9g" name="Single IsAbstractUmlSetter" sections="_Zi0OPnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4fnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2jnX6Eeipp8d5W3Vl9g" name="isSingleIsAbstractUmlSetter">
+  <views xmi:id="_PEE7JMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple LayerOperatorDescriptor" sections="_pzY1d8AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE7zsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7JcAEEeic_M-KksGsuA" name="isMultipleLayerOperatorDescriptor">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2j3X6Eeipp8d5W3Vl9g" name="className" value="IsAbstractUmlSetter"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2kHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7JsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7J8AEEeic_M-KksGsuA" name="className" value="LayerOperatorDescriptor"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2kXX6Eeipp8d5W3Vl9g" name="Single AllViewsDerivedLayer" sections="_Zi0OP3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4f3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2knX6Eeipp8d5W3Vl9g" name="isSingleAllViewsDerivedLayer">
+  <views xmi:id="_PEE7KMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple PropertyOperator" sections="_pzY1eMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE70cAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7KcAEEeic_M-KksGsuA" name="isMultiplePropertyOperator">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2k3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2lHX6Eeipp8d5W3Vl9g" name="className" value="AllViewsDerivedLayer"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7KsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7K8AEEeic_M-KksGsuA" name="className" value="PropertyOperator"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2lXX6Eeipp8d5W3Vl9g" name="Single CSSPropertySetter" sections="_Zi0OQHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4gHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2lnX6Eeipp8d5W3Vl9g" name="isSingleCSSPropertySetter">
+  <views xmi:id="_PEE7LMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple LayerOperator" sections="_pzZcgMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE71sAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7LcAEEeic_M-KksGsuA" name="isMultipleLayerOperator">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2l3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2mHX6Eeipp8d5W3Vl9g" name="className" value="CSSPropertySetter"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7LsAEEeic_M-KksGsuA" name="className" value="LayerOperator"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7L8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2mXX6Eeipp8d5W3Vl9g" name="Single CSSType" sections="_Zi0OQXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4gXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2mnX6Eeipp8d5W3Vl9g" name="isSingleCSSType">
+  <views xmi:id="_PEE7MMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple LayersContainer" sections="_pzZcgcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE72sAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7McAEEeic_M-KksGsuA" name="isMultipleLayersContainer">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2m3X6Eeipp8d5W3Vl9g" name="className" value="CSSType"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2nHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7MsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7M8AEEeic_M-KksGsuA" name="className" value="LayersContainer"/>
     </constraints>
   </views>
-  <views xmi:id="_umc2nXX6Eeipp8d5W3Vl9g" name="Single CSSInstance" sections="_Zi01QHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4gnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2nnX6Eeipp8d5W3Vl9g" name="isSingleCSSInstance">
+  <views xmi:id="_PEE7NMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple AbstractLayer" sections="_pzZcgsAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE728AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7NcAEEeic_M-KksGsuA" name="isMultipleAbstractLayer">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2n3X6Eeipp8d5W3Vl9g" name="className" value="CSSInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2oHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc2oXX6Eeipp8d5W3Vl9g" name="Single CSSHidePropertySetter" sections="_Zi01QXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4hXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2onX6Eeipp8d5W3Vl9g" name="isSingleCSSHidePropertySetter">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2o3X6Eeipp8d5W3Vl9g" name="className" value="CSSHidePropertySetter"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2pHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc2pXX6Eeipp8d5W3Vl9g" name="Single CSSHideType" sections="_Zi01QnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4hnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2pnX6Eeipp8d5W3Vl9g" name="isSingleCSSHideType">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2p3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2qHX6Eeipp8d5W3Vl9g" name="className" value="CSSHideType"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc2qXX6Eeipp8d5W3Vl9g" name="Single CSSHideInstance" sections="_Zi01Q3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4h3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2qnX6Eeipp8d5W3Vl9g" name="isSingleCSSHideInstance">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2q3X6Eeipp8d5W3Vl9g" name="className" value="CSSHideInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2rHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc2rXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LayerNamedStyle" sections="_Zi01RHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc32nX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2rnX6Eeipp8d5W3Vl9g" name="isMultipleLayerNamedStyle">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2r3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2sHX6Eeipp8d5W3Vl9g" name="className" value="LayerNamedStyle"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc2sXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LayersStack" sections="_Zi01RXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc33HX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2snX6Eeipp8d5W3Vl9g" name="isMultipleLayersStack">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2s3X6Eeipp8d5W3Vl9g" name="className" value="LayersStack"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2tHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc2tXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LayerExpression" sections="_Zi01RnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc34nX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2tnX6Eeipp8d5W3Vl9g" name="isMultipleLayerExpression">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2t3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2uHX6Eeipp8d5W3Vl9g" name="className" value="LayerExpression"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc2uXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple ApplicationDependantElement" sections="_Zi01R3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc36nX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2unX6Eeipp8d5W3Vl9g" name="isMultipleApplicationDependantElement">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2u3X6Eeipp8d5W3Vl9g" name="className" value="ApplicationDependantElement"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2vHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc2vXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LayersStackApplication" sections="_Zi01SHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc37HX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2vnX6Eeipp8d5W3Vl9g" name="isMultipleLayersStackApplication">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2v3X6Eeipp8d5W3Vl9g" name="className" value="LayersStackApplication"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2wHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc2wXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple FolderElement" sections="_Zi01SXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc39HX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2wnX6Eeipp8d5W3Vl9g" name="isMultipleFolderElement">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2w3X6Eeipp8d5W3Vl9g" name="className" value="FolderElement"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2xHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc2xXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LayerStackDescriptorRegistry" sections="_Zi01SnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc39XX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2xnX6Eeipp8d5W3Vl9g" name="isMultipleLayerStackDescriptorRegistry">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2x3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2yHX6Eeipp8d5W3Vl9g" name="className" value="LayerStackDescriptorRegistry"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc2yXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple PropertyRegistry" sections="_Zi01S3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc39nX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2ynX6Eeipp8d5W3Vl9g" name="isMultiplePropertyRegistry">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2y3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2zHX6Eeipp8d5W3Vl9g" name="className" value="PropertyRegistry"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc2zXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple Property" sections="_Zi01THX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc3-nX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2znX6Eeipp8d5W3Vl9g" name="isMultipleProperty">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2z3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc20HX6Eeipp8d5W3Vl9g" name="className" value="Property"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc20XX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple Type" sections="_Zi01TXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4AHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc20nX6Eeipp8d5W3Vl9g" name="isMultipleType">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc203X6Eeipp8d5W3Vl9g" name="className" value="Type"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc21HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc21XX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple Metamodel" sections="_Zi01TnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4BHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc21nX6Eeipp8d5W3Vl9g" name="isMultipleMetamodel">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc213X6Eeipp8d5W3Vl9g" name="className" value="Metamodel"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc22HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc22XX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple TypeInstance" sections="_Zi01T3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4C3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc22nX6Eeipp8d5W3Vl9g" name="isMultipleTypeInstance">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc223X6Eeipp8d5W3Vl9g" name="className" value="TypeInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc23HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc23XX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple ComputePropertyValueCommandItf" sections="_Zi01UHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4DHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc23nX6Eeipp8d5W3Vl9g" name="isMultipleComputePropertyValueCommandItf">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc233X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc24HX6Eeipp8d5W3Vl9g" name="className" value="ComputePropertyValueCommandItf"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc24XX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple TypeRegistry" sections="_Zi1cUHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4DXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc24nX6Eeipp8d5W3Vl9g" name="isMultipleTypeRegistry">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc243X6Eeipp8d5W3Vl9g" name="className" value="TypeRegistry"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc25HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc25XX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple StringToTypeMap" sections="_Zi1cUXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4D3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc25nX6Eeipp8d5W3Vl9g" name="isMultipleStringToTypeMap">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc253X6Eeipp8d5W3Vl9g" name="className" value="StringToTypeMap"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc26HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc26XX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LayerDescriptorRegistry" sections="_Zi1cUnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4EnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc26nX6Eeipp8d5W3Vl9g" name="isMultipleLayerDescriptorRegistry">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc263X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc27HX6Eeipp8d5W3Vl9g" name="className" value="LayerDescriptorRegistry"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc27XX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LayerDescriptor" sections="_Zi1cU3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4FHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc27nX6Eeipp8d5W3Vl9g" name="isMultipleLayerDescriptor">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc273X6Eeipp8d5W3Vl9g" name="className" value="LayerDescriptor"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc28HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc28XX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LayerApplicationFactory" sections="_Zi1cVHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4FnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc28nX6Eeipp8d5W3Vl9g" name="isMultipleLayerApplicationFactory">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc283X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc29HX6Eeipp8d5W3Vl9g" name="className" value="LayerApplicationFactory"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc29XX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple PropertySetterRegistry" sections="_Zi1cVXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4GHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc29nX6Eeipp8d5W3Vl9g" name="isMultiplePropertySetterRegistry">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc293X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2-HX6Eeipp8d5W3Vl9g" name="className" value="PropertySetterRegistry"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc2-XX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple PropertySetter" sections="_Zi1cVnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4HHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2-nX6Eeipp8d5W3Vl9g" name="isMultiplePropertySetter">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2-3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2_HX6Eeipp8d5W3Vl9g" name="className" value="PropertySetter"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc2_XX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple StringToPropertySetter" sections="_Zi1cV3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4H3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc2_nX6Eeipp8d5W3Vl9g" name="isMultipleStringToPropertySetter">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc2_3X6Eeipp8d5W3Vl9g" name="className" value="StringToPropertySetter"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3AHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3AXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LayerOperatorDescriptorRegistry" sections="_Zi1cWHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4InX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3AnX6Eeipp8d5W3Vl9g" name="isMultipleLayerOperatorDescriptorRegistry">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3A3X6Eeipp8d5W3Vl9g" name="className" value="LayerOperatorDescriptorRegistry"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3BHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3BXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LayerOperatorDescriptor" sections="_Zi1cWXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4J3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3BnX6Eeipp8d5W3Vl9g" name="isMultipleLayerOperatorDescriptor">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3B3X6Eeipp8d5W3Vl9g" name="className" value="LayerOperatorDescriptor"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3CHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3CXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple PropertyOperator" sections="_Zi1cWnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4KnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3CnX6Eeipp8d5W3Vl9g" name="isMultiplePropertyOperator">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3C3X6Eeipp8d5W3Vl9g" name="className" value="PropertyOperator"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3DHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3DXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple AbstractLayerOperator" sections="_Zi1cW3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4LHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3DnX6Eeipp8d5W3Vl9g" name="isMultipleAbstractLayerOperator">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3D3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3EHX6Eeipp8d5W3Vl9g" name="className" value="AbstractLayerOperator"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3EXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LayerOperator" sections="_Zi1cXHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4L3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3EnX6Eeipp8d5W3Vl9g" name="isMultipleLayerOperator">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3E3X6Eeipp8d5W3Vl9g" name="className" value="LayerOperator"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3FHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3FXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LayersContainer" sections="_Zi1cXXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4MXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3FnX6Eeipp8d5W3Vl9g" name="isMultipleLayersContainer">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3F3X6Eeipp8d5W3Vl9g" name="className" value="LayersContainer"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3GHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3GXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple DefaultPropertyOperator" sections="_Zi1cXnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4MnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3GnX6Eeipp8d5W3Vl9g" name="isMultipleDefaultPropertyOperator">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3G3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3HHX6Eeipp8d5W3Vl9g" name="className" value="DefaultPropertyOperator"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3HXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple AbstractLayer" sections="_Zi2DYHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4M3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3HnX6Eeipp8d5W3Vl9g" name="isMultipleAbstractLayer">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3H3X6Eeipp8d5W3Vl9g" name="className" value="AbstractLayer"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3IHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3IXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple StringToTypeInstanceMap" sections="_Zi2DYXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4OXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3InX6Eeipp8d5W3Vl9g" name="isMultipleStringToTypeInstanceMap">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3I3X6Eeipp8d5W3Vl9g" name="className" value="StringToTypeInstanceMap"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3JHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3JXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple Folder" sections="_Zi2DYnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4PHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3JnX6Eeipp8d5W3Vl9g" name="isMultipleFolder">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3J3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3KHX6Eeipp8d5W3Vl9g" name="className" value="Folder"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3KXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple IntInstance" sections="_Zi2DY3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4P3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3KnX6Eeipp8d5W3Vl9g" name="isMultipleIntInstance">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3K3X6Eeipp8d5W3Vl9g" name="className" value="IntInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3LHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3LXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple BooleanInstance" sections="_Zi2DZHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4QXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3LnX6Eeipp8d5W3Vl9g" name="isMultipleBooleanInstance">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3L3X6Eeipp8d5W3Vl9g" name="className" value="BooleanInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3MHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3MXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple StringInstance" sections="_Zi2DZXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4Q3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3MnX6Eeipp8d5W3Vl9g" name="isMultipleStringInstance">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3M3X6Eeipp8d5W3Vl9g" name="className" value="StringInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3NHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3NXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple IntType" sections="_Zi2DZnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4RXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3NnX6Eeipp8d5W3Vl9g" name="isMultipleIntType">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3N3X6Eeipp8d5W3Vl9g" name="className" value="IntType"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3OHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3OXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple BooleanType" sections="_Zi2DZ3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4RnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3OnX6Eeipp8d5W3Vl9g" name="isMultipleBooleanType">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3O3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3PHX6Eeipp8d5W3Vl9g" name="className" value="BooleanType"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3PXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple StringType" sections="_Zi2DaHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4R3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3PnX6Eeipp8d5W3Vl9g" name="isMultipleStringType">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3P3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3QHX6Eeipp8d5W3Vl9g" name="className" value="StringType"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3QXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple CustomType" sections="_Zi2DaXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4SHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3QnX6Eeipp8d5W3Vl9g" name="isMultipleCustomType">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3Q3X6Eeipp8d5W3Vl9g" name="className" value="CustomType"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3RHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3RXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple TopLayerOperator" sections="_Zi2DanX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4SnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3RnX6Eeipp8d5W3Vl9g" name="isMultipleTopLayerOperator">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3R3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3SHX6Eeipp8d5W3Vl9g" name="className" value="TopLayerOperator"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3SXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple StackedLayerOperator" sections="_Zi2Da3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4S3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3SnX6Eeipp8d5W3Vl9g" name="isMultipleStackedLayerOperator">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3S3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3THX6Eeipp8d5W3Vl9g" name="className" value="StackedLayerOperator"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3TXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple CustomLayerOperator" sections="_Zi2DbHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4THX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3TnX6Eeipp8d5W3Vl9g" name="isMultipleCustomLayerOperator">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3T3X6Eeipp8d5W3Vl9g" name="className" value="CustomLayerOperator"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3UHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3UXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple PropertyIndex" sections="_Zi2DbXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4TXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3UnX6Eeipp8d5W3Vl9g" name="isMultiplePropertyIndex">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3U3X6Eeipp8d5W3Vl9g" name="className" value="PropertyIndex"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3VHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3VXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple StringToPropertyIndexMap" sections="_Zi2qcHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4UHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3VnX6Eeipp8d5W3Vl9g" name="isMultipleStringToPropertyIndexMap">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3V3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3WHX6Eeipp8d5W3Vl9g" name="className" value="StringToPropertyIndexMap"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3WXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple SimpleLayerDescriptor" sections="_Zi2qcXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4U3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3WnX6Eeipp8d5W3Vl9g" name="isMultipleSimpleLayerDescriptor">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3W3X6Eeipp8d5W3Vl9g" name="className" value="SimpleLayerDescriptor"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3XHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3XXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple RegExpLayerDescriptor" sections="_Zi2qcnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4VHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3XnX6Eeipp8d5W3Vl9g" name="isMultipleRegExpLayerDescriptor">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3X3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3YHX6Eeipp8d5W3Vl9g" name="className" value="RegExpLayerDescriptor"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3YXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple NullInstance" sections="_Zi2qc3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4VXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3YnX6Eeipp8d5W3Vl9g" name="isMultipleNullInstance">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3Y3X6Eeipp8d5W3Vl9g" name="className" value="NullInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3ZHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3ZXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple RegExpLayer" sections="_Zi2qdHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4VnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3ZnX6Eeipp8d5W3Vl9g" name="isMultipleRegExpLayer">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3Z3X6Eeipp8d5W3Vl9g" name="className" value="RegExpLayer"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3aHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3aXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple Layer" sections="_ZjCQoHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4XnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3anX6Eeipp8d5W3Vl9g" name="isMultipleLayer">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3a3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3bHX6Eeipp8d5W3Vl9g" name="className" value="Layer"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3bXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple Color" sections="_ZjCQoXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4X3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3bnX6Eeipp8d5W3Vl9g" name="isMultipleColor">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3b3X6Eeipp8d5W3Vl9g" name="className" value="Color"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3cHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3cXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple ColorInstance" sections="_ZjCQonX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4YHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3cnX6Eeipp8d5W3Vl9g" name="isMultipleColorInstance">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3c3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3dHX6Eeipp8d5W3Vl9g" name="className" value="ColorInstance"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3dXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple FillInstance" sections="_ZjCQo3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4YnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3dnX6Eeipp8d5W3Vl9g" name="isMultipleFillInstance">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3d3X6Eeipp8d5W3Vl9g" name="className" value="FillInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3eHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3eXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple Fill" sections="_ZjCQpHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4ZXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3enX6Eeipp8d5W3Vl9g" name="isMultipleFill">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3e3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3fHX6Eeipp8d5W3Vl9g" name="className" value="Fill"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3fXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple FillPropertySetter" sections="_ZjCQpXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4ZnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3fnX6Eeipp8d5W3Vl9g" name="isMultipleFillPropertySetter">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3f3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3gHX6Eeipp8d5W3Vl9g" name="className" value="FillPropertySetter"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3gXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple IsValidPropertySetter" sections="_ZjCQpnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4Z3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3gnX6Eeipp8d5W3Vl9g" name="isMultipleIsValidPropertySetter">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3g3X6Eeipp8d5W3Vl9g" name="className" value="IsValidPropertySetter"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3hHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-    </constraints>
-  </views>
-  <views xmi:id="_umc3hXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple NullPropertySetter" sections="_ZjCQp3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4aHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3hnX6Eeipp8d5W3Vl9g" name="isMultipleNullPropertySetter">
-      <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3h3X6Eeipp8d5W3Vl9g" name="className" value="NullPropertySetter"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3iHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7NsAEEeic_M-KksGsuA" name="className" value="AbstractLayer"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7N8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3iXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LineType" sections="_ZjCQqHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4aXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3inX6Eeipp8d5W3Vl9g" name="isMultipleLineType">
+  <views xmi:id="_PEE7OMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple StringToTypeInstanceMap" sections="_pzZcg8AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE74cAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7OcAEEeic_M-KksGsuA" name="isMultipleStringToTypeInstanceMap">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3i3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3jHX6Eeipp8d5W3Vl9g" name="className" value="LineType"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7OsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7O8AEEeic_M-KksGsuA" name="className" value="StringToTypeInstanceMap"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3jXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LineInstance" sections="_ZjCQqXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4anX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3jnX6Eeipp8d5W3Vl9g" name="isMultipleLineInstance">
+  <views xmi:id="_PEE7PMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple Folder" sections="_pzZchMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE75MAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7PcAEEeic_M-KksGsuA" name="isMultipleFolder">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3j3X6Eeipp8d5W3Vl9g" name="className" value="LineInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3kHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7PsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7P8AEEeic_M-KksGsuA" name="className" value="Folder"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3kXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple LinePropertySetter" sections="_ZjCQqnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4bXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3knX6Eeipp8d5W3Vl9g" name="isMultipleLinePropertySetter">
+  <views xmi:id="_PEE7QMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple Metamodel" sections="_pzZchcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEE758AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7QcAEEeic_M-KksGsuA" name="isMultipleMetamodel">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3k3X6Eeipp8d5W3Vl9g" name="className" value="LinePropertySetter"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3lHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7QsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7Q8AEEeic_M-KksGsuA" name="className" value="Metamodel"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3lXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple FontPropertySetter" sections="_ZjCQq3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4bnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3lnX6Eeipp8d5W3Vl9g" name="isMultipleFontPropertySetter">
+  <views xmi:id="_PEE7RMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple TopLayerOperator" sections="_pzZchsAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhRcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7RcAEEeic_M-KksGsuA" name="isMultipleTopLayerOperator">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3l3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3mHX6Eeipp8d5W3Vl9g" name="className" value="FontPropertySetter"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7RsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7R8AEEeic_M-KksGsuA" name="className" value="TopLayerOperator"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3mXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple FontInstance" sections="_ZjCQrHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4b3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3mnX6Eeipp8d5W3Vl9g" name="isMultipleFontInstance">
+  <views xmi:id="_PEE7SMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple StackedLayerOperator" sections="_pzaDkMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhRsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7ScAEEeic_M-KksGsuA" name="isMultipleStackedLayerOperator">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3m3X6Eeipp8d5W3Vl9g" name="className" value="FontInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3nHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7SsAEEeic_M-KksGsuA" name="className" value="StackedLayerOperator"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7S8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3nXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple FontType" sections="_ZjCQrXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4dHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3nnX6Eeipp8d5W3Vl9g" name="isMultipleFontType">
+  <views xmi:id="_PEE7TMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple PropertyIndex" sections="_pzaDkcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhR8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7TcAEEeic_M-KksGsuA" name="isMultiplePropertyIndex">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3n3X6Eeipp8d5W3Vl9g" name="className" value="FontType"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3oHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7TsAEEeic_M-KksGsuA" name="className" value="PropertyIndex"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7T8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3oXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple IsVisiblePropertySetter" sections="_ZjCQrnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4dXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3onX6Eeipp8d5W3Vl9g" name="isMultipleIsVisiblePropertySetter">
+  <views xmi:id="_PEE7UMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple StringToPropertyIndexMap" sections="_pzaDksAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhSsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7UcAEEeic_M-KksGsuA" name="isMultipleStringToPropertyIndexMap">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3o3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3pHX6Eeipp8d5W3Vl9g" name="className" value="IsVisiblePropertySetter"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7UsAEEeic_M-KksGsuA" name="className" value="StringToPropertyIndexMap"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7U8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3pXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple TopLayerOperatorDescriptor" sections="_ZjC3sHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4dnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3pnX6Eeipp8d5W3Vl9g" name="isMultipleTopLayerOperatorDescriptor">
+  <views xmi:id="_PEE7VMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple SimpleLayerDescriptor" sections="_pzaDk8AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhTcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7VcAEEeic_M-KksGsuA" name="isMultipleSimpleLayerDescriptor">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3p3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3qHX6Eeipp8d5W3Vl9g" name="className" value="TopLayerOperatorDescriptor"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7VsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7V8AEEeic_M-KksGsuA" name="className" value="SimpleLayerDescriptor"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3qXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple StackedLayerOperatorDescriptor" sections="_ZjC3sXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4d3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3qnX6Eeipp8d5W3Vl9g" name="isMultipleStackedLayerOperatorDescriptor">
+  <views xmi:id="_PEE7WMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple NullInstance" sections="_pzaDlMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhTsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7WcAEEeic_M-KksGsuA" name="isMultipleNullInstance">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3q3X6Eeipp8d5W3Vl9g" name="className" value="StackedLayerOperatorDescriptor"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3rHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7WsAEEeic_M-KksGsuA" name="className" value="NullInstance"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7W8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3rXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple CustomPropertyOperator" sections="_ZjC3snX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4eHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3rnX6Eeipp8d5W3Vl9g" name="isMultipleCustomPropertyOperator">
+  <views xmi:id="_PEE7XMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple Layer" sections="_pzaDlcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhT8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7XcAEEeic_M-KksGsuA" name="isMultipleLayer">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3r3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3sHX6Eeipp8d5W3Vl9g" name="className" value="CustomPropertyOperator"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7XsAEEeic_M-KksGsuA" name="className" value="Layer"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7X8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3sXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple AndStackedLayerOperatorDescriptor" sections="_ZjC3s3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4fHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3snX6Eeipp8d5W3Vl9g" name="isMultipleAndStackedLayerOperatorDescriptor">
+  <views xmi:id="_PEE7YMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple NullPropertySetter" sections="_pzaDlsAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhUMAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7YcAEEeic_M-KksGsuA" name="isMultipleNullPropertySetter">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3s3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3tHX6Eeipp8d5W3Vl9g" name="className" value="AndStackedLayerOperatorDescriptor"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7YsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7Y8AEEeic_M-KksGsuA" name="className" value="NullPropertySetter"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3tXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple OrStackedLayerOperatorDescriptor" sections="_ZjC3tHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4fXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3tnX6Eeipp8d5W3Vl9g" name="isMultipleOrStackedLayerOperatorDescriptor">
+  <views xmi:id="_PEE7ZMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple TopLayerOperatorDescriptor" sections="_pzaDl8AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhUcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7ZcAEEeic_M-KksGsuA" name="isMultipleTopLayerOperatorDescriptor">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3t3X6Eeipp8d5W3Vl9g" name="className" value="OrStackedLayerOperatorDescriptor"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3uHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7ZsAEEeic_M-KksGsuA" name="className" value="TopLayerOperatorDescriptor"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7Z8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3uXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple IsAbstractUmlSetter" sections="_ZjC3tXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4fnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3unX6Eeipp8d5W3Vl9g" name="isMultipleIsAbstractUmlSetter">
+  <views xmi:id="_PEE7aMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple StackedLayerOperatorDescriptor" sections="_pzaDmMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhUsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7acAEEeic_M-KksGsuA" name="isMultipleStackedLayerOperatorDescriptor">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3u3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3vHX6Eeipp8d5W3Vl9g" name="className" value="IsAbstractUmlSetter"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7asAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7a8AEEeic_M-KksGsuA" name="className" value="StackedLayerOperatorDescriptor"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3vXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple AllViewsDerivedLayer" sections="_ZjC3tnX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4f3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3vnX6Eeipp8d5W3Vl9g" name="isMultipleAllViewsDerivedLayer">
+  <views xmi:id="_PEE7bMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple AllViewsDerivedLayer" sections="_pzaqoMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhU8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7bcAEEeic_M-KksGsuA" name="isMultipleAllViewsDerivedLayer">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3v3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3wHX6Eeipp8d5W3Vl9g" name="className" value="AllViewsDerivedLayer"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7bsAEEeic_M-KksGsuA" name="className" value="AllViewsDerivedLayer"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7b8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3wXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple CSSPropertySetter" sections="_ZjC3t3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4gHX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3wnX6Eeipp8d5W3Vl9g" name="isMultipleCSSPropertySetter">
+  <views xmi:id="_PEE7cMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple CSSPropertySetter" sections="_pzaqocAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhVMAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7ccAEEeic_M-KksGsuA" name="isMultipleCSSPropertySetter">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3w3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3xHX6Eeipp8d5W3Vl9g" name="className" value="CSSPropertySetter"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7csAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7c8AEEeic_M-KksGsuA" name="className" value="CSSPropertySetter"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3xXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple CSSType" sections="_ZjC3uHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4gXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3xnX6Eeipp8d5W3Vl9g" name="isMultipleCSSType">
+  <views xmi:id="_PEE7dMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple CSSType" sections="_pzaqosAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhVcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7dcAEEeic_M-KksGsuA" name="isMultipleCSSType">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3x3X6Eeipp8d5W3Vl9g" name="className" value="CSSType"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3yHX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7dsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7d8AEEeic_M-KksGsuA" name="className" value="CSSType"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3yXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple CSSInstance" sections="_ZjC3uXX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4gnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3ynX6Eeipp8d5W3Vl9g" name="isMultipleCSSInstance">
+  <views xmi:id="_PEE7eMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple CSSInstance" sections="_pzaqo8AEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhVsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7ecAEEeic_M-KksGsuA" name="isMultipleCSSInstance">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3y3X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3zHX6Eeipp8d5W3Vl9g" name="className" value="CSSInstance"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7esAEEeic_M-KksGsuA" name="className" value="CSSInstance"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7e8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc3zXX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple CSSHidePropertySetter" sections="_ZjC3unX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4hXX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc3znX6Eeipp8d5W3Vl9g" name="isMultipleCSSHidePropertySetter">
+  <views xmi:id="_PEE7fMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple CSSHidePropertySetter" sections="_pzaqpMAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhWcAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7fcAEEeic_M-KksGsuA" name="isMultipleCSSHidePropertySetter">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc3z3X6Eeipp8d5W3Vl9g" name="className" value="CSSHidePropertySetter"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc30HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7fsAEEeic_M-KksGsuA" name="className" value="CSSHidePropertySetter"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7f8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc30XX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple CSSHideType" sections="_ZjC3u3X7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4hnX6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc30nX6Eeipp8d5W3Vl9g" name="isMultipleCSSHideType">
+  <views xmi:id="_PEE7gMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple CSSHideType" sections="_pzaqpcAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhWsAEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7gcAEEeic_M-KksGsuA" name="isMultipleCSSHideType">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc303X6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc31HX6Eeipp8d5W3Vl9g" name="className" value="CSSHideType"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7gsAEEeic_M-KksGsuA" name="className" value="CSSHideType"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7g8AEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
     </constraints>
   </views>
-  <views xmi:id="_umc31XX6Eeipp8d5W3Vl9g" elementMultiplicity="-1" name="Multiple CSSHideInstance" sections="_ZjC3vHX7Eeipp8d5W3Vl9g" automaticContext="true" datacontexts="_umc4h3X6Eeipp8d5W3Vl9g">
-    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_umc31nX6Eeipp8d5W3Vl9g" name="isMultipleCSSHideInstance">
+  <views xmi:id="_PEE7hMAEEeic_M-KksGsuA" elementMultiplicity="-1" name="Multiple CSSHideInstance" sections="_pzaqpsAEEeic_M-KksGsuA" automaticContext="true" datacontexts="_PEFhW8AEEeic_M-KksGsuA">
+    <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_PEE7hcAEEeic_M-KksGsuA" name="isMultipleCSSHideInstance">
       <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@constraintTypes.0"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc313X6Eeipp8d5W3Vl9g" name="className" value="CSSHideInstance"/>
-      <properties xsi:type="constraints:ValueProperty" xmi:id="_umc32HX6Eeipp8d5W3Vl9g" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7hsAEEeic_M-KksGsuA" name="nsUri" value="http://www.eclipse.org/papyrus/infra/gmfdiag/layers"/>
+      <properties xsi:type="constraints:ValueProperty" xmi:id="_PEE7h8AEEeic_M-KksGsuA" name="className" value="CSSHideInstance"/>
     </constraints>
   </views>
-  <dataContexts xmi:id="_umc32XX6Eeipp8d5W3Vl9g" name="layers" label="layers">
-    <elements xmi:id="_umc32nX6Eeipp8d5W3Vl9g" name="LayerNamedStyle">
-      <properties xmi:id="_umc323X6Eeipp8d5W3Vl9g" name="layersStack" type="Reference" multiplicity="-1"/>
+  <dataContexts xmi:id="_PEE7iMAEEeic_M-KksGsuA" name="layers" label="layers">
+    <elements xmi:id="_PEE7icAEEeic_M-KksGsuA" name="LayerNamedStyle">
+      <properties xmi:id="_PEE7isAEEeic_M-KksGsuA" name="layersStack" type="Reference" multiplicity="-1"/>
     </elements>
-    <elements xmi:id="_umc33HX6Eeipp8d5W3Vl9g" name="LayersStack" supertypes="_umc4MXX6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc33XX6Eeipp8d5W3Vl9g" name="layers" type="Reference"/>
-      <properties xmi:id="_umc33nX6Eeipp8d5W3Vl9g" name="name"/>
-      <properties xmi:id="_umc333X6Eeipp8d5W3Vl9g" name="description"/>
-      <properties xmi:id="_umc34HX6Eeipp8d5W3Vl9g" name="diagram" type="Reference"/>
-      <properties xmi:id="_umc34XX6Eeipp8d5W3Vl9g" name="state" type="Enumeration"/>
+    <elements xmi:id="_PEE7i8AEEeic_M-KksGsuA" name="LayersStack" supertypes="_PEE72sAEEeic_M-KksGsuA">
+      <properties xmi:id="_PEE7jMAEEeic_M-KksGsuA" name="layers" type="Reference"/>
+      <properties xmi:id="_PEE7jcAEEeic_M-KksGsuA" name="name"/>
+      <properties xmi:id="_PEE7jsAEEeic_M-KksGsuA" name="description"/>
+      <properties xmi:id="_PEE7j8AEEeic_M-KksGsuA" name="diagram" type="Reference"/>
+      <properties xmi:id="_PEE7kMAEEeic_M-KksGsuA" name="state" type="Enumeration"/>
     </elements>
-    <elements xmi:id="_umc34nX6Eeipp8d5W3Vl9g" name="LayerExpression" supertypes="_umc36nX6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc343X6Eeipp8d5W3Vl9g" name="name"/>
-      <properties xmi:id="_umc35HX6Eeipp8d5W3Vl9g" name="description"/>
-      <properties xmi:id="_umc35XX6Eeipp8d5W3Vl9g" name="isLayerEnabledInternal" type="Boolean"/>
-      <properties xmi:id="_umc35nX6Eeipp8d5W3Vl9g" name="isLayerEnabled" type="Boolean"/>
-      <properties xmi:id="_umc353X6Eeipp8d5W3Vl9g" name="isBranchEnabled" type="Boolean" description="Is the branch from this node to the root enabled ?&#xD;&#xA;A branch is enabled if all node of the branch are enabled.&#xD;&#xA;In other world, if an ancestor node is disable, the branch is disabled.&#xD;&#xA;Setting the value of this node set the value of the subnodes."/>
-      <properties xmi:id="_umc36HX6Eeipp8d5W3Vl9g" name="owningLayersStack" type="Reference"/>
-      <properties xmi:id="_umc36XX6Eeipp8d5W3Vl9g" name="state" type="Enumeration"/>
+    <elements xmi:id="_PEE7kcAEEeic_M-KksGsuA" name="LayerExpression" supertypes="_PEE7mcAEEeic_M-KksGsuA">
+      <properties xmi:id="_PEE7ksAEEeic_M-KksGsuA" name="name"/>
+      <properties xmi:id="_PEE7k8AEEeic_M-KksGsuA" name="description"/>
+      <properties xmi:id="_PEE7lMAEEeic_M-KksGsuA" name="isLayerEnabledInternal" type="Boolean"/>
+      <properties xmi:id="_PEE7lcAEEeic_M-KksGsuA" name="isLayerEnabled" type="Boolean"/>
+      <properties xmi:id="_PEE7lsAEEeic_M-KksGsuA" name="isBranchEnabled" type="Boolean" description="Is the branch from this node to the root enabled ?&#xD;&#xA;A branch is enabled if all node of the branch are enabled.&#xD;&#xA;In other world, if an ancestor node is disable, the branch is disabled.&#xD;&#xA;Setting the value of this node set the value of the subnodes."/>
+      <properties xmi:id="_PEE7l8AEEeic_M-KksGsuA" name="owningLayersStack" type="Reference"/>
+      <properties xmi:id="_PEE7mMAEEeic_M-KksGsuA" name="state" type="Enumeration"/>
     </elements>
-    <elements xmi:id="_umc36nX6Eeipp8d5W3Vl9g" name="ApplicationDependantElement">
-      <properties xmi:id="_umc363X6Eeipp8d5W3Vl9g" name="application" type="Reference"/>
+    <elements xmi:id="_PEE7mcAEEeic_M-KksGsuA" name="ApplicationDependantElement">
+      <properties xmi:id="_PEE7msAEEeic_M-KksGsuA" name="application" type="Reference"/>
     </elements>
-    <elements xmi:id="_umc37HX6Eeipp8d5W3Vl9g" name="LayersStackApplication" supertypes="_umc39HX6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc37XX6Eeipp8d5W3Vl9g" name="layersStacks" type="Reference" multiplicity="-1"/>
-      <properties xmi:id="_umc37nX6Eeipp8d5W3Vl9g" name="layerStackRegistry" type="Reference"/>
-      <properties xmi:id="_umc373X6Eeipp8d5W3Vl9g" name="propertyRegistry" type="Reference"/>
-      <properties xmi:id="_umc38HX6Eeipp8d5W3Vl9g" name="layerDescriptorRegistry" type="Reference"/>
-      <properties xmi:id="_umc38XX6Eeipp8d5W3Vl9g" name="factory" type="Reference"/>
-      <properties xmi:id="_umc38nX6Eeipp8d5W3Vl9g" name="propertySetterRegistry" type="Reference"/>
-      <properties xmi:id="_umc383X6Eeipp8d5W3Vl9g" name="layerOperatorDescriptorRegistry" type="Reference"/>
+    <elements xmi:id="_PEE7m8AEEeic_M-KksGsuA" name="LayersStackApplication" supertypes="_PEE7o8AEEeic_M-KksGsuA">
+      <properties xmi:id="_PEE7nMAEEeic_M-KksGsuA" name="layersStacks" type="Reference" multiplicity="-1"/>
+      <properties xmi:id="_PEE7ncAEEeic_M-KksGsuA" name="layerStackRegistry" type="Reference"/>
+      <properties xmi:id="_PEE7nsAEEeic_M-KksGsuA" name="propertyRegistry" type="Reference"/>
+      <properties xmi:id="_PEE7n8AEEeic_M-KksGsuA" name="layerDescriptorRegistry" type="Reference"/>
+      <properties xmi:id="_PEE7oMAEEeic_M-KksGsuA" name="factory" type="Reference"/>
+      <properties xmi:id="_PEE7ocAEEeic_M-KksGsuA" name="propertySetterRegistry" type="Reference"/>
+      <properties xmi:id="_PEE7osAEEeic_M-KksGsuA" name="layerOperatorDescriptorRegistry" type="Reference"/>
     </elements>
-    <elements xmi:id="_umc39HX6Eeipp8d5W3Vl9g" name="FolderElement"/>
-    <elements xmi:id="_umc39XX6Eeipp8d5W3Vl9g" name="LayerStackDescriptorRegistry"/>
-    <elements xmi:id="_umc39nX6Eeipp8d5W3Vl9g" name="PropertyRegistry">
-      <properties xmi:id="_umc393X6Eeipp8d5W3Vl9g" name="properties" type="Reference" multiplicity="-1"/>
-      <properties xmi:id="_umc3-HX6Eeipp8d5W3Vl9g" name="typeRegistry" type="Reference"/>
-      <properties xmi:id="_umc3-XX6Eeipp8d5W3Vl9g" name="propertiesCount" type="Integer"/>
+    <elements xmi:id="_PEE7o8AEEeic_M-KksGsuA" name="FolderElement"/>
+    <elements xmi:id="_PEE7pMAEEeic_M-KksGsuA" name="LayerStackDescriptorRegistry"/>
+    <elements xmi:id="_PEE7pcAEEeic_M-KksGsuA" name="PropertyRegistry">
+      <properties xmi:id="_PEE7psAEEeic_M-KksGsuA" name="properties" type="Reference" multiplicity="-1"/>
+      <properties xmi:id="_PEE7p8AEEeic_M-KksGsuA" name="typeRegistry" type="Reference"/>
+      <properties xmi:id="_PEE7qMAEEeic_M-KksGsuA" name="propertiesCount" type="Integer"/>
     </elements>
-    <elements xmi:id="_umc3-nX6Eeipp8d5W3Vl9g" name="Property" supertypes="_umc39HX6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc3-3X6Eeipp8d5W3Vl9g" name="type" type="Reference"/>
-      <properties xmi:id="_umc3_HX6Eeipp8d5W3Vl9g" name="defaultValue" type="Reference"/>
-      <properties xmi:id="_umc3_XX6Eeipp8d5W3Vl9g" name="name"/>
-      <properties xmi:id="_umc3_nX6Eeipp8d5W3Vl9g" name="description"/>
-      <properties xmi:id="_umc3_3X6Eeipp8d5W3Vl9g" name="index" type="Integer"/>
+    <elements xmi:id="_PEE7qcAEEeic_M-KksGsuA" name="Property" supertypes="_PEE7o8AEEeic_M-KksGsuA">
+      <properties xmi:id="_PEE7qsAEEeic_M-KksGsuA" name="type" type="Reference"/>
+      <properties xmi:id="_PEE7q8AEEeic_M-KksGsuA" name="defaultValue" type="Reference"/>
+      <properties xmi:id="_PEE7rMAEEeic_M-KksGsuA" name="name"/>
+      <properties xmi:id="_PEE7rcAEEeic_M-KksGsuA" name="description"/>
+      <properties xmi:id="_PEE7rsAEEeic_M-KksGsuA" name="index" type="Integer"/>
     </elements>
-    <elements xmi:id="_umc4AHX6Eeipp8d5W3Vl9g" name="Type" supertypes="_umc39HX6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4AXX6Eeipp8d5W3Vl9g" name="metamodel" type="Reference"/>
-      <properties xmi:id="_umc4AnX6Eeipp8d5W3Vl9g" name="name"/>
-      <properties xmi:id="_umc4A3X6Eeipp8d5W3Vl9g" name="description"/>
+    <elements xmi:id="_PEE7r8AEEeic_M-KksGsuA" name="Type" supertypes="_PEE7o8AEEeic_M-KksGsuA">
+      <properties xmi:id="_PEE7sMAEEeic_M-KksGsuA" name="name"/>
+      <properties xmi:id="_PEE7scAEEeic_M-KksGsuA" name="description"/>
     </elements>
-    <elements xmi:id="_umc4BHX6Eeipp8d5W3Vl9g" name="Metamodel" supertypes="_umc39HX6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4BXX6Eeipp8d5W3Vl9g" name="name"/>
-      <properties xmi:id="_umc4BnX6Eeipp8d5W3Vl9g" name="description"/>
-      <properties xmi:id="_umc4B3X6Eeipp8d5W3Vl9g" name="nsuri"/>
-      <properties xmi:id="_umc4CHX6Eeipp8d5W3Vl9g" name="pluginID"/>
-      <properties xmi:id="_umc4CXX6Eeipp8d5W3Vl9g" name="ePackageInstanceName"/>
-      <properties xmi:id="_umc4CnX6Eeipp8d5W3Vl9g" name="isTypeValid" type="Boolean"/>
+    <elements xmi:id="_PEE7ssAEEeic_M-KksGsuA" name="TypeInstance" supertypes="_PEE7s8AEEeic_M-KksGsuA"/>
+    <elements xmi:id="_PEE7s8AEEeic_M-KksGsuA" name="ComputePropertyValueCommandItf"/>
+    <elements xmi:id="_PEE7tMAEEeic_M-KksGsuA" name="TypeRegistry">
+      <properties xmi:id="_PEE7tcAEEeic_M-KksGsuA" name="types" type="Reference" multiplicity="-1"/>
     </elements>
-    <elements xmi:id="_umc4C3X6Eeipp8d5W3Vl9g" name="TypeInstance" supertypes="_umc4DHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4DHX6Eeipp8d5W3Vl9g" name="ComputePropertyValueCommandItf"/>
-    <elements xmi:id="_umc4DXX6Eeipp8d5W3Vl9g" name="TypeRegistry">
-      <properties xmi:id="_umc4DnX6Eeipp8d5W3Vl9g" name="types" type="Reference" multiplicity="-1"/>
+    <elements xmi:id="_PEE7tsAEEeic_M-KksGsuA" name="StringToTypeMap">
+      <properties xmi:id="_PEE7t8AEEeic_M-KksGsuA" name="value" type="Reference"/>
+      <properties xmi:id="_PEE7uMAEEeic_M-KksGsuA" name="key"/>
     </elements>
-    <elements xmi:id="_umc4D3X6Eeipp8d5W3Vl9g" name="StringToTypeMap">
-      <properties xmi:id="_umc4EHX6Eeipp8d5W3Vl9g" name="value" type="Reference"/>
-      <properties xmi:id="_umc4EXX6Eeipp8d5W3Vl9g" name="key"/>
+    <elements xmi:id="_PEE7ucAEEeic_M-KksGsuA" name="LayerDescriptorRegistry">
+      <properties xmi:id="_PEE7usAEEeic_M-KksGsuA" name="layerDescriptors" type="Reference" multiplicity="-1"/>
     </elements>
-    <elements xmi:id="_umc4EnX6Eeipp8d5W3Vl9g" name="LayerDescriptorRegistry">
-      <properties xmi:id="_umc4E3X6Eeipp8d5W3Vl9g" name="layerDescriptors" type="Reference" multiplicity="-1"/>
+    <elements xmi:id="_PEE7u8AEEeic_M-KksGsuA" name="LayerDescriptor">
+      <properties xmi:id="_PEE7vMAEEeic_M-KksGsuA" name="propertyRegistry" type="Reference"/>
     </elements>
-    <elements xmi:id="_umc4FHX6Eeipp8d5W3Vl9g" name="LayerDescriptor">
-      <properties xmi:id="_umc4FXX6Eeipp8d5W3Vl9g" name="propertyRegistry" type="Reference"/>
+    <elements xmi:id="_PEE7vcAEEeic_M-KksGsuA" name="LayerApplicationFactory">
+      <properties xmi:id="_PEE7vsAEEeic_M-KksGsuA" name="application" type="Reference"/>
     </elements>
-    <elements xmi:id="_umc4FnX6Eeipp8d5W3Vl9g" name="LayerApplicationFactory">
-      <properties xmi:id="_umc4F3X6Eeipp8d5W3Vl9g" name="application" type="Reference"/>
+    <elements xmi:id="_PEE7v8AEEeic_M-KksGsuA" name="PropertySetterRegistry">
+      <properties xmi:id="_PEE7wMAEEeic_M-KksGsuA" name="propertySetters" type="Reference" multiplicity="-1"/>
+      <properties xmi:id="_PEE7wcAEEeic_M-KksGsuA" name="setterMap" type="Reference" multiplicity="-1"/>
+      <properties xmi:id="_PEE7wsAEEeic_M-KksGsuA" name="application" type="Reference"/>
     </elements>
-    <elements xmi:id="_umc4GHX6Eeipp8d5W3Vl9g" name="PropertySetterRegistry">
-      <properties xmi:id="_umc4GXX6Eeipp8d5W3Vl9g" name="propertySetters" type="Reference" multiplicity="-1"/>
-      <properties xmi:id="_umc4GnX6Eeipp8d5W3Vl9g" name="setterMap" type="Reference" multiplicity="-1"/>
-      <properties xmi:id="_umc4G3X6Eeipp8d5W3Vl9g" name="application" type="Reference"/>
+    <elements xmi:id="_PEE7w8AEEeic_M-KksGsuA" name="PropertySetter">
+      <properties xmi:id="_PEE7xMAEEeic_M-KksGsuA" name="property" type="Reference"/>
+      <properties xmi:id="_PEE7xcAEEeic_M-KksGsuA" name="propertyName"/>
     </elements>
-    <elements xmi:id="_umc4HHX6Eeipp8d5W3Vl9g" name="PropertySetter">
-      <properties xmi:id="_umc4HXX6Eeipp8d5W3Vl9g" name="property" type="Reference"/>
-      <properties xmi:id="_umc4HnX6Eeipp8d5W3Vl9g" name="propertyName"/>
+    <elements xmi:id="_PEE7xsAEEeic_M-KksGsuA" name="StringToPropertySetter">
+      <properties xmi:id="_PEE7x8AEEeic_M-KksGsuA" name="key"/>
+      <properties xmi:id="_PEE7yMAEEeic_M-KksGsuA" name="value" type="Reference"/>
     </elements>
-    <elements xmi:id="_umc4H3X6Eeipp8d5W3Vl9g" name="StringToPropertySetter">
-      <properties xmi:id="_umc4IHX6Eeipp8d5W3Vl9g" name="key"/>
-      <properties xmi:id="_umc4IXX6Eeipp8d5W3Vl9g" name="value" type="Reference"/>
+    <elements xmi:id="_PEE7ycAEEeic_M-KksGsuA" name="LayerOperatorDescriptorRegistry">
+      <properties xmi:id="_PEE7ysAEEeic_M-KksGsuA" name="descriptors" type="Reference" multiplicity="-1"/>
+      <properties xmi:id="_PEE7y8AEEeic_M-KksGsuA" name="propertyOperators" type="Reference" multiplicity="-1"/>
+      <properties xmi:id="_PEE7zMAEEeic_M-KksGsuA" name="propertyCollectionSize" type="Integer"/>
+      <properties xmi:id="_PEE7zcAEEeic_M-KksGsuA" name="defaultOperator" type="Reference"/>
     </elements>
-    <elements xmi:id="_umc4InX6Eeipp8d5W3Vl9g" name="LayerOperatorDescriptorRegistry">
-      <properties xmi:id="_umc4I3X6Eeipp8d5W3Vl9g" name="descriptors" type="Reference" multiplicity="-1"/>
-      <properties xmi:id="_umc4JHX6Eeipp8d5W3Vl9g" name="propertyOperators" type="Reference" multiplicity="-1"/>
-      <properties xmi:id="_umc4JXX6Eeipp8d5W3Vl9g" name="propertyCollectionSize" type="Integer"/>
-      <properties xmi:id="_umc4JnX6Eeipp8d5W3Vl9g" name="defaultOperator" type="Reference"/>
+    <elements xmi:id="_PEE7zsAEEeic_M-KksGsuA" name="LayerOperatorDescriptor">
+      <properties xmi:id="_PEE7z8AEEeic_M-KksGsuA" name="propertyOperators" type="Reference" multiplicity="-1"/>
+      <properties xmi:id="_PEE70MAEEeic_M-KksGsuA" name="name"/>
     </elements>
-    <elements xmi:id="_umc4J3X6Eeipp8d5W3Vl9g" name="LayerOperatorDescriptor">
-      <properties xmi:id="_umc4KHX6Eeipp8d5W3Vl9g" name="propertyOperators" type="Reference" multiplicity="-1"/>
-      <properties xmi:id="_umc4KXX6Eeipp8d5W3Vl9g" name="name"/>
+    <elements xmi:id="_PEE70cAEEeic_M-KksGsuA" name="PropertyOperator">
+      <properties xmi:id="_PEE70sAEEeic_M-KksGsuA" name="name"/>
+      <properties xmi:id="_PEE708AEEeic_M-KksGsuA" name="classname"/>
+      <properties xmi:id="_PEE71MAEEeic_M-KksGsuA" name="operatorInstance" type="Reference"/>
+      <properties xmi:id="_PEE71cAEEeic_M-KksGsuA" name="classBundleID"/>
     </elements>
-    <elements xmi:id="_umc4KnX6Eeipp8d5W3Vl9g" name="PropertyOperator">
-      <properties xmi:id="_umc4K3X6Eeipp8d5W3Vl9g" name="name"/>
+    <elements xmi:id="_PEE71sAEEeic_M-KksGsuA" name="LayerOperator" supertypes="_PEE7kcAEEeic_M-KksGsuA _PEE72sAEEeic_M-KksGsuA">
+      <properties xmi:id="_PEE718AEEeic_M-KksGsuA" name="layers" type="Reference" multiplicity="-1"/>
+      <properties xmi:id="_PEE72MAEEeic_M-KksGsuA" name="layerOperatorDescriptorName"/>
+      <properties xmi:id="_PEE72cAEEeic_M-KksGsuA" name="layerOperatorDescriptor" type="Reference"/>
     </elements>
-    <elements xmi:id="_umc4LHX6Eeipp8d5W3Vl9g" name="AbstractLayerOperator" supertypes="_umc4L3X6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4LXX6Eeipp8d5W3Vl9g" name="layerOperatorDescriptor" type="Reference"/>
-      <properties xmi:id="_umc4LnX6Eeipp8d5W3Vl9g" name="layerOperatorDescriptorName"/>
+    <elements xmi:id="_PEE72sAEEeic_M-KksGsuA" name="LayersContainer"/>
+    <elements xmi:id="_PEE728AEEeic_M-KksGsuA" name="AbstractLayer" supertypes="_PEE7kcAEEeic_M-KksGsuA">
+      <properties xmi:id="_PEE73MAEEeic_M-KksGsuA" name="propertyValues" type="Reference" multiplicity="-1"/>
+      <properties xmi:id="_PEE73cAEEeic_M-KksGsuA" name="propertyValueMap" type="Reference" multiplicity="-1"/>
+      <properties xmi:id="_PEE73sAEEeic_M-KksGsuA" name="layerDescriptor" type="Reference"/>
+      <properties xmi:id="_PEE738AEEeic_M-KksGsuA" name="views" type="Reference" multiplicity="-1"/>
+      <properties xmi:id="_PEE74MAEEeic_M-KksGsuA" name="attachedProperties" type="Reference" multiplicity="-1"/>
     </elements>
-    <elements xmi:id="_umc4L3X6Eeipp8d5W3Vl9g" name="LayerOperator" supertypes="_umc34nX6Eeipp8d5W3Vl9g _umc4MXX6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4MHX6Eeipp8d5W3Vl9g" name="layers" type="Reference" multiplicity="-1"/>
+    <elements xmi:id="_PEE74cAEEeic_M-KksGsuA" name="StringToTypeInstanceMap">
+      <properties xmi:id="_PEE74sAEEeic_M-KksGsuA" name="key"/>
+      <properties xmi:id="_PEE748AEEeic_M-KksGsuA" name="value" type="Reference"/>
     </elements>
-    <elements xmi:id="_umc4MXX6Eeipp8d5W3Vl9g" name="LayersContainer"/>
-    <elements xmi:id="_umc4MnX6Eeipp8d5W3Vl9g" name="DefaultPropertyOperator" supertypes="_umc4KnX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4M3X6Eeipp8d5W3Vl9g" name="AbstractLayer" supertypes="_umc34nX6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4NHX6Eeipp8d5W3Vl9g" name="propertyValues" type="Reference" multiplicity="-1"/>
-      <properties xmi:id="_umc4NXX6Eeipp8d5W3Vl9g" name="propertyValueMap" type="Reference" multiplicity="-1"/>
-      <properties xmi:id="_umc4NnX6Eeipp8d5W3Vl9g" name="layerDescriptor" type="Reference"/>
-      <properties xmi:id="_umc4N3X6Eeipp8d5W3Vl9g" name="views" type="Reference" multiplicity="-1"/>
-      <properties xmi:id="_umc4OHX6Eeipp8d5W3Vl9g" name="attachedProperties" type="Reference" multiplicity="-1"/>
+    <elements xmi:id="_PEE75MAEEeic_M-KksGsuA" name="Folder" supertypes="_PEE7o8AEEeic_M-KksGsuA">
+      <properties xmi:id="_PEE75cAEEeic_M-KksGsuA" name="elements" type="Reference" multiplicity="-1"/>
+      <properties xmi:id="_PEE75sAEEeic_M-KksGsuA" name="name"/>
     </elements>
-    <elements xmi:id="_umc4OXX6Eeipp8d5W3Vl9g" name="StringToTypeInstanceMap">
-      <properties xmi:id="_umc4OnX6Eeipp8d5W3Vl9g" name="key"/>
-      <properties xmi:id="_umc4O3X6Eeipp8d5W3Vl9g" name="value" type="Reference"/>
+    <elements xmi:id="_PEE758AEEeic_M-KksGsuA" name="Metamodel" supertypes="_PEE7o8AEEeic_M-KksGsuA">
+      <properties xmi:id="_PEE76MAEEeic_M-KksGsuA" name="name"/>
+      <properties xmi:id="_PEFhQMAEEeic_M-KksGsuA" name="description"/>
+      <properties xmi:id="_PEFhQcAEEeic_M-KksGsuA" name="nsuri"/>
+      <properties xmi:id="_PEFhQsAEEeic_M-KksGsuA" name="pluginID"/>
+      <properties xmi:id="_PEFhQ8AEEeic_M-KksGsuA" name="ePackageInstanceName"/>
+      <properties xmi:id="_PEFhRMAEEeic_M-KksGsuA" name="isTypeValid" type="Boolean"/>
     </elements>
-    <elements xmi:id="_umc4PHX6Eeipp8d5W3Vl9g" name="Folder" supertypes="_umc39HX6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4PXX6Eeipp8d5W3Vl9g" name="elements" type="Reference" multiplicity="-1"/>
-      <properties xmi:id="_umc4PnX6Eeipp8d5W3Vl9g" name="name"/>
+    <elements xmi:id="_PEFhRcAEEeic_M-KksGsuA" name="TopLayerOperator" supertypes="_PEE71sAEEeic_M-KksGsuA"/>
+    <elements xmi:id="_PEFhRsAEEeic_M-KksGsuA" name="StackedLayerOperator" supertypes="_PEE71sAEEeic_M-KksGsuA"/>
+    <elements xmi:id="_PEFhR8AEEeic_M-KksGsuA" name="PropertyIndex">
+      <properties xmi:id="_PEFhSMAEEeic_M-KksGsuA" name="property" type="Reference"/>
+      <properties xmi:id="_PEFhScAEEeic_M-KksGsuA" name="index" type="Integer"/>
     </elements>
-    <elements xmi:id="_umc4P3X6Eeipp8d5W3Vl9g" name="IntInstance" supertypes="_umc4C3X6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4QHX6Eeipp8d5W3Vl9g" name="value" type="Integer"/>
+    <elements xmi:id="_PEFhSsAEEeic_M-KksGsuA" name="StringToPropertyIndexMap">
+      <properties xmi:id="_PEFhS8AEEeic_M-KksGsuA" name="value" type="Reference"/>
+      <properties xmi:id="_PEFhTMAEEeic_M-KksGsuA" name="key"/>
     </elements>
-    <elements xmi:id="_umc4QXX6Eeipp8d5W3Vl9g" name="BooleanInstance" supertypes="_umc4C3X6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4QnX6Eeipp8d5W3Vl9g" name="value" type="Boolean"/>
+    <elements xmi:id="_PEFhTcAEEeic_M-KksGsuA" name="SimpleLayerDescriptor" supertypes="_PEE7u8AEEeic_M-KksGsuA"/>
+    <elements xmi:id="_PEFhTsAEEeic_M-KksGsuA" name="NullInstance" supertypes="_PEE7ssAEEeic_M-KksGsuA"/>
+    <elements xmi:id="_PEFhT8AEEeic_M-KksGsuA" name="Layer" supertypes="_PEE728AEEeic_M-KksGsuA"/>
+    <elements xmi:id="_PEFhUMAEEeic_M-KksGsuA" name="NullPropertySetter" supertypes="_PEE7w8AEEeic_M-KksGsuA"/>
+    <elements xmi:id="_PEFhUcAEEeic_M-KksGsuA" name="TopLayerOperatorDescriptor" supertypes="_PEE7zsAEEeic_M-KksGsuA"/>
+    <elements xmi:id="_PEFhUsAEEeic_M-KksGsuA" name="StackedLayerOperatorDescriptor" supertypes="_PEE7zsAEEeic_M-KksGsuA"/>
+    <elements xmi:id="_PEFhU8AEEeic_M-KksGsuA" name="AllViewsDerivedLayer" supertypes="_PEE728AEEeic_M-KksGsuA"/>
+    <elements xmi:id="_PEFhVMAEEeic_M-KksGsuA" name="CSSPropertySetter" supertypes="_PEE7w8AEEeic_M-KksGsuA"/>
+    <elements xmi:id="_PEFhVcAEEeic_M-KksGsuA" name="CSSType" supertypes="_PEE7r8AEEeic_M-KksGsuA"/>
+    <elements xmi:id="_PEFhVsAEEeic_M-KksGsuA" name="CSSInstance" supertypes="_PEE7ssAEEeic_M-KksGsuA">
+      <properties xmi:id="_PEFhV8AEEeic_M-KksGsuA" name="stylesheet" type="Reference"/>
+      <properties xmi:id="_PEFhWMAEEeic_M-KksGsuA" name="style"/>
     </elements>
-    <elements xmi:id="_umc4Q3X6Eeipp8d5W3Vl9g" name="StringInstance" supertypes="_umc4C3X6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4RHX6Eeipp8d5W3Vl9g" name="value"/>
-    </elements>
-    <elements xmi:id="_umc4RXX6Eeipp8d5W3Vl9g" name="IntType" supertypes="_umc4AHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4RnX6Eeipp8d5W3Vl9g" name="BooleanType" supertypes="_umc4AHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4R3X6Eeipp8d5W3Vl9g" name="StringType" supertypes="_umc4AHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4SHX6Eeipp8d5W3Vl9g" name="CustomType" supertypes="_umc4AHX6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4SXX6Eeipp8d5W3Vl9g" name="classifier"/>
-    </elements>
-    <elements xmi:id="_umc4SnX6Eeipp8d5W3Vl9g" name="TopLayerOperator" supertypes="_umc4LHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4S3X6Eeipp8d5W3Vl9g" name="StackedLayerOperator" supertypes="_umc4LHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4THX6Eeipp8d5W3Vl9g" name="CustomLayerOperator" supertypes="_umc4L3X6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4TXX6Eeipp8d5W3Vl9g" name="PropertyIndex">
-      <properties xmi:id="_umc4TnX6Eeipp8d5W3Vl9g" name="property" type="Reference"/>
-      <properties xmi:id="_umc4T3X6Eeipp8d5W3Vl9g" name="index" type="Integer"/>
-    </elements>
-    <elements xmi:id="_umc4UHX6Eeipp8d5W3Vl9g" name="StringToPropertyIndexMap">
-      <properties xmi:id="_umc4UXX6Eeipp8d5W3Vl9g" name="value" type="Reference"/>
-      <properties xmi:id="_umc4UnX6Eeipp8d5W3Vl9g" name="key"/>
-    </elements>
-    <elements xmi:id="_umc4U3X6Eeipp8d5W3Vl9g" name="SimpleLayerDescriptor" supertypes="_umc4FHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4VHX6Eeipp8d5W3Vl9g" name="RegExpLayerDescriptor" supertypes="_umc4FHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4VXX6Eeipp8d5W3Vl9g" name="NullInstance" supertypes="_umc4C3X6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4VnX6Eeipp8d5W3Vl9g" name="RegExpLayer" supertypes="_umc4M3X6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4V3X6Eeipp8d5W3Vl9g" name="expr"/>
-      <properties xmi:id="_umc4WHX6Eeipp8d5W3Vl9g" name="language"/>
-      <properties xmi:id="_umc4WXX6Eeipp8d5W3Vl9g" name="isDomainChangedEventDependant" type="Boolean"/>
-      <properties xmi:id="_umc4WnX6Eeipp8d5W3Vl9g" name="domainChangedEventLevel" type="Enumeration"/>
-      <properties xmi:id="_umc4W3X6Eeipp8d5W3Vl9g" name="isDiagramChangedEventDependant" type="Boolean"/>
-      <properties xmi:id="_umc4XHX6Eeipp8d5W3Vl9g" name="diagramChangedEventLevel" type="Enumeration"/>
-      <properties xmi:id="_umc4XXX6Eeipp8d5W3Vl9g" name="expressionContextObjectType"/>
-    </elements>
-    <elements xmi:id="_umc4XnX6Eeipp8d5W3Vl9g" name="Layer" supertypes="_umc4M3X6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4X3X6Eeipp8d5W3Vl9g" name="Color" supertypes="_umc4AHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4YHX6Eeipp8d5W3Vl9g" name="ColorInstance" supertypes="_umc4C3X6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4YXX6Eeipp8d5W3Vl9g" name="value" type="Integer"/>
-    </elements>
-    <elements xmi:id="_umc4YnX6Eeipp8d5W3Vl9g" name="FillInstance" supertypes="_umc4C3X6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4Y3X6Eeipp8d5W3Vl9g" name="transparency" type="Integer"/>
-      <properties xmi:id="_umc4ZHX6Eeipp8d5W3Vl9g" name="fillColor" type="Reference"/>
-    </elements>
-    <elements xmi:id="_umc4ZXX6Eeipp8d5W3Vl9g" name="Fill" supertypes="_umc4AHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4ZnX6Eeipp8d5W3Vl9g" name="FillPropertySetter" supertypes="_umc4HHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4Z3X6Eeipp8d5W3Vl9g" name="IsValidPropertySetter" supertypes="_umc4HHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4aHX6Eeipp8d5W3Vl9g" name="NullPropertySetter" supertypes="_umc4HHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4aXX6Eeipp8d5W3Vl9g" name="LineType" supertypes="_umc4AHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4anX6Eeipp8d5W3Vl9g" name="LineInstance" supertypes="_umc4C3X6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4a3X6Eeipp8d5W3Vl9g" name="lineColor" type="Integer"/>
-      <properties xmi:id="_umc4bHX6Eeipp8d5W3Vl9g" name="lineWith" type="Integer"/>
-    </elements>
-    <elements xmi:id="_umc4bXX6Eeipp8d5W3Vl9g" name="LinePropertySetter" supertypes="_umc4HHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4bnX6Eeipp8d5W3Vl9g" name="FontPropertySetter" supertypes="_umc4HHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4b3X6Eeipp8d5W3Vl9g" name="FontInstance" supertypes="_umc4C3X6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4cHX6Eeipp8d5W3Vl9g" name="fontColor" type="Integer"/>
-      <properties xmi:id="_umc4cXX6Eeipp8d5W3Vl9g" name="fontName"/>
-      <properties xmi:id="_umc4cnX6Eeipp8d5W3Vl9g" name="fontHeigh" type="Integer"/>
-      <properties xmi:id="_umc4c3X6Eeipp8d5W3Vl9g" name="bold" type="Boolean"/>
-    </elements>
-    <elements xmi:id="_umc4dHX6Eeipp8d5W3Vl9g" name="FontType" supertypes="_umc4AHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4dXX6Eeipp8d5W3Vl9g" name="IsVisiblePropertySetter" supertypes="_umc4HHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4dnX6Eeipp8d5W3Vl9g" name="TopLayerOperatorDescriptor" supertypes="_umc4J3X6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4d3X6Eeipp8d5W3Vl9g" name="StackedLayerOperatorDescriptor" supertypes="_umc4J3X6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4eHX6Eeipp8d5W3Vl9g" name="CustomPropertyOperator" supertypes="_umc4KnX6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4eXX6Eeipp8d5W3Vl9g" name="classname"/>
-      <properties xmi:id="_umc4enX6Eeipp8d5W3Vl9g" name="operatorInstance"/>
-      <properties xmi:id="_umc4e3X6Eeipp8d5W3Vl9g" name="classBundleID"/>
-    </elements>
-    <elements xmi:id="_umc4fHX6Eeipp8d5W3Vl9g" name="AndStackedLayerOperatorDescriptor" supertypes="_umc4d3X6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4fXX6Eeipp8d5W3Vl9g" name="OrStackedLayerOperatorDescriptor" supertypes="_umc4d3X6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4fnX6Eeipp8d5W3Vl9g" name="IsAbstractUmlSetter" supertypes="_umc4HHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4f3X6Eeipp8d5W3Vl9g" name="AllViewsDerivedLayer" supertypes="_umc4M3X6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4gHX6Eeipp8d5W3Vl9g" name="CSSPropertySetter" supertypes="_umc4HHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4gXX6Eeipp8d5W3Vl9g" name="CSSType" supertypes="_umc4AHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4gnX6Eeipp8d5W3Vl9g" name="CSSInstance" supertypes="_umc4C3X6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4g3X6Eeipp8d5W3Vl9g" name="stylesheet" type="Reference"/>
-      <properties xmi:id="_umc4hHX6Eeipp8d5W3Vl9g" name="style"/>
-    </elements>
-    <elements xmi:id="_umc4hXX6Eeipp8d5W3Vl9g" name="CSSHidePropertySetter" supertypes="_umc4HHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4hnX6Eeipp8d5W3Vl9g" name="CSSHideType" supertypes="_umc4AHX6Eeipp8d5W3Vl9g"/>
-    <elements xmi:id="_umc4h3X6Eeipp8d5W3Vl9g" name="CSSHideInstance" supertypes="_umc4C3X6Eeipp8d5W3Vl9g">
-      <properties xmi:id="_umc4iHX6Eeipp8d5W3Vl9g" name="stylesheet" type="Reference"/>
-      <properties xmi:id="_umc4iXX6Eeipp8d5W3Vl9g" name="style"/>
+    <elements xmi:id="_PEFhWcAEEeic_M-KksGsuA" name="CSSHidePropertySetter" supertypes="_PEE7w8AEEeic_M-KksGsuA"/>
+    <elements xmi:id="_PEFhWsAEEeic_M-KksGsuA" name="CSSHideType" supertypes="_PEE7r8AEEeic_M-KksGsuA"/>
+    <elements xmi:id="_PEFhW8AEEeic_M-KksGsuA" name="CSSHideInstance" supertypes="_PEE7ssAEEeic_M-KksGsuA">
+      <properties xmi:id="_PEFhXMAEEeic_M-KksGsuA" name="stylesheet" type="Reference"/>
+      <properties xmi:id="_PEFhXcAEEeic_M-KksGsuA" name="style"/>
     </elements>
     <modelElementFactory href="ppe:/environment/org.eclipse.papyrus.infra.properties.ui/model/Environment.xmi#//@modelElementFactories.0"/>
   </dataContexts>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleAbstractLayer.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleAbstractLayer.xwt
index e1205ec..e29bdbb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleAbstractLayer.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleAbstractLayer.xwt
@@ -1,33 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
 		<ppel:PropertiesLayout></ppel:PropertiesLayout>
 	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:BooleanRadio input="{Binding}"
-			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:AbstractLayer:views"></ppe:MultiReference>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:AbstractLayer:attachedProperties"></ppe:MultiReference>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleAbstractLayerOperator.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleAbstractLayerOperator.xwt
deleted file mode 100755
index 4901a7b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleAbstractLayerOperator.xwt
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:BooleanRadio input="{Binding}"
-			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleAllViewsDerivedLayer.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleAllViewsDerivedLayer.xwt
index e1205ec..e29bdbb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleAllViewsDerivedLayer.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleAllViewsDerivedLayer.xwt
@@ -1,33 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
 		<ppel:PropertiesLayout></ppel:PropertiesLayout>
 	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:BooleanRadio input="{Binding}"
-			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:AbstractLayer:views"></ppe:MultiReference>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:AbstractLayer:attachedProperties"></ppe:MultiReference>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleAndStackedLayerOperatorDescriptor.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleAndStackedLayerOperatorDescriptor.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleAndStackedLayerOperatorDescriptor.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleBooleanInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleBooleanInstance.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleBooleanInstance.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleBooleanType.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleBooleanType.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleBooleanType.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCSSHideInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCSSHideInstance.xwt
index f1ae432..e29bdbb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCSSHideInstance.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCSSHideInstance.xwt
@@ -1,24 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
 		<ppel:PropertiesLayout></ppel:PropertiesLayout>
 	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:StringEditor input="{Binding}"
-			property="layers:CSSHideInstance:style"></ppe:StringEditor>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:CSSHideInstance:stylesheet"></ppe:ReferenceDialog>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCSSInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCSSInstance.xwt
index 9fb21b0..e29bdbb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCSSInstance.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCSSInstance.xwt
@@ -1,24 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
 		<ppel:PropertiesLayout></ppel:PropertiesLayout>
 	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:StringEditor input="{Binding}"
-			property="layers:CSSInstance:style"></ppe:StringEditor>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:CSSInstance:stylesheet"></ppe:ReferenceDialog>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleColor.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleColor.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleColor.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleColorInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleColorInstance.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleColorInstance.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCustomLayerOperator.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCustomLayerOperator.xwt
deleted file mode 100755
index 4901a7b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCustomLayerOperator.xwt
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:BooleanRadio input="{Binding}"
-			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCustomPropertyOperator.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCustomPropertyOperator.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCustomPropertyOperator.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCustomType.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCustomType.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleCustomType.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleDefaultPropertyOperator.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleDefaultPropertyOperator.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleDefaultPropertyOperator.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFill.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFill.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFill.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFillInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFillInstance.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFillInstance.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFillPropertySetter.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFillPropertySetter.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFillPropertySetter.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFontInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFontInstance.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFontInstance.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFontPropertySetter.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFontPropertySetter.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFontPropertySetter.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFontType.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFontType.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleFontType.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIntInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIntInstance.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIntInstance.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIntType.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIntType.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIntType.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIsAbstractUmlSetter.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIsAbstractUmlSetter.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIsAbstractUmlSetter.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIsValidPropertySetter.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIsValidPropertySetter.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIsValidPropertySetter.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIsVisiblePropertySetter.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIsVisiblePropertySetter.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleIsVisiblePropertySetter.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayer.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayer.xwt
index e1205ec..e29bdbb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayer.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayer.xwt
@@ -1,33 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
 		<ppel:PropertiesLayout></ppel:PropertiesLayout>
 	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:BooleanRadio input="{Binding}"
-			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:AbstractLayer:views"></ppe:MultiReference>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:AbstractLayer:attachedProperties"></ppe:MultiReference>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayerExpression.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayerExpression.xwt
index 4901a7b..e29bdbb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayerExpression.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayerExpression.xwt
@@ -1,24 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
 		<ppel:PropertiesLayout></ppel:PropertiesLayout>
 	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:BooleanRadio input="{Binding}"
-			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayerNamedStyle.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayerNamedStyle.xwt
index bef4ff0..e29bdbb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayerNamedStyle.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayerNamedStyle.xwt
@@ -1,17 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
 		<ppel:PropertiesLayout></ppel:PropertiesLayout>
 	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:LayerNamedStyle:layersStack"></ppe:MultiReference>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayerOperator.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayerOperator.xwt
index 4901a7b..e29bdbb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayerOperator.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayerOperator.xwt
@@ -1,24 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
 		<ppel:PropertiesLayout></ppel:PropertiesLayout>
 	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:BooleanRadio input="{Binding}"
-			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayersStack.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayersStack.xwt
index 3067cc2..e29bdbb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayersStack.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLayersStack.xwt
@@ -1,35 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
 		<ppel:PropertiesLayout></ppel:PropertiesLayout>
 	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:StringEditor input="{Binding}"
-			property="layers:LayersStack:name"></ppe:StringEditor>
-		<ppe:StringEditor input="{Binding}"
-			property="layers:LayersStack:description"></ppe:StringEditor>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:EnumCombo input="{Binding}"
-			property="layers:LayersStack:state"></ppe:EnumCombo>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayersStack:layers"></ppe:ReferenceDialog>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayersStack:diagram"></ppe:ReferenceDialog>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLineInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLineInstance.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLineInstance.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLinePropertySetter.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLinePropertySetter.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLinePropertySetter.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLineType.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLineType.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleLineType.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleOrStackedLayerOperatorDescriptor.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleOrStackedLayerOperatorDescriptor.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleOrStackedLayerOperatorDescriptor.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleProperty.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleProperty.xwt
index bc5fdec..e29bdbb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleProperty.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleProperty.xwt
@@ -1,26 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
 		<ppel:PropertiesLayout></ppel:PropertiesLayout>
 	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:StringEditor input="{Binding}"
-			property="layers:Property:name"></ppe:StringEditor>
-		<ppe:StringEditor input="{Binding}"
-			property="layers:Property:description"></ppe:StringEditor>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:Property:type"></ppe:ReferenceDialog>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleRegExpLayer.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleRegExpLayer.xwt
deleted file mode 100755
index e1205ec..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleRegExpLayer.xwt
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:BooleanRadio input="{Binding}"
-			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:AbstractLayer:views"></ppe:MultiReference>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:AbstractLayer:attachedProperties"></ppe:MultiReference>
-	</Composite>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleRegExpLayerDescriptor.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleRegExpLayerDescriptor.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleRegExpLayerDescriptor.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleStackedLayerOperator.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleStackedLayerOperator.xwt
index 4901a7b..e29bdbb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleStackedLayerOperator.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleStackedLayerOperator.xwt
@@ -1,24 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
 		<ppel:PropertiesLayout></ppel:PropertiesLayout>
 	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:BooleanRadio input="{Binding}"
-			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleStringInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleStringInstance.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleStringInstance.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleStringType.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleStringType.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleStringType.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleTopLayerOperator.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleTopLayerOperator.xwt
index 4901a7b..e29bdbb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleTopLayerOperator.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/MultipleTopLayerOperator.xwt
@@ -1,24 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
 		<ppel:PropertiesLayout></ppel:PropertiesLayout>
 	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:BooleanRadio input="{Binding}"
-			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleAbstractLayer.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleAbstractLayer.xwt
index c2af238..c168735 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleAbstractLayer.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleAbstractLayer.xwt
@@ -27,16 +27,7 @@
 		<Composite.layout>
 			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
 		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
 		<ppe:MultiReference input="{Binding}"
 			property="layers:AbstractLayer:views"></ppe:MultiReference>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:AbstractLayer:attachedProperties"></ppe:MultiReference>
 	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleAbstractLayerOperator.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleAbstractLayerOperator.xwt
deleted file mode 100755
index c2db308..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleAbstractLayerOperator.xwt
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:StringEditor input="{Binding}"
-			property="layers:LayerExpression:name"></ppe:StringEditor>
-		<ppe:StringEditor input="{Binding}"
-			property="layers:LayerExpression:description"></ppe:StringEditor>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:BooleanRadio input="{Binding}"
-			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleAllViewsDerivedLayer.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleAllViewsDerivedLayer.xwt
index c2af238..c168735 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleAllViewsDerivedLayer.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleAllViewsDerivedLayer.xwt
@@ -27,16 +27,7 @@
 		<Composite.layout>
 			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
 		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
 		<ppe:MultiReference input="{Binding}"
 			property="layers:AbstractLayer:views"></ppe:MultiReference>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:AbstractLayer:attachedProperties"></ppe:MultiReference>
 	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleAndStackedLayerOperatorDescriptor.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleAndStackedLayerOperatorDescriptor.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleAndStackedLayerOperatorDescriptor.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleBooleanInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleBooleanInstance.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleBooleanInstance.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleBooleanType.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleBooleanType.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleBooleanType.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleColor.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleColor.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleColor.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleColorInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleColorInstance.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleColorInstance.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleCustomLayerOperator.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleCustomLayerOperator.xwt
deleted file mode 100755
index c2db308..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleCustomLayerOperator.xwt
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:StringEditor input="{Binding}"
-			property="layers:LayerExpression:name"></ppe:StringEditor>
-		<ppe:StringEditor input="{Binding}"
-			property="layers:LayerExpression:description"></ppe:StringEditor>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:BooleanRadio input="{Binding}"
-			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleCustomPropertyOperator.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleCustomPropertyOperator.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleCustomPropertyOperator.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleCustomType.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleCustomType.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleCustomType.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleDefaultPropertyOperator.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleDefaultPropertyOperator.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleDefaultPropertyOperator.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFill.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFill.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFill.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFillInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFillInstance.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFillInstance.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFillPropertySetter.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFillPropertySetter.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFillPropertySetter.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFontInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFontInstance.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFontInstance.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFontPropertySetter.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFontPropertySetter.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFontPropertySetter.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFontType.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFontType.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleFontType.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIntInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIntInstance.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIntInstance.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIntType.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIntType.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIntType.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIsAbstractUmlSetter.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIsAbstractUmlSetter.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIsAbstractUmlSetter.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIsValidPropertySetter.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIsValidPropertySetter.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIsValidPropertySetter.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIsVisiblePropertySetter.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIsVisiblePropertySetter.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleIsVisiblePropertySetter.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayer.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayer.xwt
index c2af238..c168735 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayer.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayer.xwt
@@ -27,16 +27,7 @@
 		<Composite.layout>
 			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
 		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
 		<ppe:MultiReference input="{Binding}"
 			property="layers:AbstractLayer:views"></ppe:MultiReference>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:AbstractLayer:attachedProperties"></ppe:MultiReference>
 	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayerExpression.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayerExpression.xwt
index c2db308..48f7c9f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayerExpression.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayerExpression.xwt
@@ -23,11 +23,4 @@
 		<ppe:BooleanRadio input="{Binding}"
 			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
 	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayerNamedStyle.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayerNamedStyle.xwt
index bef4ff0..e29bdbb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayerNamedStyle.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayerNamedStyle.xwt
@@ -1,17 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
 		<ppel:PropertiesLayout></ppel:PropertiesLayout>
 	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:LayerNamedStyle:layersStack"></ppe:MultiReference>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayerOperator.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayerOperator.xwt
index c2db308..48f7c9f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayerOperator.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayerOperator.xwt
@@ -23,11 +23,4 @@
 		<ppe:BooleanRadio input="{Binding}"
 			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
 	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayersStack.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayersStack.xwt
index 3067cc2..593ff87 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayersStack.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLayersStack.xwt
@@ -28,8 +28,6 @@
 			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
 		</Composite.layout>
 		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayersStack:layers"></ppe:ReferenceDialog>
-		<ppe:ReferenceDialog input="{Binding}"
 			property="layers:LayersStack:diagram"></ppe:ReferenceDialog>
 	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLineInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLineInstance.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLineInstance.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLinePropertySetter.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLinePropertySetter.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLinePropertySetter.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLineType.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLineType.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleLineType.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleOrStackedLayerOperatorDescriptor.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleOrStackedLayerOperatorDescriptor.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleOrStackedLayerOperatorDescriptor.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleProperty.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleProperty.xwt
index bc5fdec..e29bdbb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleProperty.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleProperty.xwt
@@ -1,26 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
 		<ppel:PropertiesLayout></ppel:PropertiesLayout>
 	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:StringEditor input="{Binding}"
-			property="layers:Property:name"></ppe:StringEditor>
-		<ppe:StringEditor input="{Binding}"
-			property="layers:Property:description"></ppe:StringEditor>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:Property:type"></ppe:ReferenceDialog>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleRegExpLayer.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleRegExpLayer.xwt
deleted file mode 100755
index c2af238..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleRegExpLayer.xwt
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:StringEditor input="{Binding}"
-			property="layers:LayerExpression:name"></ppe:StringEditor>
-		<ppe:StringEditor input="{Binding}"
-			property="layers:LayerExpression:description"></ppe:StringEditor>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:BooleanRadio input="{Binding}"
-			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:AbstractLayer:views"></ppe:MultiReference>
-		<ppe:MultiReference input="{Binding}"
-			property="layers:AbstractLayer:attachedProperties"></ppe:MultiReference>
-	</Composite>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleRegExpLayerDescriptor.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleRegExpLayerDescriptor.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleRegExpLayerDescriptor.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleStackedLayerOperator.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleStackedLayerOperator.xwt
index c2db308..48f7c9f 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleStackedLayerOperator.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleStackedLayerOperator.xwt
@@ -23,11 +23,4 @@
 		<ppe:BooleanRadio input="{Binding}"
 			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
 	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleStringInstance.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleStringInstance.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleStringInstance.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleStringType.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleStringType.xwt
deleted file mode 100755
index e29bdbb..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleStringType.xwt
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Composite xmlns="http://www.eclipse.org/xwt/presentation"
-	xmlns:j="clr-namespace:java.lang"
-	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
-	xmlns:x="http://www.eclipse.org/xwt">
-	<Composite.layout>
-		<ppel:PropertiesLayout></ppel:PropertiesLayout>
-	</Composite.layout>
-</Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleTopLayerOperator.xwt b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleTopLayerOperator.xwt
index c2db308..4252fe9 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleTopLayerOperator.xwt
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/properties/ui/SingleTopLayerOperator.xwt
@@ -16,18 +16,4 @@
 		<ppe:StringEditor input="{Binding}"
 			property="layers:LayerExpression:description"></ppe:StringEditor>
 	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:BooleanRadio input="{Binding}"
-			property="layers:LayerExpression:isLayerEnabled"></ppe:BooleanRadio>
-	</Composite>
-	<Composite>
-		<Composite.layout>
-			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
-		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}"
-			property="layers:LayerExpression:owningLayersStack"></ppe:ReferenceDialog>
-	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/commands/CreateLayerOperatorsFromParameter.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/commands/CreateLayerOperatorsFromParameter.java
index baeeb03..ec406eb 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/commands/CreateLayerOperatorsFromParameter.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/commands/CreateLayerOperatorsFromParameter.java
@@ -20,7 +20,6 @@
 import org.eclipse.papyrus.infra.core.services.ServiceException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.AbstractLayerOperator;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperator;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication;
@@ -113,7 +112,7 @@
 		}
 
 		// Create a layer !
-		AbstractLayerOperator layerOperator;
+		LayerOperator layerOperator;
 		try {
 			layerOperator = application.getLayerOperatorDescriptorRegistry().createLayerOperator(newLayerID);
 			layerOperator.setName("layer" + creationCount++);
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/commands/DeletePropertyCommand.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/commands/DeletePropertyCommand.java
index 3b76623..8ebe2e4 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/commands/DeletePropertyCommand.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/commands/DeletePropertyCommand.java
@@ -75,8 +75,14 @@
 		try {
 			LayersStackApplication layerStackApplication = lookupLayersStackApplicationChecked(context);
 			List<LayersStack> layerStacks = layerStackApplication.getLayersStacks();
-			LayerExpression topLayerExpression = (layerStacks.get(0).getLayers());
-			TopLayerOperator topLayerOperator = topLayerExpression instanceof TopLayerOperator ? (TopLayerOperator) topLayerExpression : null;
+			TopLayerOperator topLayerOperator = null;
+			for (LayersStack layerStack : layerStacks) {
+				topLayerOperator = layerStack.getLayers() instanceof TopLayerOperator ? (TopLayerOperator) layerStack.getLayers() : null;
+				if (null == topLayerOperator || topLayerOperator.getLayers().isEmpty()) {
+					continue;
+				}
+			}
+
 			if (null == topLayerOperator) {
 				return;
 			}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/explorer/LayerExplorerPageBookView.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/explorer/LayerExplorerPageBookView.java
index 16e4ab7..8efff09 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/explorer/LayerExplorerPageBookView.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/explorer/LayerExplorerPageBookView.java
@@ -82,7 +82,7 @@
 			URI uri = URI.createURI(uriAttribute);
 			IViewPart viewPart = getActiveView();
 			if (viewPart instanceof ModelExplorerView) {
-				LayersExplorerView modelExplorerView = (LayersExplorerView) viewPart;
+				// LayersExplorerView modelExplorerView = (LayersExplorerView) viewPart;
 				// EditingDomain domain = modelExplorerView.getEditingDomain();
 				// EObject eObject = domain.getResourceSet().getEObject(uri, false);
 				// if(eObject != null) {
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/explorer/LayersExplorerView.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/explorer/LayersExplorerView.java
deleted file mode 100755
index 35e582b..0000000
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/explorer/LayersExplorerView.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.ui.explorer;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.part.ViewPart;
-
-
-
-/**
- * @author dumoulin
- *
- */
-public class LayersExplorerView extends ViewPart {
-
-	@Override
-	public void createPartControl(Composite parent) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setFocus() {
-		// TODO Auto-generated method stub
-
-	}
-
-
-}
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/handlers/CreateRegExpLayerHandler.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/handlers/CreateRegExpLayerHandler.java
index 5c741ef..6c95cc6 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/handlers/CreateRegExpLayerHandler.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/handlers/CreateRegExpLayerHandler.java
@@ -1,50 +1,50 @@
-/*******************************************************************************
- * Copyright (c) 2013 CEA LIST.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Cedric Dumoulin - cedric.dumoulin@lifl.fr
- ******************************************************************************/
-package org.eclipse.papyrus.internal.infra.gmfdiag.layers.ui.handlers;
-
-import org.eclipse.core.commands.IHandler;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer;
-
-
-/**
- * Create a layer stack to a diagram.
- * This is performed on the current LayerStack Viewer.
- *
- * @author cedric dumoulin
- *
- */
-public class CreateRegExpLayerHandler extends
-		AbstractCreateLayerExpressionHandler implements IHandler {
-
-
-	/**
-	 * @see org.eclipse.papyrus.layers2.ui.view.commands.AbstractLayerCommand#getCommandName()
-	 *
-	 * @return
-	 */
-	@Override
-	public String getCommandName() {
-		return "Create RegExp Layer";
-	}
-
-
-	/**
-	 * @return
-	 */
-	@Override
-	protected LayerExpression createLayer() {
-		RegExpLayer layer = LayersFactory.eINSTANCE.createRegExpLayer();
-		return layer;
-	}
-
-}
+/// *******************************************************************************
+// * Copyright (c) 2013 CEA LIST.
+// * All rights reserved. This program and the accompanying materials
+// * are made available under the terms of the Eclipse Public License v1.0
+// * which accompanies this distribution, and is available at
+// * http://www.eclipse.org/legal/epl-v10.html
+// *
+// * Contributors:
+// * Cedric Dumoulin - cedric.dumoulin@lifl.fr
+// ******************************************************************************/
+// package org.eclipse.papyrus.internal.infra.gmfdiag.layers.ui.handlers;
+//
+// import org.eclipse.core.commands.IHandler;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory;
+// import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.RegExpLayer;
+//
+//
+/// **
+// * Create a layer stack to a diagram.
+// * This is performed on the current LayerStack Viewer.
+// *
+// * @author cedric dumoulin
+// *
+// */
+// public class CreateRegExpLayerHandler extends
+// AbstractCreateLayerExpressionHandler implements IHandler {
+//
+//
+// /**
+// * @see org.eclipse.papyrus.layers2.ui.view.commands.AbstractLayerCommand#getCommandName()
+// *
+// * @return
+// */
+// @Override
+// public String getCommandName() {
+// return "Create RegExp Layer";
+// }
+//
+//
+// /**
+// * @return
+// */
+// @Override
+// protected LayerExpression createLayer() {
+// RegExpLayer layer = LayersFactory.eINSTANCE.createRegExpLayer();
+// return layer;
+// }
+//
+// }
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/view/LayersExplorerView.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/view/LayersExplorerView.java
index a42a616..10e08c1 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/view/LayersExplorerView.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/view/LayersExplorerView.java
@@ -10,8 +10,7 @@
  ******************************************************************************/
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.ui.view;
 
-import static org.eclipse.papyrus.internal.infra.gmfdiag.layers.ui.Activator.log;
-
+import static org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.Activator.log;
 import javax.imageio.spi.ServiceRegistry;
 
 import org.eclipse.emf.common.notify.Notification;
@@ -43,7 +42,6 @@
 import org.eclipse.papyrus.infra.core.services.ServiceException;
 import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
 import org.eclipse.papyrus.infra.core.utils.ServiceUtils;
-import org.eclipse.papyrus.infra.ui.util.ServiceUtilsForWorkbenchPage;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStackApplication;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.runtime.ILayersStackApplicationEventListener;
@@ -149,8 +147,9 @@
 
 		@Override
 		public void widgetDisposed(DisposeEvent e) {
-			log.info(this.getClass().getName() + " is disposed !!!" + e.widget);
-
+			if (log.isDebugEnabled()) {
+				log.info(this.getClass().getName() + " is disposed !!!" + e.widget);
+			}
 		}
 	};
 
@@ -520,7 +519,9 @@
 
 		ServicesRegistry registry = editor.getAdapter(ServicesRegistry.class);
 		if (registry == null) {
-			log.info("New editor has no ServiceRegistry");
+			if (log.isDebugEnabled()) {
+				log.info("New editor has no ServiceRegistry");
+			}
 			setEmptyTreeInput();
 			return;
 		}
@@ -649,7 +650,6 @@
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 *
-	 * @generated NOT
 	 */
 	protected void createContextMenuFor(StructuredViewer viewer) {
 		MenuManager contextMenu = new MenuManager("#PopUp");
@@ -702,7 +702,9 @@
 
 			// Bad state
 			// FIXME Log error ?
-			log.info("Error - " + getClass().getSimpleName() + " - currentLayersModel and currentServicesRegistry should not be null.");
+			if (log.isDebugEnabled()) {
+				log.info("Error - " + getClass().getSimpleName() + " - currentLayersModel and currentServicesRegistry should not be null.");
+			}
 			return null;
 		}
 
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/view/LayersTreeViewerFactory.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/view/LayersTreeViewerFactory.java
index be8a5fe..2521caf 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/view/LayersTreeViewerFactory.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/view/LayersTreeViewerFactory.java
@@ -22,10 +22,12 @@
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.viewers.StructuredViewer;
 import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.LayersItemProviderAdapterFactory;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.custom.CustomLayersItemProviderAdapterFactory;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.ui.IWorkbenchPartSite;
-import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.custom.*;
+//import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.provider.custom.*;
 
 
 /**
