stash changes
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/InsertionAdapter.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/InsertionAdapter.java
index 96609a0..fead7e2 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/InsertionAdapter.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/InsertionAdapter.java
@@ -214,7 +214,7 @@
 		}
 		TransactionalEditingDomainImpl domain = (TransactionalEditingDomainImpl)
 				TransactionUtil.getEditingDomain(resource);
-		if (domain.getActiveTransaction().isActive())
+		if (domain.getActiveTransaction()!=null && domain.getActiveTransaction().isActive())
 			return null;
 		return domain;
 	}
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractListComposite.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractListComposite.java
index bca83cd..f971add 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractListComposite.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractListComposite.java
@@ -23,18 +23,15 @@
 import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.TreeIterator;
 import org.eclipse.emf.ecore.EAttribute;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.util.BasicFeatureMap;
-import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.FeatureMap;
 import org.eclipse.emf.ecore.util.FeatureMap.Entry;
 import org.eclipse.emf.edit.provider.INotifyChangedListener;
 import org.eclipse.emf.transaction.RecordingCommand;
-import org.eclipse.emf.transaction.ResourceSetChangeEvent;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.ToolBarManager;
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -45,28 +42,16 @@
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Cursor;
-import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.ToolBar;
 import org.eclipse.ui.forms.events.ExpansionEvent;
 import org.eclipse.ui.forms.events.IExpansionListener;
 import org.eclipse.ui.forms.widgets.ExpandableComposite;
 import org.eclipse.ui.forms.widgets.Section;
-import org.eclipse.ui.menus.CommandContributionItem;
-import org.eclipse.ui.menus.CommandContributionItemParameter;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
  
 
 /**
@@ -772,4 +757,12 @@
 		}
 		return false;
 	}
+	
+	public void setVisible (boolean visible) {
+		super.setVisible(visible);
+		Object data = getLayoutData();
+		if (data instanceof GridData) {
+			((GridData)data).exclude = !visible;
+		}
+	}
 }
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/BooleanObjectEditor.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/BooleanObjectEditor.java
index bfcaf60..4f1ccd7 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/BooleanObjectEditor.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/BooleanObjectEditor.java
@@ -108,4 +108,11 @@
 			button.setSelection((Boolean) object.eGet(feature));
 		}
 	}
+	
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		button.setVisible(visible);
+		GridData data = (GridData)button.getLayoutData();
+		data.exclude = !visible;
+	}
 }
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ComboObjectEditor.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ComboObjectEditor.java
index 9e05de9..2e32dcd 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ComboObjectEditor.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ComboObjectEditor.java
@@ -57,9 +57,11 @@
 public class ComboObjectEditor extends MultivalueObjectEditor {
 
 	protected ComboViewer comboViewer;
+	private Composite buttons = null;
 	private boolean ignoreComboSelections;
 	private boolean keyPressed = false;
 	private Button editButton = null;
+	private Button createButton = null;
 	
 	/**
 	 * @param parent
@@ -129,14 +131,14 @@
 			});
 		}
 
-		Composite buttons = null;
+		buttons = null;
 		if (canEdit || canCreateNew) {
 			buttons =  getToolkit().createComposite(composite);
 			buttons.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
 			buttons.setLayout(new FillLayout(SWT.HORIZONTAL));
 
 			if (canCreateNew) {
-				Button createButton = getToolkit().createButton(buttons, null, SWT.PUSH);
+				createButton = getToolkit().createButton(buttons, null, SWT.PUSH);
 				createButton.setImage( Activator.getDefault().getImage(IConstants.ICON_ADD_20));
 				createButton.addSelectionListener(new SelectionAdapter() {
 					public void widgetSelected(SelectionEvent e) {
@@ -306,4 +308,16 @@
 			}
 		}
 	}
+	
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		comboViewer.getCombo().setVisible(visible);
+		GridData data = (GridData)comboViewer.getCombo().getLayoutData();
+		data.exclude = !visible;
+		if (buttons!=null) {
+			buttons.setVisible(visible);
+			data = (GridData)buttons.getLayoutData();
+			data.exclude = !visible;
+		}
+	}
 }
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureListObjectEditor.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureListObjectEditor.java
index 93777c0..687558d 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureListObjectEditor.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureListObjectEditor.java
@@ -53,6 +53,7 @@
 
 	Text text;
 	List<EObject> references;
+	Composite buttons;
 	Button editButton;
 	
 	/**
@@ -81,7 +82,7 @@
 		boolean canCreateNew = ModelUtil.canCreateNew(object,feature);
 
 		if (canEdit || canCreateNew) {
-			Composite buttons =  getToolkit().createComposite(composite);
+			buttons =  getToolkit().createComposite(composite);
 			buttons.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
 			buttons.setLayout(new FillLayout(SWT.HORIZONTAL));
 
@@ -178,4 +179,16 @@
 			updateTextField();
 		}
 	}
+	
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		text.setVisible(visible);
+		GridData data = (GridData)text.getLayoutData();
+		data.exclude = !visible;
+		if (buttons!=null) {
+			buttons.setVisible(visible);
+			data = (GridData)buttons.getLayoutData();
+			data.exclude = !visible;
+		}
+	}
 }
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/IntObjectEditor.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/IntObjectEditor.java
index 64b86d4..9a08861 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/IntObjectEditor.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/IntObjectEditor.java
@@ -158,4 +158,11 @@
 			updateText();
 		}
 	}
+	
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		text.setVisible(visible);
+		GridData data = (GridData)text.getLayoutData();
+		data.exclude = !visible;
+	}
 }
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ObjectEditor.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ObjectEditor.java
index 5224d9a..8d7c5b3 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ObjectEditor.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ObjectEditor.java
@@ -207,4 +207,14 @@
 	public void notifyChanged(Notification notification) {
 		updateLabelDecorator();
 	}
+	
+	public void setVisible(boolean visible) {
+		label.setVisible(visible);
+		GridData data = (GridData)label.getLayoutData();
+		data.exclude = !visible;
+	}
+	
+	public boolean isVisible() {
+		return label.isVisible();
+	}
 }
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/TextObjectEditor.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/TextObjectEditor.java
index d87e423..87c082c 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/TextObjectEditor.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/TextObjectEditor.java
@@ -164,4 +164,11 @@
 			updateText();
 		}
 	}
+	
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		text.setVisible(visible);
+		GridData data = (GridData)text.getLayoutData();
+		data.exclude = !visible;
+	}
 }
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/ActivityDetailComposite.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/ActivityDetailComposite.java
index b5b2544..328e7f7 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/ActivityDetailComposite.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/ActivityDetailComposite.java
@@ -173,7 +173,7 @@
 			
 			if (loopCharacteristics != null) {
 				loopCharacteristicsComposite = PropertiesCompositeFactory.createDetailComposite(
-						loopCharacteristics.eClass().getInstanceClass(), this, SWT.NONE);
+						loopCharacteristics.eClass().getInstanceClass(), composite, SWT.NONE);
 				loopCharacteristicsComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
 				loopCharacteristicsComposite.setBusinessObject(loopCharacteristics);
 				loopCharacteristicsComposite.setTitle(loopCharacteristics instanceof StandardLoopCharacteristics ?
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/DataAssociationDetailComposite.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/DataAssociationDetailComposite.java
index 1002d40..119fb26 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/DataAssociationDetailComposite.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/DataAssociationDetailComposite.java
@@ -593,10 +593,6 @@
 				if (!updatingWidgets && transformation==null) {
 					transformation = FACTORY.createFormalExpression();
 					InsertionAdapter.add(association, PACKAGE.getDataAssociation_Transformation(), transformation);
-//					transformation = modelHandler.createStandby(
-//							association,
-//							PACKAGE.getDataAssociation_Transformation(),
-//							FormalExpression.class);
 				}
 				if (transformationDetailsComposite==null) {
 					transformationDetailsComposite = PropertiesCompositeFactory.createDetailComposite(
@@ -604,7 +600,6 @@
 				}
 				transformationDetailsComposite.setBusinessObject(transformation);
 				transformationDetailsComposite.setTitle("Transformation");
-//				transformationDetailsComposite.redrawPage();
 	
 			}
 			else {
@@ -676,7 +671,6 @@
 				}
 				expressionDetailsComposite.setBusinessObject(expression);//association.getexpression());
 				expressionDetailsComposite.setTitle("Expression");
-//				expressionDetailsComposite.redrawPage();
 			}
 			else {
 				if (expressionComposite!=null) {
@@ -716,10 +710,6 @@
 				if (!updatingWidgets && transformation==null) {
 					transformation = FACTORY.createFormalExpression();
 					InsertionAdapter.add(association, PACKAGE.getDataAssociation_Transformation(), transformation);
-//					transformation = modelHandler.createStandby(
-//							association,
-//							PACKAGE.getDataAssociation_Transformation(),
-//							FormalExpression.class);
 				}
 	
 				if (transformationDetailsComposite==null) {
@@ -728,7 +718,6 @@
 				}
 				transformationDetailsComposite.setBusinessObject(transformation);//association.getTransformation());
 				transformationDetailsComposite.setTitle("Transformation");
-//				transformationDetailsComposite.redrawPage();
 				
 				if (assignmentsTable!=null)
 					assignmentsTable.dispose();
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/MultiInstanceLoopCharacteristicsDetailComposite.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/MultiInstanceLoopCharacteristicsDetailComposite.java
index cfbbc51..03658ce 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/MultiInstanceLoopCharacteristicsDetailComposite.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/MultiInstanceLoopCharacteristicsDetailComposite.java
@@ -2,49 +2,192 @@
 
 import org.eclipse.bpmn2.Bpmn2Package;
 import org.eclipse.bpmn2.DataInput;
+import org.eclipse.bpmn2.MultiInstanceBehavior;
 import org.eclipse.bpmn2.MultiInstanceLoopCharacteristics;
 import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractBpmn2PropertySection;
 import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractDetailComposite;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractListComposite;
 import org.eclipse.bpmn2.modeler.core.merrimac.clad.DefaultDetailComposite;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.DefaultDetailComposite.AbstractPropertiesProvider;
+import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.ComboObjectEditor;
 import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.FeatureEditingDialog;
 import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.ObjectEditingDialog;
+import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.ObjectEditor;
 import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.TextAndButtonObjectEditor;
 import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.transaction.RecordingCommand;
 import org.eclipse.emf.transaction.TransactionalEditingDomain;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
 
-public class MultiInstanceLoopCharacteristicsDetailComposite extends
-		DefaultDetailComposite {
+public class MultiInstanceLoopCharacteristicsDetailComposite extends DefaultDetailComposite {
 
-	public MultiInstanceLoopCharacteristicsDetailComposite(Composite parent,
-			int style) {
+	ObjectEditor noneBehaviorEditor;
+	ObjectEditor oneBehaviorEditor;
+	AbstractListComposite complexBehaviorList;
+	
+	public MultiInstanceLoopCharacteristicsDetailComposite(Composite parent, int style) {
 		super(parent, style);
 	}
 
-	public MultiInstanceLoopCharacteristicsDetailComposite(
-			AbstractBpmn2PropertySection section) {
+	public MultiInstanceLoopCharacteristicsDetailComposite(AbstractBpmn2PropertySection section) {
 		super(section);
 	}
+	
+	@Override
+	public AbstractPropertiesProvider getPropertiesProvider(EObject object) {
+		if (propertiesProvider==null) {
+			propertiesProvider = new AbstractPropertiesProvider(object) {
+				String[] properties = new String[] {
+						"anyAttribute",
+						"isSequential", // attr
+						"inputDataItem", // ref
+						"outputDataItem", // ref
+						"completionCondition", // ref
+						"loopCardinality", // ref
+						"loopDataInputRef", // ref
+						"loopDataOutputRef", // ref
+						"behavior", // attr
+						"noneBehaviorEventRef", // ref
+						"oneBehaviorEventRef", // ref
+						"complexBehaviorDefinition", // list
+				};
+				
+				@Override
+				public String[] getProperties() {
+					return properties; 
+				}
+			};
+		}
+		return propertiesProvider;
+	}
 
 	public void createBindings(EObject be) {
-		final MultiInstanceLoopCharacteristics lc = (MultiInstanceLoopCharacteristics)be;
+		super.createBindings(be);
+	}
+	
+	protected void bindAttribute(Composite parent, EObject object, EAttribute attribute, String label) {
+		if (attribute.getName().equals("behavior")) {
+			ObjectEditor editor = new ComboObjectEditor(this,object,attribute) {
 
-		final EStructuralFeature inputFeature = Bpmn2Package.eINSTANCE.getMultiInstanceLoopCharacteristics_InputDataItem();
-		DataIoObjectEditor inputDataItemEditor = new DataIoObjectEditor(be,inputFeature);
-		inputDataItemEditor.createControl("Input Paramter");
-		
-		final EStructuralFeature outputFeature = Bpmn2Package.eINSTANCE.getMultiInstanceLoopCharacteristics_OutputDataItem();
-		DataIoObjectEditor outputDataItemEditor = new DataIoObjectEditor(be,outputFeature);
-		outputDataItemEditor.createControl("Output Paramter");
+				@Override
+				protected boolean updateObject(Object result) {
+					MultiInstanceLoopCharacteristics lc = (MultiInstanceLoopCharacteristics)object;
+					boolean update = super.updateObject(result);
+					if (update) {
+						switch (lc.getBehavior()) {
+						case ALL:
+							if (noneBehaviorEditor!=null) {
+								noneBehaviorEditor.setVisible(false);
+							}
+							if (oneBehaviorEditor!=null) {
+								oneBehaviorEditor.setVisible(false);
+							}
+							if (complexBehaviorList!=null) {
+								complexBehaviorList.setVisible(false);
+							}
+							break;
+						case NONE:
+							if (noneBehaviorEditor!=null) {
+								noneBehaviorEditor.setVisible(true);
+							}
+							if (oneBehaviorEditor!=null) {
+								oneBehaviorEditor.setVisible(false);
+							}
+							if (complexBehaviorList!=null) {
+								complexBehaviorList.setVisible(false);
+							}
+							break;
+						case ONE:
+							if (noneBehaviorEditor!=null) {
+								noneBehaviorEditor.setVisible(false);
+							}
+							if (oneBehaviorEditor!=null) {
+								oneBehaviorEditor.setVisible(true);
+							}
+							if (complexBehaviorList!=null) {
+								complexBehaviorList.setVisible(false);
+							}
+							break;
+						case COMPLEX:
+							if (noneBehaviorEditor!=null) {
+								noneBehaviorEditor.setVisible(false);
+							}
+							if (oneBehaviorEditor!=null) {
+								oneBehaviorEditor.setVisible(false);
+							}
+							if (complexBehaviorList!=null) {
+								complexBehaviorList.setVisible(true);
+							}
+							break;
+						}
+						redrawPage();
+					}
+					return update;
+				}
+			};
+			editor.createControl(parent,label);
+		}
+		else
+			super.bindAttribute(parent, object, attribute, label);
+	}
+	
+	protected void bindReference(Composite parent, EObject object, EReference reference) {
+		MultiInstanceLoopCharacteristics lc = (MultiInstanceLoopCharacteristics)object;
+		EStructuralFeature f;
+
+		if (reference.getName().equals("inputDataItem")) {
+			f = Bpmn2Package.eINSTANCE.getMultiInstanceLoopCharacteristics_InputDataItem();
+			if (isModelObjectEnabled(lc.eClass(), f)) {
+				DataIoObjectEditor inputDataItemEditor = new DataIoObjectEditor(lc,f);
+				inputDataItemEditor.createControl(getAttributesParent(), "Input Paramter");
+			}
+		}
+		else if (reference.getName().equals("outputDataItem")) {
+			f = Bpmn2Package.eINSTANCE.getMultiInstanceLoopCharacteristics_OutputDataItem();
+			if (isModelObjectEnabled(lc.eClass(), f)) {
+				DataIoObjectEditor outputDataItemEditor = new DataIoObjectEditor(lc,f);
+				outputDataItemEditor.createControl(getAttributesParent(), "Output Paramter");
+			}
+		}
+		else if (reference.getName().equals("noneBehaviorEventRef")) {
+			String displayName = ModelUtil.getLabel(object, reference);
+			noneBehaviorEditor = new ComboObjectEditor(this,object,reference);
+			noneBehaviorEditor.createControl(parent,displayName);
+			noneBehaviorEditor.setVisible( lc.getBehavior() == MultiInstanceBehavior.NONE );
+				
+		}		
+		else if (reference.getName().equals("oneBehaviorEventRef")) {
+			String displayName = ModelUtil.getLabel(object, reference);
+			oneBehaviorEditor = new ComboObjectEditor(this,object,reference);
+			oneBehaviorEditor.createControl(parent,displayName);
+			oneBehaviorEditor.setVisible( lc.getBehavior() == MultiInstanceBehavior.ONE );
+		}		
+		else
+			super.bindReference(parent, object, reference);
+	}
+	
+	protected AbstractListComposite bindList(EObject object, EStructuralFeature feature, EClass listItemClass) {
+		MultiInstanceLoopCharacteristics lc = (MultiInstanceLoopCharacteristics)object;
+		if (feature.getName().equals("complexBehaviorDefinition")) {
+			complexBehaviorList = super.bindList(object, feature, listItemClass);
+			complexBehaviorList.setVisible( lc.getBehavior() == MultiInstanceBehavior.COMPLEX );
+			return complexBehaviorList;
+		}
+		else
+			return super.bindList(object, feature, listItemClass);
 	}
 	
 	private class DataIoObjectEditor extends TextAndButtonObjectEditor {
 
-		public DataIoObjectEditor(EObject object, EStructuralFeature feature) {
+		public DataIoObjectEditor(MultiInstanceLoopCharacteristics object, EStructuralFeature feature) {
 			super(MultiInstanceLoopCharacteristicsDetailComposite.this, object, feature);
 		}
 
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/StandardLoopCharacteristicsDetailComposite.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/StandardLoopCharacteristicsDetailComposite.java
index 0c10e42..349dc0c 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/StandardLoopCharacteristicsDetailComposite.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/StandardLoopCharacteristicsDetailComposite.java
@@ -2,8 +2,11 @@
 
 import org.eclipse.bpmn2.Expression;
 import org.eclipse.bpmn2.StandardLoopCharacteristics;
+import org.eclipse.bpmn2.modeler.core.adapters.InsertionAdapter;
 import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractBpmn2PropertySection;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractDetailComposite;
 import org.eclipse.bpmn2.modeler.core.merrimac.clad.DefaultDetailComposite;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.PropertiesCompositeFactory;
 import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.transaction.RecordingCommand;
@@ -15,102 +18,56 @@
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 
-public class StandardLoopCharacteristicsDetailComposite extends
-		DefaultDetailComposite {
+public class StandardLoopCharacteristicsDetailComposite extends DefaultDetailComposite {
 
-	private Button addRemoveLoopConditionExpressionButton;
-	private Button addRemoveLoopMaximumExpressionButton;
-
-	public StandardLoopCharacteristicsDetailComposite(Composite parent,
-			int style) {
+	AbstractDetailComposite loopConditionComposite = null;
+	AbstractDetailComposite loopMaximumComposite = null;
+	
+	public StandardLoopCharacteristicsDetailComposite(Composite parent, int style) {
 		super(parent, style);
 	}
 
-	public StandardLoopCharacteristicsDetailComposite(
-			AbstractBpmn2PropertySection section) {
+	public StandardLoopCharacteristicsDetailComposite(AbstractBpmn2PropertySection section) {
 		super(section);
 	}
 
 	@Override
-	public void cleanBindings() {
+	protected void cleanBindings() {
 		super.cleanBindings();
-		addRemoveLoopConditionExpressionButton = null;
-		addRemoveLoopMaximumExpressionButton = null;
+		loopConditionComposite = null;
+		loopMaximumComposite = null;
 	}
 
+	public Composite getAttributesParent() {
+		return super.getAttributesParent();
+	}
+	
 	public void createBindings(EObject be) {
+		getAttributesParent();
+		
 		bindAttribute(be,"testBefore");
 		
 		if (be instanceof StandardLoopCharacteristics) {
 			
-			final StandardLoopCharacteristics standardLoop = (StandardLoopCharacteristics) be;
-				
-			addRemoveLoopConditionExpressionButton = new Button(this, SWT.PUSH);
-			addRemoveLoopConditionExpressionButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 3, 1));
-			addRemoveLoopConditionExpressionButton.addSelectionListener(new SelectionAdapter() {
-				
-				public void widgetSelected(SelectionEvent e) {
-					@SuppressWarnings("restriction")
-					TransactionalEditingDomain domain = getDiagramEditor().getEditingDomain();
-					domain.getCommandStack().execute(new RecordingCommand(domain) {
-						@Override
-						protected void doExecute() {
-							if (standardLoop.getLoopCondition() !=null)
-								standardLoop.setLoopCondition(null);
-							else {
-								Expression exp = FACTORY.createFormalExpression();
-								standardLoop.setLoopCondition(exp);
-								ModelUtil.setID(exp);
-							}
-							setBusinessObject(standardLoop);
-						}
-					});
-				}
-			});
-
-			addRemoveLoopMaximumExpressionButton = new Button(this, SWT.PUSH);
-			addRemoveLoopMaximumExpressionButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 3, 1));
-			addRemoveLoopMaximumExpressionButton.addSelectionListener(new SelectionAdapter() {
-				
-				public void widgetSelected(SelectionEvent e) {
-					@SuppressWarnings("restriction")
-					TransactionalEditingDomain domain = getDiagramEditor().getEditingDomain();
-					domain.getCommandStack().execute(new RecordingCommand(domain) {
-						@Override
-						protected void doExecute() {
-							if (standardLoop.getLoopMaximum() !=null)
-								standardLoop.setLoopMaximum(null);
-							else {
-								Expression exp = FACTORY.createFormalExpression();
-								standardLoop.setLoopMaximum(exp);
-								ModelUtil.setID(exp);
-							}
-							setBusinessObject(standardLoop);
-						}
-					});
-				}
-			});
-
-			Expression loopexp = (Expression) standardLoop.getLoopCondition();
-			Expression maxexp = (Expression) standardLoop.getLoopMaximum();
-
-			if (loopexp != null) {
-				addRemoveLoopConditionExpressionButton.setText("Remove Loop Condition");
-				this.businessObject = loopexp;
-				super.createBindings(loopexp);
+			final StandardLoopCharacteristics lc = (StandardLoopCharacteristics) be;
+			
+			Expression loopConditionExpression = lc.getLoopCondition();
+			if (loopConditionExpression==null) {
+				loopConditionExpression = FACTORY.createFormalExpression();
+				InsertionAdapter.add(lc, PACKAGE.getStandardLoopCharacteristics_LoopCondition(), loopConditionExpression);
 			}
-			else {
-				addRemoveLoopConditionExpressionButton.setText("Add Loop Condition");
+			loopConditionComposite = PropertiesCompositeFactory.createDetailComposite(Expression.class, getAttributesParent(), SWT.NONE);
+			loopConditionComposite.setBusinessObject(loopConditionExpression);
+			loopConditionComposite.setTitle("Loop Condition");
+			
+			Expression loopMaximumExpression = lc.getLoopMaximum();
+			if (loopMaximumExpression==null) {
+				loopMaximumExpression = FACTORY.createFormalExpression();
+				InsertionAdapter.add(lc, PACKAGE.getStandardLoopCharacteristics_LoopMaximum(), loopMaximumExpression);
 			}
-
-			if (maxexp != null) {
-				addRemoveLoopMaximumExpressionButton.setText("Remove Loop Maximum");
-				this.businessObject = maxexp;
-				super.createBindings(maxexp);
-			}
-			else {
-				addRemoveLoopMaximumExpressionButton.setText("Add Loop Maximum");
-			}
+			loopMaximumComposite = PropertiesCompositeFactory.createDetailComposite(Expression.class, getAttributesParent(), SWT.NONE);
+			loopMaximumComposite.setBusinessObject(loopMaximumExpression);
+			loopMaximumComposite.setTitle("Loop Maximum");
 		}
 	}
 }
diff --git a/pom.xml b/pom.xml
index 85db620..d2872bf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,7 +79,7 @@
 		<repository>
 			<id>eclipse-bpmn2</id>
 			<!--  TODO: change this when BPMN2 metamodel finds a permanent home -->
-			<url>https://hudson.eclipse.org/hudson/job/bpmn2-nightly/ws/org.eclipse.bpmn2.site/target/site/</url>
+			<url>https://hudson.eclipse.org/hudson/job/bpmn2-nightly/lastSuccessfulBuild/artifact/org.eclipse.bpmn2.site/target/site/</url>
 			<layout>p2</layout>
 			<snapshots>
 				<enabled>true</enabled>