[Model] Added arithmetic expression to local mode values
diff --git a/plugins/org.eclipse.app4mc.amalthea.model.edit/icons/full/obj16/ArithmeticExpression.gif b/plugins/org.eclipse.app4mc.amalthea.model.edit/icons/full/obj16/ArithmeticExpression.gif
new file mode 100644
index 0000000..7ad7879
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model.edit/icons/full/obj16/ArithmeticExpression.gif
Binary files differ
diff --git a/plugins/org.eclipse.app4mc.amalthea.model.edit/plugin.properties b/plugins/org.eclipse.app4mc.amalthea.model.edit/plugin.properties
index 4ec7e34..7401c1f 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model.edit/plugin.properties
+++ b/plugins/org.eclipse.app4mc.amalthea.model.edit/plugin.properties
@@ -1582,3 +1582,12 @@
 _UI_WriteStrategy_none_literal = none
 _UI_WriteStrategy_writeback_literal = writeback
 _UI_WriteStrategy_writethrough_literal = writethrough
+_UI_ArithmeticExpression_type = Arithmetic Expression
+_UI_ArithmeticExpression_operand1_feature = Operand1
+_UI_ArithmeticExpression_operand2_feature = Operand2
+_UI_ArithmeticExpression_operator_feature = Operator
+_UI_ArithmeticOperator__undefined__literal = <operator>
+_UI_ArithmeticOperator_ADD_literal = ADD
+_UI_ArithmeticOperator_SUBTRACT_literal = SUBTRACT
+_UI_ArithmeticOperator_MULTIPLY_literal = MULTIPLY
+_UI_ArithmeticOperator_MODULO_literal = MODULO
diff --git a/plugins/org.eclipse.app4mc.amalthea.model.edit/src-gen/org/eclipse/app4mc/amalthea/model/provider/AmaltheaItemProviderAdapterFactory.java b/plugins/org.eclipse.app4mc.amalthea.model.edit/src-gen/org/eclipse/app4mc/amalthea/model/provider/AmaltheaItemProviderAdapterFactory.java
index f6dbbb2..aeef10d 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model.edit/src-gen/org/eclipse/app4mc/amalthea/model/provider/AmaltheaItemProviderAdapterFactory.java
+++ b/plugins/org.eclipse.app4mc.amalthea.model.edit/src-gen/org/eclipse/app4mc/amalthea/model/provider/AmaltheaItemProviderAdapterFactory.java
@@ -6397,6 +6397,29 @@
 	}
 
 	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.app4mc.amalthea.model.ArithmeticExpression} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArithmeticExpressionItemProvider arithmeticExpressionItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.app4mc.amalthea.model.ArithmeticExpression}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createArithmeticExpressionAdapter() {
+		if (arithmeticExpressionItemProvider == null) {
+			arithmeticExpressionItemProvider = new ArithmeticExpressionItemProvider(this);
+		}
+
+		return arithmeticExpressionItemProvider;
+	}
+
+	/**
 	 * This returns the root adapter factory that contains this factory.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -6775,6 +6798,7 @@
 		if (modeLabelRefItemProvider != null) modeLabelRefItemProvider.dispose();
 		if (localModeLabelRefItemProvider != null) localModeLabelRefItemProvider.dispose();
 		if (channelFillRefItemProvider != null) channelFillRefItemProvider.dispose();
+		if (arithmeticExpressionItemProvider != null) arithmeticExpressionItemProvider.dispose();
 	}
 
 }
diff --git a/plugins/org.eclipse.app4mc.amalthea.model.edit/src-gen/org/eclipse/app4mc/amalthea/model/provider/ArithmeticExpressionItemProvider.java b/plugins/org.eclipse.app4mc.amalthea.model.edit/src-gen/org/eclipse/app4mc/amalthea/model/provider/ArithmeticExpressionItemProvider.java
new file mode 100644
index 0000000..a22e21c
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model.edit/src-gen/org/eclipse/app4mc/amalthea/model/provider/ArithmeticExpressionItemProvider.java
@@ -0,0 +1,302 @@
+/**
+ * *******************************************************************************
+ *  Copyright (c) 2015-2021 Robert Bosch GmbH and others.
+ * 
+ *  This program and the accompanying materials are made
+ *  available under the terms of the Eclipse Public License 2.0
+ *  which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ *  SPDX-License-Identifier: EPL-2.0
+ * 
+ *     Generated using Eclipse EMF
+ * 
+ * *******************************************************************************
+ */
+package org.eclipse.app4mc.amalthea.model.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory;
+import org.eclipse.app4mc.amalthea.model.AmaltheaPackage;
+import org.eclipse.app4mc.amalthea.model.ArithmeticExpression;
+import org.eclipse.app4mc.amalthea.model.ArithmeticOperator;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.app4mc.amalthea.model.ArithmeticExpression} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ArithmeticExpressionItemProvider 
+	extends AmaltheaItemProviderAdapter
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArithmeticExpressionItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addOperatorPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Operator feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addOperatorPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_ArithmeticExpression_operator_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_ArithmeticExpression_operator_feature", "_UI_ArithmeticExpression_type"),
+				 AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operator(),
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand1());
+			childrenFeatures.add(AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand2());
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns ArithmeticExpression.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/ArithmeticExpression"));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		ArithmeticOperator labelValue = ((ArithmeticExpression)object).getOperator();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_ArithmeticExpression_type") :
+			getString("_UI_ArithmeticExpression_type") + " " + label;
+	}
+
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(ArithmeticExpression.class)) {
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERATOR:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND1:
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND2:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand1(),
+				 AmaltheaFactory.eINSTANCE.createModeLiteralConst()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand1(),
+				 AmaltheaFactory.eINSTANCE.createIntegerConst()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand1(),
+				 AmaltheaFactory.eINSTANCE.createModeLabelRef()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand1(),
+				 AmaltheaFactory.eINSTANCE.createLocalModeLabelRef()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand1(),
+				 AmaltheaFactory.eINSTANCE.createChannelFillRef()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand1(),
+				 AmaltheaFactory.eINSTANCE.createArithmeticExpression()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand2(),
+				 AmaltheaFactory.eINSTANCE.createModeLiteralConst()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand2(),
+				 AmaltheaFactory.eINSTANCE.createIntegerConst()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand2(),
+				 AmaltheaFactory.eINSTANCE.createModeLabelRef()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand2(),
+				 AmaltheaFactory.eINSTANCE.createLocalModeLabelRef()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand2(),
+				 AmaltheaFactory.eINSTANCE.createChannelFillRef()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand2(),
+				 AmaltheaFactory.eINSTANCE.createArithmeticExpression()));
+	}
+
+	/**
+	 * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getCreateChildText(Object owner, Object feature, Object child, Collection<?> selection) {
+		Object childFeature = feature;
+		Object childObject = child;
+
+		boolean qualify =
+			childFeature == AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand1() ||
+			childFeature == AmaltheaPackage.eINSTANCE.getArithmeticExpression_Operand2();
+
+		if (qualify) {
+			return getString
+				("_UI_CreateChild_text2",
+				 new Object[] { getTypeText(childObject), getFeatureText(childFeature), getTypeText(owner) });
+		}
+		return super.getCreateChildText(owner, feature, child, selection);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return AmaltheaEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/plugins/org.eclipse.app4mc.amalthea.model.edit/src-gen/org/eclipse/app4mc/amalthea/model/provider/LocalModeValueItemProvider.java b/plugins/org.eclipse.app4mc.amalthea.model.edit/src-gen/org/eclipse/app4mc/amalthea/model/provider/LocalModeValueItemProvider.java
index 480927b..919306d 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model.edit/src-gen/org/eclipse/app4mc/amalthea/model/provider/LocalModeValueItemProvider.java
+++ b/plugins/org.eclipse.app4mc.amalthea.model.edit/src-gen/org/eclipse/app4mc/amalthea/model/provider/LocalModeValueItemProvider.java
@@ -206,6 +206,11 @@
 			(createChildParameter
 				(AmaltheaPackage.eINSTANCE.getLocalModeValue_ValueSource(),
 				 AmaltheaFactory.eINSTANCE.createChannelFillRef()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(AmaltheaPackage.eINSTANCE.getLocalModeValue_ValueSource(),
+				 AmaltheaFactory.eINSTANCE.createArithmeticExpression()));
 	}
 
 	/**
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/model-gen/xml/amalthea.xml b/plugins/org.eclipse.app4mc.amalthea.model/model-gen/xml/amalthea.xml
index 88ec42c..3d0260b 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model/model-gen/xml/amalthea.xml
+++ b/plugins/org.eclipse.app4mc.amalthea.model/model-gen/xml/amalthea.xml
@@ -4319,4 +4319,19 @@
   <eClassifiers xsi:type="ecore:EClass" name="ChannelFillRef" eSuperTypes="#//ILocalModeValueSource">
     <eStructuralFeatures xsi:type="ecore:EReference" name="value" lowerBound="1" eType="#//Channel"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ArithmeticExpression" eSuperTypes="#//ILocalModeValueSource">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="operand1" eType="#//ILocalModeValueSource"
+        containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="operand2" eType="#//ILocalModeValueSource"
+        containment="true" resolveProxies="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" unique="false"
+        eType="#//ArithmeticOperator"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="ArithmeticOperator">
+    <eLiterals name="_undefined_"/>
+    <eLiterals name="ADD"/>
+    <eLiterals name="SUBTRACT"/>
+    <eLiterals name="MULTIPLY"/>
+    <eLiterals name="MODULO"/>
+  </eClassifiers>
 </ecore:EPackage>
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/model/amalthea.xcore b/plugins/org.eclipse.app4mc.amalthea.model/model/amalthea.xcore
index 35b8333..02254e4 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model/model/amalthea.xcore
+++ b/plugins/org.eclipse.app4mc.amalthea.model/model/amalthea.xcore
@@ -4360,4 +4360,17 @@
 	refers Channel[1] value
 }
 
+class ArithmeticExpression extends ILocalModeValueSource {
+	contains ILocalModeValueSource operand1
+	contains ILocalModeValueSource operand2
+	ArithmeticOperator operator
+}
 
+enum ArithmeticOperator
+{
+	_undefined_ // Display: "<calculation>"
+	ADD
+	SUBTRACT
+	MULTIPLY
+	MODULO
+}
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/AmaltheaFactory.java b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/AmaltheaFactory.java
index d7938d9..21c85cf 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/AmaltheaFactory.java
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/AmaltheaFactory.java
@@ -2451,6 +2451,15 @@
 	ChannelFillRef createChannelFillRef();
 
 	/**
+	 * Returns a new object of class '<em>Arithmetic Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Arithmetic Expression</em>'.
+	 * @generated
+	 */
+	ArithmeticExpression createArithmeticExpression();
+
+	/**
 	 * Returns the package supported by this factory.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/AmaltheaPackage.java b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/AmaltheaPackage.java
index 2343ece..e117e12 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/AmaltheaPackage.java
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/AmaltheaPackage.java
@@ -38959,6 +38959,61 @@
 	int CHANNEL_FILL_REF_OPERATION_COUNT = ILOCAL_MODE_VALUE_SOURCE_OPERATION_COUNT + 0;
 
 	/**
+	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.impl.ArithmeticExpressionImpl <em>Arithmetic Expression</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.app4mc.amalthea.model.impl.ArithmeticExpressionImpl
+	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getArithmeticExpression()
+	 * @generated
+	 */
+	int ARITHMETIC_EXPRESSION = 370;
+
+	/**
+	 * The feature id for the '<em><b>Operand1</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARITHMETIC_EXPRESSION__OPERAND1 = ILOCAL_MODE_VALUE_SOURCE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Operand2</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARITHMETIC_EXPRESSION__OPERAND2 = ILOCAL_MODE_VALUE_SOURCE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Operator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARITHMETIC_EXPRESSION__OPERATOR = ILOCAL_MODE_VALUE_SOURCE_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Arithmetic Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARITHMETIC_EXPRESSION_FEATURE_COUNT = ILOCAL_MODE_VALUE_SOURCE_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of operations of the '<em>Arithmetic Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARITHMETIC_EXPRESSION_OPERATION_COUNT = ILOCAL_MODE_VALUE_SOURCE_OPERATION_COUNT + 0;
+
+	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.RelationalOperator <em>Relational Operator</em>}' enum.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -38966,7 +39021,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getRelationalOperator()
 	 * @generated
 	 */
-	int RELATIONAL_OPERATOR = 370;
+	int RELATIONAL_OPERATOR = 371;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.ParameterType <em>Parameter Type</em>}' enum.
@@ -38976,7 +39031,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getParameterType()
 	 * @generated
 	 */
-	int PARAMETER_TYPE = 371;
+	int PARAMETER_TYPE = 372;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.TimeUnit <em>Time Unit</em>}' enum.
@@ -38986,7 +39041,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getTimeUnit()
 	 * @generated
 	 */
-	int TIME_UNIT = 372;
+	int TIME_UNIT = 373;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.FrequencyUnit <em>Frequency Unit</em>}' enum.
@@ -38996,7 +39051,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getFrequencyUnit()
 	 * @generated
 	 */
-	int FREQUENCY_UNIT = 373;
+	int FREQUENCY_UNIT = 374;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.VoltageUnit <em>Voltage Unit</em>}' enum.
@@ -39006,7 +39061,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getVoltageUnit()
 	 * @generated
 	 */
-	int VOLTAGE_UNIT = 374;
+	int VOLTAGE_UNIT = 375;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.DataSizeUnit <em>Data Size Unit</em>}' enum.
@@ -39016,7 +39071,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getDataSizeUnit()
 	 * @generated
 	 */
-	int DATA_SIZE_UNIT = 375;
+	int DATA_SIZE_UNIT = 376;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.DataRateUnit <em>Data Rate Unit</em>}' enum.
@@ -39026,7 +39081,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getDataRateUnit()
 	 * @generated
 	 */
-	int DATA_RATE_UNIT = 376;
+	int DATA_RATE_UNIT = 377;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.SamplingType <em>Sampling Type</em>}' enum.
@@ -39036,7 +39091,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getSamplingType()
 	 * @generated
 	 */
-	int SAMPLING_TYPE = 377;
+	int SAMPLING_TYPE = 378;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.InterfaceKind <em>Interface Kind</em>}' enum.
@@ -39046,7 +39101,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getInterfaceKind()
 	 * @generated
 	 */
-	int INTERFACE_KIND = 378;
+	int INTERFACE_KIND = 379;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.RunnableOrderType <em>Runnable Order Type</em>}' enum.
@@ -39056,7 +39111,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getRunnableOrderType()
 	 * @generated
 	 */
-	int RUNNABLE_ORDER_TYPE = 379;
+	int RUNNABLE_ORDER_TYPE = 380;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.EventChainItemType <em>Event Chain Item Type</em>}' enum.
@@ -39066,7 +39121,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getEventChainItemType()
 	 * @generated
 	 */
-	int EVENT_CHAIN_ITEM_TYPE = 380;
+	int EVENT_CHAIN_ITEM_TYPE = 381;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.SynchronizationType <em>Synchronization Type</em>}' enum.
@@ -39076,7 +39131,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getSynchronizationType()
 	 * @generated
 	 */
-	int SYNCHRONIZATION_TYPE = 381;
+	int SYNCHRONIZATION_TYPE = 382;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.MappingType <em>Mapping Type</em>}' enum.
@@ -39086,7 +39141,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getMappingType()
 	 * @generated
 	 */
-	int MAPPING_TYPE = 382;
+	int MAPPING_TYPE = 383;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.LatencyType <em>Latency Type</em>}' enum.
@@ -39096,7 +39151,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getLatencyType()
 	 * @generated
 	 */
-	int LATENCY_TYPE = 383;
+	int LATENCY_TYPE = 384;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.Severity <em>Severity</em>}' enum.
@@ -39106,7 +39161,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getSeverity()
 	 * @generated
 	 */
-	int SEVERITY = 384;
+	int SEVERITY = 385;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.LimitType <em>Limit Type</em>}' enum.
@@ -39116,7 +39171,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getLimitType()
 	 * @generated
 	 */
-	int LIMIT_TYPE = 385;
+	int LIMIT_TYPE = 386;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.TimeMetric <em>Time Metric</em>}' enum.
@@ -39126,7 +39181,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getTimeMetric()
 	 * @generated
 	 */
-	int TIME_METRIC = 386;
+	int TIME_METRIC = 387;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.CountMetric <em>Count Metric</em>}' enum.
@@ -39136,7 +39191,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getCountMetric()
 	 * @generated
 	 */
-	int COUNT_METRIC = 387;
+	int COUNT_METRIC = 388;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.PercentageMetric <em>Percentage Metric</em>}' enum.
@@ -39146,7 +39201,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getPercentageMetric()
 	 * @generated
 	 */
-	int PERCENTAGE_METRIC = 388;
+	int PERCENTAGE_METRIC = 389;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.CPUPercentageMetric <em>CPU Percentage Metric</em>}' enum.
@@ -39156,7 +39211,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getCPUPercentageMetric()
 	 * @generated
 	 */
-	int CPU_PERCENTAGE_METRIC = 389;
+	int CPU_PERCENTAGE_METRIC = 390;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.FrequencyMetric <em>Frequency Metric</em>}' enum.
@@ -39166,7 +39221,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getFrequencyMetric()
 	 * @generated
 	 */
-	int FREQUENCY_METRIC = 390;
+	int FREQUENCY_METRIC = 391;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.CoherencyDirection <em>Coherency Direction</em>}' enum.
@@ -39176,7 +39231,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getCoherencyDirection()
 	 * @generated
 	 */
-	int COHERENCY_DIRECTION = 391;
+	int COHERENCY_DIRECTION = 392;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.ProcessEventType <em>Process Event Type</em>}' enum.
@@ -39186,7 +39241,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getProcessEventType()
 	 * @generated
 	 */
-	int PROCESS_EVENT_TYPE = 392;
+	int PROCESS_EVENT_TYPE = 393;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.RunnableEventType <em>Runnable Event Type</em>}' enum.
@@ -39196,7 +39251,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getRunnableEventType()
 	 * @generated
 	 */
-	int RUNNABLE_EVENT_TYPE = 393;
+	int RUNNABLE_EVENT_TYPE = 394;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.LabelEventType <em>Label Event Type</em>}' enum.
@@ -39206,7 +39261,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getLabelEventType()
 	 * @generated
 	 */
-	int LABEL_EVENT_TYPE = 394;
+	int LABEL_EVENT_TYPE = 395;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.ChannelEventType <em>Channel Event Type</em>}' enum.
@@ -39216,7 +39271,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getChannelEventType()
 	 * @generated
 	 */
-	int CHANNEL_EVENT_TYPE = 395;
+	int CHANNEL_EVENT_TYPE = 396;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.SemaphoreEventType <em>Semaphore Event Type</em>}' enum.
@@ -39226,7 +39281,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getSemaphoreEventType()
 	 * @generated
 	 */
-	int SEMAPHORE_EVENT_TYPE = 396;
+	int SEMAPHORE_EVENT_TYPE = 397;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.ComponentEventType <em>Component Event Type</em>}' enum.
@@ -39236,7 +39291,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getComponentEventType()
 	 * @generated
 	 */
-	int COMPONENT_EVENT_TYPE = 397;
+	int COMPONENT_EVENT_TYPE = 398;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.MemoryType <em>Memory Type</em>}' enum.
@@ -39246,7 +39301,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getMemoryType()
 	 * @generated
 	 */
-	int MEMORY_TYPE = 398;
+	int MEMORY_TYPE = 399;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.StructureType <em>Structure Type</em>}' enum.
@@ -39256,7 +39311,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getStructureType()
 	 * @generated
 	 */
-	int STRUCTURE_TYPE = 399;
+	int STRUCTURE_TYPE = 400;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.CacheType <em>Cache Type</em>}' enum.
@@ -39266,7 +39321,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getCacheType()
 	 * @generated
 	 */
-	int CACHE_TYPE = 400;
+	int CACHE_TYPE = 401;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.PortType <em>Port Type</em>}' enum.
@@ -39276,7 +39331,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getPortType()
 	 * @generated
 	 */
-	int PORT_TYPE = 401;
+	int PORT_TYPE = 402;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.SchedPolicy <em>Sched Policy</em>}' enum.
@@ -39286,7 +39341,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getSchedPolicy()
 	 * @generated
 	 */
-	int SCHED_POLICY = 402;
+	int SCHED_POLICY = 403;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.WriteStrategy <em>Write Strategy</em>}' enum.
@@ -39296,7 +39351,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getWriteStrategy()
 	 * @generated
 	 */
-	int WRITE_STRATEGY = 403;
+	int WRITE_STRATEGY = 404;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.PuType <em>Pu Type</em>}' enum.
@@ -39306,7 +39361,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getPuType()
 	 * @generated
 	 */
-	int PU_TYPE = 404;
+	int PU_TYPE = 405;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.PortInterface <em>Port Interface</em>}' enum.
@@ -39316,7 +39371,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getPortInterface()
 	 * @generated
 	 */
-	int PORT_INTERFACE = 405;
+	int PORT_INTERFACE = 406;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.HwFeatureType <em>Hw Feature Type</em>}' enum.
@@ -39326,7 +39381,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getHwFeatureType()
 	 * @generated
 	 */
-	int HW_FEATURE_TYPE = 406;
+	int HW_FEATURE_TYPE = 407;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.MemoryAddressMappingType <em>Memory Address Mapping Type</em>}' enum.
@@ -39336,7 +39391,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getMemoryAddressMappingType()
 	 * @generated
 	 */
-	int MEMORY_ADDRESS_MAPPING_TYPE = 407;
+	int MEMORY_ADDRESS_MAPPING_TYPE = 408;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.OsDataConsistencyMode <em>Os Data Consistency Mode</em>}' enum.
@@ -39346,7 +39401,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getOsDataConsistencyMode()
 	 * @generated
 	 */
-	int OS_DATA_CONSISTENCY_MODE = 408;
+	int OS_DATA_CONSISTENCY_MODE = 409;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.AccessMultiplicity <em>Access Multiplicity</em>}' enum.
@@ -39356,7 +39411,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getAccessMultiplicity()
 	 * @generated
 	 */
-	int ACCESS_MULTIPLICITY = 409;
+	int ACCESS_MULTIPLICITY = 410;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.DataStabilityLevel <em>Data Stability Level</em>}' enum.
@@ -39366,7 +39421,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getDataStabilityLevel()
 	 * @generated
 	 */
-	int DATA_STABILITY_LEVEL = 410;
+	int DATA_STABILITY_LEVEL = 411;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.SemaphoreType <em>Semaphore Type</em>}' enum.
@@ -39376,7 +39431,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getSemaphoreType()
 	 * @generated
 	 */
-	int SEMAPHORE_TYPE = 411;
+	int SEMAPHORE_TYPE = 412;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.CombinatorialCondition <em>Combinatorial Condition</em>}' enum.
@@ -39386,7 +39441,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getCombinatorialCondition()
 	 * @generated
 	 */
-	int COMBINATORIAL_CONDITION = 412;
+	int COMBINATORIAL_CONDITION = 413;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.GroupingType <em>Grouping Type</em>}' enum.
@@ -39396,7 +39451,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getGroupingType()
 	 * @generated
 	 */
-	int GROUPING_TYPE = 413;
+	int GROUPING_TYPE = 414;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.CurveType <em>Curve Type</em>}' enum.
@@ -39406,7 +39461,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getCurveType()
 	 * @generated
 	 */
-	int CURVE_TYPE = 414;
+	int CURVE_TYPE = 415;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.WaitEventType <em>Wait Event Type</em>}' enum.
@@ -39416,7 +39471,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getWaitEventType()
 	 * @generated
 	 */
-	int WAIT_EVENT_TYPE = 415;
+	int WAIT_EVENT_TYPE = 416;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.WaitingBehaviour <em>Waiting Behaviour</em>}' enum.
@@ -39426,7 +39481,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getWaitingBehaviour()
 	 * @generated
 	 */
-	int WAITING_BEHAVIOUR = 416;
+	int WAITING_BEHAVIOUR = 417;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.ISRCategory <em>ISR Category</em>}' enum.
@@ -39436,7 +39491,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getISRCategory()
 	 * @generated
 	 */
-	int ISR_CATEGORY = 417;
+	int ISR_CATEGORY = 418;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.AccessPrecedenceType <em>Access Precedence Type</em>}' enum.
@@ -39446,7 +39501,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getAccessPrecedenceType()
 	 * @generated
 	 */
-	int ACCESS_PRECEDENCE_TYPE = 418;
+	int ACCESS_PRECEDENCE_TYPE = 419;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.OrderType <em>Order Type</em>}' enum.
@@ -39456,7 +39511,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getOrderType()
 	 * @generated
 	 */
-	int ORDER_TYPE = 419;
+	int ORDER_TYPE = 420;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.DirectionType <em>Direction Type</em>}' enum.
@@ -39466,7 +39521,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getDirectionType()
 	 * @generated
 	 */
-	int DIRECTION_TYPE = 420;
+	int DIRECTION_TYPE = 421;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.LabelDataStability <em>Label Data Stability</em>}' enum.
@@ -39476,7 +39531,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getLabelDataStability()
 	 * @generated
 	 */
-	int LABEL_DATA_STABILITY = 421;
+	int LABEL_DATA_STABILITY = 422;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.ModeLabelAccessEnum <em>Mode Label Access Enum</em>}' enum.
@@ -39486,7 +39541,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getModeLabelAccessEnum()
 	 * @generated
 	 */
-	int MODE_LABEL_ACCESS_ENUM = 422;
+	int MODE_LABEL_ACCESS_ENUM = 423;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.ReceiveOperation <em>Receive Operation</em>}' enum.
@@ -39496,7 +39551,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getReceiveOperation()
 	 * @generated
 	 */
-	int RECEIVE_OPERATION = 423;
+	int RECEIVE_OPERATION = 424;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.LabelAccessDataStability <em>Label Access Data Stability</em>}' enum.
@@ -39506,7 +39561,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getLabelAccessDataStability()
 	 * @generated
 	 */
-	int LABEL_ACCESS_DATA_STABILITY = 424;
+	int LABEL_ACCESS_DATA_STABILITY = 425;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.LabelAccessEnum <em>Label Access Enum</em>}' enum.
@@ -39516,7 +39571,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getLabelAccessEnum()
 	 * @generated
 	 */
-	int LABEL_ACCESS_ENUM = 425;
+	int LABEL_ACCESS_ENUM = 426;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.LabelAccessImplementation <em>Label Access Implementation</em>}' enum.
@@ -39526,7 +39581,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getLabelAccessImplementation()
 	 * @generated
 	 */
-	int LABEL_ACCESS_IMPLEMENTATION = 426;
+	int LABEL_ACCESS_IMPLEMENTATION = 427;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.SemaphoreAccessEnum <em>Semaphore Access Enum</em>}' enum.
@@ -39536,7 +39591,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getSemaphoreAccessEnum()
 	 * @generated
 	 */
-	int SEMAPHORE_ACCESS_ENUM = 427;
+	int SEMAPHORE_ACCESS_ENUM = 428;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.BlockingType <em>Blocking Type</em>}' enum.
@@ -39546,7 +39601,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getBlockingType()
 	 * @generated
 	 */
-	int BLOCKING_TYPE = 428;
+	int BLOCKING_TYPE = 429;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.Preemption <em>Preemption</em>}' enum.
@@ -39556,7 +39611,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getPreemption()
 	 * @generated
 	 */
-	int PREEMPTION = 429;
+	int PREEMPTION = 430;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.ConcurrencyType <em>Concurrency Type</em>}' enum.
@@ -39566,7 +39621,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getConcurrencyType()
 	 * @generated
 	 */
-	int CONCURRENCY_TYPE = 430;
+	int CONCURRENCY_TYPE = 431;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.ASILType <em>ASIL Type</em>}' enum.
@@ -39576,7 +39631,17 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getASILType()
 	 * @generated
 	 */
-	int ASIL_TYPE = 431;
+	int ASIL_TYPE = 432;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.app4mc.amalthea.model.ArithmeticOperator <em>Arithmetic Operator</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.app4mc.amalthea.model.ArithmeticOperator
+	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getArithmeticOperator()
+	 * @generated
+	 */
+	int ARITHMETIC_OPERATOR = 433;
 
 	/**
 	 * The meta object id for the '<em>Address</em>' data type.
@@ -39585,7 +39650,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getAddress()
 	 * @generated
 	 */
-	int ADDRESS = 432;
+	int ADDRESS = 434;
 
 	/**
 	 * The meta object id for the '<em>Positive Int</em>' data type.
@@ -39594,7 +39659,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getPositiveInt()
 	 * @generated
 	 */
-	int POSITIVE_INT = 433;
+	int POSITIVE_INT = 435;
 
 	/**
 	 * The meta object id for the '<em>Positive Long</em>' data type.
@@ -39603,7 +39668,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getPositiveLong()
 	 * @generated
 	 */
-	int POSITIVE_LONG = 434;
+	int POSITIVE_LONG = 436;
 
 	/**
 	 * The meta object id for the '<em>Positive Double</em>' data type.
@@ -39612,7 +39677,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getPositiveDouble()
 	 * @generated
 	 */
-	int POSITIVE_DOUBLE = 435;
+	int POSITIVE_DOUBLE = 437;
 
 	/**
 	 * The meta object id for the '<em>Non Negative Int</em>' data type.
@@ -39621,7 +39686,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getNonNegativeInt()
 	 * @generated
 	 */
-	int NON_NEGATIVE_INT = 436;
+	int NON_NEGATIVE_INT = 438;
 
 	/**
 	 * The meta object id for the '<em>Non Negative Long</em>' data type.
@@ -39630,7 +39695,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getNonNegativeLong()
 	 * @generated
 	 */
-	int NON_NEGATIVE_LONG = 437;
+	int NON_NEGATIVE_LONG = 439;
 
 	/**
 	 * The meta object id for the '<em>Non Negative Double</em>' data type.
@@ -39639,7 +39704,7 @@
 	 * @see org.eclipse.app4mc.amalthea.model.impl.AmaltheaPackageImpl#getNonNegativeDouble()
 	 * @generated
 	 */
-	int NON_NEGATIVE_DOUBLE = 438;
+	int NON_NEGATIVE_DOUBLE = 440;
 
 
 	/**
@@ -52128,6 +52193,49 @@
 	EReference getChannelFillRef_Value();
 
 	/**
+	 * Returns the meta object for class '{@link org.eclipse.app4mc.amalthea.model.ArithmeticExpression <em>Arithmetic Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Arithmetic Expression</em>'.
+	 * @see org.eclipse.app4mc.amalthea.model.ArithmeticExpression
+	 * @generated
+	 */
+	EClass getArithmeticExpression();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.app4mc.amalthea.model.ArithmeticExpression#getOperand1 <em>Operand1</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Operand1</em>'.
+	 * @see org.eclipse.app4mc.amalthea.model.ArithmeticExpression#getOperand1()
+	 * @see #getArithmeticExpression()
+	 * @generated
+	 */
+	EReference getArithmeticExpression_Operand1();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.app4mc.amalthea.model.ArithmeticExpression#getOperand2 <em>Operand2</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Operand2</em>'.
+	 * @see org.eclipse.app4mc.amalthea.model.ArithmeticExpression#getOperand2()
+	 * @see #getArithmeticExpression()
+	 * @generated
+	 */
+	EReference getArithmeticExpression_Operand2();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.app4mc.amalthea.model.ArithmeticExpression#getOperator <em>Operator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Operator</em>'.
+	 * @see org.eclipse.app4mc.amalthea.model.ArithmeticExpression#getOperator()
+	 * @see #getArithmeticExpression()
+	 * @generated
+	 */
+	EAttribute getArithmeticExpression_Operator();
+
+	/**
 	 * Returns the meta object for enum '{@link org.eclipse.app4mc.amalthea.model.RelationalOperator <em>Relational Operator</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -52748,6 +52856,16 @@
 	EEnum getASILType();
 
 	/**
+	 * Returns the meta object for enum '{@link org.eclipse.app4mc.amalthea.model.ArithmeticOperator <em>Arithmetic Operator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Arithmetic Operator</em>'.
+	 * @see org.eclipse.app4mc.amalthea.model.ArithmeticOperator
+	 * @generated
+	 */
+	EEnum getArithmeticOperator();
+
+	/**
 	 * Returns the meta object for data type '<em>Address</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/ArithmeticExpression.java b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/ArithmeticExpression.java
new file mode 100644
index 0000000..83503ff
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/ArithmeticExpression.java
@@ -0,0 +1,106 @@
+/**
+ * *******************************************************************************
+ *  Copyright (c) 2015-2021 Robert Bosch GmbH and others.
+ * 
+ *  This program and the accompanying materials are made
+ *  available under the terms of the Eclipse Public License 2.0
+ *  which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ *  SPDX-License-Identifier: EPL-2.0
+ * 
+ *     Generated using Eclipse EMF
+ * 
+ * *******************************************************************************
+ */
+package org.eclipse.app4mc.amalthea.model;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Arithmetic Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.app4mc.amalthea.model.ArithmeticExpression#getOperand1 <em>Operand1</em>}</li>
+ *   <li>{@link org.eclipse.app4mc.amalthea.model.ArithmeticExpression#getOperand2 <em>Operand2</em>}</li>
+ *   <li>{@link org.eclipse.app4mc.amalthea.model.ArithmeticExpression#getOperator <em>Operator</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.app4mc.amalthea.model.AmaltheaPackage#getArithmeticExpression()
+ * @model
+ * @generated
+ */
+public interface ArithmeticExpression extends ILocalModeValueSource {
+	/**
+	 * Returns the value of the '<em><b>Operand1</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Operand1</em>' containment reference.
+	 * @see #setOperand1(ILocalModeValueSource)
+	 * @see org.eclipse.app4mc.amalthea.model.AmaltheaPackage#getArithmeticExpression_Operand1()
+	 * @model containment="true"
+	 * @generated
+	 */
+	ILocalModeValueSource getOperand1();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.app4mc.amalthea.model.ArithmeticExpression#getOperand1 <em>Operand1</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Operand1</em>' containment reference.
+	 * @see #getOperand1()
+	 * @generated
+	 */
+	void setOperand1(ILocalModeValueSource value);
+
+	/**
+	 * Returns the value of the '<em><b>Operand2</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Operand2</em>' containment reference.
+	 * @see #setOperand2(ILocalModeValueSource)
+	 * @see org.eclipse.app4mc.amalthea.model.AmaltheaPackage#getArithmeticExpression_Operand2()
+	 * @model containment="true"
+	 * @generated
+	 */
+	ILocalModeValueSource getOperand2();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.app4mc.amalthea.model.ArithmeticExpression#getOperand2 <em>Operand2</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Operand2</em>' containment reference.
+	 * @see #getOperand2()
+	 * @generated
+	 */
+	void setOperand2(ILocalModeValueSource value);
+
+	/**
+	 * Returns the value of the '<em><b>Operator</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.app4mc.amalthea.model.ArithmeticOperator}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Operator</em>' attribute.
+	 * @see org.eclipse.app4mc.amalthea.model.ArithmeticOperator
+	 * @see #setOperator(ArithmeticOperator)
+	 * @see org.eclipse.app4mc.amalthea.model.AmaltheaPackage#getArithmeticExpression_Operator()
+	 * @model unique="false"
+	 * @generated
+	 */
+	ArithmeticOperator getOperator();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.app4mc.amalthea.model.ArithmeticExpression#getOperator <em>Operator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Operator</em>' attribute.
+	 * @see org.eclipse.app4mc.amalthea.model.ArithmeticOperator
+	 * @see #getOperator()
+	 * @generated
+	 */
+	void setOperator(ArithmeticOperator value);
+
+} // ArithmeticExpression
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/ArithmeticOperator.java b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/ArithmeticOperator.java
new file mode 100644
index 0000000..161e6cc
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/ArithmeticOperator.java
@@ -0,0 +1,286 @@
+/**
+ * *******************************************************************************
+ *  Copyright (c) 2015-2021 Robert Bosch GmbH and others.
+ * 
+ *  This program and the accompanying materials are made
+ *  available under the terms of the Eclipse Public License 2.0
+ *  which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ *  SPDX-License-Identifier: EPL-2.0
+ * 
+ *     Generated using Eclipse EMF
+ * 
+ * *******************************************************************************
+ */
+package org.eclipse.app4mc.amalthea.model;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Arithmetic Operator</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.app4mc.amalthea.model.AmaltheaPackage#getArithmeticOperator()
+ * @model
+ * @generated
+ */
+public enum ArithmeticOperator implements Enumerator {
+	/**
+	 * The '<em><b>undefined </b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #_UNDEFINED__VALUE
+	 * @generated
+	 * @ordered
+	 */
+	_UNDEFINED_(0, "_undefined_", "_undefined_"),
+
+	/**
+	 * The '<em><b>ADD</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ADD_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	ADD(0, "ADD", "ADD"),
+
+	/**
+	 * The '<em><b>SUBTRACT</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SUBTRACT_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	SUBTRACT(0, "SUBTRACT", "SUBTRACT"),
+
+	/**
+	 * The '<em><b>MULTIPLY</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #MULTIPLY_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	MULTIPLY(0, "MULTIPLY", "MULTIPLY"),
+
+	/**
+	 * The '<em><b>MODULO</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #MODULO_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	MODULO(0, "MODULO", "MODULO");
+
+	/**
+	 * The '<em><b>undefined </b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #_UNDEFINED_
+	 * @model name="_undefined_"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int _UNDEFINED__VALUE = 0;
+
+	/**
+	 * The '<em><b>ADD</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ADD
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ADD_VALUE = 0;
+
+	/**
+	 * The '<em><b>SUBTRACT</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SUBTRACT
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SUBTRACT_VALUE = 0;
+
+	/**
+	 * The '<em><b>MULTIPLY</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #MULTIPLY
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int MULTIPLY_VALUE = 0;
+
+	/**
+	 * The '<em><b>MODULO</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #MODULO
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int MODULO_VALUE = 0;
+
+	/**
+	 * An array of all the '<em><b>Arithmetic Operator</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final ArithmeticOperator[] VALUES_ARRAY =
+		new ArithmeticOperator[] {
+			_UNDEFINED_,
+			ADD,
+			SUBTRACT,
+			MULTIPLY,
+			MODULO,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Arithmetic Operator</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List<ArithmeticOperator> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Arithmetic Operator</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+	public static ArithmeticOperator get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			ArithmeticOperator result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Arithmetic Operator</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+	public static ArithmeticOperator getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			ArithmeticOperator result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Arithmetic Operator</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+	public static ArithmeticOperator get(int value) {
+		switch (value) {
+			case _UNDEFINED__VALUE: return _UNDEFINED_;
+		}
+		return null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final int value;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final String name;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final String literal;
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private ArithmeticOperator(int value, String name, String literal) {
+		this.value = value;
+		this.name = name;
+		this.literal = literal;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int getValue() {
+	  return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getName() {
+	  return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getLiteral() {
+	  return literal;
+	}
+
+	/**
+	 * Returns the literal value of the enumerator, which is its string representation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		return literal;
+	}
+	
+} //ArithmeticOperator
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/impl/AmaltheaFactoryImpl.java b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/impl/AmaltheaFactoryImpl.java
index 326913b..2786ede 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/impl/AmaltheaFactoryImpl.java
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/impl/AmaltheaFactoryImpl.java
@@ -344,6 +344,7 @@
 			case AmaltheaPackage.MODE_LABEL_REF: return createModeLabelRef();
 			case AmaltheaPackage.LOCAL_MODE_LABEL_REF: return createLocalModeLabelRef();
 			case AmaltheaPackage.CHANNEL_FILL_REF: return createChannelFillRef();
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION: return createArithmeticExpression();
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
@@ -481,6 +482,8 @@
 				return createConcurrencyTypeFromString(eDataType, initialValue);
 			case AmaltheaPackage.ASIL_TYPE:
 				return createASILTypeFromString(eDataType, initialValue);
+			case AmaltheaPackage.ARITHMETIC_OPERATOR:
+				return createArithmeticOperatorFromString(eDataType, initialValue);
 			case AmaltheaPackage.ADDRESS:
 				return createAddressFromString(eDataType, initialValue);
 			case AmaltheaPackage.POSITIVE_INT:
@@ -632,6 +635,8 @@
 				return convertConcurrencyTypeToString(eDataType, instanceValue);
 			case AmaltheaPackage.ASIL_TYPE:
 				return convertASILTypeToString(eDataType, instanceValue);
+			case AmaltheaPackage.ARITHMETIC_OPERATOR:
+				return convertArithmeticOperatorToString(eDataType, instanceValue);
 			case AmaltheaPackage.ADDRESS:
 				return convertAddressToString(eDataType, instanceValue);
 			case AmaltheaPackage.POSITIVE_INT:
@@ -3669,6 +3674,17 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
+	public ArithmeticExpression createArithmeticExpression() {
+		ArithmeticExpressionImpl arithmeticExpression = new ArithmeticExpressionImpl();
+		return arithmeticExpression;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public RelationalOperator createRelationalOperatorFromString(EDataType eDataType, String initialValue) {
 		RelationalOperator result = RelationalOperator.get(initialValue);
 		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
@@ -4909,6 +4925,26 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public ArithmeticOperator createArithmeticOperatorFromString(EDataType eDataType, String initialValue) {
+		ArithmeticOperator result = ArithmeticOperator.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertArithmeticOperatorToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public long createAddress(final String it) {
 		Long _xifexpression = null;
 		if ((it == null)) {
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/impl/AmaltheaPackageImpl.java b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/impl/AmaltheaPackageImpl.java
index da123d2..1b23915 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/impl/AmaltheaPackageImpl.java
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/impl/AmaltheaPackageImpl.java
@@ -2640,6 +2640,13 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	private EClass arithmeticExpressionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	private EEnum relationalOperatorEEnum = null;
 
 	/**
@@ -3074,6 +3081,13 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	private EEnum arithmeticOperatorEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	private EDataType addressEDataType = null;
 
 	/**
@@ -14969,6 +14983,46 @@
 	 * @generated
 	 */
 	@Override
+	public EClass getArithmeticExpression() {
+		return arithmeticExpressionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EReference getArithmeticExpression_Operand1() {
+		return (EReference)arithmeticExpressionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EReference getArithmeticExpression_Operand2() {
+		return (EReference)arithmeticExpressionEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EAttribute getArithmeticExpression_Operator() {
+		return (EAttribute)arithmeticExpressionEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public EEnum getRelationalOperator() {
 		return relationalOperatorEEnum;
 	}
@@ -15589,6 +15643,16 @@
 	 * @generated
 	 */
 	@Override
+	public EEnum getArithmeticOperator() {
+		return arithmeticOperatorEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public EDataType getAddress() {
 		return addressEDataType;
 	}
@@ -17228,6 +17292,11 @@
 		channelFillRefEClass = createEClass(CHANNEL_FILL_REF);
 		createEReference(channelFillRefEClass, CHANNEL_FILL_REF__VALUE);
 
+		arithmeticExpressionEClass = createEClass(ARITHMETIC_EXPRESSION);
+		createEReference(arithmeticExpressionEClass, ARITHMETIC_EXPRESSION__OPERAND1);
+		createEReference(arithmeticExpressionEClass, ARITHMETIC_EXPRESSION__OPERAND2);
+		createEAttribute(arithmeticExpressionEClass, ARITHMETIC_EXPRESSION__OPERATOR);
+
 		// Create enums
 		relationalOperatorEEnum = createEEnum(RELATIONAL_OPERATOR);
 		parameterTypeEEnum = createEEnum(PARAMETER_TYPE);
@@ -17291,6 +17360,7 @@
 		preemptionEEnum = createEEnum(PREEMPTION);
 		concurrencyTypeEEnum = createEEnum(CONCURRENCY_TYPE);
 		asilTypeEEnum = createEEnum(ASIL_TYPE);
+		arithmeticOperatorEEnum = createEEnum(ARITHMETIC_OPERATOR);
 
 		// Create data types
 		addressEDataType = createEDataType(ADDRESS);
@@ -17775,6 +17845,7 @@
 		modeLabelRefEClass.getESuperTypes().add(this.getILocalModeValueSource());
 		localModeLabelRefEClass.getESuperTypes().add(this.getILocalModeValueSource());
 		channelFillRefEClass.getESuperTypes().add(this.getILocalModeValueSource());
+		arithmeticExpressionEClass.getESuperTypes().add(this.getILocalModeValueSource());
 
 		// Initialize classes, features, and operations; add parameters
 		initEClass(amaltheaEClass, Amalthea.class, "Amalthea", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -19519,6 +19590,11 @@
 		initEClass(channelFillRefEClass, ChannelFillRef.class, "ChannelFillRef", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getChannelFillRef_Value(), this.getChannel(), null, "value", null, 1, 1, ChannelFillRef.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+		initEClass(arithmeticExpressionEClass, ArithmeticExpression.class, "ArithmeticExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getArithmeticExpression_Operand1(), this.getILocalModeValueSource(), null, "operand1", null, 0, 1, ArithmeticExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getArithmeticExpression_Operand2(), this.getILocalModeValueSource(), null, "operand2", null, 0, 1, ArithmeticExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getArithmeticExpression_Operator(), this.getArithmeticOperator(), "operator", null, 0, 1, ArithmeticExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
 		// Initialize enums and add enum literals
 		initEEnum(relationalOperatorEEnum, RelationalOperator.class, "RelationalOperator");
 		addEEnumLiteral(relationalOperatorEEnum, RelationalOperator._UNDEFINED_);
@@ -19977,6 +20053,13 @@
 		addEEnumLiteral(asilTypeEEnum, ASILType.A);
 		addEEnumLiteral(asilTypeEEnum, ASILType.QM);
 
+		initEEnum(arithmeticOperatorEEnum, ArithmeticOperator.class, "ArithmeticOperator");
+		addEEnumLiteral(arithmeticOperatorEEnum, ArithmeticOperator._UNDEFINED_);
+		addEEnumLiteral(arithmeticOperatorEEnum, ArithmeticOperator.ADD);
+		addEEnumLiteral(arithmeticOperatorEEnum, ArithmeticOperator.SUBTRACT);
+		addEEnumLiteral(arithmeticOperatorEEnum, ArithmeticOperator.MULTIPLY);
+		addEEnumLiteral(arithmeticOperatorEEnum, ArithmeticOperator.MODULO);
+
 		// Initialize data types
 		initEDataType(addressEDataType, long.class, "Address", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
 		initEDataType(positiveIntEDataType, int.class, "PositiveInt", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/impl/ArithmeticExpressionImpl.java b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/impl/ArithmeticExpressionImpl.java
new file mode 100644
index 0000000..b35067d
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/impl/ArithmeticExpressionImpl.java
@@ -0,0 +1,330 @@
+/**
+ * *******************************************************************************
+ *  Copyright (c) 2015-2021 Robert Bosch GmbH and others.
+ * 
+ *  This program and the accompanying materials are made
+ *  available under the terms of the Eclipse Public License 2.0
+ *  which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ *  SPDX-License-Identifier: EPL-2.0
+ * 
+ *     Generated using Eclipse EMF
+ * 
+ * *******************************************************************************
+ */
+package org.eclipse.app4mc.amalthea.model.impl;
+
+import org.eclipse.app4mc.amalthea.model.AmaltheaPackage;
+import org.eclipse.app4mc.amalthea.model.ArithmeticExpression;
+import org.eclipse.app4mc.amalthea.model.ArithmeticOperator;
+import org.eclipse.app4mc.amalthea.model.ILocalModeValueSource;
+
+import org.eclipse.app4mc.amalthea.model.emf.AmaltheaEObjectImpl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Arithmetic Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.app4mc.amalthea.model.impl.ArithmeticExpressionImpl#getOperand1 <em>Operand1</em>}</li>
+ *   <li>{@link org.eclipse.app4mc.amalthea.model.impl.ArithmeticExpressionImpl#getOperand2 <em>Operand2</em>}</li>
+ *   <li>{@link org.eclipse.app4mc.amalthea.model.impl.ArithmeticExpressionImpl#getOperator <em>Operator</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ArithmeticExpressionImpl extends AmaltheaEObjectImpl implements ArithmeticExpression {
+	/**
+	 * The cached value of the '{@link #getOperand1() <em>Operand1</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOperand1()
+	 * @generated
+	 * @ordered
+	 */
+	protected ILocalModeValueSource operand1;
+
+	/**
+	 * The cached value of the '{@link #getOperand2() <em>Operand2</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOperand2()
+	 * @generated
+	 * @ordered
+	 */
+	protected ILocalModeValueSource operand2;
+
+	/**
+	 * The default value of the '{@link #getOperator() <em>Operator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOperator()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final ArithmeticOperator OPERATOR_EDEFAULT = ArithmeticOperator._UNDEFINED_;
+
+	/**
+	 * The cached value of the '{@link #getOperator() <em>Operator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOperator()
+	 * @generated
+	 * @ordered
+	 */
+	protected ArithmeticOperator operator = OPERATOR_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArithmeticExpressionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return AmaltheaPackage.eINSTANCE.getArithmeticExpression();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ILocalModeValueSource getOperand1() {
+		return operand1;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetOperand1(ILocalModeValueSource newOperand1, NotificationChain msgs) {
+		ILocalModeValueSource oldOperand1 = operand1;
+		operand1 = newOperand1;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND1, oldOperand1, newOperand1);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setOperand1(ILocalModeValueSource newOperand1) {
+		if (newOperand1 != operand1) {
+			NotificationChain msgs = null;
+			if (operand1 != null)
+				msgs = ((InternalEObject)operand1).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND1, null, msgs);
+			if (newOperand1 != null)
+				msgs = ((InternalEObject)newOperand1).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND1, null, msgs);
+			msgs = basicSetOperand1(newOperand1, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND1, newOperand1, newOperand1));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ILocalModeValueSource getOperand2() {
+		return operand2;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetOperand2(ILocalModeValueSource newOperand2, NotificationChain msgs) {
+		ILocalModeValueSource oldOperand2 = operand2;
+		operand2 = newOperand2;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND2, oldOperand2, newOperand2);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setOperand2(ILocalModeValueSource newOperand2) {
+		if (newOperand2 != operand2) {
+			NotificationChain msgs = null;
+			if (operand2 != null)
+				msgs = ((InternalEObject)operand2).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND2, null, msgs);
+			if (newOperand2 != null)
+				msgs = ((InternalEObject)newOperand2).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND2, null, msgs);
+			msgs = basicSetOperand2(newOperand2, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND2, newOperand2, newOperand2));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ArithmeticOperator getOperator() {
+		return operator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setOperator(ArithmeticOperator newOperator) {
+		ArithmeticOperator oldOperator = operator;
+		operator = newOperator == null ? OPERATOR_EDEFAULT : newOperator;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERATOR, oldOperator, operator));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND1:
+				return basicSetOperand1(null, msgs);
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND2:
+				return basicSetOperand2(null, 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 AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND1:
+				return getOperand1();
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND2:
+				return getOperand2();
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERATOR:
+				return getOperator();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND1:
+				setOperand1((ILocalModeValueSource)newValue);
+				return;
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND2:
+				setOperand2((ILocalModeValueSource)newValue);
+				return;
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERATOR:
+				setOperator((ArithmeticOperator)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND1:
+				setOperand1((ILocalModeValueSource)null);
+				return;
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND2:
+				setOperand2((ILocalModeValueSource)null);
+				return;
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERATOR:
+				setOperator(OPERATOR_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND1:
+				return operand1 != null;
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERAND2:
+				return operand2 != null;
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION__OPERATOR:
+				return operator != OPERATOR_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (operator: ");
+		result.append(operator);
+		result.append(')');
+		return result.toString();
+	}
+
+} //ArithmeticExpressionImpl
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/util/AmaltheaAdapterFactory.java b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/util/AmaltheaAdapterFactory.java
index cd68ab6..759ed2e 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/util/AmaltheaAdapterFactory.java
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/util/AmaltheaAdapterFactory.java
@@ -1561,6 +1561,10 @@
 				return createChannelFillRefAdapter();
 			}
 			@Override
+			public Adapter caseArithmeticExpression(ArithmeticExpression object) {
+				return createArithmeticExpressionAdapter();
+			}
+			@Override
 			public Adapter defaultCase(EObject object) {
 				return createEObjectAdapter();
 			}
@@ -6767,6 +6771,20 @@
 	}
 
 	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.app4mc.amalthea.model.ArithmeticExpression <em>Arithmetic Expression</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.app4mc.amalthea.model.ArithmeticExpression
+	 * @generated
+	 */
+	public Adapter createArithmeticExpressionAdapter() {
+		return null;
+	}
+
+	/**
 	 * Creates a new adapter for the default case.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null.
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/util/AmaltheaSwitch.java b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/util/AmaltheaSwitch.java
index 65a603f..4767690 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/util/AmaltheaSwitch.java
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/util/AmaltheaSwitch.java
@@ -3517,6 +3517,13 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION: {
+				ArithmeticExpression arithmeticExpression = (ArithmeticExpression)theEObject;
+				T result = caseArithmeticExpression(arithmeticExpression);
+				if (result == null) result = caseILocalModeValueSource(arithmeticExpression);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			default: return defaultCase(theEObject);
 		}
 	}
@@ -9078,6 +9085,21 @@
 	}
 
 	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Arithmetic Expression</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>Arithmetic Expression</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseArithmeticExpression(ArithmeticExpression object) {
+		return null;
+	}
+
+	/**
 	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/util/AmaltheaValidator.java b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/util/AmaltheaValidator.java
index 9a290c6..be5e550 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/util/AmaltheaValidator.java
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xcore-gen/org/eclipse/app4mc/amalthea/model/util/AmaltheaValidator.java
@@ -926,6 +926,8 @@
 				return validateLocalModeLabelRef((LocalModeLabelRef)value, diagnostics, context);
 			case AmaltheaPackage.CHANNEL_FILL_REF:
 				return validateChannelFillRef((ChannelFillRef)value, diagnostics, context);
+			case AmaltheaPackage.ARITHMETIC_EXPRESSION:
+				return validateArithmeticExpression((ArithmeticExpression)value, diagnostics, context);
 			case AmaltheaPackage.RELATIONAL_OPERATOR:
 				return validateRelationalOperator((RelationalOperator)value, diagnostics, context);
 			case AmaltheaPackage.PARAMETER_TYPE:
@@ -1050,6 +1052,8 @@
 				return validateConcurrencyType((ConcurrencyType)value, diagnostics, context);
 			case AmaltheaPackage.ASIL_TYPE:
 				return validateASILType((ASILType)value, diagnostics, context);
+			case AmaltheaPackage.ARITHMETIC_OPERATOR:
+				return validateArithmeticOperator((ArithmeticOperator)value, diagnostics, context);
 			case AmaltheaPackage.ADDRESS:
 				return validateAddress((Long)value, diagnostics, context);
 			case AmaltheaPackage.POSITIVE_INT:
@@ -6130,6 +6134,15 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public boolean validateArithmeticExpression(ArithmeticExpression arithmeticExpression, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return validate_EveryDefaultConstraint(arithmeticExpression, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public boolean validateRelationalOperator(RelationalOperator relationalOperator, DiagnosticChain diagnostics, Map<Object, Object> context) {
 		return true;
 	}
@@ -6688,6 +6701,15 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public boolean validateArithmeticOperator(ArithmeticOperator arithmeticOperator, DiagnosticChain diagnostics, Map<Object, Object> context) {
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public boolean validateAddress(long address, DiagnosticChain diagnostics, Map<Object, Object> context) {
 		boolean result = validateAddress_Min(address, diagnostics, context);
 		return result;