Bug 352119: Applied patch for adding CurvedConnection
diff --git a/plugins/org.eclipse.graphiti.mm/.settings/.api_filters b/plugins/org.eclipse.graphiti.mm/.settings/.api_filters
index ff3d973..e61c5f4 100644
--- a/plugins/org.eclipse.graphiti.mm/.settings/.api_filters
+++ b/plugins/org.eclipse.graphiti.mm/.settings/.api_filters
@@ -1,5 +1,13 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>

 <component id="org.eclipse.graphiti.mm" version="2">

+    <resource path="META-INF/MANIFEST.MF">

+        <filter id="923795461">

+            <message_arguments>

+                <message_argument value="0.9.0"/>

+                <message_argument value="0.8.0"/>

+            </message_arguments>

+        </filter>

+    </resource>

     <resource path="src-gen/org/eclipse/graphiti/mm/algorithms/styles/AbstractStyle.java" type="org.eclipse.graphiti.mm.algorithms.styles.AbstractStyle">

         <filter comment="Uncommented" id="403804204">

             <message_arguments>

@@ -72,6 +80,99 @@
             </message_arguments>

         </filter>

     </resource>

+    <resource path="src-gen/org/eclipse/graphiti/mm/algorithms/styles/StylesFactory.java" type="org.eclipse.graphiti.mm.algorithms.styles.StylesFactory">

+        <filter id="403804204">

+            <message_arguments>

+                <message_argument value="org.eclipse.graphiti.mm.algorithms.styles.StylesFactory"/>

+                <message_argument value="createPrecisionPoint()"/>

+            </message_arguments>

+        </filter>

+    </resource>

+    <resource path="src-gen/org/eclipse/graphiti/mm/algorithms/styles/StylesPackage.java" type="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage">

+        <filter id="388194388">

+            <message_arguments>

+                <message_argument value="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage"/>

+                <message_argument value="LINE_STYLE"/>

+                <message_argument value="10"/>

+            </message_arguments>

+        </filter>

+        <filter id="388194388">

+            <message_arguments>

+                <message_argument value="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage"/>

+                <message_argument value="LOCATION_TYPE"/>

+                <message_argument value="12"/>

+            </message_arguments>

+        </filter>

+        <filter id="388194388">

+            <message_arguments>

+                <message_argument value="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage"/>

+                <message_argument value="ORIENTATION"/>

+                <message_argument value="11"/>

+            </message_arguments>

+        </filter>

+        <filter id="403767336">

+            <message_arguments>

+                <message_argument value="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage"/>

+                <message_argument value="PRECISION_POINT"/>

+            </message_arguments>

+        </filter>

+        <filter id="403767336">

+            <message_arguments>

+                <message_argument value="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage"/>

+                <message_argument value="PRECISION_POINT_FEATURE_COUNT"/>

+            </message_arguments>

+        </filter>

+        <filter id="403767336">

+            <message_arguments>

+                <message_argument value="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage"/>

+                <message_argument value="PRECISION_POINT__X"/>

+            </message_arguments>

+        </filter>

+        <filter id="403767336">

+            <message_arguments>

+                <message_argument value="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage"/>

+                <message_argument value="PRECISION_POINT__Y"/>

+            </message_arguments>

+        </filter>

+        <filter id="403804204">

+            <message_arguments>

+                <message_argument value="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage"/>

+                <message_argument value="getPrecisionPoint()"/>

+            </message_arguments>

+        </filter>

+        <filter id="403804204">

+            <message_arguments>

+                <message_argument value="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage"/>

+                <message_argument value="getPrecisionPoint_X()"/>

+            </message_arguments>

+        </filter>

+        <filter id="403804204">

+            <message_arguments>

+                <message_argument value="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage"/>

+                <message_argument value="getPrecisionPoint_Y()"/>

+            </message_arguments>

+        </filter>

+    </resource>

+    <resource path="src-gen/org/eclipse/graphiti/mm/algorithms/styles/StylesPackage.java" type="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage$Literals">

+        <filter id="403767336">

+            <message_arguments>

+                <message_argument value="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage.Literals"/>

+                <message_argument value="PRECISION_POINT"/>

+            </message_arguments>

+        </filter>

+        <filter id="403767336">

+            <message_arguments>

+                <message_argument value="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage.Literals"/>

+                <message_argument value="PRECISION_POINT__X"/>

+            </message_arguments>

+        </filter>

+        <filter id="403767336">

+            <message_arguments>

+                <message_argument value="org.eclipse.graphiti.mm.algorithms.styles.StylesPackage.Literals"/>

+                <message_argument value="PRECISION_POINT__Y"/>

+            </message_arguments>

+        </filter>

+    </resource>

     <resource path="src-gen/org/eclipse/graphiti/mm/pictograms/BoxRelativeAnchor.java" type="org.eclipse.graphiti.mm.pictograms.BoxRelativeAnchor">

         <filter id="403984517">

             <message_arguments>

diff --git a/plugins/org.eclipse.graphiti.mm/model/graphiti.ecore b/plugins/org.eclipse.graphiti.mm/model/graphiti.ecore
index 46c9398..34c96ef 100644
--- a/plugins/org.eclipse.graphiti.mm/model/graphiti.ecore
+++ b/plugins/org.eclipse.graphiti.mm/model/graphiti.ecore
@@ -133,6 +133,10 @@
           ordered="false" unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"

           defaultValueLiteral="false"/>

     </eClassifiers>

+    <eClassifiers xsi:type="ecore:EClass" name="CurvedConnection" eSuperTypes="#//pictograms/Connection">

+      <eStructuralFeatures xsi:type="ecore:EReference" name="controlPoints" upperBound="-1"

+          eType="#//algorithms/styles/PrecisionPoint" containment="true"/>

+    </eClassifiers>

   </eSubpackages>

   <eSubpackages name="algorithms" nsURI="http://eclipse.org/graphiti/mm/algorithms"

       nsPrefix="al">

@@ -348,6 +352,10 @@
           </eAnnotations>

         </eStructuralFeatures>

       </eClassifiers>

+      <eClassifiers xsi:type="ecore:EClass" name="PrecisionPoint">

+        <eStructuralFeatures xsi:type="ecore:EAttribute" name="x" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>

+        <eStructuralFeatures xsi:type="ecore:EAttribute" name="y" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>

+      </eClassifiers>

     </eSubpackages>

   </eSubpackages>

 </ecore:EPackage>

diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/PrecisionPoint.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/PrecisionPoint.java
new file mode 100644
index 0000000..e111ec9
--- /dev/null
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/PrecisionPoint.java
@@ -0,0 +1,91 @@
+/**
+ * <copyright>
+ * 
+ * Copyright (c) 2005, 2011 SAP AG.
+ * 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:
+ *    SAP AG - initial API, implementation and documentation
+ * 
+ * </copyright>
+ */
+package org.eclipse.graphiti.mm.algorithms.styles;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc --> A representation of the model object '
+ * <em><b>Precision Point</b></em>'. <!-- end-user-doc -->
+ * 
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint#getX <em>
+ * X</em>}</li>
+ * <li>{@link org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint#getY <em>
+ * Y</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @see org.eclipse.graphiti.mm.algorithms.styles.StylesPackage#getPrecisionPoint()
+ * @model
+ * @generated
+ * @since 0.9
+ */
+public interface PrecisionPoint extends EObject {
+	/**
+	 * Returns the value of the '<em><b>X</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>X</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>X</em>' attribute.
+	 * @see #setX(double)
+	 * @see org.eclipse.graphiti.mm.algorithms.styles.StylesPackage#getPrecisionPoint_X()
+	 * @model required="true"
+	 * @generated
+	 */
+	double getX();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint#getX <em>X</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>X</em>' attribute.
+	 * @see #getX()
+	 * @generated
+	 */
+	void setX(double value);
+
+	/**
+	 * Returns the value of the '<em><b>Y</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Y</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Y</em>' attribute.
+	 * @see #setY(double)
+	 * @see org.eclipse.graphiti.mm.algorithms.styles.StylesPackage#getPrecisionPoint_Y()
+	 * @model required="true"
+	 * @generated
+	 */
+	double getY();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint#getY <em>Y</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Y</em>' attribute.
+	 * @see #getY()
+	 * @generated
+	 */
+	void setY(double value);
+
+} // PrecisionPoint
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/StylesFactory.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/StylesFactory.java
index 56ce4ef..96696b5 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/StylesFactory.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/StylesFactory.java
@@ -115,6 +115,16 @@
 	Color createColor();
 
 	/**
+	 * Returns a new object of class '<em>Precision Point</em>'. <!--
+	 * begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @return a new object of class '<em>Precision Point</em>'.
+	 * @generated
+	 * @since 0.9
+	 */
+	PrecisionPoint createPrecisionPoint();
+
+	/**
 	 * Returns the package supported by this factory.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/StylesPackage.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/StylesPackage.java
index 1c0d5fc..d499afd 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/StylesPackage.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/StylesPackage.java
@@ -19,7 +19,6 @@
 import org.eclipse.emf.ecore.EEnum;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
-
 import org.eclipse.graphiti.mm.MmPackage;
 
 /**
@@ -702,6 +701,49 @@
 	int COLOR_FEATURE_COUNT = 3;
 
 	/**
+	 * The meta object id for the '
+	 * {@link org.eclipse.graphiti.mm.algorithms.styles.impl.PrecisionPointImpl
+	 * <em>Precision Point</em>}' class. <!-- begin-user-doc --> <!--
+	 * end-user-doc -->
+	 * 
+	 * @see org.eclipse.graphiti.mm.algorithms.styles.impl.PrecisionPointImpl
+	 * @see org.eclipse.graphiti.mm.algorithms.styles.impl.StylesPackageImpl#getPrecisionPoint()
+	 * @generated
+	 * @since 0.9
+	 */
+	int PRECISION_POINT = 10;
+
+	/**
+	 * The feature id for the '<em><b>X</b></em>' attribute. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 * @since 0.9
+	 */
+	int PRECISION_POINT__X = 0;
+
+	/**
+	 * The feature id for the '<em><b>Y</b></em>' attribute. <!-- begin-user-doc
+	 * --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 * @since 0.9
+	 */
+	int PRECISION_POINT__Y = 1;
+
+	/**
+	 * The number of structural features of the '<em>Precision Point</em>'
+	 * class. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 * @since 0.9
+	 */
+	int PRECISION_POINT_FEATURE_COUNT = 2;
+
+	/**
 	 * The meta object id for the '{@link org.eclipse.graphiti.mm.algorithms.styles.LineStyle <em>Line Style</em>}' enum.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -709,7 +751,7 @@
 	 * @see org.eclipse.graphiti.mm.algorithms.styles.impl.StylesPackageImpl#getLineStyle()
 	 * @generated
 	 */
-	int LINE_STYLE = 10;
+	int LINE_STYLE = 11;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.graphiti.mm.algorithms.styles.Orientation <em>Orientation</em>}' enum.
@@ -719,7 +761,7 @@
 	 * @see org.eclipse.graphiti.mm.algorithms.styles.impl.StylesPackageImpl#getOrientation()
 	 * @generated
 	 */
-	int ORIENTATION = 11;
+	int ORIENTATION = 12;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.graphiti.mm.algorithms.styles.LocationType <em>Location Type</em>}' enum.
@@ -729,7 +771,7 @@
 	 * @see org.eclipse.graphiti.mm.algorithms.styles.impl.StylesPackageImpl#getLocationType()
 	 * @generated
 	 */
-	int LOCATION_TYPE = 12;
+	int LOCATION_TYPE = 13;
 
 
 	/**
@@ -1273,6 +1315,44 @@
 	EAttribute getColor_Blue();
 
 	/**
+	 * Returns the meta object for class '
+	 * {@link org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint
+	 * <em>Precision Point</em>}'. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for class '<em>Precision Point</em>'.
+	 * @see org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint
+	 * @generated
+	 * @since 0.9
+	 */
+	EClass getPrecisionPoint();
+
+	/**
+	 * Returns the meta object for the attribute '
+	 * {@link org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint#getX
+	 * <em>X</em>}'. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>X</em>'.
+	 * @see org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint#getX()
+	 * @see #getPrecisionPoint()
+	 * @generated
+	 * @since 0.9
+	 */
+	EAttribute getPrecisionPoint_X();
+
+	/**
+	 * Returns the meta object for the attribute '
+	 * {@link org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint#getY
+	 * <em>Y</em>}'. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the attribute '<em>Y</em>'.
+	 * @see org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint#getY()
+	 * @see #getPrecisionPoint()
+	 * @generated
+	 * @since 0.9
+	 */
+	EAttribute getPrecisionPoint_Y();
+
+	/**
 	 * Returns the meta object for enum '{@link org.eclipse.graphiti.mm.algorithms.styles.LineStyle <em>Line Style</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1745,6 +1825,37 @@
 		EAttribute COLOR__BLUE = eINSTANCE.getColor_Blue();
 
 		/**
+		 * The meta object literal for the '
+		 * {@link org.eclipse.graphiti.mm.algorithms.styles.impl.PrecisionPointImpl
+		 * <em>Precision Point</em>}' class. <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
+		 * 
+		 * @see org.eclipse.graphiti.mm.algorithms.styles.impl.PrecisionPointImpl
+		 * @see org.eclipse.graphiti.mm.algorithms.styles.impl.StylesPackageImpl#getPrecisionPoint()
+		 * @generated
+		 * @since 0.9
+		 */
+		EClass PRECISION_POINT = eINSTANCE.getPrecisionPoint();
+
+		/**
+		 * The meta object literal for the '<em><b>X</b></em>' attribute
+		 * feature. <!-- begin-user-doc --> <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 * @since 0.9
+		 */
+		EAttribute PRECISION_POINT__X = eINSTANCE.getPrecisionPoint_X();
+
+		/**
+		 * The meta object literal for the '<em><b>Y</b></em>' attribute
+		 * feature. <!-- begin-user-doc --> <!-- end-user-doc -->
+		 * 
+		 * @generated
+		 * @since 0.9
+		 */
+		EAttribute PRECISION_POINT__Y = eINSTANCE.getPrecisionPoint_Y();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.graphiti.mm.algorithms.styles.LineStyle <em>Line Style</em>}' enum.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/impl/PrecisionPointImpl.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/impl/PrecisionPointImpl.java
new file mode 100644
index 0000000..b8c0aa3
--- /dev/null
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/impl/PrecisionPointImpl.java
@@ -0,0 +1,229 @@
+/**
+ * <copyright>
+ * 
+ * Copyright (c) 2005, 2011 SAP AG.
+ * 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:
+ *    SAP AG - initial API, implementation and documentation
+ * 
+ * </copyright>
+ */
+package org.eclipse.graphiti.mm.algorithms.styles.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.graphiti.mm.algorithms.styles.PrecisionPoint;
+import org.eclipse.graphiti.mm.algorithms.styles.StylesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Precision Point</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.graphiti.mm.algorithms.styles.impl.PrecisionPointImpl#getX <em>X</em>}</li>
+ *   <li>{@link org.eclipse.graphiti.mm.algorithms.styles.impl.PrecisionPointImpl#getY <em>Y</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PrecisionPointImpl extends EObjectImpl implements PrecisionPoint {
+	/**
+	 * The default value of the '{@link #getX() <em>X</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getX()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double X_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getX() <em>X</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getX()
+	 * @generated
+	 * @ordered
+	 */
+	protected double x = X_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getY() <em>Y</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getY()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double Y_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getY() <em>Y</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getY()
+	 * @generated
+	 * @ordered
+	 */
+	protected double y = Y_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PrecisionPointImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return StylesPackage.Literals.PRECISION_POINT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getX() {
+		return x;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setX(double newX) {
+		double oldX = x;
+		x = newX;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StylesPackage.PRECISION_POINT__X, oldX, x));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getY() {
+		return y;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setY(double newY) {
+		double oldY = y;
+		y = newY;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StylesPackage.PRECISION_POINT__Y, oldY, y));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StylesPackage.PRECISION_POINT__X:
+				return getX();
+			case StylesPackage.PRECISION_POINT__Y:
+				return getY();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StylesPackage.PRECISION_POINT__X:
+				setX((Double)newValue);
+				return;
+			case StylesPackage.PRECISION_POINT__Y:
+				setY((Double)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StylesPackage.PRECISION_POINT__X:
+				setX(X_EDEFAULT);
+				return;
+			case StylesPackage.PRECISION_POINT__Y:
+				setY(Y_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StylesPackage.PRECISION_POINT__X:
+				return x != X_EDEFAULT;
+			case StylesPackage.PRECISION_POINT__Y:
+				return y != Y_EDEFAULT;
+		}
+		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(" (x: ");
+		result.append(x);
+		result.append(", y: ");
+		result.append(y);
+		result.append(')');
+		return result.toString();
+	}
+
+} //PrecisionPointImpl
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/impl/StylesFactoryImpl.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/impl/StylesFactoryImpl.java
index e5a9553..d6a0042 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/impl/StylesFactoryImpl.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/impl/StylesFactoryImpl.java
@@ -78,6 +78,7 @@
 			case StylesPackage.FONT: return createFont();
 			case StylesPackage.POINT: return createPoint();
 			case StylesPackage.COLOR: return createColor();
+			case StylesPackage.PRECISION_POINT: return createPrecisionPoint();
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
@@ -216,6 +217,16 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public PrecisionPoint createPrecisionPoint() {
+		PrecisionPointImpl precisionPoint = new PrecisionPointImpl();
+		return precisionPoint;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public LineStyle createLineStyleFromString(EDataType eDataType, String initialValue) {
 		LineStyle result = LineStyle.get(initialValue);
 		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/impl/StylesPackageImpl.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/impl/StylesPackageImpl.java
index d24c2db..304884f 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/impl/StylesPackageImpl.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/impl/StylesPackageImpl.java
@@ -39,6 +39,7 @@
 import org.eclipse.graphiti.mm.algorithms.styles.LocationType;
 import org.eclipse.graphiti.mm.algorithms.styles.Orientation;
 import org.eclipse.graphiti.mm.algorithms.styles.Point;
+import org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint;
 import org.eclipse.graphiti.mm.algorithms.styles.RenderingStyle;
 import org.eclipse.graphiti.mm.algorithms.styles.Style;
 import org.eclipse.graphiti.mm.algorithms.styles.StylesFactory;
@@ -132,6 +133,13 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	private EClass precisionPointEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	private EEnum lineStyleEEnum = null;
 
 	/**
@@ -675,6 +683,33 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EClass getPrecisionPoint() {
+		return precisionPointEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPrecisionPoint_X() {
+		return (EAttribute)precisionPointEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getPrecisionPoint_Y() {
+		return (EAttribute)precisionPointEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EEnum getLineStyle() {
 		return lineStyleEEnum;
 	}
@@ -785,6 +820,10 @@
 		createEAttribute(colorEClass, COLOR__GREEN);
 		createEAttribute(colorEClass, COLOR__BLUE);
 
+		precisionPointEClass = createEClass(PRECISION_POINT);
+		createEAttribute(precisionPointEClass, PRECISION_POINT__X);
+		createEAttribute(precisionPointEClass, PRECISION_POINT__Y);
+
 		// Create enums
 		lineStyleEEnum = createEEnum(LINE_STYLE);
 		orientationEEnum = createEEnum(ORIENTATION);
@@ -886,6 +925,10 @@
 		initEAttribute(getColor_Green(), ecorePackage.getEInt(), "green", null, 1, 1, Color.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 		initEAttribute(getColor_Blue(), ecorePackage.getEInt(), "blue", null, 1, 1, Color.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 
+		initEClass(precisionPointEClass, PrecisionPoint.class, "PrecisionPoint", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getPrecisionPoint_X(), ecorePackage.getEDouble(), "x", null, 1, 1, PrecisionPoint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getPrecisionPoint_Y(), ecorePackage.getEDouble(), "y", null, 1, 1, PrecisionPoint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
 		// Initialize enums and add enum literals
 		initEEnum(lineStyleEEnum, LineStyle.class, "LineStyle");
 		addEEnumLiteral(lineStyleEEnum, LineStyle.SOLID);
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/util/StylesAdapterFactory.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/util/StylesAdapterFactory.java
index b492a1c..1233762 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/util/StylesAdapterFactory.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/util/StylesAdapterFactory.java
@@ -122,6 +122,10 @@
 				return createColorAdapter();
 			}
 			@Override
+			public Adapter casePrecisionPoint(PrecisionPoint object) {
+				return createPrecisionPointAdapter();
+			}
+			@Override
 			public Adapter caseStyleContainer(StyleContainer object) {
 				return createStyleContainerAdapter();
 			}
@@ -286,6 +290,20 @@
 	}
 
 	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint <em>Precision Point</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.graphiti.mm.algorithms.styles.PrecisionPoint
+	 * @generated
+	 */
+	public Adapter createPrecisionPointAdapter() {
+		return null;
+	}
+
+	/**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.graphiti.mm.StyleContainer <em>Style Container</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/util/StylesSwitch.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/util/StylesSwitch.java
index e159134..966aa21 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/util/StylesSwitch.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/algorithms/styles/util/StylesSwitch.java
@@ -150,6 +150,12 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case StylesPackage.PRECISION_POINT: {
+				PrecisionPoint precisionPoint = (PrecisionPoint)theEObject;
+				T result = casePrecisionPoint(precisionPoint);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			default: return defaultCase(theEObject);
 		}
 	}
@@ -305,6 +311,21 @@
 	}
 
 	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Precision Point</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>Precision Point</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePrecisionPoint(PrecisionPoint object) {
+		return null;
+	}
+
+	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Style Container</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/CurvedConnection.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/CurvedConnection.java
new file mode 100644
index 0000000..1d59554
--- /dev/null
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/CurvedConnection.java
@@ -0,0 +1,55 @@
+/**
+ * <copyright>
+ * 
+ * Copyright (c) 2005, 2011 SAP AG.
+ * 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:
+ *    SAP AG - initial API, implementation and documentation
+ * 
+ * </copyright>
+ */
+package org.eclipse.graphiti.mm.pictograms;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint;
+
+/**
+ * <!-- begin-user-doc --> A representation of the model object '
+ * <em><b>Curved Connection</b></em>'. <!-- end-user-doc -->
+ * 
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>
+ * {@link org.eclipse.graphiti.mm.pictograms.CurvedConnection#getControlPoints
+ * <em>Control Points</em>}</li>
+ * </ul>
+ * </p>
+ * 
+ * @see org.eclipse.graphiti.mm.pictograms.PictogramsPackage#getCurvedConnection()
+ * @model
+ * @generated
+ * @since 0.9
+ */
+public interface CurvedConnection extends Connection {
+	/**
+	 * Returns the value of the '<em><b>Control Points</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Control Points</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>Control Points</em>' containment reference list.
+	 * @see org.eclipse.graphiti.mm.pictograms.PictogramsPackage#getCurvedConnection_ControlPoints()
+	 * @model containment="true" resolveProxies="true"
+	 * @generated
+	 */
+	EList<PrecisionPoint> getControlPoints();
+
+} // CurvedConnection
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/PictogramsFactory.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/PictogramsFactory.java
index 86d0a8f..965f2bf 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/PictogramsFactory.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/PictogramsFactory.java
@@ -133,6 +133,15 @@
 	PictogramLink createPictogramLink();
 
 	/**
+	 * Returns a new object of class '<em>Curved Connection</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Curved Connection</em>'.
+	 * @generated
+	 */
+	CurvedConnection createCurvedConnection();
+
+	/**
 	 * Returns the package supported by this factory.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/PictogramsPackage.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/PictogramsPackage.java
index ddae374..04c7b93 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/PictogramsPackage.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/PictogramsPackage.java
@@ -1626,6 +1626,125 @@
 

 

 	/**

+	 * The meta object id for the '{@link org.eclipse.graphiti.mm.pictograms.impl.CurvedConnectionImpl <em>Curved Connection</em>}' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see org.eclipse.graphiti.mm.pictograms.impl.CurvedConnectionImpl

+	 * @see org.eclipse.graphiti.mm.pictograms.impl.PictogramsPackageImpl#getCurvedConnection()

+	 * @generated

+	 */

+	int CURVED_CONNECTION = 15;

+

+	/**

+	 * The feature id for the '<em><b>Properties</b></em>' containment reference list.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int CURVED_CONNECTION__PROPERTIES = CONNECTION__PROPERTIES;

+

+	/**

+	 * The feature id for the '<em><b>Visible</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int CURVED_CONNECTION__VISIBLE = CONNECTION__VISIBLE;

+

+	/**

+	 * The feature id for the '<em><b>Graphics Algorithm</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int CURVED_CONNECTION__GRAPHICS_ALGORITHM = CONNECTION__GRAPHICS_ALGORITHM;

+

+	/**

+	 * The feature id for the '<em><b>Active</b></em>' attribute.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int CURVED_CONNECTION__ACTIVE = CONNECTION__ACTIVE;

+

+	/**

+	 * The feature id for the '<em><b>Link</b></em>' containment reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int CURVED_CONNECTION__LINK = CONNECTION__LINK;

+

+	/**

+	 * The feature id for the '<em><b>Anchors</b></em>' containment reference list.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int CURVED_CONNECTION__ANCHORS = CONNECTION__ANCHORS;

+

+	/**

+	 * The feature id for the '<em><b>Start</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int CURVED_CONNECTION__START = CONNECTION__START;

+

+	/**

+	 * The feature id for the '<em><b>End</b></em>' reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int CURVED_CONNECTION__END = CONNECTION__END;

+

+	/**

+	 * The feature id for the '<em><b>Parent</b></em>' container reference.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int CURVED_CONNECTION__PARENT = CONNECTION__PARENT;

+

+	/**

+	 * The feature id for the '<em><b>Connection Decorators</b></em>' containment reference list.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int CURVED_CONNECTION__CONNECTION_DECORATORS = CONNECTION__CONNECTION_DECORATORS;

+

+	/**

+	 * The feature id for the '<em><b>Control Points</b></em>' containment reference list.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int CURVED_CONNECTION__CONTROL_POINTS = CONNECTION_FEATURE_COUNT + 0;

+

+	/**

+	 * The number of structural features of the '<em>Curved Connection</em>' class.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int CURVED_CONNECTION_FEATURE_COUNT = CONNECTION_FEATURE_COUNT + 1;

+

+

+	/**

 	 * Returns the meta object for class '{@link org.eclipse.graphiti.mm.pictograms.Shape <em>Shape</em>}'.

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

@@ -2178,6 +2297,27 @@
 	EAttribute getAdvancedAnchor_UseAnchorLocationAsConnectionEndpoint();

 

 	/**

+	 * Returns the meta object for class '{@link org.eclipse.graphiti.mm.pictograms.CurvedConnection <em>Curved Connection</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for class '<em>Curved Connection</em>'.

+	 * @see org.eclipse.graphiti.mm.pictograms.CurvedConnection

+	 * @generated

+	 */

+	EClass getCurvedConnection();

+

+	/**

+	 * Returns the meta object for the containment reference list '{@link org.eclipse.graphiti.mm.pictograms.CurvedConnection#getControlPoints <em>Control Points</em>}'.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @return the meta object for the containment reference list '<em>Control Points</em>'.

+	 * @see org.eclipse.graphiti.mm.pictograms.CurvedConnection#getControlPoints()

+	 * @see #getCurvedConnection()

+	 * @generated

+	 */

+	EReference getCurvedConnection_ControlPoints();

+

+	/**

 	 * Returns the factory that creates the instances of the model.

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

@@ -2640,6 +2780,24 @@
 		 */

 		EAttribute ADVANCED_ANCHOR__USE_ANCHOR_LOCATION_AS_CONNECTION_ENDPOINT = eINSTANCE.getAdvancedAnchor_UseAnchorLocationAsConnectionEndpoint();

 

+		/**

+		 * The meta object literal for the '{@link org.eclipse.graphiti.mm.pictograms.impl.CurvedConnectionImpl <em>Curved Connection</em>}' class.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @see org.eclipse.graphiti.mm.pictograms.impl.CurvedConnectionImpl

+		 * @see org.eclipse.graphiti.mm.pictograms.impl.PictogramsPackageImpl#getCurvedConnection()

+		 * @generated

+		 */

+		EClass CURVED_CONNECTION = eINSTANCE.getCurvedConnection();

+

+		/**

+		 * The meta object literal for the '<em><b>Control Points</b></em>' containment reference list feature.

+		 * <!-- begin-user-doc -->

+		 * <!-- end-user-doc -->

+		 * @generated

+		 */

+		EReference CURVED_CONNECTION__CONTROL_POINTS = eINSTANCE.getCurvedConnection_ControlPoints();

+

 	}

 

 } //PictogramsPackage
\ No newline at end of file
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/impl/CurvedConnectionImpl.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/impl/CurvedConnectionImpl.java
new file mode 100644
index 0000000..bf5ccb8
--- /dev/null
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/impl/CurvedConnectionImpl.java
@@ -0,0 +1,163 @@
+/**
+ * <copyright>
+ * 
+ * Copyright (c) 2005, 2011 SAP AG.
+ * 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:
+ *    SAP AG - initial API, implementation and documentation
+ * 
+ * </copyright>
+ */
+package org.eclipse.graphiti.mm.pictograms.impl;
+
+import java.util.Collection;
+
+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.graphiti.mm.algorithms.styles.PrecisionPoint;
+
+import org.eclipse.graphiti.mm.pictograms.CurvedConnection;
+import org.eclipse.graphiti.mm.pictograms.PictogramsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Curved Connection</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.graphiti.mm.pictograms.impl.CurvedConnectionImpl#getControlPoints <em>Control Points</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class CurvedConnectionImpl extends ConnectionImpl implements CurvedConnection {
+	/**
+	 * The cached value of the '{@link #getControlPoints() <em>Control Points</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getControlPoints()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<PrecisionPoint> controlPoints;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CurvedConnectionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return PictogramsPackage.Literals.CURVED_CONNECTION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<PrecisionPoint> getControlPoints() {
+		if (controlPoints == null) {
+			controlPoints = new EObjectContainmentEList.Resolving<PrecisionPoint>(PrecisionPoint.class, this, PictogramsPackage.CURVED_CONNECTION__CONTROL_POINTS);
+		}
+		return controlPoints;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case PictogramsPackage.CURVED_CONNECTION__CONTROL_POINTS:
+				return ((InternalEList<?>)getControlPoints()).basicRemove(otherEnd, 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 PictogramsPackage.CURVED_CONNECTION__CONTROL_POINTS:
+				return getControlPoints();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case PictogramsPackage.CURVED_CONNECTION__CONTROL_POINTS:
+				getControlPoints().clear();
+				getControlPoints().addAll((Collection<? extends PrecisionPoint>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case PictogramsPackage.CURVED_CONNECTION__CONTROL_POINTS:
+				getControlPoints().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case PictogramsPackage.CURVED_CONNECTION__CONTROL_POINTS:
+				return controlPoints != null && !controlPoints.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //CurvedConnectionImpl
\ No newline at end of file
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/impl/PictogramsFactoryImpl.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/impl/PictogramsFactoryImpl.java
index 4047552..ec67830 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/impl/PictogramsFactoryImpl.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/impl/PictogramsFactoryImpl.java
@@ -89,6 +89,7 @@
 			case PictogramsPackage.FREE_FORM_CONNECTION: return createFreeFormConnection();
 			case PictogramsPackage.MANHATTAN_CONNECTION: return createManhattanConnection();
 			case PictogramsPackage.PICTOGRAM_LINK: return createPictogramLink();
+			case PictogramsPackage.CURVED_CONNECTION: return createCurvedConnection();
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
@@ -209,6 +210,16 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public CurvedConnection createCurvedConnection() {
+		CurvedConnectionImpl curvedConnection = new CurvedConnectionImpl();
+		return curvedConnection;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public PictogramsPackage getPictogramsPackage() {
 		return (PictogramsPackage)getEPackage();
 	}
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/impl/PictogramsPackageImpl.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/impl/PictogramsPackageImpl.java
index e3ab349..a570bfa 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/impl/PictogramsPackageImpl.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/impl/PictogramsPackageImpl.java
@@ -41,6 +41,7 @@
 import org.eclipse.graphiti.mm.pictograms.Connection;
 import org.eclipse.graphiti.mm.pictograms.ConnectionDecorator;
 import org.eclipse.graphiti.mm.pictograms.ContainerShape;
+import org.eclipse.graphiti.mm.pictograms.CurvedConnection;
 import org.eclipse.graphiti.mm.pictograms.Diagram;
 import org.eclipse.graphiti.mm.pictograms.FixPointAnchor;
 import org.eclipse.graphiti.mm.pictograms.FreeFormConnection;
@@ -164,6 +165,13 @@
 	private EClass advancedAnchorEClass = null;
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass curvedConnectionEClass = 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.
@@ -699,6 +707,24 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EClass getCurvedConnection() {
+		return curvedConnectionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getCurvedConnection_ControlPoints() {
+		return (EReference)curvedConnectionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public PictogramsFactory getPictogramsFactory() {
 		return (PictogramsFactory)getEFactoryInstance();
 	}
@@ -787,6 +813,9 @@
 
 		advancedAnchorEClass = createEClass(ADVANCED_ANCHOR);
 		createEAttribute(advancedAnchorEClass, ADVANCED_ANCHOR__USE_ANCHOR_LOCATION_AS_CONNECTION_ENDPOINT);
+
+		curvedConnectionEClass = createEClass(CURVED_CONNECTION);
+		createEReference(curvedConnectionEClass, CURVED_CONNECTION__CONTROL_POINTS);
 	}
 
 	/**
@@ -838,6 +867,7 @@
 		manhattanConnectionEClass.getESuperTypes().add(this.getConnection());
 		pictogramLinkEClass.getESuperTypes().add(theMmPackage.getPropertyContainer());
 		advancedAnchorEClass.getESuperTypes().add(this.getAnchor());
+		curvedConnectionEClass.getESuperTypes().add(this.getConnection());
 
 		// Initialize classes and features; add operations and parameters
 		initEClass(shapeEClass, Shape.class, "Shape", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -905,6 +935,9 @@
 
 		initEClass(advancedAnchorEClass, AdvancedAnchor.class, "AdvancedAnchor", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getAdvancedAnchor_UseAnchorLocationAsConnectionEndpoint(), ecorePackage.getEBoolean(), "useAnchorLocationAsConnectionEndpoint", "false", 1, 1, AdvancedAnchor.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		initEClass(curvedConnectionEClass, CurvedConnection.class, "CurvedConnection", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getCurvedConnection_ControlPoints(), theStylesPackage.getPrecisionPoint(), null, "controlPoints", null, 0, -1, CurvedConnection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 	}
 
 } //PictogramsPackageImpl
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/util/PictogramsAdapterFactory.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/util/PictogramsAdapterFactory.java
index d70705a..e18920e 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/util/PictogramsAdapterFactory.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/util/PictogramsAdapterFactory.java
@@ -144,6 +144,10 @@
 				return createAdvancedAnchorAdapter();
 			}
 			@Override
+			public Adapter caseCurvedConnection(CurvedConnection object) {
+				return createCurvedConnectionAdapter();
+			}
+			@Override
 			public Adapter casePropertyContainer(PropertyContainer object) {
 				return createPropertyContainerAdapter();
 			}
@@ -387,6 +391,20 @@
 	}
 
 	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.graphiti.mm.pictograms.CurvedConnection <em>Curved Connection</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.graphiti.mm.pictograms.CurvedConnection
+	 * @generated
+	 */
+	public Adapter createCurvedConnectionAdapter() {
+		return null;
+	}
+
+	/**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.graphiti.mm.PropertyContainer <em>Property Container</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
diff --git a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/util/PictogramsSwitch.java b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/util/PictogramsSwitch.java
index 3cb6688..0aa5aa7 100644
--- a/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/util/PictogramsSwitch.java
+++ b/plugins/org.eclipse.graphiti.mm/src-gen/org/eclipse/graphiti/mm/pictograms/util/PictogramsSwitch.java
@@ -248,6 +248,17 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case PictogramsPackage.CURVED_CONNECTION: {
+				CurvedConnection curvedConnection = (CurvedConnection)theEObject;
+				T result = caseCurvedConnection(curvedConnection);
+				if (result == null) result = caseConnection(curvedConnection);
+				if (result == null) result = caseAnchorContainer(curvedConnection);
+				if (result == null) result = casePictogramElement(curvedConnection);
+				if (result == null) result = caseGraphicsAlgorithmContainer(curvedConnection);
+				if (result == null) result = casePropertyContainer(curvedConnection);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			default: return defaultCase(theEObject);
 		}
 	}
@@ -478,6 +489,21 @@
 	}
 
 	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Curved Connection</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>Curved Connection</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseCurvedConnection(CurvedConnection object) {
+		return null;
+	}
+
+	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Property Container</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
diff --git a/plugins/org.eclipse.graphiti.ui/src/org/eclipse/graphiti/ui/internal/partfactory/PictogramsEditPartFactory.java b/plugins/org.eclipse.graphiti.ui/src/org/eclipse/graphiti/ui/internal/partfactory/PictogramsEditPartFactory.java
index 1e53a8c..9b5cb40 100644
--- a/plugins/org.eclipse.graphiti.ui/src/org/eclipse/graphiti/ui/internal/partfactory/PictogramsEditPartFactory.java
+++ b/plugins/org.eclipse.graphiti.ui/src/org/eclipse/graphiti/ui/internal/partfactory/PictogramsEditPartFactory.java
@@ -24,6 +24,7 @@
 import org.eclipse.graphiti.mm.pictograms.AdvancedAnchor;
 import org.eclipse.graphiti.mm.pictograms.ConnectionDecorator;
 import org.eclipse.graphiti.mm.pictograms.ContainerShape;
+import org.eclipse.graphiti.mm.pictograms.CurvedConnection;
 import org.eclipse.graphiti.mm.pictograms.Diagram;
 import org.eclipse.graphiti.mm.pictograms.FreeFormConnection;
 import org.eclipse.graphiti.mm.pictograms.ManhattanConnection;
@@ -34,6 +35,7 @@
 import org.eclipse.graphiti.ui.internal.parts.AdvancedAnchorEditPart;
 import org.eclipse.graphiti.ui.internal.parts.ConnectionDecoratorEditPart;
 import org.eclipse.graphiti.ui.internal.parts.ContainerShapeEditPart;
+import org.eclipse.graphiti.ui.internal.parts.CurvedConnectionEditPart;
 import org.eclipse.graphiti.ui.internal.parts.DiagramEditPart;
 import org.eclipse.graphiti.ui.internal.parts.FreeFormConnectionEditPart;
 import org.eclipse.graphiti.ui.internal.parts.ManhattanConnectionEditPart;
@@ -92,6 +94,8 @@
 				ret = new ManhattanConnectionEditPart(configurationProvider, (ManhattanConnection) model);
 			} else if (model instanceof FreeFormConnection) {
 				ret = new FreeFormConnectionEditPart(configurationProvider, (FreeFormConnection) model);
+			} else if (model instanceof CurvedConnection) {
+				ret = new CurvedConnectionEditPart(configurationProvider, (CurvedConnection) model);
 			} else if (model instanceof AdvancedAnchor) {
 				ret = new AdvancedAnchorEditPart(configurationProvider, (AdvancedAnchor) model);
 			}
diff --git a/plugins/org.eclipse.graphiti.ui/src/org/eclipse/graphiti/ui/internal/parts/CurvedConnectionEditPart.java b/plugins/org.eclipse.graphiti.ui/src/org/eclipse/graphiti/ui/internal/parts/CurvedConnectionEditPart.java
new file mode 100644
index 0000000..57f538d
--- /dev/null
+++ b/plugins/org.eclipse.graphiti.ui/src/org/eclipse/graphiti/ui/internal/parts/CurvedConnectionEditPart.java
@@ -0,0 +1,147 @@
+package org.eclipse.graphiti.ui.internal.parts;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.draw2d.AbstractRouter;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PointList;
+import org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint;
+import org.eclipse.graphiti.mm.pictograms.CurvedConnection;
+import org.eclipse.graphiti.ui.internal.config.IConfigurationProvider;
+
+/**
+ * 
+ * @author Benjamin Schmeling
+ * 
+ */
+public class CurvedConnectionEditPart extends ConnectionEditPart {
+
+	public CurvedConnectionEditPart(IConfigurationProvider configurationProvider, CurvedConnection connection) {
+		super(configurationProvider, connection);
+	}
+
+	private CurvedConnection getCurvedConnection() {
+		return (CurvedConnection) super.getConnection();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
+	 */
+	@Override
+	protected IFigure createFigure() {
+		IFigure ret = super.createFigure();
+		if (ret instanceof org.eclipse.draw2d.Connection) {
+			org.eclipse.draw2d.Connection draw2dConnection = (org.eclipse.draw2d.Connection) ret;
+			List<PrecisionPoint> controllPoints = new ArrayList<PrecisionPoint>();
+			controllPoints.addAll(getCurvedConnection().getControlPoints());
+			draw2dConnection.setConnectionRouter(new BezierRouter(controllPoints));
+		}
+		return ret;
+	}
+
+	private static class BezierRouter extends AbstractRouter {
+
+		private List<PrecisionPoint> bezierPoints;
+		private Map<org.eclipse.draw2d.Connection, Object> constraints = new HashMap<org.eclipse.draw2d.Connection, Object>(
+				11);
+
+		public BezierRouter(List<PrecisionPoint> bezierPoints) {
+			this.bezierPoints = bezierPoints;
+		}
+
+
+		public void route(org.eclipse.draw2d.Connection connection) {
+			List<org.eclipse.draw2d.geometry.PrecisionPoint> controllPoints = new ArrayList<org.eclipse.draw2d.geometry.PrecisionPoint>();
+			PointList points = connection.getPoints();
+			points.removeAllPoints();
+			Point ref1 = connection.getTargetAnchor().getReferencePoint();
+			Point ref2 = connection.getSourceAnchor().getReferencePoint();
+			org.eclipse.draw2d.geometry.PrecisionPoint start = new org.eclipse.draw2d.geometry.PrecisionPoint();
+			org.eclipse.draw2d.geometry.PrecisionPoint end = new org.eclipse.draw2d.geometry.PrecisionPoint();
+			start.setLocation(connection.getSourceAnchor().getLocation(ref1));
+			connection.translateToRelative(start);
+			end.setLocation(connection.getTargetAnchor().getLocation(ref2));
+			connection.translateToRelative(end);
+			controllPoints.add(start);
+			double gradient = (end.preciseY() - start.preciseY()) / (-end.preciseX() + start.preciseX());
+			double ortho_gradient = -Math.pow(gradient, -1);
+			double orthovector_x = 1;
+			double orthovector_y = ortho_gradient;
+			double factor_to_length = 1 / Math.sqrt((Math.pow(orthovector_y, 2) + Math.pow(orthovector_x, 2)));
+			for (PrecisionPoint precisionPoint : this.bezierPoints) {
+
+				double orthovector_x_cp = factor_to_length * orthovector_x * precisionPoint.getY();
+				double orthovector_y_cp = factor_to_length * orthovector_y * precisionPoint.getY();
+				if (Double.isNaN(orthovector_x_cp)) {
+					orthovector_x_cp = 0;
+				}
+				if (Double.isNaN(orthovector_y_cp)) {
+					orthovector_y_cp = 1 * precisionPoint.getY();
+				}
+				org.eclipse.draw2d.geometry.PrecisionPoint anchor = new org.eclipse.draw2d.geometry.PrecisionPoint(
+						(start.x + (end.x - start.x) * precisionPoint.getX() - orthovector_x_cp),
+						(start.y - (start.y - end.y) * precisionPoint.getX()) + orthovector_y_cp);
+
+				controllPoints.add(anchor);
+			}
+			controllPoints.add(end);
+			int precision = 10;
+			double factor = 1.0d / precision;
+			points.addPoint(start);
+			for (int i = 1; i < precision; i++) {
+				int j = 0;
+				double sum_x = 0;
+				double sum_y = 0;
+				for (Point point : controllPoints) {
+					sum_x += (bezier(j, controllPoints.size() - 1, i * factor) * point.preciseX());
+					sum_y += (bezier(j, controllPoints.size() - 1, i * factor) * point.preciseY());
+					j++;
+				}
+				org.eclipse.draw2d.geometry.PrecisionPoint bezierPoint = new org.eclipse.draw2d.geometry.PrecisionPoint(
+						sum_x, sum_y);
+				points.addPoint(bezierPoint);
+			}
+			points.addPoint(end);
+			connection.setPoints(points);
+		}
+
+		private double bezier(int i, int n, double t) {
+			return binomialCoefficients(n, i) * Math.pow(t, i) * Math.pow((1 - t), (n - i));
+		}
+
+		static long binomialCoefficients(int n, int k) {
+			long coeff = 1;
+			for (int i = n - k + 1; i <= n; i++) {
+				coeff *= i;
+			}
+			for (int i = 1; i <= k; i++) {
+				coeff /= i;
+			}
+			return coeff;
+		}
+
+		@Override
+		public void setConstraint(org.eclipse.draw2d.Connection connection, Object constraint) {
+			constraints.put(connection, constraint);
+		}
+
+		@Override
+		public void remove(org.eclipse.draw2d.Connection connection) {
+			constraints.remove(connection);
+		}
+
+		@Override
+		public Object getConstraint(org.eclipse.draw2d.Connection connection) {
+			return constraints.get(connection);
+		}
+
+	}
+
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/internal/services/impl/CreateServiceImpl.java b/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/internal/services/impl/CreateServiceImpl.java
index c163536..35b2536 100644
--- a/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/internal/services/impl/CreateServiceImpl.java
+++ b/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/internal/services/impl/CreateServiceImpl.java
@@ -42,6 +42,7 @@
 import org.eclipse.graphiti.mm.pictograms.Connection;
 import org.eclipse.graphiti.mm.pictograms.ConnectionDecorator;
 import org.eclipse.graphiti.mm.pictograms.ContainerShape;
+import org.eclipse.graphiti.mm.pictograms.CurvedConnection;
 import org.eclipse.graphiti.mm.pictograms.Diagram;
 import org.eclipse.graphiti.mm.pictograms.FixPointAnchor;
 import org.eclipse.graphiti.mm.pictograms.FreeFormConnection;
@@ -626,6 +627,17 @@
 	 * (non-Javadoc)
 	 * 
 	 * @see
+	 * org.eclipse.graphiti.services.IPeCreateService#createCurvedConnection
+	 * (org.eclipse.graphiti.mm.pictograms.Diagram)
+	 */
+	public CurvedConnection createCurvedConnection(double[] controllPoints, Diagram diagram) {
+		return getPeService().createCurvedConnection(controllPoints, diagram);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
 	 * org.eclipse.graphiti.services.IPeCreateService#createShape(org.eclipse
 	 * .graphiti.mm.pictograms.ContainerShape, boolean)
 	 */
diff --git a/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/internal/services/impl/PeServiceImpl.java b/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/internal/services/impl/PeServiceImpl.java
index 7f000ca..186d4fa 100644
--- a/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/internal/services/impl/PeServiceImpl.java
+++ b/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/internal/services/impl/PeServiceImpl.java
@@ -49,6 +49,8 @@
 import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
 import org.eclipse.graphiti.mm.algorithms.Rectangle;
 import org.eclipse.graphiti.mm.algorithms.styles.Point;
+import org.eclipse.graphiti.mm.algorithms.styles.PrecisionPoint;
+import org.eclipse.graphiti.mm.algorithms.styles.StylesFactory;
 import org.eclipse.graphiti.mm.pictograms.Anchor;
 import org.eclipse.graphiti.mm.pictograms.AnchorContainer;
 import org.eclipse.graphiti.mm.pictograms.BoxRelativeAnchor;
@@ -56,6 +58,7 @@
 import org.eclipse.graphiti.mm.pictograms.Connection;
 import org.eclipse.graphiti.mm.pictograms.ConnectionDecorator;
 import org.eclipse.graphiti.mm.pictograms.ContainerShape;
+import org.eclipse.graphiti.mm.pictograms.CurvedConnection;
 import org.eclipse.graphiti.mm.pictograms.Diagram;
 import org.eclipse.graphiti.mm.pictograms.FixPointAnchor;
 import org.eclipse.graphiti.mm.pictograms.FreeFormConnection;
@@ -252,6 +255,21 @@
 		return ret;
 	}
 
+	public CurvedConnection createCurvedConnection(double[] xy, Diagram diagram) {
+		assert (xy != null && xy.length % 2 == 0);
+		CurvedConnection ret = PictogramsFactory.eINSTANCE.createCurvedConnection();
+		ret.setVisible(true);
+		ret.setActive(true);
+		ret.setParent(diagram);
+		for (int i = 0; i < xy.length; i += 2) {
+			PrecisionPoint point = StylesFactory.eINSTANCE.createPrecisionPoint();
+			point.setX(xy[i]);
+			point.setY(xy[i + 1]);
+			ret.getControlPoints().add(point);
+		}
+		return ret;
+	}
+
 	/*
 	 * (non-Javadoc)
 	 * 
diff --git a/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/services/IPeCreateService.java b/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/services/IPeCreateService.java
index 89fb371..8f91145 100644
--- a/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/services/IPeCreateService.java
+++ b/plugins/org.eclipse.graphiti/src/org/eclipse/graphiti/services/IPeCreateService.java
@@ -23,6 +23,7 @@
 import org.eclipse.graphiti.mm.pictograms.Connection;
 import org.eclipse.graphiti.mm.pictograms.ConnectionDecorator;
 import org.eclipse.graphiti.mm.pictograms.ContainerShape;
+import org.eclipse.graphiti.mm.pictograms.CurvedConnection;
 import org.eclipse.graphiti.mm.pictograms.Diagram;
 import org.eclipse.graphiti.mm.pictograms.FixPointAnchor;
 import org.eclipse.graphiti.mm.pictograms.FreeFormConnection;
@@ -177,6 +178,14 @@
 	ManhattanConnection createManhattanConnection(Diagram diagram);
 
 	/**
+	 * 
+	 * @param controllPoints
+	 * @param diagram
+	 * @return
+	 */
+	CurvedConnection createCurvedConnection(double[] controllPoints, Diagram diagram);
+
+	/**
 	 * Creates a shape inside the given parent container shape.
 	 * 
 	 * @param parentContainerShape