Added model builders (preliminary)
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/.classpath b/plugins/org.eclipse.app4mc.amalthea.model/.classpath
index 15a4e05..d2ff62f 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model/.classpath
+++ b/plugins/org.eclipse.app4mc.amalthea.model/.classpath
@@ -8,5 +8,6 @@
 		</attributes>
 	</classpathentry>
 	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="xtend-gen"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/META-INF/MANIFEST.MF b/plugins/org.eclipse.app4mc.amalthea.model/META-INF/MANIFEST.MF
index e0c963e..322f1ad 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.app4mc.amalthea.model/META-INF/MANIFEST.MF
@@ -6,6 +6,7 @@
 Bundle-ClassPath: .
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.app4mc.amalthea.model,
+ org.eclipse.app4mc.amalthea.model.builder,
  org.eclipse.app4mc.amalthea.model.check,
  org.eclipse.app4mc.amalthea.model.impl,
  org.eclipse.app4mc.amalthea.model.io,
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/AmaltheaBuilder.xtend b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/AmaltheaBuilder.xtend
new file mode 100644
index 0000000..0bb3b88
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/AmaltheaBuilder.xtend
@@ -0,0 +1,85 @@
+package org.eclipse.app4mc.amalthea.model.builder
+
+import org.eclipse.app4mc.amalthea.model.Amalthea
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory
+import org.eclipse.app4mc.amalthea.model.CommonElements
+import org.eclipse.app4mc.amalthea.model.ComponentsModel
+import org.eclipse.app4mc.amalthea.model.ConstraintsModel
+import org.eclipse.app4mc.amalthea.model.EventModel
+import org.eclipse.app4mc.amalthea.model.HWModel
+import org.eclipse.app4mc.amalthea.model.IReferable
+import org.eclipse.app4mc.amalthea.model.MappingModel
+import org.eclipse.app4mc.amalthea.model.OSModel
+import org.eclipse.app4mc.amalthea.model.PropertyConstraintsModel
+import org.eclipse.app4mc.amalthea.model.SWModel
+import org.eclipse.app4mc.amalthea.model.StimuliModel
+
+class AmaltheaBuilder {
+
+	val objectRegistry = <String, IReferable> newHashMap
+
+	def amaltheaRoot((Amalthea)=>void initializer) {
+		AmaltheaFactory.eINSTANCE.createAmalthea.init(initializer)
+	}
+
+	// ********** Top level elements **********
+
+	def commonElements(Amalthea container, (CommonElements)=>void initializer) {
+		container.commonElements = AmaltheaFactory.eINSTANCE.createCommonElements.init(initializer)
+	}
+
+	def eventModel(Amalthea container, (EventModel)=>void initializer) {
+		container.eventModel = AmaltheaFactory.eINSTANCE.createEventModel.init(initializer)
+	}
+
+	def stimuliModel(Amalthea container, (StimuliModel)=>void initializer) {
+		container.stimuliModel = AmaltheaFactory.eINSTANCE.createStimuliModel.init(initializer)
+	}
+
+	def softwareModel(Amalthea container, (SWModel)=>void initializer) {
+		container.swModel = AmaltheaFactory.eINSTANCE.createSWModel.init(initializer)
+	}
+
+	def osModel(Amalthea container, (OSModel)=>void initializer) {
+		container.osModel = AmaltheaFactory.eINSTANCE.createOSModel.init(initializer)
+	}
+
+	def hardwareModel(Amalthea container, (HWModel)=>void initializer) {
+		container.hwModel = AmaltheaFactory.eINSTANCE.createHWModel.init(initializer)
+	}
+
+	def constraintsModel(Amalthea container, (ConstraintsModel)=>void initializer) {
+		container.constraintsModel = AmaltheaFactory.eINSTANCE.createConstraintsModel.init(initializer)
+	}
+
+	def propertyConstraintsModel(Amalthea container, (PropertyConstraintsModel)=>void initializer) {
+		container.propertyConstraintsModel = AmaltheaFactory.eINSTANCE.createPropertyConstraintsModel.init(initializer)
+	}
+
+	def componentsModel(Amalthea container, (ComponentsModel)=>void initializer) {
+		container.componentsModel = AmaltheaFactory.eINSTANCE.createComponentsModel.init(initializer)
+	}
+
+	def mappingModel(Amalthea container, (MappingModel)=>void initializer) {
+		container.mappingModel = AmaltheaFactory.eINSTANCE.createMappingModel.init(initializer)
+	}
+
+	// ********** Cross reference registry **********
+	
+	def <T extends IReferable> void register(T obj, String name) {
+		objectRegistry.put(name, obj)
+	}
+	
+	def <T extends IReferable> T ref(Class<T> cl, String name) {
+		val obj = objectRegistry.get(name)	
+		cl.cast(obj)
+	}
+
+	// ********** private **********
+
+	def private <T> T init(T obj, (T)=>void init) {
+		init.apply(obj)
+		return obj
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/CommonElementsBuilder.xtend b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/CommonElementsBuilder.xtend
new file mode 100644
index 0000000..8da9a30
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/CommonElementsBuilder.xtend
@@ -0,0 +1,34 @@
+package org.eclipse.app4mc.amalthea.model.builder
+
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory
+import org.eclipse.app4mc.amalthea.model.CommonElements
+import org.eclipse.app4mc.amalthea.model.CoreClassifier
+import org.eclipse.app4mc.amalthea.model.MemoryClassifier
+import org.eclipse.app4mc.amalthea.model.Tag
+
+class CommonElementsBuilder {
+
+	def commonElementsRoot((CommonElements)=>void initializer) {
+		AmaltheaFactory.eINSTANCE.createCommonElements.init(initializer)
+	}
+
+	// ********** Top level elements **********
+
+	def memoryClassifier(CommonElements container, (MemoryClassifier)=>void initializer) {
+		container.memoryClassifiers += AmaltheaFactory.eINSTANCE.createMemoryClassifier.init(initializer)
+	}
+	def coreClassifier(CommonElements container, (CoreClassifier)=>void initializer) {
+		container.coreClassifiers += AmaltheaFactory.eINSTANCE.createCoreClassifier.init(initializer)
+	}
+	def tag(CommonElements container, (Tag)=>void initializer) {
+		container.tags += AmaltheaFactory.eINSTANCE.createTag.init(initializer)
+	}
+
+	// ********** private **********
+
+	def private <T> T init(T obj, (T)=>void init) {
+		init.apply(obj)
+		return obj
+	}
+		
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/ConstraintsBuilder.xtend b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/ConstraintsBuilder.xtend
new file mode 100644
index 0000000..6df1998
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/ConstraintsBuilder.xtend
@@ -0,0 +1,5 @@
+package org.eclipse.app4mc.amalthea.model.builder
+
+class ConstraintsBuilder {
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/DatatypeBuilder.xtend b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/DatatypeBuilder.xtend
new file mode 100644
index 0000000..20d304e
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/DatatypeBuilder.xtend
@@ -0,0 +1,113 @@
+package org.eclipse.app4mc.amalthea.model.builder
+
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory
+import org.eclipse.app4mc.amalthea.model.Array
+import org.eclipse.app4mc.amalthea.model.BaseTypeDefinition
+import org.eclipse.app4mc.amalthea.model.Channel
+import org.eclipse.app4mc.amalthea.model.DataTypeDefinition
+import org.eclipse.app4mc.amalthea.model.Label
+import org.eclipse.app4mc.amalthea.model.Pointer
+import org.eclipse.app4mc.amalthea.model.SWModel
+import org.eclipse.app4mc.amalthea.model.Struct
+import org.eclipse.app4mc.amalthea.model.StructEntry
+
+class DatatypeBuilder {
+
+	def typeDefinition_BaseType(SWModel container, (BaseTypeDefinition)=>void initializer) {
+		container.typeDefinitions += AmaltheaFactory.eINSTANCE.createBaseTypeDefinition.init(initializer)
+	}
+
+	def typeDefinition_DataType(SWModel container, (DataTypeDefinition)=>void initializer) {
+		container.typeDefinitions += AmaltheaFactory.eINSTANCE.createDataTypeDefinition.init(initializer)
+	}
+
+	// ********** Data Types - Struct **********
+
+	def struct(Channel container, (Struct)=>void initializer) {
+		container.elementType = AmaltheaFactory.eINSTANCE.createStruct.init(initializer)
+	}
+
+	def struct(Label container, (Struct)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createStruct.init(initializer)
+	}
+
+	def struct(DataTypeDefinition container, (Struct)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createStruct.init(initializer)
+	}
+
+	def struct(Array container, (Struct)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createStruct.init(initializer)
+	}
+
+	def struct(StructEntry container, (Struct)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createStruct.init(initializer)
+	}
+
+	def struct(Pointer container, (Struct)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createStruct.init(initializer)
+	}
+
+	def entry(Struct container, (StructEntry)=>void initializer) {
+		container.entries += AmaltheaFactory.eINSTANCE.createStructEntry.init(initializer)
+	}
+
+	// ********** Data Types - Array **********
+
+	def array(Channel container, (Array)=>void initializer) {
+		container.elementType = AmaltheaFactory.eINSTANCE.createArray.init(initializer)
+	}
+
+	def array(Label container, (Array)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createArray.init(initializer)
+	}
+
+	def array(DataTypeDefinition container, (Array)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createArray.init(initializer)
+	}
+
+	def array(Array container, (Array)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createArray.init(initializer)
+	}
+
+	def array(StructEntry container, (Array)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createArray.init(initializer)
+	}
+
+	def array(Pointer container, (Array)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createArray.init(initializer)
+	}
+
+	// ********** Data Types - Pointer **********
+
+	def pointer(Channel container, (Pointer)=>void initializer) {
+		container.elementType = AmaltheaFactory.eINSTANCE.createPointer.init(initializer)
+	}
+
+	def pointer(Label container, (Pointer)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createPointer.init(initializer)
+	}
+
+	def pointer(DataTypeDefinition container, (Pointer)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createPointer.init(initializer)
+	}
+
+	def pointer(Array container, (Pointer)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createPointer.init(initializer)
+	}
+
+	def pointer(StructEntry container, (Pointer)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createPointer.init(initializer)
+	}
+
+	def pointer(Pointer container, (Pointer)=>void initializer) {
+		container.dataType = AmaltheaFactory.eINSTANCE.createPointer.init(initializer)
+	}
+
+	// ********** private **********
+
+	def private <T> T init(T obj, (T)=>void init) {
+		init.apply(obj)
+		return obj
+	}
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/HardwareBuilder.xtend b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/HardwareBuilder.xtend
new file mode 100644
index 0000000..0c0ddd2
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/HardwareBuilder.xtend
@@ -0,0 +1,61 @@
+package org.eclipse.app4mc.amalthea.model.builder
+
+import org.eclipse.app4mc.amalthea.model.HWModel
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory
+import org.eclipse.app4mc.amalthea.model.CacheDefinition
+import org.eclipse.app4mc.amalthea.model.MemoryDefinition
+import org.eclipse.app4mc.amalthea.model.ProcessingUnitDefinition
+import org.eclipse.app4mc.amalthea.model.ConnectionHandlerDefinition
+import org.eclipse.app4mc.amalthea.model.FrequencyDomain
+import org.eclipse.app4mc.amalthea.model.PowerDomain
+import org.eclipse.app4mc.amalthea.model.HwFeatureCategory
+import org.eclipse.app4mc.amalthea.model.HwStructure
+
+class HardwareBuilder {
+
+	def hardwareModelRoot((HWModel)=>void initializer) {
+		AmaltheaFactory.eINSTANCE.createHWModel.init(initializer)
+	}
+
+	// ********** Top level elements **********
+
+	def definition_Cache(HWModel container, (CacheDefinition)=>void initializer) {
+		container.definitions += AmaltheaFactory.eINSTANCE.createCacheDefinition.init(initializer)
+	}
+
+	def definition_Memory(HWModel container, (MemoryDefinition)=>void initializer) {
+		container.definitions += AmaltheaFactory.eINSTANCE.createMemoryDefinition.init(initializer)
+	}
+
+	def definition_ProcessingUnit(HWModel container, (ProcessingUnitDefinition)=>void initializer) {
+		container.definitions += AmaltheaFactory.eINSTANCE.createProcessingUnitDefinition.init(initializer)
+	}
+
+	def definition_ConnectionHandler(HWModel container, (ConnectionHandlerDefinition)=>void initializer) {
+		container.definitions += AmaltheaFactory.eINSTANCE.createConnectionHandlerDefinition.init(initializer)
+	}
+
+	def domain_Frequency(HWModel container, (FrequencyDomain)=>void initializer) {
+		container.domains += AmaltheaFactory.eINSTANCE.createFrequencyDomain.init(initializer)
+	}
+
+	def domain_Power(HWModel container, (PowerDomain)=>void initializer) {
+		container.domains += AmaltheaFactory.eINSTANCE.createPowerDomain.init(initializer)
+	}
+
+	def featureCategory(HWModel container, (HwFeatureCategory)=>void initializer) {
+		container.featureCategories += AmaltheaFactory.eINSTANCE.createHwFeatureCategory.init(initializer)
+	}
+
+	def structure(HWModel container, (HwStructure)=>void initializer) {
+		container.structures += AmaltheaFactory.eINSTANCE.createHwStructure.init(initializer)
+	}
+
+	// ********** private **********
+
+	def private <T> T init(T obj, (T)=>void init) {
+		init.apply(obj)
+		return obj
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/InstructionsBuilder.xtend b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/InstructionsBuilder.xtend
new file mode 100644
index 0000000..59793bd
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/InstructionsBuilder.xtend
@@ -0,0 +1,77 @@
+package org.eclipse.app4mc.amalthea.model.builder
+
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory
+import org.eclipse.app4mc.amalthea.model.Deviation
+import org.eclipse.app4mc.amalthea.model.Group
+import org.eclipse.app4mc.amalthea.model.HWModel
+import org.eclipse.app4mc.amalthea.model.LongObject
+import org.eclipse.app4mc.amalthea.model.ModeSwitchDefault
+import org.eclipse.app4mc.amalthea.model.ModeSwitchEntry
+import org.eclipse.app4mc.amalthea.model.ProbabilitySwitchEntry
+import org.eclipse.app4mc.amalthea.model.Runnable
+import org.eclipse.app4mc.amalthea.model.RunnableItem
+import org.eclipse.app4mc.amalthea.model.Scheduler
+import org.eclipse.app4mc.amalthea.model.util.InstructionsUtil
+
+class InstructionsBuilder {
+
+	// ********** Runnable Items - Execution Need **********
+
+	def execNeed_default_Instructions(Runnable container, long instructions) {
+		container.runnableItems += InstructionsUtil.createDefaultExecutionNeed(instructions)
+	}
+
+	def execNeed_default_Instructions(Runnable container, Deviation<LongObject> instructions) {
+		container.runnableItems += InstructionsUtil.createDefaultExecutionNeed(instructions)
+	}
+
+	def execNeed_default_Instructions(Group container, long instructions) {
+		container.items += InstructionsUtil.createDefaultExecutionNeed(instructions)
+	}
+	def execNeed_default_Instructions(Group container, Deviation<LongObject> instructions) {
+		container.items += InstructionsUtil.createDefaultExecutionNeed(instructions)
+	}
+
+	def execNeed_default_Instructions(ModeSwitchDefault<RunnableItem> container, long instructions) {
+		container.items += InstructionsUtil.createDefaultExecutionNeed(instructions)
+	}
+
+	def execNeed_default_Instructions(ModeSwitchDefault<RunnableItem> container, Deviation<LongObject> instructions) {
+		container.items += InstructionsUtil.createDefaultExecutionNeed(instructions)
+	}
+
+	def execNeed_default_Instructions(ModeSwitchEntry<RunnableItem> container, long instructions) {
+		container.items += InstructionsUtil.createDefaultExecutionNeed(instructions)
+	}
+
+	def execNeed_default_Instructions(ModeSwitchEntry<RunnableItem> container, Deviation<LongObject> instructions) {
+		container.items += InstructionsUtil.createDefaultExecutionNeed(instructions)
+	}
+
+	def execNeed_default_Instructions(ProbabilitySwitchEntry<RunnableItem> container, long instructions) {
+		container.items += InstructionsUtil.createDefaultExecutionNeed(instructions)
+	}
+
+	def execNeed_default_Instructions(ProbabilitySwitchEntry<RunnableItem> container, Deviation<LongObject> instructions) {
+		container.items += InstructionsUtil.createDefaultExecutionNeed(instructions)
+	}
+
+	// ********** Computation Items - Execution Need **********
+
+	def execNeed_default_Instructions(Scheduler container, long instructions) {
+		container.computationItems += InstructionsUtil.createDefaultExecutionNeed(instructions)
+	}
+
+	def execNeed_default_Instructions(Scheduler container, Deviation<LongObject> instructions) {
+		container.computationItems += InstructionsUtil.createDefaultExecutionNeed(instructions)
+	}
+
+	// ********** Hardware Feature Category **********
+
+	def featureCategory_Instructions(HWModel container) {
+		val category = AmaltheaFactory.eINSTANCE.createHwFeatureCategory()
+		category.name = InstructionsUtil.INSTRUCTIONS_CATEGORY_NAME
+		container.featureCategories += category
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/OperatingSystemBuilder.xtend b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/OperatingSystemBuilder.xtend
new file mode 100644
index 0000000..a6ab012
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/OperatingSystemBuilder.xtend
@@ -0,0 +1,95 @@
+package org.eclipse.app4mc.amalthea.model.builder
+
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory
+import org.eclipse.app4mc.amalthea.model.InterruptController
+import org.eclipse.app4mc.amalthea.model.LabelAccess
+import org.eclipse.app4mc.amalthea.model.OSModel
+import org.eclipse.app4mc.amalthea.model.OperatingSystem
+import org.eclipse.app4mc.amalthea.model.OsAPIInstructions
+import org.eclipse.app4mc.amalthea.model.OsDataConsistency
+import org.eclipse.app4mc.amalthea.model.OsISRInstructions
+import org.eclipse.app4mc.amalthea.model.OsInstructions
+import org.eclipse.app4mc.amalthea.model.Scheduler
+import org.eclipse.app4mc.amalthea.model.SchedulerAssociation
+import org.eclipse.app4mc.amalthea.model.SchedulingParameters
+import org.eclipse.app4mc.amalthea.model.Semaphore
+import org.eclipse.app4mc.amalthea.model.TaskScheduler
+import org.eclipse.app4mc.amalthea.model.VendorOperatingSystem
+
+class OperatingSystemBuilder {
+
+	def osModelRoot((OSModel)=>void initializer) {
+		AmaltheaFactory.eINSTANCE.createOSModel.init(initializer)
+	}
+
+	// ********** Top level elements **********
+
+	def operatingSystem(OSModel container, (OperatingSystem)=>void initializer) {
+		container.operatingSystems += AmaltheaFactory.eINSTANCE.createOperatingSystem.init(initializer)
+	}
+
+	def operatingSystem_Vendor(OSModel container, (VendorOperatingSystem)=>void initializer) {
+		container.operatingSystems += AmaltheaFactory.eINSTANCE.createVendorOperatingSystem.init(initializer)
+	}
+
+	def semaphore(OSModel container, (Semaphore)=>void initializer) {
+		container.semaphores += AmaltheaFactory.eINSTANCE.createSemaphore.init(initializer)
+	}
+
+	def osOverhead(OSModel container, (OsInstructions)=>void initializer) {
+		container.osOverheads += AmaltheaFactory.eINSTANCE.createOsInstructions.init(initializer)
+	}
+
+	// ********** Operating system **********
+
+	def taskScheduler(OperatingSystem container, (TaskScheduler)=>void initializer) {
+		container.taskSchedulers += AmaltheaFactory.eINSTANCE.createTaskScheduler.init(initializer)
+	}
+
+	def interruptController(OperatingSystem container, (InterruptController)=>void initializer) {
+		container.interruptControllers += AmaltheaFactory.eINSTANCE.createInterruptController.init(initializer)
+	}
+
+	def dataConsistency(OperatingSystem container, (OsDataConsistency)=>void initializer) {
+		container.osDataConsistency = AmaltheaFactory.eINSTANCE.createOsDataConsistency.init(initializer)
+	}
+
+	def labelAccess(Scheduler container, (LabelAccess)=>void initializer) {
+		container.computationItems += AmaltheaFactory.eINSTANCE.createLabelAccess.init(initializer)
+	}
+
+	def parentAssociation(TaskScheduler container, (SchedulerAssociation)=>void initializer) {
+		container.parentAssociation = AmaltheaFactory.eINSTANCE.createSchedulerAssociation.init(initializer)
+	}
+
+	def schedulingParameters(SchedulerAssociation container, (SchedulingParameters)=>void initializer) {
+		container.schedulingParameters = AmaltheaFactory.eINSTANCE.createSchedulingParameters.init(initializer)
+	}
+
+	def parameter_extension(SchedulerAssociation container, String key, String value) {
+		container.parameterExtensions.put(key, value)
+	}
+
+
+	// ********** OS instructions (overhead) **********
+
+	def apiOverhead(OsInstructions container, (OsAPIInstructions)=>void initializer) {
+		container.apiOverhead = AmaltheaFactory.eINSTANCE.createOsAPIInstructions.init(initializer)
+	}
+
+	def isrOverheadCat1(OsInstructions container, (OsISRInstructions)=>void initializer) {
+		container.isrCategory1Overhead = AmaltheaFactory.eINSTANCE.createOsISRInstructions.init(initializer)
+	}
+
+	def isrOverheadCat2(OsInstructions container, (OsISRInstructions)=>void initializer) {
+		container.isrCategory2Overhead = AmaltheaFactory.eINSTANCE.createOsISRInstructions.init(initializer)
+	}
+
+	// ********** private **********
+
+	def private <T> T init(T obj, (T)=>void init) {
+		init.apply(obj)
+		return obj
+	}
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/SoftwareBuilder.xtend b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/SoftwareBuilder.xtend
new file mode 100644
index 0000000..9a6e177
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/builder/SoftwareBuilder.xtend
@@ -0,0 +1,245 @@
+package org.eclipse.app4mc.amalthea.model.builder
+
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory
+import org.eclipse.app4mc.amalthea.model.Channel
+import org.eclipse.app4mc.amalthea.model.CustomActivation
+import org.eclipse.app4mc.amalthea.model.EventActivation
+import org.eclipse.app4mc.amalthea.model.Group
+import org.eclipse.app4mc.amalthea.model.ISR
+import org.eclipse.app4mc.amalthea.model.Label
+import org.eclipse.app4mc.amalthea.model.LabelAccess
+import org.eclipse.app4mc.amalthea.model.Mode
+import org.eclipse.app4mc.amalthea.model.ModeLabel
+import org.eclipse.app4mc.amalthea.model.ModeLiteral
+import org.eclipse.app4mc.amalthea.model.ModeSwitchDefault
+import org.eclipse.app4mc.amalthea.model.ModeSwitchEntry
+import org.eclipse.app4mc.amalthea.model.PeriodicActivation
+import org.eclipse.app4mc.amalthea.model.ProbabilitySwitchEntry
+import org.eclipse.app4mc.amalthea.model.ProcessPrototype
+import org.eclipse.app4mc.amalthea.model.Runnable
+import org.eclipse.app4mc.amalthea.model.RunnableCall
+import org.eclipse.app4mc.amalthea.model.RunnableItem
+import org.eclipse.app4mc.amalthea.model.RunnableModeSwitch
+import org.eclipse.app4mc.amalthea.model.RunnableParameter
+import org.eclipse.app4mc.amalthea.model.RunnableProbabilitySwitch
+import org.eclipse.app4mc.amalthea.model.SWModel
+import org.eclipse.app4mc.amalthea.model.Section
+import org.eclipse.app4mc.amalthea.model.SingleActivation
+import org.eclipse.app4mc.amalthea.model.SporadicActivation
+import org.eclipse.app4mc.amalthea.model.Task
+import org.eclipse.app4mc.amalthea.model.VariableRateActivation
+
+class SoftwareBuilder {
+
+	def softwareModelRoot( (SWModel)=>void initializer) {
+		AmaltheaFactory.eINSTANCE.createSWModel.init(initializer)
+	}
+
+	// ********** Top level elements **********
+
+	def isr(SWModel container, (ISR)=>void initializer) {
+		container.isrs += AmaltheaFactory.eINSTANCE.createISR.init(initializer)
+	}
+
+	def task(SWModel container, (Task)=>void initializer) {
+		container.tasks += AmaltheaFactory.eINSTANCE.createTask.init(initializer)
+	}
+
+	def runnable(SWModel container, (Runnable)=>void initializer) {
+		container.runnables += AmaltheaFactory.eINSTANCE.createRunnable.init(initializer)
+	}
+
+	def label(SWModel container, (Label)=>void initializer) {
+		container.labels += AmaltheaFactory.eINSTANCE.createLabel.init(initializer)
+	}
+
+	def channel(SWModel container, (Channel)=>void initializer) {
+		container.channels += AmaltheaFactory.eINSTANCE.createChannel.init(initializer)
+	}
+
+	def processPrototype(SWModel container, (ProcessPrototype)=>void initializer) {
+		container.processPrototypes += AmaltheaFactory.eINSTANCE.createProcessPrototype.init(initializer)
+	}
+
+	def section(SWModel container, (Section)=>void initializer) {
+		container.sections += AmaltheaFactory.eINSTANCE.createSection.init(initializer)
+	}
+
+	def activation_Single(SWModel container, (SingleActivation)=>void initializer) {
+		container.activations += AmaltheaFactory.eINSTANCE.createSingleActivation.init(initializer)
+	}
+
+	def activation_Sporadic(SWModel container, (SporadicActivation)=>void initializer) {
+		container.activations += AmaltheaFactory.eINSTANCE.createSporadicActivation.init(initializer)
+	}
+
+	def activation_Periodic(SWModel container, (PeriodicActivation)=>void initializer) {
+		container.activations += AmaltheaFactory.eINSTANCE.createPeriodicActivation.init(initializer)
+	}
+
+	def activation_Event(SWModel container, (EventActivation)=>void initializer) {
+		container.activations += AmaltheaFactory.eINSTANCE.createEventActivation.init(initializer)
+	}
+
+	def activation_VariableRate(SWModel container, (VariableRateActivation)=>void initializer) {
+		container.activations += AmaltheaFactory.eINSTANCE.createVariableRateActivation.init(initializer)
+	}
+
+	def activation_Custom(SWModel container, (CustomActivation)=>void initializer) {
+		container.activations += AmaltheaFactory.eINSTANCE.createCustomActivation.init(initializer)
+	}
+
+	def mode(SWModel container, (Mode)=>void initializer) {
+		container.modes += AmaltheaFactory.eINSTANCE.createMode.init(initializer)
+	}
+
+	def modeLabel(SWModel container, (ModeLabel)=>void initializer) {
+		container.modeLabels += AmaltheaFactory.eINSTANCE.createModeLabel.init(initializer)
+	}
+
+	// ********** Mode Literals **********
+
+	def literal(Mode container, (ModeLiteral)=>void initializer) {
+		container.literals += AmaltheaFactory.eINSTANCE.createModeLiteral.init(initializer)
+	}
+
+	// ********** Runnable Parameters **********
+
+	def parameter(Runnable container, (RunnableParameter)=>void initializer) {
+		container.parameters += AmaltheaFactory.eINSTANCE.createRunnableParameter.init(initializer)
+	}
+
+	// ********** Runnable Items - Container - Group **********
+
+	def group(Runnable container, (Group)=>void initializer) {
+		container.runnableItems += AmaltheaFactory.eINSTANCE.createGroup.init(initializer)
+	}
+
+	def group(Group container, (Group)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createGroup.init(initializer)
+	}
+
+	def group(ModeSwitchDefault<RunnableItem> container, (Group)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createGroup.init(initializer)
+	}
+
+	def group(ModeSwitchEntry<RunnableItem> container, (Group)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createGroup.init(initializer)
+	}
+
+	def group(ProbabilitySwitchEntry<RunnableItem> container, (Group)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createGroup.init(initializer)
+	}
+
+	// ********** Runnable Items - Container - RunnableModeSwitch **********
+
+	def modeSwitch(Runnable container, (RunnableModeSwitch)=>void initializer) {
+		container.runnableItems += AmaltheaFactory.eINSTANCE.createRunnableModeSwitch.init(initializer)
+	}
+
+	def modeSwitch(Group container, (RunnableModeSwitch)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createRunnableModeSwitch.init(initializer)
+	}
+
+	def modeSwitch(ModeSwitchDefault<RunnableItem> container, (RunnableModeSwitch)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createRunnableModeSwitch.init(initializer)
+	}
+
+	def modeSwitch(ModeSwitchEntry<RunnableItem> container, (RunnableModeSwitch)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createRunnableModeSwitch.init(initializer)
+	}
+
+	def modeSwitch(ProbabilitySwitchEntry<RunnableItem> container, (RunnableModeSwitch)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createRunnableModeSwitch.init(initializer)
+	}
+
+	def entry(RunnableModeSwitch container, (ModeSwitchEntry<RunnableItem>)=>void initializer) {
+		container.entries += AmaltheaFactory.eINSTANCE.createModeSwitchEntry.init(initializer)
+	}
+
+	def defaultEntry(RunnableModeSwitch container, (ModeSwitchDefault<RunnableItem>)=>void initializer) {
+		container.defaultEntry = AmaltheaFactory.eINSTANCE.createModeSwitchDefault.init(initializer)
+	}
+
+	// ********** Runnable Items - Container - RunnableProbabilitySwitch **********
+
+	def probabilitySwitch(Runnable container, (RunnableProbabilitySwitch)=>void initializer) {
+		container.runnableItems += AmaltheaFactory.eINSTANCE.createRunnableProbabilitySwitch.init(initializer)
+	}
+
+	def probabilitySwitch(Group container, (RunnableProbabilitySwitch)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createRunnableProbabilitySwitch.init(initializer)
+	}
+
+	def probabilitySwitch(ModeSwitchDefault<RunnableItem> container, (RunnableProbabilitySwitch)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createRunnableProbabilitySwitch.init(initializer)
+	}
+
+	def probabilitySwitch(ModeSwitchEntry<RunnableItem> container, (RunnableProbabilitySwitch)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createRunnableProbabilitySwitch.init(initializer)
+	}
+
+	def probabilitySwitch(ProbabilitySwitchEntry<RunnableItem> container, (RunnableProbabilitySwitch)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createRunnableProbabilitySwitch.init(initializer)
+	}
+
+	def entry(RunnableProbabilitySwitch container, (ProbabilitySwitchEntry<RunnableItem>)=>void initializer) {
+		container.entries += AmaltheaFactory.eINSTANCE.createProbabilitySwitchEntry.init(initializer)
+	}
+
+	// ********** Runnable Items - Label access **********
+
+	def labelAccess(Runnable container, (LabelAccess)=>void initializer) {
+		container.runnableItems += AmaltheaFactory.eINSTANCE.createLabelAccess.init(initializer)
+	}
+
+	def labelAccess(Group container, (LabelAccess)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createLabelAccess.init(initializer)
+	}
+
+	def labelAccess(ModeSwitchDefault<RunnableItem> container, (LabelAccess)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createLabelAccess.init(initializer)
+	}
+
+	def labelAccess(ModeSwitchEntry<RunnableItem> container, (LabelAccess)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createLabelAccess.init(initializer)
+	}
+
+	def labelAccess(ProbabilitySwitchEntry<RunnableItem> container, (LabelAccess)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createLabelAccess.init(initializer)
+	}
+
+	// ********** Runnable Items - Runnable call **********
+
+	def runnableCall(Runnable container, (RunnableCall)=>void initializer) {
+		container.runnableItems += AmaltheaFactory.eINSTANCE.createRunnableCall.init(initializer)
+	}
+
+	def runnableCall(Group container, (RunnableCall)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createRunnableCall.init(initializer)
+	}
+
+	def runnableCall(ModeSwitchDefault<RunnableItem> container, (RunnableCall)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createRunnableCall.init(initializer)
+	}
+
+	def runnableCall(ModeSwitchEntry<RunnableItem> container, (RunnableCall)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createRunnableCall.init(initializer)
+	}
+
+	def runnableCall(ProbabilitySwitchEntry<RunnableItem> container, (RunnableCall)=>void initializer) {
+		container.items += AmaltheaFactory.eINSTANCE.createRunnableCall.init(initializer)
+	}
+
+	// ********** Runnable Items - TODO **********
+
+
+
+	// ********** private **********
+
+	def private <T> T init(T obj, (T)=>void init) {
+		init.apply(obj)
+		return obj
+	}
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/util/CustomPropertyUtil.java b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/util/CustomPropertyUtil.java
index bc8cff3..312faaa 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/util/CustomPropertyUtil.java
+++ b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/util/CustomPropertyUtil.java
@@ -17,8 +17,11 @@
 
 import org.eclipse.app4mc.amalthea.model.AmaltheaFactory;
 import org.eclipse.app4mc.amalthea.model.IAnnotatable;
+import org.eclipse.app4mc.amalthea.model.IReferable;
 import org.eclipse.app4mc.amalthea.model.IntegerObject;
+import org.eclipse.app4mc.amalthea.model.ReferenceObject;
 import org.eclipse.app4mc.amalthea.model.StringObject;
+import org.eclipse.app4mc.amalthea.model.Time;
 import org.eclipse.app4mc.amalthea.model.Value;
 
 public final class CustomPropertyUtil {
@@ -31,7 +34,7 @@
 		
 		return oldValue;
 	}
-	
+
 	public static Value customPut(IAnnotatable object, String key, String str) {
 		StringObject valueObject;
 		valueObject = AmaltheaFactory.eINSTANCE.createStringObject();
@@ -40,7 +43,26 @@
 		
 		return oldValue;
 	}
-	
+
+	public static Value customPut(IAnnotatable object, String key, Time time) {
+		Time valueObject;
+		valueObject = AmaltheaFactory.eINSTANCE.createTime();
+		valueObject.setValue(time.getValue());
+		valueObject.setUnit(time.getUnit());
+		Value oldValue = object.getCustomProperties().put(key, valueObject);
+		
+		return oldValue;
+	}
+
+	public static Value customPut(IAnnotatable object, String key, IReferable reference) {
+		ReferenceObject valueObject;
+		valueObject = AmaltheaFactory.eINSTANCE.createReferenceObject();
+		valueObject.setValue(reference);
+		Value oldValue = object.getCustomProperties().put(key, valueObject);
+		
+		return oldValue;
+	}
+
 	public static Integer customGetInteger(IAnnotatable object, String key) {
 		Value valueObject = object.getCustomProperties().get(key);
 		if (valueObject instanceof IntegerObject) {
@@ -59,4 +81,26 @@
 		}
 	}
 
+	public static Time customGetTime(IAnnotatable object, String key) {
+		Value valueObject = object.getCustomProperties().get(key);
+		if (valueObject instanceof Time) {
+			Time time = (Time) valueObject;
+			Time result = AmaltheaFactory.eINSTANCE.createTime();
+			result.setValue(time.getValue());
+			result.setUnit(time.getUnit());
+			return result;
+		} else {
+			return null;
+		}
+	}
+
+	public static IReferable customGetReference(IAnnotatable object, String key) {
+		Value valueObject = object.getCustomProperties().get(key);
+		if (valueObject instanceof ReferenceObject) {
+			return ((ReferenceObject) valueObject).getValue();
+		} else {
+			return null;
+		}
+	}
+
 }
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/util/FactoryUtil.java b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/util/FactoryUtil.java
index c3b8815..75a94ab 100644
--- a/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/util/FactoryUtil.java
+++ b/plugins/org.eclipse.app4mc.amalthea.model/src/org/eclipse/app4mc/amalthea/model/util/FactoryUtil.java
@@ -21,20 +21,115 @@
 import java.util.regex.Pattern;
 
 import org.eclipse.app4mc.amalthea.model.AmaltheaFactory;
+import org.eclipse.app4mc.amalthea.model.DataSize;
+import org.eclipse.app4mc.amalthea.model.DataSizeUnit;
 import org.eclipse.app4mc.amalthea.model.Deviation;
 import org.eclipse.app4mc.amalthea.model.ExecutionNeed;
+import org.eclipse.app4mc.amalthea.model.Frequency;
+import org.eclipse.app4mc.amalthea.model.FrequencyUnit;
 import org.eclipse.app4mc.amalthea.model.HwFeature;
+import org.eclipse.app4mc.amalthea.model.LatencyConstant;
+import org.eclipse.app4mc.amalthea.model.LatencyDeviation;
 import org.eclipse.app4mc.amalthea.model.LongObject;
 import org.eclipse.app4mc.amalthea.model.Need;
 import org.eclipse.app4mc.amalthea.model.NeedConstant;
 import org.eclipse.app4mc.amalthea.model.NeedDeviation;
 import org.eclipse.app4mc.amalthea.model.Time;
 import org.eclipse.app4mc.amalthea.model.TimeUnit;
+import org.eclipse.app4mc.amalthea.model.TypeDefinition;
+import org.eclipse.app4mc.amalthea.model.TypeRef;
+import org.eclipse.app4mc.amalthea.model.Voltage;
+import org.eclipse.app4mc.amalthea.model.VoltageUnit;
 import org.eclipse.app4mc.amalthea.model.WeibullEstimators;
 
 public class FactoryUtil {
 
 	/**
+	 * Creates a data size out of a value and a unit
+	 * @param value
+	 * @param unit
+	 * @return DataSize
+	 */
+	public static DataSize createDataSize(long value, DataSizeUnit unit) {
+		DataSize size = AmaltheaFactory.eINSTANCE.createDataSize();
+		size.setValue(BigInteger.valueOf(value));
+		size.setUnit(unit);
+		return size;
+	}
+	
+	/**
+	 * Creates a frequency out of a value and a unit
+	 * @param value
+	 * @param unit
+	 * @return Frequency
+	 */
+	public static Frequency createFrequency(double value, FrequencyUnit unit) {
+		Frequency frequency = AmaltheaFactory.eINSTANCE.createFrequency();
+		frequency.setValue(value);
+		frequency.setUnit(unit);
+		return frequency;
+	}
+	
+	/**
+	 * Creates a voltage out of a value and a unit
+	 * @param value
+	 * @param unit
+	 * @return Voltage
+	 */
+	public static Voltage createVoltage(double value, VoltageUnit unit) {
+		Voltage voltage = AmaltheaFactory.eINSTANCE.createVoltage();
+		voltage.setValue(value);
+		voltage.setUnit(unit);
+		return voltage;
+	}
+
+	/**
+	 * Creates a time out of a value and a unit
+	 * @param value
+	 * @param unit
+	 * @return Time
+	 */
+	public static Time createTime(long value, TimeUnit unit) {
+		Time time = AmaltheaFactory.eINSTANCE.createTime();
+		time.setValue(BigInteger.valueOf(value));
+		time.setUnit(unit);
+		return time;
+	}
+
+	/**
+	 * Creates a TypeRef object that refers to a type definition
+	 * @param typeDefinition
+	 * @return TypeRef
+	 */
+	public static TypeRef createTypeRef(TypeDefinition typeDefinition) {
+		TypeRef refObj = AmaltheaFactory.eINSTANCE.createTypeRef();
+		refObj.setTypeDef(typeDefinition);;
+		return refObj;
+	}
+
+	/**
+	 * Creates a HwLatency with constant cycles
+	 * @param cycles
+	 * @return LatencyConstant
+	 */
+	public static LatencyConstant createLatency(long cycles) {
+		LatencyConstant latency = AmaltheaFactory.eINSTANCE.createLatencyConstant();
+		latency.setCycles(cycles);
+		return latency;
+	}
+
+	/**
+	 * Creates a HwLatency with a deviation of cycles
+	 * @param cycles
+	 * @return LatencyDeviation
+	 */
+	public static LatencyDeviation createLatency(Deviation<LongObject> cycles) {
+		LatencyDeviation latency = AmaltheaFactory.eINSTANCE.createLatencyDeviation();
+		latency.setCycles(cycles);;
+		return latency;
+	}
+
+	/**
 	 * Creates a time out of a value and a unit given as String (lower case).
 	 * @param value
 	 * @param unit
@@ -51,7 +146,7 @@
 		
 		return TimeUtil.adjustTimeUnit(BigInteger.valueOf(value), tu);
 	}
-	
+
 	public static Time createTime(BigInteger value, String unit) {
 		TimeUnit tu = null;
 		if(unit.toLowerCase().equals("ps")) tu = TimeUnit.PS;
@@ -63,7 +158,7 @@
 		
 		return TimeUtil.adjustTimeUnit(new BigInteger(value.toByteArray()), tu);
 	}
-	
+
 	/**
 	 * Creates a Time object parsed from a text representation. 
 	 * @param timeString string representation of a time (number follwed by time unit s, ms, us, ns or ps)  
@@ -87,7 +182,7 @@
 		time.setUnit(inputTime.getUnit());
 		return time;
 	}
-	
+
 	/**
 	 * 
 	 * @param executionNeedCount	absolute number of executionNeedCount (simular to instructions)
@@ -109,7 +204,6 @@
 
 		return TimeUtil.adjustTimeUnit(runtime, units.get(timeUnitIndex));
 	}
-	
 
 	/**
 	 * Returns a created Weibull Deviation.
@@ -129,9 +223,7 @@
 		result.setLowerBound(lB);
 		return result;
 	}
-	
-	
-	
+
 	/**
 	 * Returns a created Weibull Estimator.
 	 * @param avgR
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/AmaltheaBuilder.java b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/AmaltheaBuilder.java
new file mode 100644
index 0000000..aa48aee
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/AmaltheaBuilder.java
@@ -0,0 +1,85 @@
+package org.eclipse.app4mc.amalthea.model.builder;
+
+import java.util.HashMap;
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory;
+import org.eclipse.app4mc.amalthea.model.CommonElements;
+import org.eclipse.app4mc.amalthea.model.ComponentsModel;
+import org.eclipse.app4mc.amalthea.model.ConstraintsModel;
+import org.eclipse.app4mc.amalthea.model.EventModel;
+import org.eclipse.app4mc.amalthea.model.HWModel;
+import org.eclipse.app4mc.amalthea.model.IReferable;
+import org.eclipse.app4mc.amalthea.model.MappingModel;
+import org.eclipse.app4mc.amalthea.model.OSModel;
+import org.eclipse.app4mc.amalthea.model.PropertyConstraintsModel;
+import org.eclipse.app4mc.amalthea.model.SWModel;
+import org.eclipse.app4mc.amalthea.model.StimuliModel;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
+
+@SuppressWarnings("all")
+public class AmaltheaBuilder {
+  private final HashMap<String, IReferable> objectRegistry = CollectionLiterals.<String, IReferable>newHashMap();
+  
+  public Amalthea amaltheaRoot(final Procedure1<? super Amalthea> initializer) {
+    return this.<Amalthea>init(AmaltheaFactory.eINSTANCE.createAmalthea(), initializer);
+  }
+  
+  public void commonElements(final Amalthea container, final Procedure1<? super CommonElements> initializer) {
+    container.setCommonElements(this.<CommonElements>init(AmaltheaFactory.eINSTANCE.createCommonElements(), initializer));
+  }
+  
+  public void eventModel(final Amalthea container, final Procedure1<? super EventModel> initializer) {
+    container.setEventModel(this.<EventModel>init(AmaltheaFactory.eINSTANCE.createEventModel(), initializer));
+  }
+  
+  public void stimuliModel(final Amalthea container, final Procedure1<? super StimuliModel> initializer) {
+    container.setStimuliModel(this.<StimuliModel>init(AmaltheaFactory.eINSTANCE.createStimuliModel(), initializer));
+  }
+  
+  public void softwareModel(final Amalthea container, final Procedure1<? super SWModel> initializer) {
+    container.setSwModel(this.<SWModel>init(AmaltheaFactory.eINSTANCE.createSWModel(), initializer));
+  }
+  
+  public void osModel(final Amalthea container, final Procedure1<? super OSModel> initializer) {
+    container.setOsModel(this.<OSModel>init(AmaltheaFactory.eINSTANCE.createOSModel(), initializer));
+  }
+  
+  public void hardwareModel(final Amalthea container, final Procedure1<? super HWModel> initializer) {
+    container.setHwModel(this.<HWModel>init(AmaltheaFactory.eINSTANCE.createHWModel(), initializer));
+  }
+  
+  public void constraintsModel(final Amalthea container, final Procedure1<? super ConstraintsModel> initializer) {
+    container.setConstraintsModel(this.<ConstraintsModel>init(AmaltheaFactory.eINSTANCE.createConstraintsModel(), initializer));
+  }
+  
+  public void propertyConstraintsModel(final Amalthea container, final Procedure1<? super PropertyConstraintsModel> initializer) {
+    container.setPropertyConstraintsModel(this.<PropertyConstraintsModel>init(AmaltheaFactory.eINSTANCE.createPropertyConstraintsModel(), initializer));
+  }
+  
+  public void componentsModel(final Amalthea container, final Procedure1<? super ComponentsModel> initializer) {
+    container.setComponentsModel(this.<ComponentsModel>init(AmaltheaFactory.eINSTANCE.createComponentsModel(), initializer));
+  }
+  
+  public void mappingModel(final Amalthea container, final Procedure1<? super MappingModel> initializer) {
+    container.setMappingModel(this.<MappingModel>init(AmaltheaFactory.eINSTANCE.createMappingModel(), initializer));
+  }
+  
+  public <T extends IReferable> void register(final T obj, final String name) {
+    this.objectRegistry.put(name, obj);
+  }
+  
+  public <T extends IReferable> T ref(final Class<T> cl, final String name) {
+    T _xblockexpression = null;
+    {
+      final IReferable obj = this.objectRegistry.get(name);
+      _xblockexpression = cl.cast(obj);
+    }
+    return _xblockexpression;
+  }
+  
+  private <T extends Object> T init(final T obj, final Procedure1<? super T> init) {
+    init.apply(obj);
+    return obj;
+  }
+}
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/CommonElementsBuilder.java b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/CommonElementsBuilder.java
new file mode 100644
index 0000000..6b7bc2b
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/CommonElementsBuilder.java
@@ -0,0 +1,39 @@
+package org.eclipse.app4mc.amalthea.model.builder;
+
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory;
+import org.eclipse.app4mc.amalthea.model.CommonElements;
+import org.eclipse.app4mc.amalthea.model.CoreClassifier;
+import org.eclipse.app4mc.amalthea.model.MemoryClassifier;
+import org.eclipse.app4mc.amalthea.model.Tag;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
+
+@SuppressWarnings("all")
+public class CommonElementsBuilder {
+  public CommonElements commonElementsRoot(final Procedure1<? super CommonElements> initializer) {
+    return this.<CommonElements>init(AmaltheaFactory.eINSTANCE.createCommonElements(), initializer);
+  }
+  
+  public boolean memoryClassifier(final CommonElements container, final Procedure1<? super MemoryClassifier> initializer) {
+    EList<MemoryClassifier> _memoryClassifiers = container.getMemoryClassifiers();
+    MemoryClassifier _init = this.<MemoryClassifier>init(AmaltheaFactory.eINSTANCE.createMemoryClassifier(), initializer);
+    return _memoryClassifiers.add(_init);
+  }
+  
+  public boolean coreClassifier(final CommonElements container, final Procedure1<? super CoreClassifier> initializer) {
+    EList<CoreClassifier> _coreClassifiers = container.getCoreClassifiers();
+    CoreClassifier _init = this.<CoreClassifier>init(AmaltheaFactory.eINSTANCE.createCoreClassifier(), initializer);
+    return _coreClassifiers.add(_init);
+  }
+  
+  public boolean tag(final CommonElements container, final Procedure1<? super Tag> initializer) {
+    EList<Tag> _tags = container.getTags();
+    Tag _init = this.<Tag>init(AmaltheaFactory.eINSTANCE.createTag(), initializer);
+    return _tags.add(_init);
+  }
+  
+  private <T extends Object> T init(final T obj, final Procedure1<? super T> init) {
+    init.apply(obj);
+    return obj;
+  }
+}
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/ConstraintsBuilder.java b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/ConstraintsBuilder.java
new file mode 100644
index 0000000..9d4ecc2
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/ConstraintsBuilder.java
@@ -0,0 +1,5 @@
+package org.eclipse.app4mc.amalthea.model.builder;
+
+@SuppressWarnings("all")
+public class ConstraintsBuilder {
+}
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/DatatypeBuilder.java b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/DatatypeBuilder.java
new file mode 100644
index 0000000..04263e3
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/DatatypeBuilder.java
@@ -0,0 +1,113 @@
+package org.eclipse.app4mc.amalthea.model.builder;
+
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory;
+import org.eclipse.app4mc.amalthea.model.Array;
+import org.eclipse.app4mc.amalthea.model.BaseTypeDefinition;
+import org.eclipse.app4mc.amalthea.model.Channel;
+import org.eclipse.app4mc.amalthea.model.DataTypeDefinition;
+import org.eclipse.app4mc.amalthea.model.Label;
+import org.eclipse.app4mc.amalthea.model.Pointer;
+import org.eclipse.app4mc.amalthea.model.SWModel;
+import org.eclipse.app4mc.amalthea.model.Struct;
+import org.eclipse.app4mc.amalthea.model.StructEntry;
+import org.eclipse.app4mc.amalthea.model.TypeDefinition;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
+
+@SuppressWarnings("all")
+public class DatatypeBuilder {
+  public boolean typeDefinition_BaseType(final SWModel container, final Procedure1<? super BaseTypeDefinition> initializer) {
+    EList<TypeDefinition> _typeDefinitions = container.getTypeDefinitions();
+    BaseTypeDefinition _init = this.<BaseTypeDefinition>init(AmaltheaFactory.eINSTANCE.createBaseTypeDefinition(), initializer);
+    return _typeDefinitions.add(_init);
+  }
+  
+  public boolean typeDefinition_DataType(final SWModel container, final Procedure1<? super DataTypeDefinition> initializer) {
+    EList<TypeDefinition> _typeDefinitions = container.getTypeDefinitions();
+    DataTypeDefinition _init = this.<DataTypeDefinition>init(AmaltheaFactory.eINSTANCE.createDataTypeDefinition(), initializer);
+    return _typeDefinitions.add(_init);
+  }
+  
+  public void struct(final Channel container, final Procedure1<? super Struct> initializer) {
+    container.setElementType(this.<Struct>init(AmaltheaFactory.eINSTANCE.createStruct(), initializer));
+  }
+  
+  public void struct(final Label container, final Procedure1<? super Struct> initializer) {
+    container.setDataType(this.<Struct>init(AmaltheaFactory.eINSTANCE.createStruct(), initializer));
+  }
+  
+  public void struct(final DataTypeDefinition container, final Procedure1<? super Struct> initializer) {
+    container.setDataType(this.<Struct>init(AmaltheaFactory.eINSTANCE.createStruct(), initializer));
+  }
+  
+  public void struct(final Array container, final Procedure1<? super Struct> initializer) {
+    container.setDataType(this.<Struct>init(AmaltheaFactory.eINSTANCE.createStruct(), initializer));
+  }
+  
+  public void struct(final StructEntry container, final Procedure1<? super Struct> initializer) {
+    container.setDataType(this.<Struct>init(AmaltheaFactory.eINSTANCE.createStruct(), initializer));
+  }
+  
+  public void struct(final Pointer container, final Procedure1<? super Struct> initializer) {
+    container.setDataType(this.<Struct>init(AmaltheaFactory.eINSTANCE.createStruct(), initializer));
+  }
+  
+  public boolean entry(final Struct container, final Procedure1<? super StructEntry> initializer) {
+    EList<StructEntry> _entries = container.getEntries();
+    StructEntry _init = this.<StructEntry>init(AmaltheaFactory.eINSTANCE.createStructEntry(), initializer);
+    return _entries.add(_init);
+  }
+  
+  public void array(final Channel container, final Procedure1<? super Array> initializer) {
+    container.setElementType(this.<Array>init(AmaltheaFactory.eINSTANCE.createArray(), initializer));
+  }
+  
+  public void array(final Label container, final Procedure1<? super Array> initializer) {
+    container.setDataType(this.<Array>init(AmaltheaFactory.eINSTANCE.createArray(), initializer));
+  }
+  
+  public void array(final DataTypeDefinition container, final Procedure1<? super Array> initializer) {
+    container.setDataType(this.<Array>init(AmaltheaFactory.eINSTANCE.createArray(), initializer));
+  }
+  
+  public void array(final Array container, final Procedure1<? super Array> initializer) {
+    container.setDataType(this.<Array>init(AmaltheaFactory.eINSTANCE.createArray(), initializer));
+  }
+  
+  public void array(final StructEntry container, final Procedure1<? super Array> initializer) {
+    container.setDataType(this.<Array>init(AmaltheaFactory.eINSTANCE.createArray(), initializer));
+  }
+  
+  public void array(final Pointer container, final Procedure1<? super Array> initializer) {
+    container.setDataType(this.<Array>init(AmaltheaFactory.eINSTANCE.createArray(), initializer));
+  }
+  
+  public void pointer(final Channel container, final Procedure1<? super Pointer> initializer) {
+    container.setElementType(this.<Pointer>init(AmaltheaFactory.eINSTANCE.createPointer(), initializer));
+  }
+  
+  public void pointer(final Label container, final Procedure1<? super Pointer> initializer) {
+    container.setDataType(this.<Pointer>init(AmaltheaFactory.eINSTANCE.createPointer(), initializer));
+  }
+  
+  public void pointer(final DataTypeDefinition container, final Procedure1<? super Pointer> initializer) {
+    container.setDataType(this.<Pointer>init(AmaltheaFactory.eINSTANCE.createPointer(), initializer));
+  }
+  
+  public void pointer(final Array container, final Procedure1<? super Pointer> initializer) {
+    container.setDataType(this.<Pointer>init(AmaltheaFactory.eINSTANCE.createPointer(), initializer));
+  }
+  
+  public void pointer(final StructEntry container, final Procedure1<? super Pointer> initializer) {
+    container.setDataType(this.<Pointer>init(AmaltheaFactory.eINSTANCE.createPointer(), initializer));
+  }
+  
+  public void pointer(final Pointer container, final Procedure1<? super Pointer> initializer) {
+    container.setDataType(this.<Pointer>init(AmaltheaFactory.eINSTANCE.createPointer(), initializer));
+  }
+  
+  private <T extends Object> T init(final T obj, final Procedure1<? super T> init) {
+    init.apply(obj);
+    return obj;
+  }
+}
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/HardwareBuilder.java b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/HardwareBuilder.java
new file mode 100644
index 0000000..8a30f34
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/HardwareBuilder.java
@@ -0,0 +1,76 @@
+package org.eclipse.app4mc.amalthea.model.builder;
+
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory;
+import org.eclipse.app4mc.amalthea.model.CacheDefinition;
+import org.eclipse.app4mc.amalthea.model.ConnectionHandlerDefinition;
+import org.eclipse.app4mc.amalthea.model.FrequencyDomain;
+import org.eclipse.app4mc.amalthea.model.HWModel;
+import org.eclipse.app4mc.amalthea.model.HwDefinition;
+import org.eclipse.app4mc.amalthea.model.HwDomain;
+import org.eclipse.app4mc.amalthea.model.HwFeatureCategory;
+import org.eclipse.app4mc.amalthea.model.HwStructure;
+import org.eclipse.app4mc.amalthea.model.MemoryDefinition;
+import org.eclipse.app4mc.amalthea.model.PowerDomain;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnitDefinition;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
+
+@SuppressWarnings("all")
+public class HardwareBuilder {
+  public HWModel hardwareModelRoot(final Procedure1<? super HWModel> initializer) {
+    return this.<HWModel>init(AmaltheaFactory.eINSTANCE.createHWModel(), initializer);
+  }
+  
+  public boolean definition_Cache(final HWModel container, final Procedure1<? super CacheDefinition> initializer) {
+    EList<HwDefinition> _definitions = container.getDefinitions();
+    CacheDefinition _init = this.<CacheDefinition>init(AmaltheaFactory.eINSTANCE.createCacheDefinition(), initializer);
+    return _definitions.add(_init);
+  }
+  
+  public boolean definition_Memory(final HWModel container, final Procedure1<? super MemoryDefinition> initializer) {
+    EList<HwDefinition> _definitions = container.getDefinitions();
+    MemoryDefinition _init = this.<MemoryDefinition>init(AmaltheaFactory.eINSTANCE.createMemoryDefinition(), initializer);
+    return _definitions.add(_init);
+  }
+  
+  public boolean definition_ProcessingUnit(final HWModel container, final Procedure1<? super ProcessingUnitDefinition> initializer) {
+    EList<HwDefinition> _definitions = container.getDefinitions();
+    ProcessingUnitDefinition _init = this.<ProcessingUnitDefinition>init(AmaltheaFactory.eINSTANCE.createProcessingUnitDefinition(), initializer);
+    return _definitions.add(_init);
+  }
+  
+  public boolean definition_ConnectionHandler(final HWModel container, final Procedure1<? super ConnectionHandlerDefinition> initializer) {
+    EList<HwDefinition> _definitions = container.getDefinitions();
+    ConnectionHandlerDefinition _init = this.<ConnectionHandlerDefinition>init(AmaltheaFactory.eINSTANCE.createConnectionHandlerDefinition(), initializer);
+    return _definitions.add(_init);
+  }
+  
+  public boolean domain_Frequency(final HWModel container, final Procedure1<? super FrequencyDomain> initializer) {
+    EList<HwDomain> _domains = container.getDomains();
+    FrequencyDomain _init = this.<FrequencyDomain>init(AmaltheaFactory.eINSTANCE.createFrequencyDomain(), initializer);
+    return _domains.add(_init);
+  }
+  
+  public boolean domain_Power(final HWModel container, final Procedure1<? super PowerDomain> initializer) {
+    EList<HwDomain> _domains = container.getDomains();
+    PowerDomain _init = this.<PowerDomain>init(AmaltheaFactory.eINSTANCE.createPowerDomain(), initializer);
+    return _domains.add(_init);
+  }
+  
+  public boolean featureCategory(final HWModel container, final Procedure1<? super HwFeatureCategory> initializer) {
+    EList<HwFeatureCategory> _featureCategories = container.getFeatureCategories();
+    HwFeatureCategory _init = this.<HwFeatureCategory>init(AmaltheaFactory.eINSTANCE.createHwFeatureCategory(), initializer);
+    return _featureCategories.add(_init);
+  }
+  
+  public boolean structure(final HWModel container, final Procedure1<? super HwStructure> initializer) {
+    EList<HwStructure> _structures = container.getStructures();
+    HwStructure _init = this.<HwStructure>init(AmaltheaFactory.eINSTANCE.createHwStructure(), initializer);
+    return _structures.add(_init);
+  }
+  
+  private <T extends Object> T init(final T obj, final Procedure1<? super T> init) {
+    init.apply(obj);
+    return obj;
+  }
+}
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/InstructionsBuilder.java b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/InstructionsBuilder.java
new file mode 100644
index 0000000..a0f90c4
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/InstructionsBuilder.java
@@ -0,0 +1,103 @@
+package org.eclipse.app4mc.amalthea.model.builder;
+
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory;
+import org.eclipse.app4mc.amalthea.model.ComputationItem;
+import org.eclipse.app4mc.amalthea.model.Deviation;
+import org.eclipse.app4mc.amalthea.model.ExecutionNeed;
+import org.eclipse.app4mc.amalthea.model.Group;
+import org.eclipse.app4mc.amalthea.model.HWModel;
+import org.eclipse.app4mc.amalthea.model.HwFeatureCategory;
+import org.eclipse.app4mc.amalthea.model.LongObject;
+import org.eclipse.app4mc.amalthea.model.ModeSwitchDefault;
+import org.eclipse.app4mc.amalthea.model.ModeSwitchEntry;
+import org.eclipse.app4mc.amalthea.model.ProbabilitySwitchEntry;
+import org.eclipse.app4mc.amalthea.model.RunnableItem;
+import org.eclipse.app4mc.amalthea.model.Scheduler;
+import org.eclipse.app4mc.amalthea.model.util.InstructionsUtil;
+import org.eclipse.emf.common.util.EList;
+
+@SuppressWarnings("all")
+public class InstructionsBuilder {
+  public boolean execNeed_default_Instructions(final org.eclipse.app4mc.amalthea.model.Runnable container, final long instructions) {
+    EList<RunnableItem> _runnableItems = container.getRunnableItems();
+    ExecutionNeed _createDefaultExecutionNeed = InstructionsUtil.createDefaultExecutionNeed(instructions);
+    return _runnableItems.add(_createDefaultExecutionNeed);
+  }
+  
+  public boolean execNeed_default_Instructions(final org.eclipse.app4mc.amalthea.model.Runnable container, final Deviation<LongObject> instructions) {
+    EList<RunnableItem> _runnableItems = container.getRunnableItems();
+    ExecutionNeed _createDefaultExecutionNeed = InstructionsUtil.createDefaultExecutionNeed(instructions);
+    return _runnableItems.add(_createDefaultExecutionNeed);
+  }
+  
+  public boolean execNeed_default_Instructions(final Group container, final long instructions) {
+    EList<RunnableItem> _items = container.getItems();
+    ExecutionNeed _createDefaultExecutionNeed = InstructionsUtil.createDefaultExecutionNeed(instructions);
+    return _items.add(_createDefaultExecutionNeed);
+  }
+  
+  public boolean execNeed_default_Instructions(final Group container, final Deviation<LongObject> instructions) {
+    EList<RunnableItem> _items = container.getItems();
+    ExecutionNeed _createDefaultExecutionNeed = InstructionsUtil.createDefaultExecutionNeed(instructions);
+    return _items.add(_createDefaultExecutionNeed);
+  }
+  
+  public boolean execNeed_default_Instructions(final ModeSwitchDefault<RunnableItem> container, final long instructions) {
+    EList<RunnableItem> _items = container.getItems();
+    ExecutionNeed _createDefaultExecutionNeed = InstructionsUtil.createDefaultExecutionNeed(instructions);
+    return _items.add(_createDefaultExecutionNeed);
+  }
+  
+  public boolean execNeed_default_Instructions(final ModeSwitchDefault<RunnableItem> container, final Deviation<LongObject> instructions) {
+    EList<RunnableItem> _items = container.getItems();
+    ExecutionNeed _createDefaultExecutionNeed = InstructionsUtil.createDefaultExecutionNeed(instructions);
+    return _items.add(_createDefaultExecutionNeed);
+  }
+  
+  public boolean execNeed_default_Instructions(final ModeSwitchEntry<RunnableItem> container, final long instructions) {
+    EList<RunnableItem> _items = container.getItems();
+    ExecutionNeed _createDefaultExecutionNeed = InstructionsUtil.createDefaultExecutionNeed(instructions);
+    return _items.add(_createDefaultExecutionNeed);
+  }
+  
+  public boolean execNeed_default_Instructions(final ModeSwitchEntry<RunnableItem> container, final Deviation<LongObject> instructions) {
+    EList<RunnableItem> _items = container.getItems();
+    ExecutionNeed _createDefaultExecutionNeed = InstructionsUtil.createDefaultExecutionNeed(instructions);
+    return _items.add(_createDefaultExecutionNeed);
+  }
+  
+  public boolean execNeed_default_Instructions(final ProbabilitySwitchEntry<RunnableItem> container, final long instructions) {
+    EList<RunnableItem> _items = container.getItems();
+    ExecutionNeed _createDefaultExecutionNeed = InstructionsUtil.createDefaultExecutionNeed(instructions);
+    return _items.add(_createDefaultExecutionNeed);
+  }
+  
+  public boolean execNeed_default_Instructions(final ProbabilitySwitchEntry<RunnableItem> container, final Deviation<LongObject> instructions) {
+    EList<RunnableItem> _items = container.getItems();
+    ExecutionNeed _createDefaultExecutionNeed = InstructionsUtil.createDefaultExecutionNeed(instructions);
+    return _items.add(_createDefaultExecutionNeed);
+  }
+  
+  public boolean execNeed_default_Instructions(final Scheduler container, final long instructions) {
+    EList<ComputationItem> _computationItems = container.getComputationItems();
+    ExecutionNeed _createDefaultExecutionNeed = InstructionsUtil.createDefaultExecutionNeed(instructions);
+    return _computationItems.add(_createDefaultExecutionNeed);
+  }
+  
+  public boolean execNeed_default_Instructions(final Scheduler container, final Deviation<LongObject> instructions) {
+    EList<ComputationItem> _computationItems = container.getComputationItems();
+    ExecutionNeed _createDefaultExecutionNeed = InstructionsUtil.createDefaultExecutionNeed(instructions);
+    return _computationItems.add(_createDefaultExecutionNeed);
+  }
+  
+  public boolean featureCategory_Instructions(final HWModel container) {
+    boolean _xblockexpression = false;
+    {
+      final HwFeatureCategory category = AmaltheaFactory.eINSTANCE.createHwFeatureCategory();
+      category.setName(InstructionsUtil.INSTRUCTIONS_CATEGORY_NAME);
+      EList<HwFeatureCategory> _featureCategories = container.getFeatureCategories();
+      _xblockexpression = _featureCategories.add(category);
+    }
+    return _xblockexpression;
+  }
+}
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/OperatingSystemBuilder.java b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/OperatingSystemBuilder.java
new file mode 100644
index 0000000..91f90d8
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/OperatingSystemBuilder.java
@@ -0,0 +1,102 @@
+package org.eclipse.app4mc.amalthea.model.builder;
+
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory;
+import org.eclipse.app4mc.amalthea.model.ComputationItem;
+import org.eclipse.app4mc.amalthea.model.InterruptController;
+import org.eclipse.app4mc.amalthea.model.LabelAccess;
+import org.eclipse.app4mc.amalthea.model.OSModel;
+import org.eclipse.app4mc.amalthea.model.OperatingSystem;
+import org.eclipse.app4mc.amalthea.model.OsAPIInstructions;
+import org.eclipse.app4mc.amalthea.model.OsDataConsistency;
+import org.eclipse.app4mc.amalthea.model.OsISRInstructions;
+import org.eclipse.app4mc.amalthea.model.OsInstructions;
+import org.eclipse.app4mc.amalthea.model.Scheduler;
+import org.eclipse.app4mc.amalthea.model.SchedulerAssociation;
+import org.eclipse.app4mc.amalthea.model.SchedulingParameters;
+import org.eclipse.app4mc.amalthea.model.Semaphore;
+import org.eclipse.app4mc.amalthea.model.TaskScheduler;
+import org.eclipse.app4mc.amalthea.model.VendorOperatingSystem;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
+
+@SuppressWarnings("all")
+public class OperatingSystemBuilder {
+  public OSModel osModelRoot(final Procedure1<? super OSModel> initializer) {
+    return this.<OSModel>init(AmaltheaFactory.eINSTANCE.createOSModel(), initializer);
+  }
+  
+  public boolean operatingSystem(final OSModel container, final Procedure1<? super OperatingSystem> initializer) {
+    EList<OperatingSystem> _operatingSystems = container.getOperatingSystems();
+    OperatingSystem _init = this.<OperatingSystem>init(AmaltheaFactory.eINSTANCE.createOperatingSystem(), initializer);
+    return _operatingSystems.add(_init);
+  }
+  
+  public boolean operatingSystem_Vendor(final OSModel container, final Procedure1<? super VendorOperatingSystem> initializer) {
+    EList<OperatingSystem> _operatingSystems = container.getOperatingSystems();
+    VendorOperatingSystem _init = this.<VendorOperatingSystem>init(AmaltheaFactory.eINSTANCE.createVendorOperatingSystem(), initializer);
+    return _operatingSystems.add(_init);
+  }
+  
+  public boolean semaphore(final OSModel container, final Procedure1<? super Semaphore> initializer) {
+    EList<Semaphore> _semaphores = container.getSemaphores();
+    Semaphore _init = this.<Semaphore>init(AmaltheaFactory.eINSTANCE.createSemaphore(), initializer);
+    return _semaphores.add(_init);
+  }
+  
+  public boolean osOverhead(final OSModel container, final Procedure1<? super OsInstructions> initializer) {
+    EList<OsInstructions> _osOverheads = container.getOsOverheads();
+    OsInstructions _init = this.<OsInstructions>init(AmaltheaFactory.eINSTANCE.createOsInstructions(), initializer);
+    return _osOverheads.add(_init);
+  }
+  
+  public boolean taskScheduler(final OperatingSystem container, final Procedure1<? super TaskScheduler> initializer) {
+    EList<TaskScheduler> _taskSchedulers = container.getTaskSchedulers();
+    TaskScheduler _init = this.<TaskScheduler>init(AmaltheaFactory.eINSTANCE.createTaskScheduler(), initializer);
+    return _taskSchedulers.add(_init);
+  }
+  
+  public boolean interruptController(final OperatingSystem container, final Procedure1<? super InterruptController> initializer) {
+    EList<InterruptController> _interruptControllers = container.getInterruptControllers();
+    InterruptController _init = this.<InterruptController>init(AmaltheaFactory.eINSTANCE.createInterruptController(), initializer);
+    return _interruptControllers.add(_init);
+  }
+  
+  public void dataConsistency(final OperatingSystem container, final Procedure1<? super OsDataConsistency> initializer) {
+    container.setOsDataConsistency(this.<OsDataConsistency>init(AmaltheaFactory.eINSTANCE.createOsDataConsistency(), initializer));
+  }
+  
+  public boolean labelAccess(final Scheduler container, final Procedure1<? super LabelAccess> initializer) {
+    EList<ComputationItem> _computationItems = container.getComputationItems();
+    LabelAccess _init = this.<LabelAccess>init(AmaltheaFactory.eINSTANCE.createLabelAccess(), initializer);
+    return _computationItems.add(_init);
+  }
+  
+  public void parentAssociation(final TaskScheduler container, final Procedure1<? super SchedulerAssociation> initializer) {
+    container.setParentAssociation(this.<SchedulerAssociation>init(AmaltheaFactory.eINSTANCE.createSchedulerAssociation(), initializer));
+  }
+  
+  public void schedulingParameters(final SchedulerAssociation container, final Procedure1<? super SchedulingParameters> initializer) {
+    container.setSchedulingParameters(this.<SchedulingParameters>init(AmaltheaFactory.eINSTANCE.createSchedulingParameters(), initializer));
+  }
+  
+  public String parameter_extension(final SchedulerAssociation container, final String key, final String value) {
+    return container.getParameterExtensions().put(key, value);
+  }
+  
+  public void apiOverhead(final OsInstructions container, final Procedure1<? super OsAPIInstructions> initializer) {
+    container.setApiOverhead(this.<OsAPIInstructions>init(AmaltheaFactory.eINSTANCE.createOsAPIInstructions(), initializer));
+  }
+  
+  public void isrOverheadCat1(final OsInstructions container, final Procedure1<? super OsISRInstructions> initializer) {
+    container.setIsrCategory1Overhead(this.<OsISRInstructions>init(AmaltheaFactory.eINSTANCE.createOsISRInstructions(), initializer));
+  }
+  
+  public void isrOverheadCat2(final OsInstructions container, final Procedure1<? super OsISRInstructions> initializer) {
+    container.setIsrCategory2Overhead(this.<OsISRInstructions>init(AmaltheaFactory.eINSTANCE.createOsISRInstructions(), initializer));
+  }
+  
+  private <T extends Object> T init(final T obj, final Procedure1<? super T> init) {
+    init.apply(obj);
+    return obj;
+  }
+}
diff --git a/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/SoftwareBuilder.java b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/SoftwareBuilder.java
new file mode 100644
index 0000000..ea0ab20
--- /dev/null
+++ b/plugins/org.eclipse.app4mc.amalthea.model/xtend-gen/org/eclipse/app4mc/amalthea/model/builder/SoftwareBuilder.java
@@ -0,0 +1,312 @@
+package org.eclipse.app4mc.amalthea.model.builder;
+
+import org.eclipse.app4mc.amalthea.model.Activation;
+import org.eclipse.app4mc.amalthea.model.AmaltheaFactory;
+import org.eclipse.app4mc.amalthea.model.Channel;
+import org.eclipse.app4mc.amalthea.model.CustomActivation;
+import org.eclipse.app4mc.amalthea.model.EventActivation;
+import org.eclipse.app4mc.amalthea.model.Group;
+import org.eclipse.app4mc.amalthea.model.ISR;
+import org.eclipse.app4mc.amalthea.model.Label;
+import org.eclipse.app4mc.amalthea.model.LabelAccess;
+import org.eclipse.app4mc.amalthea.model.Mode;
+import org.eclipse.app4mc.amalthea.model.ModeLabel;
+import org.eclipse.app4mc.amalthea.model.ModeLiteral;
+import org.eclipse.app4mc.amalthea.model.ModeSwitchDefault;
+import org.eclipse.app4mc.amalthea.model.ModeSwitchEntry;
+import org.eclipse.app4mc.amalthea.model.PeriodicActivation;
+import org.eclipse.app4mc.amalthea.model.ProbabilitySwitchEntry;
+import org.eclipse.app4mc.amalthea.model.ProcessPrototype;
+import org.eclipse.app4mc.amalthea.model.RunnableCall;
+import org.eclipse.app4mc.amalthea.model.RunnableItem;
+import org.eclipse.app4mc.amalthea.model.RunnableModeSwitch;
+import org.eclipse.app4mc.amalthea.model.RunnableParameter;
+import org.eclipse.app4mc.amalthea.model.RunnableProbabilitySwitch;
+import org.eclipse.app4mc.amalthea.model.SWModel;
+import org.eclipse.app4mc.amalthea.model.Section;
+import org.eclipse.app4mc.amalthea.model.SingleActivation;
+import org.eclipse.app4mc.amalthea.model.SporadicActivation;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.amalthea.model.VariableRateActivation;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
+
+@SuppressWarnings("all")
+public class SoftwareBuilder {
+  public SWModel softwareModelRoot(final Procedure1<? super SWModel> initializer) {
+    return this.<SWModel>init(AmaltheaFactory.eINSTANCE.createSWModel(), initializer);
+  }
+  
+  public boolean isr(final SWModel container, final Procedure1<? super ISR> initializer) {
+    EList<ISR> _isrs = container.getIsrs();
+    ISR _init = this.<ISR>init(AmaltheaFactory.eINSTANCE.createISR(), initializer);
+    return _isrs.add(_init);
+  }
+  
+  public boolean task(final SWModel container, final Procedure1<? super Task> initializer) {
+    EList<Task> _tasks = container.getTasks();
+    Task _init = this.<Task>init(AmaltheaFactory.eINSTANCE.createTask(), initializer);
+    return _tasks.add(_init);
+  }
+  
+  public boolean runnable(final SWModel container, final Procedure1<? super org.eclipse.app4mc.amalthea.model.Runnable> initializer) {
+    EList<org.eclipse.app4mc.amalthea.model.Runnable> _runnables = container.getRunnables();
+    org.eclipse.app4mc.amalthea.model.Runnable _init = this.<org.eclipse.app4mc.amalthea.model.Runnable>init(AmaltheaFactory.eINSTANCE.createRunnable(), initializer);
+    return _runnables.add(_init);
+  }
+  
+  public boolean label(final SWModel container, final Procedure1<? super Label> initializer) {
+    EList<Label> _labels = container.getLabels();
+    Label _init = this.<Label>init(AmaltheaFactory.eINSTANCE.createLabel(), initializer);
+    return _labels.add(_init);
+  }
+  
+  public boolean channel(final SWModel container, final Procedure1<? super Channel> initializer) {
+    EList<Channel> _channels = container.getChannels();
+    Channel _init = this.<Channel>init(AmaltheaFactory.eINSTANCE.createChannel(), initializer);
+    return _channels.add(_init);
+  }
+  
+  public boolean processPrototype(final SWModel container, final Procedure1<? super ProcessPrototype> initializer) {
+    EList<ProcessPrototype> _processPrototypes = container.getProcessPrototypes();
+    ProcessPrototype _init = this.<ProcessPrototype>init(AmaltheaFactory.eINSTANCE.createProcessPrototype(), initializer);
+    return _processPrototypes.add(_init);
+  }
+  
+  public boolean section(final SWModel container, final Procedure1<? super Section> initializer) {
+    EList<Section> _sections = container.getSections();
+    Section _init = this.<Section>init(AmaltheaFactory.eINSTANCE.createSection(), initializer);
+    return _sections.add(_init);
+  }
+  
+  public boolean activation_Single(final SWModel container, final Procedure1<? super SingleActivation> initializer) {
+    EList<Activation> _activations = container.getActivations();
+    SingleActivation _init = this.<SingleActivation>init(AmaltheaFactory.eINSTANCE.createSingleActivation(), initializer);
+    return _activations.add(_init);
+  }
+  
+  public boolean activation_Sporadic(final SWModel container, final Procedure1<? super SporadicActivation> initializer) {
+    EList<Activation> _activations = container.getActivations();
+    SporadicActivation _init = this.<SporadicActivation>init(AmaltheaFactory.eINSTANCE.createSporadicActivation(), initializer);
+    return _activations.add(_init);
+  }
+  
+  public boolean activation_Periodic(final SWModel container, final Procedure1<? super PeriodicActivation> initializer) {
+    EList<Activation> _activations = container.getActivations();
+    PeriodicActivation _init = this.<PeriodicActivation>init(AmaltheaFactory.eINSTANCE.createPeriodicActivation(), initializer);
+    return _activations.add(_init);
+  }
+  
+  public boolean activation_Event(final SWModel container, final Procedure1<? super EventActivation> initializer) {
+    EList<Activation> _activations = container.getActivations();
+    EventActivation _init = this.<EventActivation>init(AmaltheaFactory.eINSTANCE.createEventActivation(), initializer);
+    return _activations.add(_init);
+  }
+  
+  public boolean activation_VariableRate(final SWModel container, final Procedure1<? super VariableRateActivation> initializer) {
+    EList<Activation> _activations = container.getActivations();
+    VariableRateActivation _init = this.<VariableRateActivation>init(AmaltheaFactory.eINSTANCE.createVariableRateActivation(), initializer);
+    return _activations.add(_init);
+  }
+  
+  public boolean activation_Custom(final SWModel container, final Procedure1<? super CustomActivation> initializer) {
+    EList<Activation> _activations = container.getActivations();
+    CustomActivation _init = this.<CustomActivation>init(AmaltheaFactory.eINSTANCE.createCustomActivation(), initializer);
+    return _activations.add(_init);
+  }
+  
+  public boolean mode(final SWModel container, final Procedure1<? super Mode> initializer) {
+    EList<Mode> _modes = container.getModes();
+    Mode _init = this.<Mode>init(AmaltheaFactory.eINSTANCE.createMode(), initializer);
+    return _modes.add(_init);
+  }
+  
+  public boolean modeLabel(final SWModel container, final Procedure1<? super ModeLabel> initializer) {
+    EList<ModeLabel> _modeLabels = container.getModeLabels();
+    ModeLabel _init = this.<ModeLabel>init(AmaltheaFactory.eINSTANCE.createModeLabel(), initializer);
+    return _modeLabels.add(_init);
+  }
+  
+  public boolean literal(final Mode container, final Procedure1<? super ModeLiteral> initializer) {
+    EList<ModeLiteral> _literals = container.getLiterals();
+    ModeLiteral _init = this.<ModeLiteral>init(AmaltheaFactory.eINSTANCE.createModeLiteral(), initializer);
+    return _literals.add(_init);
+  }
+  
+  public boolean parameter(final org.eclipse.app4mc.amalthea.model.Runnable container, final Procedure1<? super RunnableParameter> initializer) {
+    EList<RunnableParameter> _parameters = container.getParameters();
+    RunnableParameter _init = this.<RunnableParameter>init(AmaltheaFactory.eINSTANCE.createRunnableParameter(), initializer);
+    return _parameters.add(_init);
+  }
+  
+  public boolean group(final org.eclipse.app4mc.amalthea.model.Runnable container, final Procedure1<? super Group> initializer) {
+    EList<RunnableItem> _runnableItems = container.getRunnableItems();
+    Group _init = this.<Group>init(AmaltheaFactory.eINSTANCE.createGroup(), initializer);
+    return _runnableItems.add(_init);
+  }
+  
+  public boolean group(final Group container, final Procedure1<? super Group> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    Group _init = this.<Group>init(AmaltheaFactory.eINSTANCE.createGroup(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean group(final ModeSwitchDefault<RunnableItem> container, final Procedure1<? super Group> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    Group _init = this.<Group>init(AmaltheaFactory.eINSTANCE.createGroup(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean group(final ModeSwitchEntry<RunnableItem> container, final Procedure1<? super Group> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    Group _init = this.<Group>init(AmaltheaFactory.eINSTANCE.createGroup(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean group(final ProbabilitySwitchEntry<RunnableItem> container, final Procedure1<? super Group> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    Group _init = this.<Group>init(AmaltheaFactory.eINSTANCE.createGroup(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean modeSwitch(final org.eclipse.app4mc.amalthea.model.Runnable container, final Procedure1<? super RunnableModeSwitch> initializer) {
+    EList<RunnableItem> _runnableItems = container.getRunnableItems();
+    RunnableModeSwitch _init = this.<RunnableModeSwitch>init(AmaltheaFactory.eINSTANCE.createRunnableModeSwitch(), initializer);
+    return _runnableItems.add(_init);
+  }
+  
+  public boolean modeSwitch(final Group container, final Procedure1<? super RunnableModeSwitch> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    RunnableModeSwitch _init = this.<RunnableModeSwitch>init(AmaltheaFactory.eINSTANCE.createRunnableModeSwitch(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean modeSwitch(final ModeSwitchDefault<RunnableItem> container, final Procedure1<? super RunnableModeSwitch> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    RunnableModeSwitch _init = this.<RunnableModeSwitch>init(AmaltheaFactory.eINSTANCE.createRunnableModeSwitch(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean modeSwitch(final ModeSwitchEntry<RunnableItem> container, final Procedure1<? super RunnableModeSwitch> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    RunnableModeSwitch _init = this.<RunnableModeSwitch>init(AmaltheaFactory.eINSTANCE.createRunnableModeSwitch(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean modeSwitch(final ProbabilitySwitchEntry<RunnableItem> container, final Procedure1<? super RunnableModeSwitch> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    RunnableModeSwitch _init = this.<RunnableModeSwitch>init(AmaltheaFactory.eINSTANCE.createRunnableModeSwitch(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean entry(final RunnableModeSwitch container, final Procedure1<? super ModeSwitchEntry<RunnableItem>> initializer) {
+    EList<ModeSwitchEntry<RunnableItem>> _entries = container.getEntries();
+    ModeSwitchEntry<RunnableItem> _init = this.<ModeSwitchEntry<RunnableItem>>init(AmaltheaFactory.eINSTANCE.<RunnableItem>createModeSwitchEntry(), initializer);
+    return _entries.add(_init);
+  }
+  
+  public void defaultEntry(final RunnableModeSwitch container, final Procedure1<? super ModeSwitchDefault<RunnableItem>> initializer) {
+    container.setDefaultEntry(this.<ModeSwitchDefault<RunnableItem>>init(AmaltheaFactory.eINSTANCE.<RunnableItem>createModeSwitchDefault(), initializer));
+  }
+  
+  public boolean probabilitySwitch(final org.eclipse.app4mc.amalthea.model.Runnable container, final Procedure1<? super RunnableProbabilitySwitch> initializer) {
+    EList<RunnableItem> _runnableItems = container.getRunnableItems();
+    RunnableProbabilitySwitch _init = this.<RunnableProbabilitySwitch>init(AmaltheaFactory.eINSTANCE.createRunnableProbabilitySwitch(), initializer);
+    return _runnableItems.add(_init);
+  }
+  
+  public boolean probabilitySwitch(final Group container, final Procedure1<? super RunnableProbabilitySwitch> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    RunnableProbabilitySwitch _init = this.<RunnableProbabilitySwitch>init(AmaltheaFactory.eINSTANCE.createRunnableProbabilitySwitch(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean probabilitySwitch(final ModeSwitchDefault<RunnableItem> container, final Procedure1<? super RunnableProbabilitySwitch> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    RunnableProbabilitySwitch _init = this.<RunnableProbabilitySwitch>init(AmaltheaFactory.eINSTANCE.createRunnableProbabilitySwitch(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean probabilitySwitch(final ModeSwitchEntry<RunnableItem> container, final Procedure1<? super RunnableProbabilitySwitch> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    RunnableProbabilitySwitch _init = this.<RunnableProbabilitySwitch>init(AmaltheaFactory.eINSTANCE.createRunnableProbabilitySwitch(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean probabilitySwitch(final ProbabilitySwitchEntry<RunnableItem> container, final Procedure1<? super RunnableProbabilitySwitch> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    RunnableProbabilitySwitch _init = this.<RunnableProbabilitySwitch>init(AmaltheaFactory.eINSTANCE.createRunnableProbabilitySwitch(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean entry(final RunnableProbabilitySwitch container, final Procedure1<? super ProbabilitySwitchEntry<RunnableItem>> initializer) {
+    EList<ProbabilitySwitchEntry<RunnableItem>> _entries = container.getEntries();
+    ProbabilitySwitchEntry<RunnableItem> _init = this.<ProbabilitySwitchEntry<RunnableItem>>init(AmaltheaFactory.eINSTANCE.<RunnableItem>createProbabilitySwitchEntry(), initializer);
+    return _entries.add(_init);
+  }
+  
+  public boolean labelAccess(final org.eclipse.app4mc.amalthea.model.Runnable container, final Procedure1<? super LabelAccess> initializer) {
+    EList<RunnableItem> _runnableItems = container.getRunnableItems();
+    LabelAccess _init = this.<LabelAccess>init(AmaltheaFactory.eINSTANCE.createLabelAccess(), initializer);
+    return _runnableItems.add(_init);
+  }
+  
+  public boolean labelAccess(final Group container, final Procedure1<? super LabelAccess> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    LabelAccess _init = this.<LabelAccess>init(AmaltheaFactory.eINSTANCE.createLabelAccess(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean labelAccess(final ModeSwitchDefault<RunnableItem> container, final Procedure1<? super LabelAccess> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    LabelAccess _init = this.<LabelAccess>init(AmaltheaFactory.eINSTANCE.createLabelAccess(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean labelAccess(final ModeSwitchEntry<RunnableItem> container, final Procedure1<? super LabelAccess> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    LabelAccess _init = this.<LabelAccess>init(AmaltheaFactory.eINSTANCE.createLabelAccess(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean labelAccess(final ProbabilitySwitchEntry<RunnableItem> container, final Procedure1<? super LabelAccess> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    LabelAccess _init = this.<LabelAccess>init(AmaltheaFactory.eINSTANCE.createLabelAccess(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean runnableCall(final org.eclipse.app4mc.amalthea.model.Runnable container, final Procedure1<? super RunnableCall> initializer) {
+    EList<RunnableItem> _runnableItems = container.getRunnableItems();
+    RunnableCall _init = this.<RunnableCall>init(AmaltheaFactory.eINSTANCE.createRunnableCall(), initializer);
+    return _runnableItems.add(_init);
+  }
+  
+  public boolean runnableCall(final Group container, final Procedure1<? super RunnableCall> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    RunnableCall _init = this.<RunnableCall>init(AmaltheaFactory.eINSTANCE.createRunnableCall(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean runnableCall(final ModeSwitchDefault<RunnableItem> container, final Procedure1<? super RunnableCall> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    RunnableCall _init = this.<RunnableCall>init(AmaltheaFactory.eINSTANCE.createRunnableCall(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean runnableCall(final ModeSwitchEntry<RunnableItem> container, final Procedure1<? super RunnableCall> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    RunnableCall _init = this.<RunnableCall>init(AmaltheaFactory.eINSTANCE.createRunnableCall(), initializer);
+    return _items.add(_init);
+  }
+  
+  public boolean runnableCall(final ProbabilitySwitchEntry<RunnableItem> container, final Procedure1<? super RunnableCall> initializer) {
+    EList<RunnableItem> _items = container.getItems();
+    RunnableCall _init = this.<RunnableCall>init(AmaltheaFactory.eINSTANCE.createRunnableCall(), initializer);
+    return _items.add(_init);
+  }
+  
+  private <T extends Object> T init(final T obj, final Procedure1<? super T> init) {
+    init.apply(obj);
+    return obj;
+  }
+}