diff --git a/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/diagram/CompositediagramFeatureProvider.java b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/diagram/CompositediagramFeatureProvider.java
index bf6f964dc9f9bcbc1a2bd30b7238d87c2c415cf5..27dc656424d5a1dc2fbbefd83ba8c257e9b10b63 100644
--- a/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/diagram/CompositediagramFeatureProvider.java
+++ b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/diagram/CompositediagramFeatureProvider.java
@@ -11,19 +11,48 @@ package edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram.di
 import java.util.ArrayList;
 import java.util.Arrays;
 
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.graphiti.dt.IDiagramTypeProvider;
+import org.eclipse.graphiti.features.IAddFeature;
+import org.eclipse.graphiti.features.context.IAddContext;
 import org.eclipse.graphiti.features.context.ICustomContext;
 import org.eclipse.graphiti.features.custom.ICustomFeature;
 import org.eclipselabs.spray.runtime.graphiti.zest.features.ZestLayoutDiagramFeature;
 
 import com.google.common.collect.Iterables;
 
+import edu.kit.ipd.descartes.mm.applicationlevel.repository.RepositoryPackage;
+import edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram.features.CompositediagramAddAssemblyContextFeature;
+import edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram.features.CompositediagramAddCompositeComponentFeature;
+
 public class CompositediagramFeatureProvider extends CompositediagramFeatureProviderBase {
 
     public CompositediagramFeatureProvider(final IDiagramTypeProvider dtp) {
         super(dtp);
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public IAddFeature getAddFeature(final IAddContext context) {
+        // is object for add request a EClass or EReference?
+        final EObject bo = (EObject) context.getNewObject();
+        final String reference = (String) context.getProperty(PROPERTY_REFERENCE);
+        final String alias = (String) context.getProperty(PROPERTY_ALIAS);
+        if (bo.eClass() == RepositoryPackage.Literals.COMPOSITE_COMPONENT && alias == null) {
+            if (reference == null) {
+                return new CompositediagramAddCompositeComponentFeature(this);
+            }
+        }
+        if (bo.eClass() == RepositoryPackage.Literals.ASSEMBLY_CONTEXT && alias == null) {
+            if (reference == null) {
+                return new CompositediagramAddAssemblyContextFeature(this);
+            }
+        }
+        return super.getAddFeature(context);
+    }
+    
     @Override
     public ICustomFeature[] getCustomFeatures(ICustomContext context) {
     	ArrayList<ICustomFeature> features = new ArrayList<ICustomFeature>(Arrays.asList(super.getCustomFeatures(context)));
diff --git a/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/features/CompositediagramAddCompositeComponentFeature.java b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/features/CompositediagramAddCompositeComponentFeature.java
new file mode 100644
index 0000000000000000000000000000000000000000..6f9518beddb693e44eef4eb1eaa10284e51dbf42
--- /dev/null
+++ b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/features/CompositediagramAddCompositeComponentFeature.java
@@ -0,0 +1,17 @@
+/*************************************************************************************
+ *
+ * Generated on Tue Nov 19 19:17:53 CET 2013 by Spray AddShapeFromDslFeature.xtend
+ * 
+ * This file is an extension point: copy to "src" folder to manually add code to this
+ * extension point.
+ *
+ *************************************************************************************/
+package edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram.features;
+
+import org.eclipse.graphiti.features.IFeatureProvider;
+
+public class CompositediagramAddCompositeComponentFeature extends CompositediagramAddCompositeComponentFeatureBase {
+    public CompositediagramAddCompositeComponentFeature(final IFeatureProvider fp) {
+        super(fp);
+    }
+}
diff --git a/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/popup/actions/AddAssemblyContext.java b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/popup/actions/AddAssemblyContext.java
new file mode 100644
index 0000000000000000000000000000000000000000..79e80bf84ff5600d9a4113c9d6befd333cc465e7
--- /dev/null
+++ b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/popup/actions/AddAssemblyContext.java
@@ -0,0 +1,5 @@
+package edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram.popup.actions;
+
+public class AddAssemblyContext {
+
+}
diff --git a/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/popup/actions/InitCreateDiagramWizard.java b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/popup/actions/InitCreateDiagramWizard.java
index 3b7efc21f104a38be2760d3f38edf063a2a20f7e..33cb384772ed231f8d9f251b25eaa4af7f6cbad1 100644
--- a/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/popup/actions/InitCreateDiagramWizard.java
+++ b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/popup/actions/InitCreateDiagramWizard.java
@@ -20,9 +20,15 @@ import org.eclipse.emf.transaction.TransactionalEditingDomain;
 import org.eclipse.emf.transaction.TransactionalEditingDomain.Registry;
 import org.eclipse.emf.transaction.util.TransactionUtil;
 import org.eclipse.graphiti.dt.IDiagramTypeProvider;
+import org.eclipse.graphiti.features.IFeatureProvider;
 import org.eclipse.graphiti.features.context.impl.AddContext;
+import org.eclipse.graphiti.features.context.impl.UpdateContext;
+import org.eclipse.graphiti.mm.pictograms.ContainerShape;
 import org.eclipse.graphiti.mm.pictograms.Diagram;
+import org.eclipse.graphiti.mm.pictograms.PictogramElement;
+import org.eclipse.graphiti.mm.pictograms.PictogramLink;
 import org.eclipse.graphiti.mm.pictograms.PictogramsFactory;
+import org.eclipse.graphiti.mm.pictograms.impl.ContainerShapeImpl;
 import org.eclipse.graphiti.services.Graphiti;
 import org.eclipse.graphiti.services.IGaService;
 import org.eclipse.graphiti.services.IPeCreateService;
@@ -37,6 +43,8 @@ import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IActionDelegate;
 import org.eclipse.ui.IObjectActionDelegate;
 import org.eclipse.ui.IWorkbenchPart;
+import org.eclipselabs.spray.runtime.graphiti.features.custom.UpdateElementsFeature;
+import org.eclipselabs.spray.runtime.graphiti.layout.SprayLayoutService;
 import org.eclipselabs.spray.runtime.graphiti.wizard.FileOpener;
 import org.eclipselabs.spray.runtime.graphiti.wizard.IDiagramInitializer;
 import org.eclipselabs.spray.runtime.graphiti.wizard.NewDiagramPage;
@@ -44,8 +52,10 @@ import org.eclipselabs.spray.runtime.graphiti.wizard.NewDiagramPage;
 import com.google.inject.Inject;
 import com.google.inject.name.Named;
 
+import edu.kit.ipd.descartes.mm.applicationlevel.repository.AssemblyContext;
 import edu.kit.ipd.descartes.mm.applicationlevel.repository.CompositeComponent;
 import edu.kit.ipd.descartes.mm.applicationlevel.repository.Repository;
+import edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram.features.CompositediagramAddCompositeComponentFeature;
 
 public class InitCreateDiagramWizard implements IObjectActionDelegate {
 
@@ -106,7 +116,7 @@ public class InitCreateDiagramWizard implements IObjectActionDelegate {
 		/*
 		 * Load Repository from diagramRoot
 		 */
-		TreeIterator<EObject> it = diagramRoot.eAllContents();
+		TreeIterator<EObject> itDiagRoot = diagramRoot.eAllContents();
 		final Repository model;
 		if (diagramRoot instanceof Repository) {
 			model = (Repository) diagramRoot;
@@ -125,23 +135,6 @@ public class InitCreateDiagramWizard implements IObjectActionDelegate {
 //			}
 //		}
 		
-		/*
-		 * Testweises laden von EOBjects to add
-		 */
-		CompositeComponent testObj = null;
-		while (it.hasNext()) {
-			EObject possibleCC = it.next();
-			if (possibleCC instanceof CompositeComponent) { //load CompositeComponent
-				testObj = (CompositeComponent) possibleCC;
-				break;
-			}
-		}
-		if (testObj == null) {
-			MessageDialog.openError(shell, "No CompositeComponent found", "Resource does not contain a 'CompositeComponent' EObject");
-			return;
-		}
-		
-		
 		/*
 		 * If no model found exit
 		 */
@@ -150,6 +143,7 @@ public class InitCreateDiagramWizard implements IObjectActionDelegate {
 			return;
 		}
 		
+		
 		/*
 		 * Create empty diagram
 		 */
@@ -158,27 +152,185 @@ public class InitCreateDiagramWizard implements IObjectActionDelegate {
 		final URI uri = URI.createPlatformResourceURI(diagPath, true);
 		final Resource resource = rs.createResource(uri);
 //		Diagram diagram = Graphiti.getPeCreateService().createDiagram(diagramTypeId, fileName, true);
-		Diagram diagram = PictogramsFactory.eINSTANCE.createDiagram();
+		final Diagram diagram = PictogramsFactory.eINSTANCE.createDiagram();
 		diagram.setDiagramTypeId(diagramTypeId);
 		diagram.setName(fileName);
 		diagramInitializer.initialize(diagram);
 		
+		/*
+		 * Add Diagram to resource file
+		 */
+		resource.getContents().add(diagram);
 		
 		/*
-		 * TODO Add Repository/EObject to diagram and link
+		 * Save resource and open editor
 		 */
-		String dtId = GraphitiUi.getExtensionManager().getDiagramTypeProviderId(diagramTypeId);
-		IDiagramTypeProvider dtp = GraphitiUi.getExtensionManager().createDiagramTypeProvider(diagram, dtId);
-		AddContext ac = new AddContext();
-		ac.setNewObject(testObj);
-		ac.setTargetContainer(diagram);
-		dtp.getFeatureProvider().addIfPossible(ac);
+        try {
+            resource.save(Collections.emptyMap());
+            IFile file = workspace.getRoot().getFile(new Path(uri.toPlatformString(true)));
+            fileOpener.selectAndReveal(file);
+            fileOpener.openFileToEdit(shell, file);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
 		
 		
 		/*
-		 * Add Diagram to resource file
+		 * Testweises laden von EOBjects to add
 		 */
-		resource.getContents().add(diagram);
+//		CompositeComponent testObj = null;
+//		while (itDiagRoot.hasNext()) {
+//			EObject possibleAddObject = itDiagRoot.next();
+//			if (possibleAddObject instanceof CompositeComponent) {
+//				testObj = (CompositeComponent) possibleAddObject;
+//				break;
+//			}
+//			if (possibleAddObject instanceof AssemblyContext) {
+//				
+//			}
+//		}
+//		if (testObj == null) {
+//			MessageDialog.openError(shell, "No CompositeComponent found", "Resource does not contain a 'CompositeComponent' EObject");
+//			return;
+//		}
+		
+		/*
+		 * TODO Add Repository/EObject to diagram and link (linking is done automatically)
+		 */
+//		String dtId = GraphitiUi.getExtensionManager().getDiagramTypeProviderId(diagramTypeId);
+//		IDiagramTypeProvider dtp = GraphitiUi.getExtensionManager().createDiagramTypeProvider(diagram, dtId);
+//		AddContext ac = new AddContext();
+//		ac.setNewObject(testObj);
+//		ac.setTargetContainer(diagram);
+//		dtp.getFeatureProvider().addIfPossible(ac);
+		
+//		-----------------------------------------------------
+		
+		/*
+		 * Get DiagramTypeProvider and FeatureProvider for adding Objects
+		 */
+		final String dtId = GraphitiUi.getExtensionManager().getDiagramTypeProviderId(diagramTypeId);
+		final IDiagramTypeProvider dtp = GraphitiUi.getExtensionManager().createDiagramTypeProvider(diagram, dtId);
+		final IFeatureProvider fp = dtp.getFeatureProvider();
+		
+		/*
+		 * TEST BEGIN
+		 */
+//		PictogramLink link =PictogramsFactory.eINSTANCE.createPictogramLink();
+//		link.getBusinessObjects().add(model);
+//		diagram.setLink(link);
+//		CompositediagramAddCompositeComponentFeature add = new CompositediagramAddCompositeComponentFeature(fp) {
+//			public IFeatureProvider getFeatureProvider() {
+//				return dtp.getFeatureProvider();
+//			}
+//			
+//			protected Diagram getDiagram() {
+//				return diagram;
+//			}
+//		};
+//		fp.addIfPossible(context)
+//		AddContext context = new AddContext();
+//		context.setNewObject(model);
+//		context.setTargetContainer(diagram);
+//		add.add(context);
+		/*
+		 * TEST END
+		 */
+		
+		/*
+		 * Will be filled with EObjects to add within while loop
+		 */
+//		AddContext ac;
+		
+		/*
+		 * Add all elements from diagramRoot to diagram
+		 */
+		while (itDiagRoot.hasNext()) {
+			final EObject possibleAddObject = itDiagRoot.next();
+			if (possibleAddObject instanceof CompositeComponent) {
+//				AddContext ac = new AddContext();
+//				ac.setNewObject((CompositeComponent)possibleAddObject);
+//				ac.setTargetContainer(diagram);
+//				
+//				PictogramElement picto = fp.addIfPossible(ac);
+				
+//				TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(resourceSet);
+				editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain) {
+				   public void doExecute() {
+					   AddContext ac = new AddContext();
+					   ac.setNewObject((CompositeComponent)possibleAddObject);
+					   ac.setTargetContainer(diagram);
+					   PictogramElement picto = fp.addIfPossible(ac);
+					   
+					   AssemblyContext ass = ((CompositeComponent)possibleAddObject).getAssemblyContexts().get(0);
+					   ac = new AddContext();
+					   ac.setNewObject(ass);
+					   ac.setTargetContainer((ContainerShape) picto);
+					   fp.addIfPossible(ac);
+//					   UpdateContext updateContext = new UpdateContext(diagram.getChildren().get(0).getGraphicsAlgorithm().getPictogramElement());
+//					   IUpdateFeature updateFeature = fp.getUpdateFeature(updateContext);
+//					   updateFeature.update(updateContext);
+				   }
+				});
+				
+//				fp.link(fp.getPictogramElementForBusinessObject(possibleAddObject), possibleAddObject);
+				
+				// Save diagram, because else object are not visible for others
+//				resource.getContents().add(diagram);
+//				try {
+//					resource.save(Collections.emptyMap());
+//				} catch (IOException e) {
+//					e.printStackTrace();
+//				}
+//				IFile file = workspace.getRoot().getFile(new Path(uri.toPlatformString(true)));
+//				fileOpener.selectAndReveal(file);
+//				SprayLayoutService.setCompartment(picto, true);
+			}
+			if (possibleAddObject instanceof AssemblyContext) {
+//				AddContext ac = new AddContext();
+//				ac.setNewObject((AssemblyContext)possibleAddObject);
+				// a.eContainer() == a.getParentStructure() 			== True
+				// a.eContainer().equals(a.getParentStructure()) 		== True
+				// Object o = fp.getPictogramElementForBusinessObject(a.getParentStructure());
+				// o.getClass() == org.eclipse.graphiti.mm.pictograms.impl.ContainerShapeImpl
+				final ContainerShape cs = (ContainerShape) fp.getPictogramElementForBusinessObject(((AssemblyContext) possibleAddObject).getParentStructure());
+				
+//				PictogramElement o1 = fp.getPictogramElementForBusinessObject(a.getParentStructure());
+//				Object o2 = fp.getBusinessObjectForPictogramElement(o1);
+//				System.out.println("------o1------");
+//				System.out.println(o1);
+//				System.out.println("------o2------");
+//				System.out.println(o2);
+//				System.out.println("------end------");
+				
+//				ac.setTargetContainer(cs);
+//				PictogramElement p = fp.addIfPossible(ac);
+//				System.out.println(p);
+				editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain) {
+					   public void doExecute() {
+						   AddContext ac = new AddContext();
+						   ac.setNewObject((AssemblyContext)possibleAddObject);
+						   ac.setTargetContainer(cs);
+						   fp.addIfPossible(ac);
+//						   UpdateContext updateContext = new UpdateContext(diagram.getChildren().get(0).getGraphicsAlgorithm().getPictogramElement());
+//						   IUpdateFeature updateFeature = fp.getUpdateFeature(updateContext);
+//						   updateFeature.update(updateContext);
+				   }
+				});
+				
+				// Save diagram, because else object are not visible for others
+//				resource.getContents().add(diagram);
+//				try {
+//					resource.save(Collections.emptyMap());
+//				} catch (IOException e) {
+//					e.printStackTrace();
+//				}
+//				IFile file = workspace.getRoot().getFile(new Path(uri.toPlatformString(true)));
+//				fileOpener.selectAndReveal(file);
+			}
+		}
+//		------------------------------------------------------
+		
 		
 //		TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(diagram);
 //		domain.getCommandStack().execute(new RecordingCommand(domain) {
@@ -186,12 +338,21 @@ public class InitCreateDiagramWizard implements IObjectActionDelegate {
 //			   diagram.eResource().getContents().add(model);
 //		   }
 //		});	   
-			   
+	
+		
+		
+		/*
+		 * Add Diagram to resource file
+		 */
+		resource.getContents().add(diagram);
+		
 		/*
 		 * Save resource and open editor
+		 * 
+		 * 
+		 * org.eclipselabs.spray.runtime.graphiti.wizard.NewDiagramWizard nutzt das folgende:
+		 * public void run(IProgressMonitor monitor) throws InvocationTargetException 
 		 */
-		//org.eclipselabs.spray.runtime.graphiti.wizard.NewDiagramWizard nutzt das folgende:
-		//public void run(IProgressMonitor monitor) throws InvocationTargetException 
 		try {
 			resource.save(Collections.emptyMap());
 		} catch (IOException e) {