diff --git a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/TextModelPackage.java b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/TextModelPackage.java
index f703623..651ec18 100644
--- a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/TextModelPackage.java
+++ b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/TextModelPackage.java
@@ -70,116 +70,6 @@
 	TextModelPackage eINSTANCE = org.eclipse.qvtd.text.impl.TextModelPackageImpl.init();
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.qvtd.text.impl.StringNodeImpl <em>String Node</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.qvtd.text.impl.StringNodeImpl
-	 * @see org.eclipse.qvtd.text.impl.TextModelPackageImpl#getStringNode()
-	 * @generated
-	 */
-	int STRING_NODE = 0;
-
-	/**
-	 * The feature id for the '<em><b>Children</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__CHILDREN = 0;
-
-	/**
-	 * The feature id for the '<em><b>End Text</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__END_TEXT = 1;
-
-	/**
-	 * The feature id for the '<em><b>Indent</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__INDENT = 2;
-
-	/**
-	 * The feature id for the '<em><b>Non Breaking Space</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__NON_BREAKING_SPACE = 3;
-
-	/**
-	 * The feature id for the '<em><b>Parent</b></em>' container reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__PARENT = 4;
-
-	/**
-	 * The feature id for the '<em><b>Prefix</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__PREFIX = 5;
-
-	/**
-	 * The feature id for the '<em><b>Separator</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__SEPARATOR = 6;
-
-	/**
-	 * The feature id for the '<em><b>Suffix</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__SUFFIX = 7;
-
-	/**
-	 * The feature id for the '<em><b>Text</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE__TEXT = 8;
-
-	/**
-	 * The number of structural features of the '<em>String Node</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE_FEATURE_COUNT = 9;
-
-	/**
-	 * The number of operations of the '<em>String Node</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_NODE_OPERATION_COUNT = 0;
-
-
-	/**
 	 * Returns the meta object for class '{@link org.eclipse.qvtd.text.StringNode <em>String Node</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/StringNodeImpl.java b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/StringNodeImpl.java
index acac9ae..4934484 100644
--- a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/StringNodeImpl.java
+++ b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/StringNodeImpl.java
@@ -54,6 +54,24 @@
  */
 public class StringNodeImpl extends MinimalEObjectImpl.Container implements StringNode {
 	/**
+	 * The number of structural features of the '<em>String Node</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int STRING_NODE_FEATURE_COUNT = 9;
+
+	/**
+	 * The number of operations of the '<em>String Node</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	public static final int STRING_NODE_OPERATION_COUNT = 0;
+
+	/**
 	 * The cached value of the '{@link #getChildren() <em>Children</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -230,7 +248,7 @@
 	@Override
 	public EList<StringNode> getChildren() {
 		if (children == null) {
-			children = new EObjectContainmentWithInverseEList<StringNode>(StringNode.class, this, TextModelPackage.STRING_NODE__CHILDREN, TextModelPackage.STRING_NODE__PARENT);
+			children = new EObjectContainmentWithInverseEList<StringNode>(StringNode.class, this, 0, 4);
 		}
 		return children;
 	}
@@ -240,6 +258,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getEndText() {
 		return endText;
 	}
@@ -249,11 +268,12 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setEndText(String newEndText) {
 		String oldEndText = endText;
 		endText = newEndText;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__END_TEXT, oldEndText, endText));
+			eNotify(new ENotificationImpl(this, Notification.SET, 1, oldEndText, endText));
 	}
 
 	/**
@@ -276,7 +296,7 @@
 		String oldIndent = indent;
 		indent = newIndent;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__INDENT, oldIndent, indent));
+			eNotify(new ENotificationImpl(this, Notification.SET, 2, oldIndent, indent));
 	}
 
 	/**
@@ -284,6 +304,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public char getNonBreakingSpace() {
 		return nonBreakingSpace;
 	}
@@ -293,11 +314,12 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setNonBreakingSpace(char newNonBreakingSpace) {
 		char oldNonBreakingSpace = nonBreakingSpace;
 		nonBreakingSpace = newNonBreakingSpace;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__NON_BREAKING_SPACE, oldNonBreakingSpace, nonBreakingSpace));
+			eNotify(new ENotificationImpl(this, Notification.SET, 3, oldNonBreakingSpace, nonBreakingSpace));
 	}
 
 	/**
@@ -307,7 +329,7 @@
 	 */
 	@Override
 	public StringNode getParent() {
-		if (eContainerFeatureID() != TextModelPackage.STRING_NODE__PARENT) return null;
+		if (eContainerFeatureID() != (4)) return null;
 		return (StringNode)eInternalContainer();
 	}
 
@@ -317,7 +339,7 @@
 	 * @generated
 	 */
 	public NotificationChain basicSetParent(StringNode newParent, NotificationChain msgs) {
-		msgs = eBasicSetContainer((InternalEObject)newParent, TextModelPackage.STRING_NODE__PARENT, msgs);
+		msgs = eBasicSetContainer((InternalEObject)newParent, 4, msgs);
 		return msgs;
 	}
 
@@ -328,19 +350,19 @@
 	 */
 	@Override
 	public void setParent(StringNode newParent) {
-		if (newParent != eInternalContainer() || (eContainerFeatureID() != TextModelPackage.STRING_NODE__PARENT && newParent != null)) {
+		if (newParent != eInternalContainer() || (eContainerFeatureID() != (4) && newParent != null)) {
 			if (EcoreUtil.isAncestor(this, newParent))
 				throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
 			NotificationChain msgs = null;
 			if (eInternalContainer() != null)
 				msgs = eBasicRemoveFromContainer(msgs);
 			if (newParent != null)
-				msgs = ((InternalEObject)newParent).eInverseAdd(this, TextModelPackage.STRING_NODE__CHILDREN, StringNode.class, msgs);
+				msgs = ((InternalEObject)newParent).eInverseAdd(this, 0, StringNode.class, msgs);
 			msgs = basicSetParent(newParent, msgs);
 			if (msgs != null) msgs.dispatch();
 		}
 		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__PARENT, newParent, newParent));
+			eNotify(new ENotificationImpl(this, Notification.SET, 4, newParent, newParent));
 	}
 
 	/**
@@ -363,7 +385,7 @@
 		String oldPrefix = prefix;
 		prefix = newPrefix;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__PREFIX, oldPrefix, prefix));
+			eNotify(new ENotificationImpl(this, Notification.SET, 5, oldPrefix, prefix));
 	}
 
 	/**
@@ -386,7 +408,7 @@
 		String oldSeparator = separator;
 		separator = newSeparator;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__SEPARATOR, oldSeparator, separator));
+			eNotify(new ENotificationImpl(this, Notification.SET, 6, oldSeparator, separator));
 	}
 
 	/**
@@ -409,7 +431,7 @@
 		String oldSuffix = suffix;
 		suffix = newSuffix;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__SUFFIX, oldSuffix, suffix));
+			eNotify(new ENotificationImpl(this, Notification.SET, 7, oldSuffix, suffix));
 	}
 
 	/**
@@ -432,7 +454,7 @@
 		String oldText = text;
 		text = newText;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, TextModelPackage.STRING_NODE__TEXT, oldText, text));
+			eNotify(new ENotificationImpl(this, Notification.SET, 8, oldText, text));
 	}
 
 	/**
@@ -444,9 +466,9 @@
 	@Override
 	public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-			case TextModelPackage.STRING_NODE__CHILDREN:
+			case 0:
 				return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
-			case TextModelPackage.STRING_NODE__PARENT:
+			case 4:
 				if (eInternalContainer() != null)
 					msgs = eBasicRemoveFromContainer(msgs);
 				return basicSetParent((StringNode)otherEnd, msgs);
@@ -462,9 +484,9 @@
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
 		switch (featureID) {
-			case TextModelPackage.STRING_NODE__CHILDREN:
+			case 0:
 				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
-			case TextModelPackage.STRING_NODE__PARENT:
+			case 4:
 				return basicSetParent(null, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
@@ -478,8 +500,8 @@
 	@Override
 	public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
 		switch (eContainerFeatureID()) {
-			case TextModelPackage.STRING_NODE__PARENT:
-				return eInternalContainer().eInverseRemove(this, TextModelPackage.STRING_NODE__CHILDREN, StringNode.class, msgs);
+			case 4:
+				return eInternalContainer().eInverseRemove(this, 0, StringNode.class, msgs);
 		}
 		return super.eBasicRemoveFromContainerFeature(msgs);
 	}
@@ -492,23 +514,23 @@
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-			case TextModelPackage.STRING_NODE__CHILDREN:
+			case 0:
 				return getChildren();
-			case TextModelPackage.STRING_NODE__END_TEXT:
+			case 1:
 				return getEndText();
-			case TextModelPackage.STRING_NODE__INDENT:
+			case 2:
 				return getIndent();
-			case TextModelPackage.STRING_NODE__NON_BREAKING_SPACE:
+			case 3:
 				return getNonBreakingSpace();
-			case TextModelPackage.STRING_NODE__PARENT:
+			case 4:
 				return getParent();
-			case TextModelPackage.STRING_NODE__PREFIX:
+			case 5:
 				return getPrefix();
-			case TextModelPackage.STRING_NODE__SEPARATOR:
+			case 6:
 				return getSeparator();
-			case TextModelPackage.STRING_NODE__SUFFIX:
+			case 7:
 				return getSuffix();
-			case TextModelPackage.STRING_NODE__TEXT:
+			case 8:
 				return getText();
 		}
 		return super.eGet(featureID, resolve, coreType);
@@ -523,32 +545,32 @@
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-			case TextModelPackage.STRING_NODE__CHILDREN:
+			case 0:
 				getChildren().clear();
 				getChildren().addAll((Collection<? extends StringNode>)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__END_TEXT:
+			case 1:
 				setEndText((String)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__INDENT:
+			case 2:
 				setIndent((String)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__NON_BREAKING_SPACE:
+			case 3:
 				setNonBreakingSpace((Character)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__PARENT:
+			case 4:
 				setParent((StringNode)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__PREFIX:
+			case 5:
 				setPrefix((String)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__SEPARATOR:
+			case 6:
 				setSeparator((String)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__SUFFIX:
+			case 7:
 				setSuffix((String)newValue);
 				return;
-			case TextModelPackage.STRING_NODE__TEXT:
+			case 8:
 				setText((String)newValue);
 				return;
 		}
@@ -563,31 +585,31 @@
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-			case TextModelPackage.STRING_NODE__CHILDREN:
+			case 0:
 				getChildren().clear();
 				return;
-			case TextModelPackage.STRING_NODE__END_TEXT:
+			case 1:
 				setEndText(END_TEXT_EDEFAULT);
 				return;
-			case TextModelPackage.STRING_NODE__INDENT:
+			case 2:
 				setIndent(INDENT_EDEFAULT);
 				return;
-			case TextModelPackage.STRING_NODE__NON_BREAKING_SPACE:
+			case 3:
 				setNonBreakingSpace(NON_BREAKING_SPACE_EDEFAULT);
 				return;
-			case TextModelPackage.STRING_NODE__PARENT:
+			case 4:
 				setParent((StringNode)null);
 				return;
-			case TextModelPackage.STRING_NODE__PREFIX:
+			case 5:
 				setPrefix(PREFIX_EDEFAULT);
 				return;
-			case TextModelPackage.STRING_NODE__SEPARATOR:
+			case 6:
 				setSeparator(SEPARATOR_EDEFAULT);
 				return;
-			case TextModelPackage.STRING_NODE__SUFFIX:
+			case 7:
 				setSuffix(SUFFIX_EDEFAULT);
 				return;
-			case TextModelPackage.STRING_NODE__TEXT:
+			case 8:
 				setText(TEXT_EDEFAULT);
 				return;
 		}
@@ -602,23 +624,23 @@
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-			case TextModelPackage.STRING_NODE__CHILDREN:
+			case 0:
 				return children != null && !children.isEmpty();
-			case TextModelPackage.STRING_NODE__END_TEXT:
+			case 1:
 				return END_TEXT_EDEFAULT == null ? endText != null : !END_TEXT_EDEFAULT.equals(endText);
-			case TextModelPackage.STRING_NODE__INDENT:
+			case 2:
 				return INDENT_EDEFAULT == null ? indent != null : !INDENT_EDEFAULT.equals(indent);
-			case TextModelPackage.STRING_NODE__NON_BREAKING_SPACE:
+			case 3:
 				return nonBreakingSpace != NON_BREAKING_SPACE_EDEFAULT;
-			case TextModelPackage.STRING_NODE__PARENT:
+			case 4:
 				return getParent() != null;
-			case TextModelPackage.STRING_NODE__PREFIX:
+			case 5:
 				return PREFIX_EDEFAULT == null ? prefix != null : !PREFIX_EDEFAULT.equals(prefix);
-			case TextModelPackage.STRING_NODE__SEPARATOR:
+			case 6:
 				return SEPARATOR_EDEFAULT == null ? separator != null : !SEPARATOR_EDEFAULT.equals(separator);
-			case TextModelPackage.STRING_NODE__SUFFIX:
+			case 7:
 				return SUFFIX_EDEFAULT == null ? suffix != null : !SUFFIX_EDEFAULT.equals(suffix);
-			case TextModelPackage.STRING_NODE__TEXT:
+			case 8:
 				return TEXT_EDEFAULT == null ? text != null : !TEXT_EDEFAULT.equals(text);
 		}
 		return super.eIsSet(featureID);
diff --git a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelFactoryImpl.java b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelFactoryImpl.java
index ba417af..c7e2921 100644
--- a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelFactoryImpl.java
+++ b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelFactoryImpl.java
@@ -68,7 +68,7 @@
 	@Override
 	public EObject create(EClass eClass) {
 		switch (eClass.getClassifierID()) {
-			case TextModelPackage.STRING_NODE: return createStringNode();
+			case 0: return createStringNode();
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
@@ -79,6 +79,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public StringNode createStringNode() {
 		StringNodeImpl stringNode = new StringNodeImpl();
 		return stringNode;
@@ -89,6 +90,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public TextModelPackage getTextModelPackage() {
 		return (TextModelPackage)getEPackage();
 	}
diff --git a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelPackageImpl.java b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelPackageImpl.java
index 80c2e05..1f69baa 100644
--- a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelPackageImpl.java
+++ b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/impl/TextModelPackageImpl.java
@@ -105,6 +105,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getStringNode() {
 		return stringNodeEClass;
 	}
@@ -114,6 +115,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getStringNode_Children() {
 		return (EReference)stringNodeEClass.getEStructuralFeatures().get(0);
 	}
@@ -123,6 +125,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getStringNode_EndText() {
 		return (EAttribute)stringNodeEClass.getEStructuralFeatures().get(1);
 	}
@@ -132,6 +135,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getStringNode_Indent() {
 		return (EAttribute)stringNodeEClass.getEStructuralFeatures().get(2);
 	}
@@ -141,6 +145,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getStringNode_NonBreakingSpace() {
 		return (EAttribute)stringNodeEClass.getEStructuralFeatures().get(3);
 	}
@@ -150,6 +155,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getStringNode_Parent() {
 		return (EReference)stringNodeEClass.getEStructuralFeatures().get(4);
 	}
@@ -159,6 +165,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getStringNode_Prefix() {
 		return (EAttribute)stringNodeEClass.getEStructuralFeatures().get(5);
 	}
@@ -168,6 +175,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getStringNode_Separator() {
 		return (EAttribute)stringNodeEClass.getEStructuralFeatures().get(6);
 	}
@@ -177,6 +185,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getStringNode_Suffix() {
 		return (EAttribute)stringNodeEClass.getEStructuralFeatures().get(7);
 	}
@@ -186,6 +195,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getStringNode_Text() {
 		return (EAttribute)stringNodeEClass.getEStructuralFeatures().get(8);
 	}
@@ -195,6 +205,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public TextModelFactory getTextModelFactory() {
 		return (TextModelFactory)getEFactoryInstance();
 	}
@@ -218,16 +229,16 @@
 		isCreated = true;
 
 		// Create classes and their features
-		stringNodeEClass = createEClass(STRING_NODE);
-		createEReference(stringNodeEClass, STRING_NODE__CHILDREN);
-		createEAttribute(stringNodeEClass, STRING_NODE__END_TEXT);
-		createEAttribute(stringNodeEClass, STRING_NODE__INDENT);
-		createEAttribute(stringNodeEClass, STRING_NODE__NON_BREAKING_SPACE);
-		createEReference(stringNodeEClass, STRING_NODE__PARENT);
-		createEAttribute(stringNodeEClass, STRING_NODE__PREFIX);
-		createEAttribute(stringNodeEClass, STRING_NODE__SEPARATOR);
-		createEAttribute(stringNodeEClass, STRING_NODE__SUFFIX);
-		createEAttribute(stringNodeEClass, STRING_NODE__TEXT);
+		stringNodeEClass = createEClass(0);
+		createEReference(stringNodeEClass, 0);
+		createEAttribute(stringNodeEClass, 1);
+		createEAttribute(stringNodeEClass, 2);
+		createEAttribute(stringNodeEClass, 3);
+		createEReference(stringNodeEClass, 4);
+		createEAttribute(stringNodeEClass, 5);
+		createEAttribute(stringNodeEClass, 6);
+		createEAttribute(stringNodeEClass, 7);
+		createEAttribute(stringNodeEClass, 8);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/util/TextModelSwitch.java b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/util/TextModelSwitch.java
index d8ef766..fa04855 100644
--- a/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/util/TextModelSwitch.java
+++ b/plugins/org.eclipse.qvtd.text/emf-gen/org/eclipse/qvtd/text/util/TextModelSwitch.java
@@ -79,7 +79,7 @@
 	@Override
 	protected T doSwitch(int classifierID, EObject theEObject) {
 		switch (classifierID) {
-			case TextModelPackage.STRING_NODE: {
+			case 0: {
 				StringNode stringNode = (StringNode)theEObject;
 				T result = caseStringNode(stringNode);
 				if (result == null) result = defaultCase(theEObject);
diff --git a/plugins/org.eclipse.qvtd.text/model/TextModel.genmodel b/plugins/org.eclipse.qvtd.text/model/TextModel.genmodel
index 7422bc4..7851fd5 100644
--- a/plugins/org.eclipse.qvtd.text/model/TextModel.genmodel
+++ b/plugins/org.eclipse.qvtd.text/model/TextModel.genmodel
@@ -2,9 +2,9 @@
 <genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
     xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="&lt;copyright>&#xA;&#xA;Copyright (c) 2018 Willink Transformations and others.&#xA;All rights reserved. This program and the accompanying materials&#xA;are made available under the terms of the Eclipse Public License v2.0&#xA;which accompanies this distribution, and is available at&#xA;http://www.eclipse.org/legal/epl-v20.html&#xA;&#xA;Contributors:&#xA;  E.D.Willink - Initial API and implementation&#xA;&#xA;&lt;/copyright>"
     modelDirectory="/org.eclipse.qvtd.text/emf-gen" modelPluginID="org.eclipse.qvtd.text"
-    modelName="TextModel" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
-    importerID="org.eclipse.emf.importer.ecore" complianceLevel="8.0" copyrightFields="false"
-    operationReflection="true" importOrganizing="true">
+    templateDirectory="/org.eclipse.ocl.examples.codegen/templates" modelName="TextModel"
+    rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" importerID="org.eclipse.emf.importer.ecore"
+    complianceLevel="8.0" copyrightFields="false" operationReflection="true" importOrganizing="true">
   <foreignModel>TextModel.ecore</foreignModel>
   <genPackages prefix="TextModel" basePackage="org.eclipse.qvtd" disposableProviderFactory="true"
       generateExampleClass="false" ecorePackage="TextModel.ecore#/">
