diff --git a/plugins/org.eclipse.graphiti.mm/model/graphiti.ecore b/plugins/org.eclipse.graphiti.mm/model/graphiti.ecore
index 2b643b0..5521505 100644
--- a/plugins/org.eclipse.graphiti.mm/model/graphiti.ecore
+++ b/plugins/org.eclipse.graphiti.mm/model/graphiti.ecore
@@ -5,14 +5,15 @@
     nsURI="http://eclipse.org/graphiti/mm" nsPrefix="mm">
   <eClassifiers xsi:type="ecore:EClass" name="Property">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="key" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="values" upperBound="-1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="GraphicsAlgorithmContainer" abstract="true"
-      eSuperTypes="#//PropertyContainer"/>
   <eClassifiers xsi:type="ecore:EClass" name="PropertyContainer" abstract="true">
     <eStructuralFeatures xsi:type="ecore:EReference" name="properties" ordered="false"
         upperBound="-1" eType="#//Property" containment="true"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GraphicsAlgorithmContainer" abstract="true"
+      eSuperTypes="#//PropertyContainer"/>
   <eClassifiers xsi:type="ecore:EClass" name="StyleContainer" abstract="true">
     <eStructuralFeatures xsi:type="ecore:EReference" name="styles" ordered="false"
         upperBound="-1" eType="#//algorithms/styles/Style" containment="true" eOpposite="#//algorithms/styles/Style/styleContainer"/>
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/MmPackage.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/MmPackage.java
index 3ef991d..55f575a 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/MmPackage.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/MmPackage.java
@@ -87,13 +87,13 @@
 	int PROPERTY__KEY = 0;
 
 	/**
-	 * The feature id for the '<em><b>Value</b></em>' attribute.
+	 * The feature id for the '<em><b>Values</b></em>' attribute list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int PROPERTY__VALUE = 1;
+	int PROPERTY__VALUES = 1;
 
 	/**
 	 * The number of structural features of the '<em>Property</em>' class.
@@ -112,7 +112,7 @@
 	 * @see org.eclipse.graphiti.mm.impl.MmPackageImpl#getPropertyContainer()
 	 * @generated
 	 */
-	int PROPERTY_CONTAINER = 2;
+	int PROPERTY_CONTAINER = 1;
 
 	/**
 	 * The feature id for the '<em><b>Properties</b></em>' containment reference list.
@@ -140,7 +140,7 @@
 	 * @see org.eclipse.graphiti.mm.impl.MmPackageImpl#getGraphicsAlgorithmContainer()
 	 * @generated
 	 */
-	int GRAPHICS_ALGORITHM_CONTAINER = 1;
+	int GRAPHICS_ALGORITHM_CONTAINER = 2;
 
 	/**
 	 * The feature id for the '<em><b>Properties</b></em>' containment reference list.
@@ -211,15 +211,15 @@
 	EAttribute getProperty_Key();
 
 	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.graphiti.mm.Property#getValue <em>Value</em>}'.
+	 * Returns the meta object for the attribute list '{@link org.eclipse.graphiti.mm.Property#getValues <em>Values</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Value</em>'.
-	 * @see org.eclipse.graphiti.mm.Property#getValue()
+	 * @return the meta object for the attribute list '<em>Values</em>'.
+	 * @see org.eclipse.graphiti.mm.Property#getValues()
 	 * @see #getProperty()
 	 * @generated
 	 */
-	EAttribute getProperty_Value();
+	EAttribute getProperty_Values();
 
 	/**
 	 * Returns the meta object for class '{@link org.eclipse.graphiti.mm.GraphicsAlgorithmContainer <em>Graphics Algorithm Container</em>}'.
@@ -314,12 +314,12 @@
 		EAttribute PROPERTY__KEY = eINSTANCE.getProperty_Key();
 
 		/**
-		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * The meta object literal for the '<em><b>Values</b></em>' attribute list feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EAttribute PROPERTY__VALUE = eINSTANCE.getProperty_Value();
+		EAttribute PROPERTY__VALUES = eINSTANCE.getProperty_Values();
 
 		/**
 		 * The meta object literal for the '{@link org.eclipse.graphiti.mm.impl.GraphicsAlgorithmContainerImpl <em>Graphics Algorithm Container</em>}' class.
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/Property.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/Property.java
index b803d95..d137192 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/Property.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/Property.java
@@ -14,6 +14,7 @@
  */
 package org.eclipse.graphiti.mm;
 
+import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EObject;
 
 /**
@@ -25,7 +26,7 @@
  * The following features are supported:
  * <ul>
  *   <li>{@link org.eclipse.graphiti.mm.Property#getKey <em>Key</em>}</li>
- *   <li>{@link org.eclipse.graphiti.mm.Property#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.graphiti.mm.Property#getValues <em>Values</em>}</li>
  * </ul>
  * </p>
  *
@@ -61,29 +62,19 @@
 	void setKey(String value);
 
 	/**
-	 * Returns the value of the '<em><b>Value</b></em>' attribute.
+	 * Returns the value of the '<em><b>Values</b></em>' attribute list.
+	 * The list contents are of type {@link java.lang.String}.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
+	 * If the meaning of the '<em>Values</em>' attribute list 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.graphiti.mm.MmPackage#getProperty_Value()
-	 * @model required="true"
+	 * @return the value of the '<em>Values</em>' attribute list.
+	 * @see org.eclipse.graphiti.mm.MmPackage#getProperty_Values()
+	 * @model
 	 * @generated
 	 */
-	String getValue();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.graphiti.mm.Property#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);
+	EList<String> getValues();
 
 } // Property
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/impl/MmPackageImpl.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/impl/MmPackageImpl.java
index 9963f49..2a44989 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/impl/MmPackageImpl.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/impl/MmPackageImpl.java
@@ -170,7 +170,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EAttribute getProperty_Value() {
+	public EAttribute getProperty_Values() {
 		return (EAttribute)propertyEClass.getEStructuralFeatures().get(1);
 	}
 
@@ -249,13 +249,13 @@
 		// Create classes and their features
 		propertyEClass = createEClass(PROPERTY);
 		createEAttribute(propertyEClass, PROPERTY__KEY);
-		createEAttribute(propertyEClass, PROPERTY__VALUE);
-
-		graphicsAlgorithmContainerEClass = createEClass(GRAPHICS_ALGORITHM_CONTAINER);
+		createEAttribute(propertyEClass, PROPERTY__VALUES);
 
 		propertyContainerEClass = createEClass(PROPERTY_CONTAINER);
 		createEReference(propertyContainerEClass, PROPERTY_CONTAINER__PROPERTIES);
 
+		graphicsAlgorithmContainerEClass = createEClass(GRAPHICS_ALGORITHM_CONTAINER);
+
 		styleContainerEClass = createEClass(STYLE_CONTAINER);
 		createEReference(styleContainerEClass, STYLE_CONTAINER__STYLES);
 	}
@@ -302,13 +302,13 @@
 		// Initialize classes and features; add operations and parameters
 		initEClass(propertyEClass, Property.class, "Property", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getProperty_Key(), ecorePackage.getEString(), "key", null, 1, 1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEAttribute(getProperty_Value(), ecorePackage.getEString(), "value", null, 1, 1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-		initEClass(graphicsAlgorithmContainerEClass, GraphicsAlgorithmContainer.class, "GraphicsAlgorithmContainer", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getProperty_Values(), ecorePackage.getEString(), "values", null, 0, -1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(propertyContainerEClass, PropertyContainer.class, "PropertyContainer", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getPropertyContainer_Properties(), this.getProperty(), null, "properties", null, 0, -1, PropertyContainer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 
+		initEClass(graphicsAlgorithmContainerEClass, GraphicsAlgorithmContainer.class, "GraphicsAlgorithmContainer", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
 		initEClass(styleContainerEClass, StyleContainer.class, "StyleContainer", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getStyleContainer_Styles(), theStylesPackage.getStyle(), theStylesPackage.getStyle_StyleContainer(), "styles", null, 0, -1, StyleContainer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/impl/PropertyImpl.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/impl/PropertyImpl.java
index 3cd5137..117993b 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/impl/PropertyImpl.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/impl/PropertyImpl.java
@@ -14,13 +14,16 @@
  */
 package org.eclipse.graphiti.mm.impl;
 
+import java.util.Collection;
 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.EDataTypeUniqueEList;
 import org.eclipse.graphiti.mm.MmPackage;
 import org.eclipse.graphiti.mm.Property;
 
@@ -32,7 +35,7 @@
  * The following features are implemented:
  * <ul>
  *   <li>{@link org.eclipse.graphiti.mm.impl.PropertyImpl#getKey <em>Key</em>}</li>
- *   <li>{@link org.eclipse.graphiti.mm.impl.PropertyImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link org.eclipse.graphiti.mm.impl.PropertyImpl#getValues <em>Values</em>}</li>
  * </ul>
  * </p>
  *
@@ -60,24 +63,14 @@
 	protected String key = KEY_EDEFAULT;
 
 	/**
-	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * The cached value of the '{@link #getValues() <em>Values</em>}' attribute list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see #getValue()
+	 * @see #getValues()
 	 * @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;
+	protected EList<String> values;
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -124,20 +117,11 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public String getValue() {
-		return value;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setValue(String newValue) {
-		String oldValue = value;
-		value = newValue;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, MmPackage.PROPERTY__VALUE, oldValue, value));
+	public EList<String> getValues() {
+		if (values == null) {
+			values = new EDataTypeUniqueEList<String>(String.class, this, MmPackage.PROPERTY__VALUES);
+		}
+		return values;
 	}
 
 	/**
@@ -150,8 +134,8 @@
 		switch (featureID) {
 			case MmPackage.PROPERTY__KEY:
 				return getKey();
-			case MmPackage.PROPERTY__VALUE:
-				return getValue();
+			case MmPackage.PROPERTY__VALUES:
+				return getValues();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -161,14 +145,16 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@SuppressWarnings("unchecked")
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
 			case MmPackage.PROPERTY__KEY:
 				setKey((String)newValue);
 				return;
-			case MmPackage.PROPERTY__VALUE:
-				setValue((String)newValue);
+			case MmPackage.PROPERTY__VALUES:
+				getValues().clear();
+				getValues().addAll((Collection<? extends String>)newValue);
 				return;
 		}
 		super.eSet(featureID, newValue);
@@ -185,8 +171,8 @@
 			case MmPackage.PROPERTY__KEY:
 				setKey(KEY_EDEFAULT);
 				return;
-			case MmPackage.PROPERTY__VALUE:
-				setValue(VALUE_EDEFAULT);
+			case MmPackage.PROPERTY__VALUES:
+				getValues().clear();
 				return;
 		}
 		super.eUnset(featureID);
@@ -202,8 +188,8 @@
 		switch (featureID) {
 			case MmPackage.PROPERTY__KEY:
 				return KEY_EDEFAULT == null ? key != null : !KEY_EDEFAULT.equals(key);
-			case MmPackage.PROPERTY__VALUE:
-				return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+			case MmPackage.PROPERTY__VALUES:
+				return values != null && !values.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
@@ -220,8 +206,8 @@
 		StringBuffer result = new StringBuffer(super.toString());
 		result.append(" (key: ");
 		result.append(key);
-		result.append(", value: ");
-		result.append(value);
+		result.append(", values: ");
+		result.append(values);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/util/MmAdapterFactory.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/util/MmAdapterFactory.java
index eb3c202..9086826 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/util/MmAdapterFactory.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/util/MmAdapterFactory.java
@@ -84,14 +84,14 @@
 				return createPropertyAdapter();
 			}
 			@Override
-			public Adapter caseGraphicsAlgorithmContainer(GraphicsAlgorithmContainer object) {
-				return createGraphicsAlgorithmContainerAdapter();
-			}
-			@Override
 			public Adapter casePropertyContainer(PropertyContainer object) {
 				return createPropertyContainerAdapter();
 			}
 			@Override
+			public Adapter caseGraphicsAlgorithmContainer(GraphicsAlgorithmContainer object) {
+				return createGraphicsAlgorithmContainerAdapter();
+			}
+			@Override
 			public Adapter caseStyleContainer(StyleContainer object) {
 				return createStyleContainerAdapter();
 			}
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/util/MmSwitch.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/util/MmSwitch.java
index 89e3cc1..19f3536 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/util/MmSwitch.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/util/MmSwitch.java
@@ -101,6 +101,12 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case MmPackage.PROPERTY_CONTAINER: {
+				PropertyContainer propertyContainer = (PropertyContainer)theEObject;
+				T result = casePropertyContainer(propertyContainer);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			case MmPackage.GRAPHICS_ALGORITHM_CONTAINER: {
 				GraphicsAlgorithmContainer graphicsAlgorithmContainer = (GraphicsAlgorithmContainer)theEObject;
 				T result = caseGraphicsAlgorithmContainer(graphicsAlgorithmContainer);
@@ -108,12 +114,6 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case MmPackage.PROPERTY_CONTAINER: {
-				PropertyContainer propertyContainer = (PropertyContainer)theEObject;
-				T result = casePropertyContainer(propertyContainer);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			case MmPackage.STYLE_CONTAINER: {
 				StyleContainer styleContainer = (StyleContainer)theEObject;
 				T result = caseStyleContainer(styleContainer);
