From ad43a815a41c60854376c094ea31a2e4f1768471 Mon Sep 17 00:00:00 2001
From: Alexander Schwinn <al.schwinn@gsi.de>
Date: Thu, 5 May 2022 08:52:33 +0200
Subject: [PATCH] rename "multiplexed" to "cycle-bound" for fess 7.3.0 Support
 for FESA Version: 7.3.0 - Add unit tests for Fesa 7.3.0 - Run unit-tests only
 for latest FESA version

---
 .../src/xml/fesa/fesa_7_3_0/__init__.py       |   0
 .../xml/fesa/fesa_7_3_0/fillFESADeployUnit.py |  23 +
 .../fesa_7_3_0/generateBuildEnvironment.py    |  26 +
 .../xml/fesa/fesa_7_3_0/generateFesaDesign.py |  98 +++
 .../xml/fesa/fesa_7_3_0/generateSourceCode.py |  26 +
 ...mplateFESA300.xml => GSIClassTemplate.xml} | 183 +++--
 .../xml/test/fesa/GSIClassTemplateFESA431.xml | 703 ------------------
 ...yTemplateFESA300.xml => emptyTemplate.xml} |  47 +-
 .../xml/test/fesa/generateFesaDesignTest.py   |  78 +-
 .../generated_correct/AllTypesFESA.design     | 289 +++----
 10 files changed, 513 insertions(+), 960 deletions(-)
 create mode 100644 silecs-codegen/src/xml/fesa/fesa_7_3_0/__init__.py
 create mode 100644 silecs-codegen/src/xml/fesa/fesa_7_3_0/fillFESADeployUnit.py
 create mode 100644 silecs-codegen/src/xml/fesa/fesa_7_3_0/generateBuildEnvironment.py
 create mode 100644 silecs-codegen/src/xml/fesa/fesa_7_3_0/generateFesaDesign.py
 create mode 100644 silecs-codegen/src/xml/fesa/fesa_7_3_0/generateSourceCode.py
 rename silecs-codegen/src/xml/test/fesa/{GSIClassTemplateFESA300.xml => GSIClassTemplate.xml} (81%)
 delete mode 100644 silecs-codegen/src/xml/test/fesa/GSIClassTemplateFESA431.xml
 rename silecs-codegen/src/xml/test/fesa/{emptyTemplateFESA300.xml => emptyTemplate.xml} (67%)

diff --git a/silecs-codegen/src/xml/fesa/fesa_7_3_0/__init__.py b/silecs-codegen/src/xml/fesa/fesa_7_3_0/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/silecs-codegen/src/xml/fesa/fesa_7_3_0/fillFESADeployUnit.py b/silecs-codegen/src/xml/fesa/fesa_7_3_0/fillFESADeployUnit.py
new file mode 100644
index 0000000..f94ded6
--- /dev/null
+++ b/silecs-codegen/src/xml/fesa/fesa_7_3_0/fillFESADeployUnit.py
@@ -0,0 +1,23 @@
+#!/usr/bin/python
+# Copyright 2016 CERN and GSI
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import fesa.fillFesaDeployUnitBase
+import fesa.fesa_3_1_0.fillFESADeployUnit
+
+def fillDeployUnit(fesaVersion, className, workspacePath,fesaDesignXSDPath,logTopics={'errorlog': True}):
+    generator = fesa.fesa_3_1_0.fillFESADeployUnit.FESADeployUnitGenerator3_0_0() # identical with FESA 3.1.0
+    fesa.fillFesaDeployUnitBase.fillFesaDeployUnitBase(generator,fesaVersion, className, workspacePath,fesaDesignXSDPath,logTopics)
+
diff --git a/silecs-codegen/src/xml/fesa/fesa_7_3_0/generateBuildEnvironment.py b/silecs-codegen/src/xml/fesa/fesa_7_3_0/generateBuildEnvironment.py
new file mode 100644
index 0000000..c672684
--- /dev/null
+++ b/silecs-codegen/src/xml/fesa/fesa_7_3_0/generateBuildEnvironment.py
@@ -0,0 +1,26 @@
+#!/usr/bin/python
+# Copyright 2016 CERN and GSI
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import fesa.fesa_3_1_0.generateBuildEnvironment
+
+def genMakefileClass(projectPath, centralMakefilePath, logTopics={'errorlog': True} ):
+    return fesa.fesa_3_1_0.generateBuildEnvironment.genMakefileClass(projectPath, centralMakefilePath, logTopics )
+
+def genMakefileDU(projectPath, silecsBasePath, snap7BasePath, logTopics={'errorlog': True}):
+    return fesa.fesa_3_1_0.generateBuildEnvironment.genMakefileDU(projectPath, silecsBasePath, snap7BasePath, logTopics )
+
+def genCProjectFile(projectPath, logTopics={'errorlog': True}):
+    return fesa.fesa_3_1_0.generateBuildEnvironment.genCProjectFile(projectPath, logTopics )
diff --git a/silecs-codegen/src/xml/fesa/fesa_7_3_0/generateFesaDesign.py b/silecs-codegen/src/xml/fesa/fesa_7_3_0/generateFesaDesign.py
new file mode 100644
index 0000000..73dcf42
--- /dev/null
+++ b/silecs-codegen/src/xml/fesa/fesa_7_3_0/generateFesaDesign.py
@@ -0,0 +1,98 @@
+#!/usr/bin/python
+# Copyright 2016 CERN and GSI
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import fesa.fillFesaDesignBase
+import fesa.fesa_3_1_0.generateFesaDesign
+
+from iecommon import *
+
+def fillDesignFile(fesaVersion, className, workspacePath,fesaDesignXSDPath,logTopics={'errorlog': True}):
+    generator = FESADesignGenerator7_3_0()
+    fesa.fillFesaDesignBase.fillDesignFileBase(generator,fesaVersion, className, workspacePath,fesaDesignXSDPath,logTopics)
+        
+class FESADesignGenerator7_3_0(fesa.fesa_3_1_0.generateFesaDesign.FESADesignGenerator3_1_0):
+
+    #overwrite 3_0_0 version (multiplexed --> cycle-bound)
+    def getOrCreateAcquisitionProperty(self,parent,actionsNode,block):
+        iecommon.logDebug('Generating AcquisitionProperty for Block: ' + block.name, {'debuglog': True})
+        prop = ""
+        if( hasChildren(parent)):
+            prop = getOrCreateNamedPreviousSiblingElement(parent,getFirstChild(parent), 'acquisition-property',block.getFesaName())
+        else:
+            prop = getOrCreateNamedChildElement(parent,'acquisition-property',block.getFesaName())
+        fillAttributes(prop, {'visibility': 'development', 'subscribable': 'true', 'cycle-bound': 'false', 'on-change': 'true'})
+        self.getOrCreateRegisterValueItems(prop,block,"OUT")
+        self.getOrCreateAcqStampItem(prop)
+        self.getOrCreateUpdateFlagItem(prop)
+        self.getOrCreateCyleNameItem(prop)
+        self.getOrCreateCyleStampItem(prop)
+        self.getOrCreateAction(prop,block.fesaGetServerActionName,'get',actionsNode,'custom')
+        return prop
+
+    #overwrite 3_0_0 version (multiplexed --> cycle-bound)
+    def getOrCreateGSIAcquisitionProperty(self,parent,actionsNode,block):
+        iecommon.logDebug('Generating GSIAcquisitionProperty for Block: ' + block.name, {'debuglog': True})
+        versionProps = parent.xpathEval('GSI-Version-Property')
+        if len(versionProps) == 0:
+            raise Exception("Error: A GSI-Version-Property needs to be available to generate a GSIAcquisitionProperty")
+        prop =  getOrCreateNamedPreviousSiblingElement(parent,versionProps[0], 'GSI-Acquisition-Property',block.getFesaName())
+        fillAttributes(prop, {'visibility': 'development', 'subscribable': 'true', 'cycle-bound': 'false', 'on-change': 'true'})
+        self.getOrCreateRegisterValueItems(prop,block,"OUT")
+        self.getOrCreateAcqStampItem(prop)
+        self.getOrCreateUpdateFlagItem(prop)
+        self.getOrCreateCyleNameItem(prop)
+        self.getOrCreateCyleStampItem(prop)
+        self.getOrCreateAction(prop,block.fesaGetServerActionName,'get',actionsNode,'custom')
+        self.getOrCreateAcquisitionContextItem(prop)
+        return prop
+
+    #overwrite 3_0_0 version (multiplexed --> cycle-bound for acquisition fileds)
+    def genData(self,designClass, doc,logTopics):
+        iecommon.logDebug("Creating data fields", logTopics)
+        
+        dataNode = doc.xpathEval('/equipment-model/data')[0]
+        iecommon.logError("len(dataNode)" + dataNode.get_name(), logTopics)
+        deviceDataNode = getOrCreateChildElement(dataNode,'device-data')
+        configurationNode = getOrCreateChildElement(deviceDataNode,'configuration')
+        settingNode = getOrCreateChildElement(deviceDataNode,'setting')
+        acquisitionNode = getOrCreateChildElement(deviceDataNode,'acquisition')
+        self.getOrCreatePLCHostNameField(configurationNode)
+        self.getOrCreatePLCDeviceLabelField(configurationNode)
+
+        for block in designClass.getDesignBlocks():
+            for reg in block.getDesignRegisters():
+                if reg.isSetting():
+                    fieldNode = self.getOrCreateFieldNode(settingNode,reg)
+                    fillAttributes(fieldNode, {'multiplexed': 'false', 'persistent': 'true'})
+                elif reg.isAcquisition():
+                    fieldNode = self.getOrCreateFieldNode(acquisitionNode,reg)
+                    fillAttributes(fieldNode, {'cycle-bound': 'false', 'persistent': 'false'})
+                elif reg.isConfiguration():
+                    fieldNode = self.getOrCreateFieldNode(configurationNode,reg)
+                else:
+                    raise Exception( "Cannot identify register-type to use for register:" + reg.name )
+                self.getOrCreateType(fieldNode,reg)
+
+        globalDataNode = getOrCreateChildElement(dataNode,'global-data')
+        globalConfigurationNode = ""
+        if len(globalDataNode.xpathEval("configuration")) == 0:
+            if len( globalDataNode.xpathEval("*")) == 0:
+                globalConfigurationNode = getOrCreateChildElement(globalDataNode,'configuration')
+            else:
+                globalConfigurationNode = getOrCreatePreviousSiblingElement(getFirstChild(globalDataNode),'configuration')
+        else:
+            globalConfigurationNode = globalDataNode.xpathEval("configuration")[0]
+        self.getOrCreatePLCClassVersionField(globalConfigurationNode,designClass.version)
diff --git a/silecs-codegen/src/xml/fesa/fesa_7_3_0/generateSourceCode.py b/silecs-codegen/src/xml/fesa/fesa_7_3_0/generateSourceCode.py
new file mode 100644
index 0000000..973222d
--- /dev/null
+++ b/silecs-codegen/src/xml/fesa/fesa_7_3_0/generateSourceCode.py
@@ -0,0 +1,26 @@
+#!/usr/bin/python
+# Copyright 2016 CERN and GSI
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import fesa.fesa_3_0_0.generateSourceCode
+
+def genHSource(className, silecsRoot, fesaRoot, sourcePath,logTopics):
+    return fesa.fesa_3_0_0.generateSourceCode.genHSource(className, silecsRoot, fesaRoot, sourcePath,logTopics)
+
+def genCppSource(className, silecsRoot, fesaRoot, sourcePath,logTopics):
+    return fesa.fesa_3_0_0.generateSourceCode.genCppSource(className, silecsRoot, fesaRoot, sourcePath,logTopics)
+
+def genCppFiles(className, workspacePath, silecsDesignFilePath,logTopics={'errorlog': True}):
+    return fesa.fesa_3_0_0.generateSourceCode.genCppFiles(className, workspacePath, silecsDesignFilePath,logTopics)
diff --git a/silecs-codegen/src/xml/test/fesa/GSIClassTemplateFESA300.xml b/silecs-codegen/src/xml/test/fesa/GSIClassTemplate.xml
similarity index 81%
rename from silecs-codegen/src/xml/test/fesa/GSIClassTemplateFESA300.xml
rename to silecs-codegen/src/xml/test/fesa/GSIClassTemplate.xml
index f84b0ae..a67ec87 100644
--- a/silecs-codegen/src/xml/test/fesa/GSIClassTemplateFESA300.xml
+++ b/silecs-codegen/src/xml/test/fesa/GSIClassTemplate.xml
@@ -6,29 +6,30 @@
 		<class-minor-version>1</class-minor-version>
 		<class-tiny-version>0</class-tiny-version>
 		<type>Final</type>
-		<state>development</state>
-		<description>An Empty design with GSI-specific standard properties</description>
-		<fesa-version>3.0.0</fesa-version>
-		<repository-path>undefined</repository-path>
+		<description>An empty design with GSI-specific standard properties</description>
+		<fesa-version>7.0.0</fesa-version>
 	</information>
 	<ownership>
-		<responsible name="CSCO"/>
+		<responsible name="ACO"/>
 		<creator login="Undefined"/>
 	</ownership>
         <interface>
         <device-interface>
             <setting>
                 <GSI-Init-Property multiplexed="false" name="Init" visibility="operational">
+                	<description>Control property, used to initialize the device with default values from the device instantiation file</description>
                     <set-action partial-setting="true" transaction="true">
                         <server-action-ref server-action-name-ref="InitSetAction"/>
                     </set-action>
                 </GSI-Init-Property>
                 <GSI-Reset-Property multiplexed="false" name="Reset" visibility="operational">
+                	<description>Control property, used to reset the device while keeping the persistent data.</description>
                     <set-action partial-setting="true" transaction="true">
                         <server-action-ref server-action-name-ref="ResetSetAction"/>
                     </set-action>
                 </GSI-Reset-Property>
                 <GSI-Setting-Property multiplexed="false" name="Setting" visibility="operational">
+                	<description>Used for setting hardware parameters for controlling the device.</description>
                     <update-flag-item direction="OUT" name="updateFlags" optional="true">
                        <builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/>
                     </update-flag-item>
@@ -45,6 +46,7 @@
                     </get-action>
                 </GSI-Setting-Property>
                 <GSI-Power-Property multiplexed="false" name="Power" visibility="operational">
+                    <description>Used to turn the power of a device on or off.</description>
                     <update-flag-item direction="OUT" name="updateFlags" optional="true">
 						<builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/>
                     </update-flag-item>
@@ -67,7 +69,9 @@
                 </GSI-Power-Property>
             </setting>
             <acquisition>
-                <GSI-Status-Property multiplexed="false" name="Status" on-change="true" subscribable="true" visibility="operational">
+                <GSI-Status-Property cycle-bound="false" name="Status" on-change="true" subscribable="true" visibility="operational">
+                    <description>Used to display the (cycle independent) overall status of the device.</description>
+					<description>Detailed status information may be additionally added to this property.</description>
                     <acq-stamp-item direction="OUT" name="acqStamp">
                         <scalar type="int64_t"/>
                     </acq-stamp-item>
@@ -91,12 +95,15 @@
                         <data-field-ref field-name-ref="status"/>
                     </status-item>
                     <detailed-status-item direction="OUT" name="detailedStatus">
+                    	<description>Detailed status should consist of an array of boolean values considered as detailed status information as well as a
+corresponding string array containing keys to illustrate the meaning of the detailed status information.</description>
                         <array type="bool">
                             <custom-constant-dim constant-name-ref="DETAILED_STATUS_SIZE"/>
                         </array>
                         <data-field-ref field-name-ref="detailedStatus"/>
                     </detailed-status-item>
                     <detailed-status-labels-item direction="OUT" name="detailedStatus_labels">
+                    	<description>Labels of detailed status bits.</description>
                         <array2D type="char">
                             <custom-constant-dim1 constant-name-ref="DETAILED_STATUS_SIZE"/>
                             <custom-constant-dim2 constant-name-ref="MAX_DETAILED_STATUS_LABEL_LENGTH"/>
@@ -104,30 +111,34 @@
                         <data-field-ref field-name-ref="detailedStatus_labels"/>
                     </detailed-status-labels-item>
                     <detailed-status-severity-item direction="OUT" name="detailedStatus_severity">
+                    	<description>Severities of the detailed status bits</description>
                         <custom-type-array data-type-name-ref="DETAILED_STATUS_SEVERITY">
                             <custom-constant-dim constant-name-ref="DETAILED_STATUS_SIZE"/>
                         </custom-type-array>
                         <data-field-ref field-name-ref="detailedStatus_severity"/>
                     </detailed-status-severity-item>
                     <powerState-item direction="OUT" name="powerState">
+                    	<description>Power state of the device (ON, OFF)</description>
                         <custom-type-scalar data-type-name-ref="DEVICE_POWER_STATE"/>
                         
                         <data-field-ref field-name-ref="powerState"/>
                     </powerState-item>
                     <control-item direction="OUT" name="control">
                         <custom-type-scalar data-type-name-ref="DEVICE_CONTROL"/>
-                        
                         <data-field-ref field-name-ref="control"/>
                     </control-item>
                     <interlock-item direction="OUT" name="interlock">
+                    	<description>Interlock state of the device</description>
                         <scalar type="bool"/>
                         <data-field-ref field-name-ref="interlock"/>
                     </interlock-item>
                     <opReady-item direction="OUT" name="opReady">
+                    	<description>Contains the devices state regarding operation</description>
                         <scalar type="bool"/>
                         <data-field-ref field-name-ref="opReady"/>
                     </opReady-item>
                     <modulesReady-item direction="OUT" name="modulesReady">
+                    	<description>Contains the devices module state</description>
                         <scalar type="bool"/>
                         <data-field-ref field-name-ref="modulesReady"/>
                     </modulesReady-item>
@@ -157,7 +168,8 @@
                         <error_collection-field-ref field-name-ref="error_collection"/>
                     </error_collection-item>
                 </GSI-Status-Property>
-                <GSI-ModuleStatus-Property visibility="development" subscribable="true" name="ModuleStatus" multiplexed="false">
+                <GSI-ModuleStatus-Property visibility="operational" subscribable="true" name="ModuleStatus" cycle-bound="false">
+                	<description>Gives detailed information on the state of 3rd party hardware and software components which are required to operate the device.</description>
                 	<acq-stamp-item name="acqStamp" direction="OUT">
                 		<scalar type="int64_t" />
                 	</acq-stamp-item>
@@ -178,22 +190,19 @@
                 	<module-status-item name="moduleStatus" direction="OUT">
                 		<custom-type-array data-type-name-ref="MODULE_STATUS">
                 			<custom-constant-dim constant-name-ref="MODULE_STATUS_SIZE" />
-                			
                 		</custom-type-array>
-                		
                 		<data-field-ref field-name-ref="moduleStatus" />
                 	</module-status-item>
                 	<module-status-labels-item name="moduleStatus_labels" direction="OUT">
                 		<array2D type="char">
                 			<custom-constant-dim1 constant-name-ref="MODULE_STATUS_SIZE" />
                 			<custom-constant-dim2 constant-name-ref="MAX_MODULE_STATUS_LABEL_LENGTH" />
-                			
                 		</array2D>
-                		
                 		<data-field-ref field-name-ref="moduleStatus_labels" />
                 	</module-status-labels-item>
                 </GSI-ModuleStatus-Property>
-                <GSI-Acquisition-Property multiplexed="true" name="Acquisition" on-change="true" subscribable="true" visibility="operational">
+                <GSI-Acquisition-Property cycle-bound="true" name="Acquisition" on-change="true" subscribable="true" visibility="operational">
+                    <description>Used for returning acquisition data which is retrieved from the hardware.</description>
                     <acq-stamp-item direction="OUT" name="acqStamp">
                         <scalar type="int64_t"/>
                     </acq-stamp-item>
@@ -212,27 +221,41 @@
                         <server-action-ref server-action-name-ref="AcquisitionGetAction"/>
                     </get-action>
                     <acquisition-context-item direction="OUT">
-                        <acqStamp direction="OUT" name="acqStampGSI">
-                            <scalar type="int64_t"/>
-                        </acqStamp>
-                        <cycleStamp direction="OUT" name="cycleStampGSI">
-                            <scalar type="int64_t"/>
-                        </cycleStamp>
-                        <cycleName direction="OUT" name="cycleNameGSI">
-                            <array type="char">
-                                <custom-constant-dim constant-name-ref="MAX_CYCLE_NAME_LENGTH"/>
-                            </array>
-                        </cycleName>
-                        <beamProcessID direction="OUT" name="beamProcessID">
+                        <processIndex direction="OUT" name="processIndex">
+                            <scalar type="int32_t"/>
+                        </processIndex>
+                        <sequenceIndex direction="OUT" name="sequenceIndex">
+                            <scalar type="int32_t"/>
+                        </sequenceIndex>
+                        <chainIndex direction="OUT" name="chainIndex">
                             <scalar type="int32_t"/>
-                        </beamProcessID>
-                         <sequenceID direction="OUT" name="sequenceID">
+                        </chainIndex>
+                        <eventNumber direction="OUT" name="eventNumber">
                             <scalar type="int32_t"/>
-                        </sequenceID>
+                        </eventNumber>
+                        <timingGroupID direction="OUT" name="timingGroupID">
+                            <scalar type="int32_t"/>
+                        </timingGroupID>
+                        <acquisitionStamp direction="OUT" name="acquisitionStamp">
+                            <scalar type="int64_t"/>
+                        </acquisitionStamp>
+                        <eventStamp direction="OUT" name="eventStamp">
+                            <scalar type="int64_t"/>
+                        </eventStamp>
+                        <processStartStamp direction="OUT" name="processStartStamp">
+                            <scalar type="int64_t"/>
+                        </processStartStamp>
+                        <sequenceStartStamp direction="OUT" name="sequenceStartStamp">
+                            <scalar type="int64_t"/>
+                        </sequenceStartStamp>
+                        <chainStartStamp direction="OUT" name="chainStartStamp">
+                            <scalar type="int64_t"/>
+                        </chainStartStamp>
                         <acquisition-context-field-ref field-name-ref="acquisitionContext"/>
                     </acquisition-context-item>
                 </GSI-Acquisition-Property>
-                <GSI-Version-Property multiplexed="false" name="Version" on-change="false" subscribable="false" visibility="operational">
+                <GSI-Version-Property cycle-bound="false" name="Version" on-change="false" subscribable="false" visibility="operational">
+                    <description>Returns the current software and hardware versions of a piece of equipment.</description>
                     <acq-stamp-item direction="OUT" name="acqStamp">
                         <scalar type="int64_t"/>
                     </acq-stamp-item>
@@ -276,11 +299,13 @@
                             <scalar type="bool"/>
                         </mode-item>
                         <host-item direction="INOUT" name="hostName">
+                        	<description>Host of the FESA class</description>
                             <array type="char">
                                 <dim>32</dim>
                             </array>
                         </host-item>
                         <port-item direction="INOUT" name="portNumber">
+                        	<description>Port used by the FESA class</description>
                             <scalar type="int32_t"/>
                         </port-item>
                         <config-item direction="IN" name="requestConfig">
@@ -308,7 +333,7 @@
                 </diagnostic-property>
             </setting>
             <acquisition>
-                <GSI-DeviceDescription-Property multiplexed="false" name="DeviceDescription" on-change="false" subscribable="false" visibility="operational">
+                <GSI-DeviceDescription-Property cycle-bound="false" name="DeviceDescription" on-change="false" subscribable="false" visibility="operational">
                     <timing-info-item direction="OUT" name="deviceNameTimingReceiver">
                         <array type="char">
                             <variable-dim/>
@@ -509,28 +534,47 @@
                 </array>
             </struct-item>
         </struct>
-        <struct name="GSI_ACQ_CONTEXT">
-        <!--This struct-item describes all AcquisitionContext items which are relevant for GSI-->
-            <struct-item name="acqStamp">
-            <!--The acquisition stamp is used to indicate when a measurement was done -->
+        <struct name="GSI_ACQ_CONTEXT"><description>WhiteRabbit event specific acquisition information</description>
+        	<struct-item name="processIndex">
+        		<description>Used in order to index process-multiplexed data</description>
+        		<scalar type="int32_t" />
+        	</struct-item>
+        	<struct-item name="sequenceIndex">
+        	    <description>Used in order to index sequence-multiplexed data</description>
+        		<scalar type="int32_t" />
+        	</struct-item>
+        	<struct-item name="chainIndex">
+        	    <description>Refers to a specific beam production chain</description>
+        		<scalar type="int32_t" />
+        	</struct-item>
+        	<struct-item name="eventNumber">
+        	    <description>The number of the event describes it's type</description>
+        		<scalar type="int32_t" />
+        	</struct-item>
+        	<struct-item name="timingGroupID">
+        	    <description>ID of the timing group for which the event is relevant</description>
+        		<scalar type="int32_t" />
+        	</struct-item>
+        	<struct-item name="acquisitionStamp" >
+        	    <description>The acquisition stamp is used to indicate when a measurement was done</description>
                 <scalar type="int64_t"/>
             </struct-item>
-            <struct-item name="cycleStamp">
-            <!--The cycle stamp is used to indicate when a specific cycle has started-->
-                <scalar type="int64_t"/>
-            </struct-item>
-            <struct-item name="cycleName">
-            <!--The cycle name indicates the cycle which started at time of the cycleStamp -->
-                <array type="char">
-                    <custom-constant-dim constant-name-ref="MAX_CYCLE_NAME_LENGTH"/>    
-                </array>
-            </struct-item>
-            <struct-item name="beamProcessID">
-				<scalar type="int32_t"/>
-            </struct-item>
-            <struct-item name="sequenceID">
-				<scalar type="int32_t"/>
-            </struct-item>
+        	<struct-item name="eventStamp">
+        	    <description>The event stamp is used to indicate when WhiteRabbit event was triggered on the Timing Receiver</description>
+        		<scalar type="int64_t" />
+        	</struct-item>
+        	<struct-item name="processStartStamp">
+        	    <description>The process start stamp indicates when the first event of the current process was triggered</description>
+        		<scalar type="int64_t" />
+        	</struct-item>
+        	<struct-item name="sequenceStartStamp">
+        	    <description>The sequence start stamp indicates when the first event of the current sequence was triggered</description>
+        		<scalar type="int64_t" />
+        	</struct-item>
+        	<struct-item name="chainStartStamp">
+        	    <description>The chain start stamp indicates when the first event of the current chain was triggered</description>
+        		<scalar type="int64_t" />
+        	</struct-item>
         </struct>
         <constant name="MAX_ERROR_MESSAGE_LENGTH" type="uint32_t" value="256"/>
         <constant name="MAX_NUMBER_OF_ERROR_MESSAGES" type="uint32_t" value="16"/>
@@ -591,39 +635,38 @@
                 </GSI-power-field>
             </setting>
             <acquisition>
-                <GSI-control-field multiplexed="false" name="control">
+                <GSI-control-field cycle-bound="false" name="control">
                     <custom-type-scalar data-type-name-ref="DEVICE_CONTROL"/>
                 </GSI-control-field>
-                <GSI-powerState-field multiplexed="false" name="powerState">
+                <GSI-powerState-field cycle-bound="false" name="powerState">
                     <custom-type-scalar data-type-name-ref="DEVICE_POWER_STATE"/>
                 </GSI-powerState-field>
-                <GSI-status-field multiplexed="false" name="status">
+                <GSI-status-field cycle-bound="false" name="status">
                     <custom-type-scalar data-type-name-ref="DEVICE_STATUS"/>
                 </GSI-status-field>
-                <GSI-interlock-field multiplexed="false" name="interlock">
+                <GSI-interlock-field cycle-bound="false" name="interlock">
                     <scalar type="bool"/>
                 </GSI-interlock-field>
-                <GSI-opReady-field multiplexed="false" name="opReady">
+                <GSI-opReady-field cycle-bound="false" name="opReady">
                     <scalar type="bool"/>
                 </GSI-opReady-field>
-                <GSI-modulesReady-field name="modulesReady" multiplexed="false">
+                <GSI-modulesReady-field name="modulesReady" cycle-bound="false">
                 	<scalar type="bool" />
                 </GSI-modulesReady-field>
-                <GSI-detailed-status-field multiplexed="false" name="detailedStatus">
+                <GSI-detailed-status-field cycle-bound="false" name="detailedStatus">
                     <array type="bool">
                         <custom-constant-dim constant-name-ref="DETAILED_STATUS_SIZE"/>
                     </array>
                 </GSI-detailed-status-field>
-                <GSI-module-status-field name="moduleStatus" multiplexed="false">
+                <GSI-module-status-field name="moduleStatus" cycle-bound="false">
                 	<custom-type-array data-type-name-ref="MODULE_STATUS">
                 		<custom-constant-dim constant-name-ref="MODULE_STATUS_SIZE" />
-                		
                 	</custom-type-array>
                 </GSI-module-status-field>
-                <GSI-acquisition-context-field multiplexed="true" name="acquisitionContext">
+                <GSI-acquisition-context-field cycle-bound="true" name="acquisitionContext">
                     <custom-type-scalar data-type-name-ref="GSI_ACQ_CONTEXT"/>
                 </GSI-acquisition-context-field>
-                <GSI-error_collection-field multiplexed="false" name="error_collection">
+                <GSI-error_collection-field cycle-bound="false" name="error_collection">
                     <custom-type-array data-type-name-ref="GSI_ERROR">
                         <custom-constant-dim constant-name-ref="MAX_NUMBER_OF_ERROR_MESSAGES"/>
                     </custom-type-array>
@@ -651,7 +694,21 @@
         <get-server-action implementation="default" name="SettingGetAction"/>
         <get-server-action implementation="default" name="AcquisitionGetAction"/>
         <get-server-action implementation="default" name="StatusGetAction"/>
-        <get-server-action implementation="default" name="VersionGetAction"/><get-server-action implementation="default" name="ModuleStatusGetAction"></get-server-action>
+        <get-server-action implementation="default" name="VersionGetAction"/>
+        <get-server-action implementation="default" name="ModuleStatusGetAction"/>
+
+		<rt-action name="StatusUpdateAction"/>	<!-- Pre-defined status update action -->
     </actions>
+    <events>
+	    <logical-events>
+			<logical-event use="required" name="StatusUpdateEvent" type="timer"/>
+		</logical-events>
+	</events>
+	<scheduling-units>
+		<scheduling-unit name="StatusUpdateSchedulingUnit">
+			<rt-action-ref rt-action-name-ref="StatusUpdateAction" />
+			<logical-event-ref logical-event-name-ref="StatusUpdateEvent" />
+		</scheduling-unit>
+    </scheduling-units>
 
-</equipment-model>
\ No newline at end of file
+</equipment-model>
diff --git a/silecs-codegen/src/xml/test/fesa/GSIClassTemplateFESA431.xml b/silecs-codegen/src/xml/test/fesa/GSIClassTemplateFESA431.xml
deleted file mode 100644
index c24d5b6..0000000
--- a/silecs-codegen/src/xml/test/fesa/GSIClassTemplateFESA431.xml
+++ /dev/null
@@ -1,703 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<equipment-model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../design-gsi.xsd">
-    <information>
-        <class-name>GSIClassTemplate</class-name>
-        <class-major-version>0</class-major-version>
-        <class-minor-version>1</class-minor-version>
-        <class-tiny-version>0</class-tiny-version>
-        <type>Final</type>
-        <state>development</state>
-        <description>An empty design with GSI-specific standard properties</description>
-        <fesa-version>DEV</fesa-version>
-        <repository-path>undefined</repository-path>
-    </information>
-    <ownership>
-        <responsible name="CSCO"/>
-        <creator login="Undefined"/>
-    </ownership>
-        <interface>
-        <device-interface>
-            <setting>
-                <GSI-Init-Property multiplexed="false" name="Init" visibility="operational">
-                    <description>Control property, used to initialize the device with default values from the device instantiation file</description>
-                    <set-action partial-setting="true" transaction="true">
-                        <server-action-ref server-action-name-ref="InitSetAction"/>
-                    </set-action>
-                </GSI-Init-Property>
-                <GSI-Reset-Property multiplexed="false" name="Reset" visibility="operational">
-                    <description>Control property, used to reset the device while keeping the persistent data.</description>
-                    <set-action partial-setting="true" transaction="true">
-                        <server-action-ref server-action-name-ref="ResetSetAction"/>
-                    </set-action>
-                </GSI-Reset-Property>
-                <GSI-Setting-Property multiplexed="false" name="Setting" visibility="operational">
-                    <description>Used for setting hardware parameters for controlling the device.</description>
-                    <update-flag-item direction="OUT" name="updateFlags" optional="true">
-                       <builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/>
-                    </update-flag-item>
-                    <cycle-name-item direction="OUT" name="cycleName" optional="true">
-                        <array type="char">
-                            <dim>32</dim>
-                        </array>
-                    </cycle-name-item>
-                    <set-action partial-setting="true" transaction="true">
-                        <server-action-ref server-action-name-ref="SettingSetAction"/>
-                    </set-action>
-                    <get-action>
-                        <server-action-ref server-action-name-ref="SettingGetAction"/>
-                    </get-action>
-                </GSI-Setting-Property>
-                <GSI-Power-Property multiplexed="false" name="Power" visibility="operational">
-                    <description>Used to turn the power of a device on or off.</description>
-                    <update-flag-item direction="OUT" name="updateFlags" optional="true">
-                        <builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/>
-                    </update-flag-item>
-                    <cycle-name-item direction="OUT" name="cycleName" optional="true">
-                        <array type="char">
-                            <dim>32</dim>
-                        </array>
-                    </cycle-name-item>
-                    <set-action partial-setting="true" transaction="true">
-                        <server-action-ref server-action-name-ref="PowerSetAction"/>
-                    </set-action>
-                    <get-action>
-                        <server-action-ref server-action-name-ref="PowerGetAction"/>
-                    </get-action>
-                    <power-item direction="INOUT" name="power">
-                        <custom-type-scalar data-type-name-ref="DEVICE_POWER"/>
-                        
-                        <data-field-ref field-name-ref="power"/>
-                    </power-item>
-                </GSI-Power-Property>
-            </setting>
-            <acquisition>
-                <GSI-Status-Property multiplexed="false" name="Status" on-change="true" subscribable="true" visibility="operational">
-                    <description>Used to display the (cycle independent) overall status of the device.</description>
-                    <description>Detailed status information may be additionally added to this property.</description>
-                    <acq-stamp-item direction="OUT" name="acqStamp">
-                        <scalar type="int64_t"/>
-                    </acq-stamp-item>
-                    <update-flag-item direction="OUT" name="updateFlags" optional="true">
-                        <builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/>
-                    </update-flag-item>
-                    <cycle-name-item direction="OUT" name="cycleName" optional="true">
-                        <array type="char">
-                            <dim>32</dim>
-                        </array>
-                    </cycle-name-item>
-                    <cycle-stamp-item direction="OUT" name="cycleStamp" optional="true">
-                        <scalar type="int64_t"/>
-                    </cycle-stamp-item>
-                    <get-action>
-                        <server-action-ref server-action-name-ref="StatusGetAction"/>
-                    </get-action>
-                    <status-item direction="OUT" name="status">
-                        <custom-type-scalar data-type-name-ref="DEVICE_STATUS"/>
-                        
-                        <data-field-ref field-name-ref="status"/>
-                    </status-item>
-                    <detailed-status-item direction="OUT" name="detailedStatus">
-                        <description>Detailed status should consist of an array of boolean values considered as detailed status information as well as a
-corresponding string array containing keys to illustrate the meaning of the detailed status information.</description>
-                        <array type="bool">
-                            <custom-constant-dim constant-name-ref="DETAILED_STATUS_SIZE"/>
-                        </array>
-                        <data-field-ref field-name-ref="detailedStatus"/>
-                    </detailed-status-item>
-                    <detailed-status-labels-item direction="OUT" name="detailedStatus_labels">
-                        <description>Labels of detailed status bits.</description>
-                        <array2D type="char">
-                            <custom-constant-dim1 constant-name-ref="DETAILED_STATUS_SIZE"/>
-                            <custom-constant-dim2 constant-name-ref="MAX_DETAILED_STATUS_LABEL_LENGTH"/>
-                        </array2D>
-                        <data-field-ref field-name-ref="detailedStatus_labels"/>
-                    </detailed-status-labels-item>
-                    <detailed-status-severity-item direction="OUT" name="detailedStatus_severity">
-                        <description>Severities of the detailed status bits</description>
-                        <custom-type-array data-type-name-ref="DETAILED_STATUS_SEVERITY">
-                            <custom-constant-dim constant-name-ref="DETAILED_STATUS_SIZE"/>
-                        </custom-type-array>
-                        <data-field-ref field-name-ref="detailedStatus_severity"/>
-                    </detailed-status-severity-item>
-                    <powerState-item direction="OUT" name="powerState">
-                        <description>Power state of the device (ON, OFF)</description>
-                        <custom-type-scalar data-type-name-ref="DEVICE_POWER_STATE"/>
-                        
-                        <data-field-ref field-name-ref="powerState"/>
-                    </powerState-item>
-                    <control-item direction="OUT" name="control">
-                        <custom-type-scalar data-type-name-ref="DEVICE_CONTROL"/>
-                        <data-field-ref field-name-ref="control"/>
-                    </control-item>
-                    <interlock-item direction="OUT" name="interlock">
-                        <description>Interlock state of the device</description>
-                        <scalar type="bool"/>
-                        <data-field-ref field-name-ref="interlock"/>
-                    </interlock-item>
-                    <opReady-item direction="OUT" name="opReady">
-                        <description>Contains the devices state regarding operation</description>
-                        <scalar type="bool"/>
-                        <data-field-ref field-name-ref="opReady"/>
-                    </opReady-item>
-                    <modulesReady-item direction="OUT" name="modulesReady">
-                        <description>Contains the devices module state</description>
-                        <scalar type="bool"/>
-                        <data-field-ref field-name-ref="modulesReady"/>
-                    </modulesReady-item>
-                    <error_collection-item direction="OUT">
-                        <error_codes direction="OUT" name="error_codes">
-                            <array type="int32_t">
-                                <custom-constant-dim constant-name-ref="MAX_NUMBER_OF_ERROR_MESSAGES"/>
-                            </array>
-                        </error_codes>
-                        <error_messages direction="OUT" name="error_messages">
-                            <array2D type="char">
-                                <custom-constant-dim1 constant-name-ref="MAX_NUMBER_OF_ERROR_MESSAGES"/>
-                                <custom-constant-dim2 constant-name-ref="MAX_ERROR_MESSAGE_LENGTH"/>
-                            </array2D>
-                        </error_messages>
-                        <error_timestamps direction="OUT" name="error_timestamps">
-                            <array type="int64_t">
-                                <custom-constant-dim constant-name-ref="MAX_NUMBER_OF_ERROR_MESSAGES"/>
-                            </array>
-                        </error_timestamps>
-                        <error_cycle_names direction="OUT" name="error_cycle_names">
-                            <array2D type="char">
-                                <custom-constant-dim1 constant-name-ref="MAX_NUMBER_OF_ERROR_MESSAGES"/>
-                                <custom-constant-dim2 constant-name-ref="MAX_ERROR_MESSAGE_LENGTH"/>
-                            </array2D>
-                        </error_cycle_names>
-                        <error_collection-field-ref field-name-ref="error_collection"/>
-                    </error_collection-item>
-                </GSI-Status-Property>
-                <GSI-ModuleStatus-Property visibility="development" subscribable="true" name="ModuleStatus" multiplexed="false">
-                    <description>Gives detailed information on the state of 3rd party hardware and software components which are required to operate the device.</description>
-                    <acq-stamp-item name="acqStamp" direction="OUT">
-                        <scalar type="int64_t" />
-                    </acq-stamp-item>
-                    <update-flag-item optional="true" name="updateFlags" direction="OUT">
-                        <builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE" />
-                    </update-flag-item>
-                    <cycle-name-item optional="true" name="cycleName" direction="OUT">
-                        <array type="char">
-                            <dim>32</dim>
-                        </array>
-                    </cycle-name-item>
-                    <cycle-stamp-item optional="true" name="cycleStamp" direction="OUT">
-                        <scalar type="int64_t" />
-                    </cycle-stamp-item>
-                    <get-action>
-                        <server-action-ref server-action-name-ref="ModuleStatusGetAction" />
-                    </get-action>
-                    <module-status-item name="moduleStatus" direction="OUT">
-                        <custom-type-array data-type-name-ref="MODULE_STATUS">
-                            <custom-constant-dim constant-name-ref="MODULE_STATUS_SIZE" />
-                        </custom-type-array>
-                        <data-field-ref field-name-ref="moduleStatus" />
-                    </module-status-item>
-                    <module-status-labels-item name="moduleStatus_labels" direction="OUT">
-                        <array2D type="char">
-                            <custom-constant-dim1 constant-name-ref="MODULE_STATUS_SIZE" />
-                            <custom-constant-dim2 constant-name-ref="MAX_MODULE_STATUS_LABEL_LENGTH" />
-                        </array2D>
-                        <data-field-ref field-name-ref="moduleStatus_labels" />
-                    </module-status-labels-item>
-                </GSI-ModuleStatus-Property>
-                <GSI-Acquisition-Property multiplexed="true" name="Acquisition" on-change="true" subscribable="true" visibility="operational">
-                    <description>Used for returning acquisition data which is retrieved from the hardware.</description>
-                    <acq-stamp-item direction="OUT" name="acqStamp">
-                        <scalar type="int64_t"/>
-                    </acq-stamp-item>
-                    <update-flag-item direction="OUT" name="updateFlags" optional="true">
-                        <builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/>
-                    </update-flag-item>
-                    <cycle-name-item direction="OUT" name="cycleName" optional="true">
-                        <array type="char">
-                            <dim>32</dim>
-                        </array>
-                    </cycle-name-item>
-                    <cycle-stamp-item direction="OUT" name="cycleStamp" optional="true">
-                        <scalar type="int64_t"/>
-                    </cycle-stamp-item>
-                    <get-action>
-                        <server-action-ref server-action-name-ref="AcquisitionGetAction"/>
-                    </get-action>
-                    <acquisition-context-item direction="OUT">
-                        <processIndex direction="OUT" name="processIndex">
-                            <scalar type="int32_t"/>
-                        </processIndex>
-                        <sequenceIndex direction="OUT" name="sequenceIndex">
-                            <scalar type="int32_t"/>
-                        </sequenceIndex>
-                        <chainIndex direction="OUT" name="chainIndex">
-                            <scalar type="int32_t"/>
-                        </chainIndex>
-                        <eventNumber direction="OUT" name="eventNumber">
-                            <scalar type="int32_t"/>
-                        </eventNumber>
-                        <timingGroupID direction="OUT" name="timingGroupID">
-                            <scalar type="int32_t"/>
-                        </timingGroupID>
-                        <acquisitionStamp direction="OUT" name="acquisitionStamp">
-                            <scalar type="int64_t"/>
-                        </acquisitionStamp>
-                        <eventStamp direction="OUT" name="eventStamp">
-                            <scalar type="int64_t"/>
-                        </eventStamp>
-                        <processStartStamp direction="OUT" name="processStartStamp">
-                            <scalar type="int64_t"/>
-                        </processStartStamp>
-                        <sequenceStartStamp direction="OUT" name="sequenceStartStamp">
-                            <scalar type="int64_t"/>
-                        </sequenceStartStamp>
-                        <chainStartStamp direction="OUT" name="chainStartStamp">
-                            <scalar type="int64_t"/>
-                        </chainStartStamp>
-                        <acquisition-context-field-ref field-name-ref="acquisitionContext"/>
-                    </acquisition-context-item>
-                </GSI-Acquisition-Property>
-                <GSI-Version-Property multiplexed="false" name="Version" on-change="false" subscribable="false" visibility="operational">
-                    <description>Returns the current software and hardware versions of a piece of equipment.</description>
-                    <acq-stamp-item direction="OUT" name="acqStamp">
-                        <scalar type="int64_t"/>
-                    </acq-stamp-item>
-                    <update-flag-item direction="OUT" name="updateFlags" optional="true">
-                        <builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/>
-                    </update-flag-item>
-                    <cycle-name-item direction="OUT" name="cycleName" optional="true">
-                        <array type="char">
-                            <dim>32</dim>
-                        </array>
-                    </cycle-name-item>
-                    <cycle-stamp-item direction="OUT" name="cycleStamp" optional="true">
-                        <scalar type="int64_t"/>
-                    </cycle-stamp-item>
-                    <get-action>
-                        <server-action-ref server-action-name-ref="VersionGetAction"/>
-                    </get-action>
-                    <version-item direction="OUT" name="classVersion">
-                        <array type="char">
-                            <custom-constant-dim constant-name-ref="MAX_VERSION_NAME_LENGTH"/>
-                        </array>
-                    </version-item>
-                    <version-item direction="OUT" name="deployUnitVersion">
-                        <array type="char">
-                            <custom-constant-dim constant-name-ref="MAX_VERSION_NAME_LENGTH"/>
-                        </array>
-                    </version-item>
-                    <version-item direction="OUT" name="fesaVersion">
-                        <array type="char">
-                            <custom-constant-dim constant-name-ref="MAX_VERSION_NAME_LENGTH"/>
-                        </array>
-                    </version-item>
-                </GSI-Version-Property>
-         </acquisition>
-      </device-interface>
-        <global-interface>
-            <setting>
-                <diagnostic-property multiplexed="false" name="DiagnosticSetting" visibility="expert">
-                    <description>Generic property which allows to diagnose any FESA classes</description>
-                        <mode-item direction="INOUT" name="enableDiagMode">
-                            <scalar type="bool"/>
-                        </mode-item>
-                        <host-item direction="INOUT" name="hostName">
-                            <description>Host of the FESA class</description>
-                            <array type="char">
-                                <dim>32</dim>
-                            </array>
-                        </host-item>
-                        <port-item direction="INOUT" name="portNumber">
-                            <description>Port used by the FESA class</description>
-                            <scalar type="int32_t"/>
-                        </port-item>
-                        <config-item direction="IN" name="requestConfig">
-                            <scalar type="bool"/>
-                        </config-item>
-                        <state-item direction="IN" name="requestState">
-                            <scalar type="bool"/>
-                        </state-item>
-                        <fwk-topic-item direction="INOUT" name="fwkTopic">
-                            <builtin-type-scalar data-type-name-ref="DIAG_FWK_TOPIC"/>
-                        </fwk-topic-item>
-                        <custom-topic-item direction="INOUT" name="customTopic">
-                            <custom-type-scalar data-type-name-ref="DIAG_TOPIC"/>
-                        </custom-topic-item>
-                        <device-trace-item direction="INOUT" name="traceDevices">
-                            <array type="char">
-                                <dim>320</dim>
-                            </array>
-                        </device-trace-item>
-                        <bypass-action-item direction="INOUT" name="bypassActions">
-                            <array type="char">
-                                <dim>320</dim>
-                            </array>
-                        </bypass-action-item>
-                </diagnostic-property>
-            </setting>
-            <acquisition>
-                <GSI-DeviceDescription-Property multiplexed="false" name="DeviceDescription" on-change="false" subscribable="false" visibility="operational">
-                    <timing-info-item direction="OUT" name="deviceNameTimingReceiver">
-                        <array type="char">
-                            <variable-dim/>
-                        </array>
-                        <data-field-ref field-name-ref="deviceNameTimingReceiver"/>
-                    </timing-info-item>
-                    <property-info-item direction="OUT" name="propertyNames">
-                        <array2D type="char">
-                            <variable-dim1/>
-                            <variable-dim2/>
-                        </array2D>
-                    </property-info-item>
-                    <device-info-item direction="OUT" name="deviceNames">
-                        <array2D type="char">
-                            <variable-dim1/>
-                            <variable-dim2/>
-                        </array2D>
-                    </device-info-item>
-                    <global-device-info-item direction="OUT" name="globalDeviceName">
-                        <array type="char">
-                            <variable-dim/>
-                        </array>
-                    </global-device-info-item>
-                    <host-info-item direction="OUT" name="host">
-                        <array type="char">
-                            <variable-dim/>
-                        </array>
-                    </host-info-item>
-                </GSI-DeviceDescription-Property>
-            </acquisition>
-        </global-interface>
-    </interface>
-    <builtin-types>
-        <notification-update-enum name="NOTIFICATION_UPDATE">
-            <IMMEDIATE access="RO" symbol="IMMEDIATE" value="1"/>
-            <SET access="RO" symbol="SET" value="2"/>
-        </notification-update-enum>
-        <diag-fwk-topic name="DIAG_FWK_TOPIC">
-            <b0 name="SRV_GET_ACTION_PROFIING"/>
-            <b1 name="SRV_SET_ACTION_PROFILING"/>
-            <b2 name="RT_ACTION_PROFILING"/>
-            <b3 name="EVENT_PROFILING"/>
-            <b4 name="NOTIFICATION_PROFILING"/>
-            <b5 name="SRV_GET_ACTION_TRACKING"/>
-            <b6 name="SRV_SET_ACTION_TRACKING"/>
-            <b7 name="RT_ACTION_TRACKING"/>
-            <b8 name="EVENT_TRACKING"/>
-            <b9 name="NOTIFICATION_TRACKING"/>
-            <b10 name="PERSISTENCY_TRACKING"/>
-            <b11 name="TRANSACTION_TRACKING"/>
-            <b12 name="SUBSCRIPTION_TRACKING"/>
-            <b13 name="SIGNAL_HANDLER_TRACKING"/>
-            <b14 name="LOCAL_CONNECTION_TRACKING"/>
-        </diag-fwk-topic>
-        <fault-severity name="FaultSeverity">
-            <description>Enumeration listing the available fault severities used by the fault fields</description>
-            <INFO access="RO" meaning="NONE" value="0" symbol="INFO" />
-            <WARNING access="RO" meaning="WARNING" value="1" symbol="WARNING" />
-            <ERROR access="RO" meaning="ERROR" value="2" symbol="ERROR" />
-            <CRITICAL access="RO" meaning="ERROR" value="3" symbol="CRITICAL" />
-        </fault-severity>
-
-    </builtin-types>
-    <custom-types>
-        <diag-custom-topic name="DIAG_TOPIC">
-        </diag-custom-topic>
-        <enum name="DEVICE_STATUS">
-        <!--Possible (mutually exclusive) values to describe the device status-->
-            
-            <item access="RW" meaning="NONE" symbol="UNKNOWN" value="0"/>
-            <!--The device status is unknown-->
-            
-            <item access="RW" meaning="NONE" symbol="OK" value="1"/>
-            <!--The device is in fully operational state-->
-            
-            <item access="RW" meaning="NONE" symbol="WARNING" value="2"/>
-            <!--The device is not fully operational; A device in WARNING state can still be used operationally, -->
-            <!--but clients must be informed of a problem that might become worse. Details are explained in the errorMsg field.-->
-            
-            <item access="RW" meaning="NONE" symbol="ERROR" value="3"/>
-            <!--The device is in a fault state. Details are explained in the errorMsg field-->
-        </enum>
-        <enum name="DEVICE_POWER_STATE">
-        <!--Possible (mutually exclusive) values to describe the power-state of the device.-->
-            
-            <item access="RW" meaning="NONE" symbol="UNKNOWN" value="0"/>
-            <!--The device mode is unknown-->
-            
-            <item access="RW" meaning="ON" symbol="ON" value="1"/>
-            <!--The device is in fully operational state-->
-            
-            <item access="RW" meaning="NONE" symbol="OFF" value="2"/>
-            <!--The device is turned off-->
-            
-            <item access="RW" meaning="NONE" symbol="STANDBY" value="3"/>
-            <!--The device is in a stand-by mode. This mode is a sort of “parking mode” in which the device can -->
-            <!--stay for hours or even days. It is defined by the following characteristics:-->
-            <!--It is safe, it does not wear out, it consumes little energy.-->
-            <!--Furthermore, it takes a short time to go from STANDBY to ON mode-->
-            
-            <item access="RW" meaning="NONE" symbol="POWER_DOWN" value="4"/>
-            <!--The device is shutting down. Note that some properties may not be accessible during this time.-->
-            <!--After shutdown the device will be in the mode OFF-->
-            
-            <item access="RW" meaning="NONE" symbol="POWER_UP" value="5"/>
-            <!--The device is starting up. Note that some properties may not be accessible during this time.-->
-            <!--After (re-)starting the device probably will be in the mode ON-->
-            
-        </enum>
-        <enum name="DEVICE_POWER">
-        <!--An enumeration Type used to control the operational mode of the device.-->
-        <!--Its values are a subset of those in the DEVICE_POWER_STATE type-->
-            <item access="RW" meaning="ON" symbol="ON" value="1"/>
-            <!--The device is in fully operational state-->     
-            
-            <item access="RW" meaning="OFF" symbol="OFF" value="2"/>
-            <!--The device is turned off-->
-        </enum>
-        <enum name="DEVICE_CONTROL">
-        <!--Possible values to describe the control mode of a device-->
-        <!--Currently two control modes (LOCAL, REMOTE) are defined-->
-        
-            <item access="RW" meaning="NONE" symbol="REMOTE" value="0"/>
-            <!--The device can be controlled normally through the control system-->
-            
-            <item access="RW" meaning="NONE" symbol="LOCAL" value="1"/>
-            <!--The device can be controlled locally. But it can be accessed in read-only mode via the control system-->
-        </enum>
-        <enum name="TOL_CHECK_MODE">
-        <!--This constant defines possible modes to check whether a control value is inside the tolerance values.-->
-        <!--Used to give information on how the tolerance fields are used to calculate the xxx_status information.-->
-        
-            <item access="RO" symbol="ABS" value="0"/>
-            <!--Use the absolute tolerance _tolAbs-->
-            
-            <item access="RO" symbol="REL" value="1"/>
-            <!--Use the relative tolerance _tolRel-->
-        </enum>
-        <bit-enum-32bits name="AQN_STATUS">
-        <!--Possible values to describe the acquisition status of a field (in the _status suffix)-->
-        <!--If this suffix is missing, it means that no additional status information is provided for the corresponding field-->
-        <!--If all bits are 0, this means that the corresponding field is OK.-->
-        <!--Only the lower 16 bits are standardized, the upper 16 bits can be defined by the equipment specialist.-->
-        <!--The difference between the Status property and the _status suffix is described in the section on the Status property.-->
-            <b0 name="NOT_OK"/>
-            <!--Some problem occurred that is not represented by the other bits. This property is called-->
-            <!-- NOT_OK so that it is not mixed up with ERROR or WARNING in the Status property-->
-            <b1 name="BAD_QUALITY"/>
-            <!--The value was acquired with a degraded quality. This is typically used for measurements.-->
-            <b2 name="DIFFERENT_FROM_SETTING"/>
-            <!--Different from the requested control value (for discrete values)--><!--or out of tolerance (for continuous values).-->
-            <b3 name="OUT_OF_RANGE"/>
-            <!--The value is out of the normal range (e.g. a temperature is too high or too low).-->
-            <b4 name="BUSY"/>
-            <!--The property value is changing in response to receiving a new control value (e.g. moving to a-->
-            <!--new position, charging a capacitor, ...). If the value change does not reach the requested new-->
-            <!--value within the maximum timeout, the BUSY bit should remain=1 and the TIMEOUT bit must be turned on.-->
-            <b5 name="TIMEOUT"/>
-            <!--A timeout occurred, because the property did not reach the reqested new control value within the-->
-            <!--maximum allowable time. A timeout normally indicates a problem to be addressed by the-->
-            <!--equipment specialist. This is typically used for slow changing control values that are BUSY while they change.-->
-            <b6 name="bit6_is_reserved_for_later_usage"/>
-            <b7 name="bit7_is_reserved_for_later_usage"/>
-            <b8 name="bit8_is_reserved_for_later_usage"/>
-            <b9 name="bit9_is_reserved_for_later_usage"/>
-            <b10 name="bit10_is_reserved_for_later_usage"/>
-            <b11 name="bit11_is_reserved_for_later_usage"/>
-            <b12 name="bit12_is_reserved_for_later_usage"/>
-            <b13 name="bit13_is_reserved_for_later_usage"/>
-            <b14 name="bit14_is_reserved_for_later_usage"/>
-            <b15 name="bit15_is_reserved_for_later_usage"/>
-            <!--bit 6 to 15 are reserved ... dont use them!-->
-            
-            <b16 name="bit_16_and_higher_can_be_used_by_the_class_developer"/>
-            <!--into bit 16..32 you can put in anything you want-->
-        </bit-enum-32bits>
-
-        <struct name="GSI_ERROR">
-        <!--This struct-item describes the structure of an GSI-error-->
-            <struct-item name="error_string">
-            <!--This string holds the error-message-->
-                <array type="char">
-                    <custom-constant-dim constant-name-ref="MAX_ERROR_MESSAGE_LENGTH"/>
-                </array>
-            </struct-item>
-            <struct-item name="error_code">
-            <!--The error code according to the defined error-message-->
-                <scalar type="int32_t"/>
-            </struct-item>
-            <!--The timestamp when the error occured-->
-            <struct-item name="error_timestamp">
-                <scalar type="int64_t"/>
-            </struct-item>
-            <!--The cycle for which the error occured-->
-            <struct-item name="error_cycle_name">
-                <array type="char">
-                    <custom-constant-dim constant-name-ref="MAX_CYCLE_NAME_LENGTH"/>
-                </array>
-            </struct-item>
-        </struct>
-        <struct name="GSI_ACQ_CONTEXT"><description>WhiteRabbit event specific acquisition information</description>
-            <struct-item name="processIndex">
-                <description>Used in order to index process-multiplexed data</description>
-                <scalar type="int32_t" />
-            </struct-item>
-            <struct-item name="sequenceIndex">
-                <description>Used in order to index sequence-multiplexed data</description>
-                <scalar type="int32_t" />
-            </struct-item>
-            <struct-item name="chainIndex">
-                <description>Refers to a specific beam production chain</description>
-                <scalar type="int32_t" />
-            </struct-item>
-            <struct-item name="eventNumber">
-                <description>The number of the event describes it's type</description>
-                <scalar type="int32_t" />
-            </struct-item>
-            <struct-item name="timingGroupID">
-                <description>ID of the timing group for which the event is relevant</description>
-                <scalar type="int32_t" />
-            </struct-item>
-            <struct-item name="acquisitionStamp" >
-                <description>The acquisition stamp is used to indicate when a measurement was done</description>
-                <scalar type="int64_t"/>
-            </struct-item>
-            <struct-item name="eventStamp">
-                <description>The event stamp is used to indicate when WhiteRabbit event was triggered on the Timing Receiver</description>
-                <scalar type="int64_t" />
-            </struct-item>
-            <struct-item name="processStartStamp">
-                <description>The process start stamp indicates when the first event of the current process was triggered</description>
-                <scalar type="int64_t" />
-            </struct-item>
-            <struct-item name="sequenceStartStamp">
-                <description>The sequence start stamp indicates when the first event of the current sequence was triggered</description>
-                <scalar type="int64_t" />
-            </struct-item>
-            <struct-item name="chainStartStamp">
-                <description>The chain start stamp indicates when the first event of the current chain was triggered</description>
-                <scalar type="int64_t" />
-            </struct-item>
-        </struct>
-        <constant name="MAX_ERROR_MESSAGE_LENGTH" type="uint32_t" value="256"/>
-        <constant name="MAX_NUMBER_OF_ERROR_MESSAGES" type="uint32_t" value="16"/>
-        <constant name="MAX_CYCLE_NAME_LENGTH" type="uint32_t" value="256"/>
-        <constant name="MAX_VERSION_NAME_LENGTH" type="uint32_t" value="256"/>
-        <constant name="MAX_DETAILED_STATUS_LABEL_LENGTH" type="uint32_t" value="30"/>
-        <constant name="DETAILED_STATUS_SIZE" type="uint32_t" value="2"/>
-        <enum name="DETAILED_STATUS_SEVERITY">
-            <item access="RO" symbol="INFO" value="0"/>
-            <item access="RO" symbol="WARNING_ON_FALSE" value="1"/>
-            <item access="RO" symbol="ERROR_ON_FALSE" value="2"/>
-        </enum>
-        <enum name="MODULE_STATUS">
-        <!-- Mutually exclusive values to describe the status of a hardware / software module-->
-            <item access="RO" value="0" symbol="UNKNOWN" />
-            <!--The status of the module is not known-->
-            <item access="RO" value="1" symbol="OK" />
-            <!--The module is in fully operational state-->
-            <item access="RO" value="2" symbol="WARNING" />
-            <!--The module is not fully operational; A module in WARNING state may still be used operationally, -->
-            <!--but clients must be informed of a problem that might become worse. -->
-            <item access="RO" value="3" symbol="ERROR" />
-            <!--The module is in a fault state. The related device is not operational.-->
-            <item access="RO" value="4" symbol="NOT_AVAILABLE" />
-            <!--The module is missing. The related device is not operational.-->
-        </enum>
-        <constant name="MAX_MODULE_STATUS_LABEL_LENGTH" type="uint32_t" value="30"/>
-        <constant name="MODULE_STATUS_SIZE" type="uint32_t" value="2"/>
-    </custom-types>
-    <data>
-        <device-data>
-            <configuration>
-                <GSI-detailed-status-labels-field name="detailedStatus_labels">
-                    <array2D type="char">
-                        <custom-constant-dim1 constant-name-ref="DETAILED_STATUS_SIZE"/>
-                        <custom-constant-dim2 constant-name-ref="MAX_DETAILED_STATUS_LABEL_LENGTH"/>
-                    </array2D>
-                    <default>{myStatusLabel1,myStatusLabel2}</default>
-                </GSI-detailed-status-labels-field>
-                <GSI-detailed-status-severity-field name="detailedStatus_severity">
-                    <custom-type-array data-type-name-ref="DETAILED_STATUS_SEVERITY">
-                        <custom-constant-dim constant-name-ref="DETAILED_STATUS_SIZE"/>
-                    </custom-type-array>
-                    <default>{INFO,INFO}</default>
-                </GSI-detailed-status-severity-field>
-                <GSI-module-status-labels-field name="moduleStatus_labels">
-                    <array2D type="char">
-                        <custom-constant-dim1 constant-name-ref="MODULE_STATUS_SIZE" />
-                        
-                        <custom-constant-dim2 constant-name-ref="MAX_MODULE_STATUS_LABEL_LENGTH" />
-                    </array2D>
-                    <default>{myModule1,myModule2}</default>
-                </GSI-module-status-labels-field>
-            </configuration>
-            <setting>
-                <GSI-power-field multiplexed="false" name="power" persistent="false">
-                    <custom-type-scalar data-type-name-ref="DEVICE_POWER"/>
-                </GSI-power-field>
-            </setting>
-            <acquisition>
-                <GSI-control-field multiplexed="false" name="control">
-                    <custom-type-scalar data-type-name-ref="DEVICE_CONTROL"/>
-                </GSI-control-field>
-                <GSI-powerState-field multiplexed="false" name="powerState">
-                    <custom-type-scalar data-type-name-ref="DEVICE_POWER_STATE"/>
-                </GSI-powerState-field>
-                <GSI-status-field multiplexed="false" name="status">
-                    <custom-type-scalar data-type-name-ref="DEVICE_STATUS"/>
-                </GSI-status-field>
-                <GSI-interlock-field multiplexed="false" name="interlock">
-                    <scalar type="bool"/>
-                </GSI-interlock-field>
-                <GSI-opReady-field multiplexed="false" name="opReady">
-                    <scalar type="bool"/>
-                </GSI-opReady-field>
-                <GSI-modulesReady-field name="modulesReady" multiplexed="false">
-                    <scalar type="bool" />
-                </GSI-modulesReady-field>
-                <GSI-detailed-status-field multiplexed="false" name="detailedStatus">
-                    <array type="bool">
-                        <custom-constant-dim constant-name-ref="DETAILED_STATUS_SIZE"/>
-                    </array>
-                </GSI-detailed-status-field>
-                <GSI-module-status-field name="moduleStatus" multiplexed="false">
-                    <custom-type-array data-type-name-ref="MODULE_STATUS">
-                        <custom-constant-dim constant-name-ref="MODULE_STATUS_SIZE" />
-                    </custom-type-array>
-                </GSI-module-status-field>
-                <GSI-acquisition-context-field multiplexed="true" name="acquisitionContext">
-                    <custom-type-scalar data-type-name-ref="GSI_ACQ_CONTEXT"/>
-                </GSI-acquisition-context-field>
-                <GSI-error_collection-field multiplexed="false" name="error_collection">
-                    <custom-type-array data-type-name-ref="GSI_ERROR">
-                        <custom-constant-dim constant-name-ref="MAX_NUMBER_OF_ERROR_MESSAGES"/>
-                    </custom-type-array>
-                </GSI-error_collection-field>
-            </acquisition>
-        </device-data>
-        <global-data>
-            <configuration>
-                <!-- The name of the timing receiver -->
-                <GSI-timing-receiver-name-field name="deviceNameTimingReceiver">
-                    <array type="char">
-                        <!-- The number of the timing receiver -->
-                        <variable-dim/>
-                    </array>
-                </GSI-timing-receiver-name-field>
-                </configuration>
-        </global-data>
-    </data>
-    <actions>
-        <set-server-action implementation="default" name="InitSetAction"/>
-        <set-server-action implementation="default" name="ResetSetAction"/>
-        <set-server-action implementation="default" name="SettingSetAction"/>
-        <set-server-action implementation="default" name="PowerSetAction"/>
-        <get-server-action implementation="default" name="PowerGetAction"/>
-        <get-server-action implementation="default" name="SettingGetAction"/>
-        <get-server-action implementation="default" name="AcquisitionGetAction"/>
-        <get-server-action implementation="default" name="StatusGetAction"/>
-        <get-server-action implementation="default" name="VersionGetAction"/>
-        <get-server-action implementation="default" name="ModuleStatusGetAction"/>
-    </actions>
-
-</equipment-model>
\ No newline at end of file
diff --git a/silecs-codegen/src/xml/test/fesa/emptyTemplateFESA300.xml b/silecs-codegen/src/xml/test/fesa/emptyTemplate.xml
similarity index 67%
rename from silecs-codegen/src/xml/test/fesa/emptyTemplateFESA300.xml
rename to silecs-codegen/src/xml/test/fesa/emptyTemplate.xml
index b6c3044..04ff772 100644
--- a/silecs-codegen/src/xml/test/fesa/emptyTemplateFESA300.xml
+++ b/silecs-codegen/src/xml/test/fesa/emptyTemplate.xml
@@ -6,10 +6,8 @@
         <class-minor-version>1</class-minor-version>
         <class-tiny-version>0</class-tiny-version>
         <type>Final</type>
-        <state>development</state>
         <description>An Empty design</description>
         <fesa-version>0.9.0</fesa-version>
-        <repository-path>undefined</repository-path>
     </information>
     <ownership>
         <responsible name="Undefined" />
@@ -55,6 +53,51 @@
                     </bypass-action-item>
                 </diagnostic-property>
             </setting>
+            <acquisition>
+                <metrics-property visibility="expert" name="Metrics" on-change="false" subscribable="false" cycle-bound="false">
+                    <description>Generic property to retrieve deploy-unit's metrics</description>
+                    <cmw-server name="cmwServer" direction="OUT">
+                        <array type="char">
+                            <dim>160</dim>
+                        </array>
+                    </cmw-server>
+                    <concurrency-layers name="concurrencyLayers" direction="OUT">
+                        <array type="char">
+                            <dim>2000</dim>
+                        </array>
+                    </concurrency-layers>
+                    <event-sources name="eventSources" direction="OUT">
+                        <array type="char">
+                            <dim>2000</dim>
+                        </array>
+                    </event-sources>
+                    <logical-events name="logicalEvents" direction="OUT">
+                        <array type="char">
+                            <dim>2000</dim>
+                        </array>
+                    </logical-events>
+                    <notification-queue name="notificationQueue" direction="OUT">
+                        <array type="char">
+                            <dim>50</dim>
+                        </array>
+                    </notification-queue>
+                    <ondemand-queues name="ondemandQueues" direction="OUT">
+                        <array type="char">
+                            <dim>2000</dim>
+                        </array>
+                    </ondemand-queues>
+                    <rt-actions name="rtActions" direction="OUT">
+                        <array type="char">
+                            <dim>5000</dim>
+                        </array>
+                    </rt-actions>
+                    <server-actions name="serverActions" direction="OUT">
+                        <array type="char">
+                            <dim>5000</dim>
+                        </array>
+                    </server-actions>
+                </metrics-property>
+            </acquisition>
         </global-interface>
     </interface>
     <builtin-types>
diff --git a/silecs-codegen/src/xml/test/fesa/generateFesaDesignTest.py b/silecs-codegen/src/xml/test/fesa/generateFesaDesignTest.py
index 0928273..71e5003 100644
--- a/silecs-codegen/src/xml/test/fesa/generateFesaDesignTest.py
+++ b/silecs-codegen/src/xml/test/fesa/generateFesaDesignTest.py
@@ -17,8 +17,9 @@
 import sys
 
 from test.testBase import *
-import fesa.fesa_3_0_0.generateFesaDesign
-import fesa.fesa_3_1_0.generateFesaDesign
+import fesa.fesa_7_3_0.generateFesaDesign
+
+fesa_version = "7.3.0"
 
 import libxml2
 import unittest
@@ -51,41 +52,15 @@ simpleSilecsDesign = '''<?xml version="1.0" encoding="UTF-8"?>
 </SILECS-Design>'''
 simpleSilecsDesignRoot = libxml2.parseDoc(simpleSilecsDesign)
 
-def testFillXML_EmptyTemplate_3_0_0(generator):
-    fesaRoot = libxml2.parseFile("test/fesa/emptyTemplateFESA300.xml")
-    generator.fillXML('3.0.0', 'MyClass', fesaRoot,simpleSilecsDesignRoot,logTopics={'errorlog': True})
-    assertTrue( fesaRoot.xpathEval('/equipment-model/events') != None )
-    assertTrue( fesaRoot.xpathEval('/equipment-model/scheduling-units') != None )
-
-
-def testFillXML_GSITemplate_3_0_0(generator):
-    fesaRoot = libxml2.parseFile("test/fesa/GSIClassTemplateFESA300.xml")
-    generator.fillXML('3.0.0', 'MyClass', fesaRoot,simpleSilecsDesignRoot,logTopics={'errorlog': True})
-    
-    assertTrue( fesaRoot.xpathEval('/equipment-model/events') != None )
-    assertTrue( fesaRoot.xpathEval('/equipment-model/scheduling-units') != None )
-
-    acquisition = fesaRoot.xpathEval('/equipment-model/interface/device-interface/acquisition')[0]
-    firstGSIAcqProp = acquisition.xpathEval('GSI-Acquisition-Property')[0]
-    assertTrue( acquisition.xpathEval('*')[0].prop('name') != firstGSIAcqProp.prop('name') ) # check if generated at right position
-    assertEqual( firstGSIAcqProp.prop('name'),"Acquisition" )
-    firstGSIAcqProp.shellPrintNode()   #for debug
-    valueItem = firstGSIAcqProp.xpathEval('value-item')[0]
-    assertTrue( valueItem != None )
-
-    setting = fesaRoot.xpathEval('/equipment-model/interface/device-interface/setting')[0]
-    firstGSISettingProp = setting.xpathEval('GSI-Setting-Property')[0]
-    assertTrue( acquisition.xpathEval('*')[0].prop('name') != firstGSISettingProp.prop('name') ) # check if generated at right position
-
-def testFillXML_EmptyTemplate_3_1_0(generator):
-    fesaRoot = libxml2.parseFile("test/fesa/emptyTemplateFESA300.xml")
-    generator.fillXML('3.1.0', 'MyClass', fesaRoot,simpleSilecsDesignRoot,logTopics={'errorlog': True})
+def testFillXML_EmptyTemplate(generator):
+    fesaRoot = libxml2.parseFile("test/fesa/emptyTemplate.xml")
+    generator.fillXML(fesa_version, 'MyClass', fesaRoot,simpleSilecsDesignRoot,logTopics={'errorlog': True})
     assertTrue( fesaRoot.xpathEval('/equipment-model/events') != None )
     assertTrue( fesaRoot.xpathEval('/equipment-model/scheduling-units') != None )
 
-def testFillXML_GSITemplate_3_1_0(generator):
-    fesaRoot = libxml2.parseFile("test/fesa/GSIClassTemplateFESA300.xml")
-    generator.fillXML('3.1.0', 'MyClass', fesaRoot,simpleSilecsDesignRoot,logTopics={'errorlog': True})
+def testFillXML_GSITemplate(generator):
+    fesaRoot = libxml2.parseFile("test/fesa/GSIClassTemplate.xml")
+    generator.fillXML(fesa_version, 'MyClass', fesaRoot,simpleSilecsDesignRoot,logTopics={'errorlog': True})
     assertTrue( fesaRoot.xpathEval('/equipment-model/events') != None )
     assertTrue( fesaRoot.xpathEval('/equipment-model/scheduling-units') != None )
 
@@ -101,34 +76,34 @@ def testFillXML_GSITemplate_3_1_0(generator):
     firstGSISettingProp = setting.xpathEval('GSI-Setting-Property')[0]
     assertTrue( acquisition.xpathEval('*')[0].prop('name') != firstGSISettingProp.prop('name') ) # check if generated at right position
 
-def testFillXML_GSITemplate_3_1_0_Exceptions(generator):
-    fesaRoot = libxml2.parseFile("test/fesa/GSIClassTemplateFESA300.xml")
+def testFillXML_GSITemplate_Exceptions(generator):
+    fesaRoot = libxml2.parseFile("test/fesa/GSIClassTemplate.xml")
     myRoot = simpleSilecsDesignRoot
     commandBlock = myRoot.xpathEval('/SILECS-Design/SILECS-Class/Command-Block')[0]
     
     commandBlock.setProp("name", "Init")
     try:
-        generator.fillXML('3.1.0', 'MyClass', fesaRoot,myRoot,logTopics={'errorlog': True})
+        generator.fillXML(fesa_version, 'MyClass', fesaRoot,myRoot,logTopics={'errorlog': True})
     except:
         print("test passed")
     else:
-        print("Test Failed: testFillXML_GSITemplate_3_1_0_Exceptions - Init \n No Exception was thrown")
+        print("Test Failed: testFillXML_GSITemplateExceptions - Init \n No Exception was thrown")
         sys.exit(1)
         
     commandBlock.setProp("name", "Reset")
     try:
-        generator.fillXML('3.1.0', 'MyClass', fesaRoot,myRoot,logTopics={'errorlog': True})
+        generator.fillXML(fesa_version, 'MyClass', fesaRoot,myRoot,logTopics={'errorlog': True})
     except:
         print("test passed")
     else:
-        print("Test Failed: testFillXML_GSITemplate_3_1_0_Exceptions - Reset \n No Exception was thrown")
+        print("Test Failed: testFillXML_GSITemplateExceptions - Reset \n No Exception was thrown")
         sys.exit(1)
 
 
-def testFillXML_AllTypes_4_3_1(generator):
-    fesaRoot = libxml2.parseFile("test/fesa/GSIClassTemplateFESA431.xml")
+def testFillXML_AllTypes(generator):
+    fesaRoot = libxml2.parseFile("test/fesa/GSIClassTemplate.xml")
     silecsRoot = libxml2.parseFile("test/AllTypesFESA.silecsdesign")
-    fesaRoot = generator.fillXML('4.3.0', 'MyClass', fesaRoot,silecsRoot,logTopics={'errorlog': True})
+    fesaRoot = generator.fillXML(fesa_version, 'MyClass', fesaRoot,silecsRoot,logTopics={'errorlog': True})
     fesaNewDocPath = "test/generated_temp/AllTypesFESA.design"
     fesaCompareDocPath = "test/generated_correct/AllTypesFESA.design"
     with open(fesaNewDocPath, 'w') as fd:
@@ -138,14 +113,11 @@ def testFillXML_AllTypes_4_3_1(generator):
     assertFileEqual( fesaNewDocPath, fesaCompareDocPath)
 
 def runTests():
-    # No need to further test that old stuff .. probably can be dropped
-    generator300 = fesa.fesa_3_0_0.generateFesaDesign.FESADesignGenerator3_0_0();
-    testFillXML_EmptyTemplate_3_0_0(generator300)
-    testFillXML_GSITemplate_3_0_0(generator300)
-    
-    generator310 = fesa.fesa_3_1_0.generateFesaDesign.FESADesignGenerator3_1_0();
-    testFillXML_EmptyTemplate_3_1_0(generator310)
-    testFillXML_GSITemplate_3_1_0(generator310)
-    testFillXML_AllTypes_4_3_1(generator310)
-    testFillXML_GSITemplate_3_1_0_Exceptions(generator310)
+
+    # Always only test the latest supported Fesa Version
+    generator = fesa.fesa_7_3_0.generateFesaDesign.FESADesignGenerator7_3_0();
+    testFillXML_EmptyTemplate(generator)
+    testFillXML_GSITemplate(generator)
+    testFillXML_AllTypes(generator)
+    testFillXML_GSITemplate_Exceptions(generator)
     allTestsOk()
diff --git a/silecs-codegen/src/xml/test/generated_correct/AllTypesFESA.design b/silecs-codegen/src/xml/test/generated_correct/AllTypesFESA.design
index 74c372e..2483417 100644
--- a/silecs-codegen/src/xml/test/generated_correct/AllTypesFESA.design
+++ b/silecs-codegen/src/xml/test/generated_correct/AllTypesFESA.design
@@ -1,37 +1,35 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <equipment-model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../design-gsi.xsd">
-    <information>
-        <class-name>MyClass</class-name>
-        <class-major-version>0</class-major-version>
-        <class-minor-version>1</class-minor-version>
-        <class-tiny-version>0</class-tiny-version>
-        <type>Final</type>
-        <state>development</state>
-        <description>An empty design with GSI-specific standard properties</description>
-        <fesa-version>4.3.0</fesa-version>
-        <repository-path>undefined</repository-path>
-    </information>
-    <ownership>
-        <responsible name="CSCO"/>
-        <creator login="schwinn"/>
-    </ownership>
+	<information>
+	  	<class-name>MyClass</class-name>
+		<class-major-version>0</class-major-version>
+		<class-minor-version>1</class-minor-version>
+		<class-tiny-version>0</class-tiny-version>
+		<type>Final</type>
+		<description>An empty design with GSI-specific standard properties</description>
+		<fesa-version>7.3.0</fesa-version>
+	</information>
+	<ownership>
+		<responsible name="ACO"/>
+		<creator login="schwinn"/>
+	</ownership>
         <interface>
         <device-interface>
             <setting>
                 <command-property name="MyWOBlockProp" visibility="development" multiplexed="false"><value-item name="WO_dt_fesa" direction="IN"><array type="double"><dim>10</dim></array><data-field-ref field-name-ref="WO_dt_fesa"/></value-item><value-item name="WO_real_fesa" direction="IN"><array type="float"><dim>10</dim></array><data-field-ref field-name-ref="WO_real_fesa"/></value-item><value-item name="WO_dint_fesa" direction="IN"><array type="int32_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_dint_fesa"/></value-item><value-item name="WO_int_fesa" direction="IN"><array type="int16_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_int_fesa"/></value-item><value-item name="WO_dword_fesa" direction="IN"><array type="int64_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_dword_fesa"/></value-item><value-item name="WO_word_fesa" direction="IN"><array type="int32_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_word_fesa"/></value-item><value-item name="WO_byte_fesa" direction="IN"><array type="int16_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_byte_fesa"/></value-item><value-item name="WO_char_fesa" direction="IN"><array type="int8_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_char_fesa"/></value-item><value-item name="WO_date_fesa" direction="IN"><array type="double"><dim>10</dim></array><data-field-ref field-name-ref="WO_date_fesa"/></value-item><value-item name="WO_string_fesa" direction="IN"><array2D type="char"><dim1>10</dim1><dim2>64</dim2></array2D><data-field-ref field-name-ref="WO_string_fesa"/></value-item><value-item name="WO_float32_fesa" direction="IN"><array type="float"><dim>10</dim></array><data-field-ref field-name-ref="WO_float32_fesa"/></value-item><value-item name="WO_uint32_fesa" direction="IN"><array type="int64_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_uint32_fesa"/></value-item><value-item name="WO_int32_fesa" direction="IN"><array type="int32_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_int32_fesa"/></value-item><value-item name="WO_uint16_fesa" direction="IN"><array type="int32_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_uint16_fesa"/></value-item><value-item name="WO_int16_fesa" direction="IN"><array type="int16_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_int16_fesa"/></value-item><value-item name="WO_uint8_fesa" direction="IN"><array type="int16_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_uint8_fesa"/></value-item><value-item name="WO_int8" direction="IN"><array type="int8_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_int8"/></value-item><set-action><server-action-ref server-action-name-ref="SetMyWOBlockProp"/></set-action></command-property><GSI-Init-Property multiplexed="false" name="Init" visibility="operational">
-                    <description>Control property, used to initialize the device with default values from the device instantiation file</description>
+                	<description>Control property, used to initialize the device with default values from the device instantiation file</description>
                     <set-action partial-setting="true" transaction="true">
                         <server-action-ref server-action-name-ref="InitSetAction"/>
                     </set-action>
                 </GSI-Init-Property>
                 <GSI-Reset-Property multiplexed="false" name="Reset" visibility="operational">
-                    <description>Control property, used to reset the device while keeping the persistent data.</description>
+                	<description>Control property, used to reset the device while keeping the persistent data.</description>
                     <set-action partial-setting="true" transaction="true">
                         <server-action-ref server-action-name-ref="ResetSetAction"/>
                     </set-action>
                 </GSI-Reset-Property>
                 <GSI-Setting-Property multiplexed="false" name="Setting" visibility="operational">
-                    <description>Used for setting hardware parameters for controlling the device.</description>
+                	<description>Used for setting hardware parameters for controlling the device.</description>
                     <update-flag-item direction="OUT" name="updateFlags" optional="true">
                        <builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/>
                     </update-flag-item>
@@ -50,7 +48,7 @@
                 <GSI-Setting-Property name="MyRWBlockProp" visibility="development" multiplexed="false"><value-item name="RW2_dt_fesa" direction="INOUT"><array2D type="double"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_dt_fesa"/></value-item><value-item name="RW2_real_fesa" direction="INOUT"><array2D type="float"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_real_fesa"/></value-item><value-item name="RW2_dint_fesa" direction="INOUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_dint_fesa"/></value-item><value-item name="RW2_int_fesa" direction="INOUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_int_fesa"/></value-item><value-item name="RW2_dword_fesa" direction="INOUT"><array2D type="int64_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_dword_fesa"/></value-item><value-item name="RW2_word_fesa" direction="INOUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_word_fesa"/></value-item><value-item name="RW2_byte_fesa" direction="INOUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_byte_fesa"/></value-item><value-item name="RW2_char_fesa" direction="INOUT"><array2D type="int8_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_char_fesa"/></value-item><value-item name="RW2_date_fesa" direction="INOUT"><array2D type="double"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_date_fesa"/></value-item><value-item name="RW2_float32_fesa" direction="INOUT"><array2D type="float"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_float32_fesa"/></value-item><value-item name="RW2_uint32_fesa" direction="INOUT"><array2D type="int64_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_uint32_fesa"/></value-item><value-item name="RW2_int32_fesa" direction="INOUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_int32_fesa"/></value-item><value-item name="RW2_uint16_fesa" direction="INOUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_uint16_fesa"/></value-item><value-item name="RW2_int16_fesa" direction="INOUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_int16_fesa"/></value-item><value-item name="RW2_uint8_fesa" direction="INOUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_uint8_fesa"/></value-item><value-item name="RW2_int8" direction="INOUT"><array2D type="int8_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW2_int8"/></value-item><value-item name="RW_dt_fesa" direction="INOUT"><scalar type="double"/><data-field-ref field-name-ref="RW_dt_fesa"/></value-item><value-item name="RW_real_fesa" direction="INOUT"><scalar type="float"/><data-field-ref field-name-ref="RW_real_fesa"/></value-item><value-item name="RW_dint_fesa" direction="INOUT"><scalar type="int32_t"/><data-field-ref field-name-ref="RW_dint_fesa"/></value-item><value-item name="RW_int_fesa" direction="INOUT"><scalar type="int16_t"/><data-field-ref field-name-ref="RW_int_fesa"/></value-item><value-item name="RW_dword_fesa" direction="INOUT"><scalar type="int64_t"/><data-field-ref field-name-ref="RW_dword_fesa"/></value-item><value-item name="RW_word_fesa" direction="INOUT"><scalar type="int32_t"/><data-field-ref field-name-ref="RW_word_fesa"/></value-item><value-item name="RW_byte_fesa" direction="INOUT"><scalar type="int16_t"/><data-field-ref field-name-ref="RW_byte_fesa"/></value-item><value-item name="RW_char_fesa" direction="INOUT"><scalar type="int8_t"/><data-field-ref field-name-ref="RW_char_fesa"/></value-item><value-item name="RW_date_fesa" direction="INOUT"><scalar type="double"/><data-field-ref field-name-ref="RW_date_fesa"/></value-item><value-item name="RW_string_fesa" direction="INOUT"><array type="char"><dim>64</dim></array><data-field-ref field-name-ref="RW_string_fesa"/></value-item><value-item name="RW_float32_fesa" direction="INOUT"><scalar type="float"/><data-field-ref field-name-ref="RW_float32_fesa"/></value-item><value-item name="RW_uint32_fesa" direction="INOUT"><scalar type="int64_t"/><data-field-ref field-name-ref="RW_uint32_fesa"/></value-item><value-item name="RW_int32_fesa" direction="INOUT"><scalar type="int32_t"/><data-field-ref field-name-ref="RW_int32_fesa"/></value-item><value-item name="RW_uint16_fesa" direction="INOUT"><scalar type="int32_t"/><data-field-ref field-name-ref="RW_uint16_fesa"/></value-item><value-item name="RW_int16_fesa" direction="INOUT"><scalar type="int16_t"/><data-field-ref field-name-ref="RW_int16_fesa"/></value-item><value-item name="RW_uint8_fesa" direction="INOUT"><scalar type="int16_t"/><data-field-ref field-name-ref="RW_uint8_fesa"/></value-item><value-item name="RW_int8" direction="INOUT"><scalar type="int8_t"/><data-field-ref field-name-ref="RW_int8"/></value-item><update-flag-item direction="OUT" name="updateFlags" optional="true"><builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/></update-flag-item><cycle-name-item direction="OUT" name="cycleName" optional="true"><array type="char"><dim>32</dim></array></cycle-name-item><set-action><server-action-ref server-action-name-ref="SetMyRWBlockProp"/></set-action><get-action><server-action-ref server-action-name-ref="GetMyRWBlockProp"/></get-action></GSI-Setting-Property><GSI-Power-Property multiplexed="false" name="Power" visibility="operational">
                     <description>Used to turn the power of a device on or off.</description>
                     <update-flag-item direction="OUT" name="updateFlags" optional="true">
-                        <builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/>
+						<builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/>
                     </update-flag-item>
                     <cycle-name-item direction="OUT" name="cycleName" optional="true">
                         <array type="char">
@@ -71,9 +69,9 @@
                 </GSI-Power-Property>
             </setting>
             <acquisition>
-                <GSI-Status-Property multiplexed="false" name="Status" on-change="true" subscribable="true" visibility="operational">
+                <GSI-Status-Property cycle-bound="false" name="Status" on-change="true" subscribable="true" visibility="operational">
                     <description>Used to display the (cycle independent) overall status of the device.</description>
-                    <description>Detailed status information may be additionally added to this property.</description>
+					<description>Detailed status information may be additionally added to this property.</description>
                     <acq-stamp-item direction="OUT" name="acqStamp">
                         <scalar type="int64_t"/>
                     </acq-stamp-item>
@@ -97,7 +95,7 @@
                         <data-field-ref field-name-ref="status"/>
                     </status-item>
                     <detailed-status-item direction="OUT" name="detailedStatus">
-                        <description>Detailed status should consist of an array of boolean values considered as detailed status information as well as a
+                    	<description>Detailed status should consist of an array of boolean values considered as detailed status information as well as a
 corresponding string array containing keys to illustrate the meaning of the detailed status information.</description>
                         <array type="bool">
                             <custom-constant-dim constant-name-ref="DETAILED_STATUS_SIZE"/>
@@ -105,7 +103,7 @@ corresponding string array containing keys to illustrate the meaning of the deta
                         <data-field-ref field-name-ref="detailedStatus"/>
                     </detailed-status-item>
                     <detailed-status-labels-item direction="OUT" name="detailedStatus_labels">
-                        <description>Labels of detailed status bits.</description>
+                    	<description>Labels of detailed status bits.</description>
                         <array2D type="char">
                             <custom-constant-dim1 constant-name-ref="DETAILED_STATUS_SIZE"/>
                             <custom-constant-dim2 constant-name-ref="MAX_DETAILED_STATUS_LABEL_LENGTH"/>
@@ -113,14 +111,14 @@ corresponding string array containing keys to illustrate the meaning of the deta
                         <data-field-ref field-name-ref="detailedStatus_labels"/>
                     </detailed-status-labels-item>
                     <detailed-status-severity-item direction="OUT" name="detailedStatus_severity">
-                        <description>Severities of the detailed status bits</description>
+                    	<description>Severities of the detailed status bits</description>
                         <custom-type-array data-type-name-ref="DETAILED_STATUS_SEVERITY">
                             <custom-constant-dim constant-name-ref="DETAILED_STATUS_SIZE"/>
                         </custom-type-array>
                         <data-field-ref field-name-ref="detailedStatus_severity"/>
                     </detailed-status-severity-item>
                     <powerState-item direction="OUT" name="powerState">
-                        <description>Power state of the device (ON, OFF)</description>
+                    	<description>Power state of the device (ON, OFF)</description>
                         <custom-type-scalar data-type-name-ref="DEVICE_POWER_STATE"/>
                         
                         <data-field-ref field-name-ref="powerState"/>
@@ -130,17 +128,17 @@ corresponding string array containing keys to illustrate the meaning of the deta
                         <data-field-ref field-name-ref="control"/>
                     </control-item>
                     <interlock-item direction="OUT" name="interlock">
-                        <description>Interlock state of the device</description>
+                    	<description>Interlock state of the device</description>
                         <scalar type="bool"/>
                         <data-field-ref field-name-ref="interlock"/>
                     </interlock-item>
                     <opReady-item direction="OUT" name="opReady">
-                        <description>Contains the devices state regarding operation</description>
+                    	<description>Contains the devices state regarding operation</description>
                         <scalar type="bool"/>
                         <data-field-ref field-name-ref="opReady"/>
                     </opReady-item>
                     <modulesReady-item direction="OUT" name="modulesReady">
-                        <description>Contains the devices module state</description>
+                    	<description>Contains the devices module state</description>
                         <scalar type="bool"/>
                         <data-field-ref field-name-ref="modulesReady"/>
                     </modulesReady-item>
@@ -170,40 +168,40 @@ corresponding string array containing keys to illustrate the meaning of the deta
                         <error_collection-field-ref field-name-ref="error_collection"/>
                     </error_collection-item>
                 </GSI-Status-Property>
-                <GSI-ModuleStatus-Property visibility="development" subscribable="true" name="ModuleStatus" multiplexed="false">
-                    <description>Gives detailed information on the state of 3rd party hardware and software components which are required to operate the device.</description>
-                    <acq-stamp-item name="acqStamp" direction="OUT">
-                        <scalar type="int64_t"/>
-                    </acq-stamp-item>
-                    <update-flag-item optional="true" name="updateFlags" direction="OUT">
-                        <builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/>
-                    </update-flag-item>
-                    <cycle-name-item optional="true" name="cycleName" direction="OUT">
-                        <array type="char">
-                            <dim>32</dim>
-                        </array>
-                    </cycle-name-item>
-                    <cycle-stamp-item optional="true" name="cycleStamp" direction="OUT">
-                        <scalar type="int64_t"/>
-                    </cycle-stamp-item>
-                    <get-action>
-                        <server-action-ref server-action-name-ref="ModuleStatusGetAction"/>
-                    </get-action>
-                    <module-status-item name="moduleStatus" direction="OUT">
-                        <custom-type-array data-type-name-ref="MODULE_STATUS">
-                            <custom-constant-dim constant-name-ref="MODULE_STATUS_SIZE"/>
-                        </custom-type-array>
-                        <data-field-ref field-name-ref="moduleStatus"/>
-                    </module-status-item>
-                    <module-status-labels-item name="moduleStatus_labels" direction="OUT">
-                        <array2D type="char">
-                            <custom-constant-dim1 constant-name-ref="MODULE_STATUS_SIZE"/>
-                            <custom-constant-dim2 constant-name-ref="MAX_MODULE_STATUS_LABEL_LENGTH"/>
-                        </array2D>
-                        <data-field-ref field-name-ref="moduleStatus_labels"/>
-                    </module-status-labels-item>
+                <GSI-ModuleStatus-Property visibility="operational" subscribable="true" name="ModuleStatus" cycle-bound="false">
+                	<description>Gives detailed information on the state of 3rd party hardware and software components which are required to operate the device.</description>
+                	<acq-stamp-item name="acqStamp" direction="OUT">
+                		<scalar type="int64_t"/>
+                	</acq-stamp-item>
+                	<update-flag-item optional="true" name="updateFlags" direction="OUT">
+                		<builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/>
+                	</update-flag-item>
+                	<cycle-name-item optional="true" name="cycleName" direction="OUT">
+                		<array type="char">
+                			<dim>32</dim>
+                		</array>
+                	</cycle-name-item>
+                	<cycle-stamp-item optional="true" name="cycleStamp" direction="OUT">
+                		<scalar type="int64_t"/>
+                	</cycle-stamp-item>
+                	<get-action>
+                		<server-action-ref server-action-name-ref="ModuleStatusGetAction"/>
+                	</get-action>
+                	<module-status-item name="moduleStatus" direction="OUT">
+                		<custom-type-array data-type-name-ref="MODULE_STATUS">
+                			<custom-constant-dim constant-name-ref="MODULE_STATUS_SIZE"/>
+                		</custom-type-array>
+                		<data-field-ref field-name-ref="moduleStatus"/>
+                	</module-status-item>
+                	<module-status-labels-item name="moduleStatus_labels" direction="OUT">
+                		<array2D type="char">
+                			<custom-constant-dim1 constant-name-ref="MODULE_STATUS_SIZE"/>
+                			<custom-constant-dim2 constant-name-ref="MAX_MODULE_STATUS_LABEL_LENGTH"/>
+                		</array2D>
+                		<data-field-ref field-name-ref="moduleStatus_labels"/>
+                	</module-status-labels-item>
                 </GSI-ModuleStatus-Property>
-                <GSI-Acquisition-Property multiplexed="true" name="Acquisition" on-change="true" subscribable="true" visibility="operational">
+                <GSI-Acquisition-Property cycle-bound="true" name="Acquisition" on-change="true" subscribable="true" visibility="operational">
                     <description>Used for returning acquisition data which is retrieved from the hardware.</description>
                     <acq-stamp-item direction="OUT" name="acqStamp">
                         <scalar type="int64_t"/>
@@ -256,7 +254,7 @@ corresponding string array containing keys to illustrate the meaning of the deta
                         <acquisition-context-field-ref field-name-ref="acquisitionContext"/>
                     </acquisition-context-item>
                 </GSI-Acquisition-Property>
-                <GSI-Acquisition-Property name="MyROBlockProp" visibility="development" subscribable="true" multiplexed="false" on-change="true"><value-item name="RO_dt_fesa" direction="OUT"><scalar type="double"/><data-field-ref field-name-ref="RO_dt_fesa"/></value-item><value-item name="RO_real_fesa" direction="OUT"><scalar type="float"/><data-field-ref field-name-ref="RO_real_fesa"/></value-item><value-item name="RO_dint_fesa" direction="OUT"><scalar type="int32_t"/><data-field-ref field-name-ref="RO_dint_fesa"/></value-item><value-item name="RO_int_fesa" direction="OUT"><scalar type="int16_t"/><data-field-ref field-name-ref="RO_int_fesa"/></value-item><value-item name="RO_dword_fesa" direction="OUT"><scalar type="int64_t"/><data-field-ref field-name-ref="RO_dword_fesa"/></value-item><value-item name="RO_word_fesa" direction="OUT"><scalar type="int32_t"/><data-field-ref field-name-ref="RO_word_fesa"/></value-item><value-item name="RO_byte_fesa" direction="OUT"><scalar type="int16_t"/><data-field-ref field-name-ref="RO_byte_fesa"/></value-item><value-item name="RO_char_fesa" direction="OUT"><scalar type="int8_t"/><data-field-ref field-name-ref="RO_char_fesa"/></value-item><value-item name="RO_date_fesa" direction="OUT"><scalar type="double"/><data-field-ref field-name-ref="RO_date_fesa"/></value-item><value-item name="RO_string_fesa" direction="OUT"><array type="char"><dim>64</dim></array><data-field-ref field-name-ref="RO_string_fesa"/></value-item><value-item name="RO_float32_fesa" direction="OUT"><scalar type="float"/><data-field-ref field-name-ref="RO_float32_fesa"/></value-item><value-item name="RO_uint32_fesa" direction="OUT"><scalar type="int64_t"/><data-field-ref field-name-ref="RO_uint32_fesa"/></value-item><value-item name="RO_int32_fesa" direction="OUT"><scalar type="int32_t"/><data-field-ref field-name-ref="RO_int32_fesa"/></value-item><value-item name="RO_uint16_fesa" direction="OUT"><scalar type="int32_t"/><data-field-ref field-name-ref="RO_uint16_fesa"/></value-item><value-item name="RO_int16_fesa" direction="OUT"><scalar type="int16_t"/><data-field-ref field-name-ref="RO_int16_fesa"/></value-item><value-item name="RO_uint8_fesa" direction="OUT"><scalar type="int16_t"/><data-field-ref field-name-ref="RO_uint8_fesa"/></value-item><value-item name="RO_int8" direction="OUT"><scalar type="int8_t"/><data-field-ref field-name-ref="RO_int8"/></value-item><acq-stamp-item direction="OUT" name="acqStamp"><scalar type="int64_t"/></acq-stamp-item><update-flag-item direction="OUT" name="updateFlags" optional="true"><builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/></update-flag-item><cycle-name-item direction="OUT" name="cycleName" optional="true"><array type="char"><dim>32</dim></array></cycle-name-item><cycle-stamp-item direction="OUT" name="cycleStamp" optional="true"><scalar type="int64_t"/></cycle-stamp-item><get-action><server-action-ref server-action-name-ref="GetMyROBlockProp"/></get-action><acquisition-context-item direction="OUT"><processIndex direction="OUT" name="processIndex"><scalar type="int32_t"/></processIndex><sequenceIndex direction="OUT" name="sequenceIndex"><scalar type="int32_t"/></sequenceIndex><chainIndex direction="OUT" name="chainIndex"><scalar type="int32_t"/></chainIndex><eventNumber direction="OUT" name="eventNumber"><scalar type="int32_t"/></eventNumber><timingGroupID direction="OUT" name="timingGroupID"><scalar type="int32_t"/></timingGroupID><acquisitionStamp direction="OUT" name="acquisitionStamp"><scalar type="int64_t"/></acquisitionStamp><eventStamp direction="OUT" name="eventStamp"><scalar type="int64_t"/></eventStamp><processStartStamp direction="OUT" name="processStartStamp"><scalar type="int64_t"/></processStartStamp><sequenceStartStamp direction="OUT" name="sequenceStartStamp"><scalar type="int64_t"/></sequenceStartStamp><chainStartStamp direction="OUT" name="chainStartStamp"><scalar type="int64_t"/></chainStartStamp><acquisition-context-field-ref field-name-ref="acquisitionContext"/></acquisition-context-item></GSI-Acquisition-Property><GSI-Acquisition-Property name="MyCBlockProp" visibility="development" subscribable="true" multiplexed="false" on-change="true"><value-item name="C_dt_fesa" direction="OUT"><array2D type="double"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_dt_fesa"/></value-item><value-item name="C_real_fesa" direction="OUT"><array2D type="float"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_real_fesa"/></value-item><value-item name="C_dint_fesa" direction="OUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_dint_fesa"/></value-item><value-item name="C_int_fesa" direction="OUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_int_fesa"/></value-item><value-item name="C_dword_fesa" direction="OUT"><array2D type="int64_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_dword_fesa"/></value-item><value-item name="C_word_fesa" direction="OUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_word_fesa"/></value-item><value-item name="C_byte_fesa" direction="OUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_byte_fesa"/></value-item><value-item name="C_char_fesa" direction="OUT"><array2D type="int8_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_char_fesa"/></value-item><value-item name="C_date_fesa" direction="OUT"><array2D type="double"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_date_fesa"/></value-item><value-item name="C_float32_fesa" direction="OUT"><array2D type="float"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_float32_fesa"/></value-item><value-item name="C_uint32_fesa" direction="OUT"><array2D type="int64_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_uint32_fesa"/></value-item><value-item name="C_int32_fesa" direction="OUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_int32_fesa"/></value-item><value-item name="C_uint16_fesa" direction="OUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_uint16_fesa"/></value-item><value-item name="C_int16_fesa" direction="OUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_int16_fesa"/></value-item><value-item name="C_uint8_fesa" direction="OUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_uint8_fesa"/></value-item><value-item name="C_int8" direction="OUT"><array2D type="int8_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_int8"/></value-item><acq-stamp-item direction="OUT" name="acqStamp"><scalar type="int64_t"/></acq-stamp-item><update-flag-item direction="OUT" name="updateFlags" optional="true"><builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/></update-flag-item><cycle-name-item direction="OUT" name="cycleName" optional="true"><array type="char"><dim>32</dim></array></cycle-name-item><cycle-stamp-item direction="OUT" name="cycleStamp" optional="true"><scalar type="int64_t"/></cycle-stamp-item><get-action><server-action-ref server-action-name-ref="GetMyCBlockProp"/></get-action><acquisition-context-item direction="OUT"><processIndex direction="OUT" name="processIndex"><scalar type="int32_t"/></processIndex><sequenceIndex direction="OUT" name="sequenceIndex"><scalar type="int32_t"/></sequenceIndex><chainIndex direction="OUT" name="chainIndex"><scalar type="int32_t"/></chainIndex><eventNumber direction="OUT" name="eventNumber"><scalar type="int32_t"/></eventNumber><timingGroupID direction="OUT" name="timingGroupID"><scalar type="int32_t"/></timingGroupID><acquisitionStamp direction="OUT" name="acquisitionStamp"><scalar type="int64_t"/></acquisitionStamp><eventStamp direction="OUT" name="eventStamp"><scalar type="int64_t"/></eventStamp><processStartStamp direction="OUT" name="processStartStamp"><scalar type="int64_t"/></processStartStamp><sequenceStartStamp direction="OUT" name="sequenceStartStamp"><scalar type="int64_t"/></sequenceStartStamp><chainStartStamp direction="OUT" name="chainStartStamp"><scalar type="int64_t"/></chainStartStamp><acquisition-context-field-ref field-name-ref="acquisitionContext"/></acquisition-context-item></GSI-Acquisition-Property><GSI-Version-Property multiplexed="false" name="Version" on-change="false" subscribable="false" visibility="operational">
+                <GSI-Acquisition-Property name="MyROBlockProp" visibility="development" subscribable="true" cycle-bound="false" on-change="true"><value-item name="RO_dt_fesa" direction="OUT"><scalar type="double"/><data-field-ref field-name-ref="RO_dt_fesa"/></value-item><value-item name="RO_real_fesa" direction="OUT"><scalar type="float"/><data-field-ref field-name-ref="RO_real_fesa"/></value-item><value-item name="RO_dint_fesa" direction="OUT"><scalar type="int32_t"/><data-field-ref field-name-ref="RO_dint_fesa"/></value-item><value-item name="RO_int_fesa" direction="OUT"><scalar type="int16_t"/><data-field-ref field-name-ref="RO_int_fesa"/></value-item><value-item name="RO_dword_fesa" direction="OUT"><scalar type="int64_t"/><data-field-ref field-name-ref="RO_dword_fesa"/></value-item><value-item name="RO_word_fesa" direction="OUT"><scalar type="int32_t"/><data-field-ref field-name-ref="RO_word_fesa"/></value-item><value-item name="RO_byte_fesa" direction="OUT"><scalar type="int16_t"/><data-field-ref field-name-ref="RO_byte_fesa"/></value-item><value-item name="RO_char_fesa" direction="OUT"><scalar type="int8_t"/><data-field-ref field-name-ref="RO_char_fesa"/></value-item><value-item name="RO_date_fesa" direction="OUT"><scalar type="double"/><data-field-ref field-name-ref="RO_date_fesa"/></value-item><value-item name="RO_string_fesa" direction="OUT"><array type="char"><dim>64</dim></array><data-field-ref field-name-ref="RO_string_fesa"/></value-item><value-item name="RO_float32_fesa" direction="OUT"><scalar type="float"/><data-field-ref field-name-ref="RO_float32_fesa"/></value-item><value-item name="RO_uint32_fesa" direction="OUT"><scalar type="int64_t"/><data-field-ref field-name-ref="RO_uint32_fesa"/></value-item><value-item name="RO_int32_fesa" direction="OUT"><scalar type="int32_t"/><data-field-ref field-name-ref="RO_int32_fesa"/></value-item><value-item name="RO_uint16_fesa" direction="OUT"><scalar type="int32_t"/><data-field-ref field-name-ref="RO_uint16_fesa"/></value-item><value-item name="RO_int16_fesa" direction="OUT"><scalar type="int16_t"/><data-field-ref field-name-ref="RO_int16_fesa"/></value-item><value-item name="RO_uint8_fesa" direction="OUT"><scalar type="int16_t"/><data-field-ref field-name-ref="RO_uint8_fesa"/></value-item><value-item name="RO_int8" direction="OUT"><scalar type="int8_t"/><data-field-ref field-name-ref="RO_int8"/></value-item><acq-stamp-item direction="OUT" name="acqStamp"><scalar type="int64_t"/></acq-stamp-item><update-flag-item direction="OUT" name="updateFlags" optional="true"><builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/></update-flag-item><cycle-name-item direction="OUT" name="cycleName" optional="true"><array type="char"><dim>32</dim></array></cycle-name-item><cycle-stamp-item direction="OUT" name="cycleStamp" optional="true"><scalar type="int64_t"/></cycle-stamp-item><get-action><server-action-ref server-action-name-ref="GetMyROBlockProp"/></get-action><acquisition-context-item direction="OUT"><processIndex direction="OUT" name="processIndex"><scalar type="int32_t"/></processIndex><sequenceIndex direction="OUT" name="sequenceIndex"><scalar type="int32_t"/></sequenceIndex><chainIndex direction="OUT" name="chainIndex"><scalar type="int32_t"/></chainIndex><eventNumber direction="OUT" name="eventNumber"><scalar type="int32_t"/></eventNumber><timingGroupID direction="OUT" name="timingGroupID"><scalar type="int32_t"/></timingGroupID><acquisitionStamp direction="OUT" name="acquisitionStamp"><scalar type="int64_t"/></acquisitionStamp><eventStamp direction="OUT" name="eventStamp"><scalar type="int64_t"/></eventStamp><processStartStamp direction="OUT" name="processStartStamp"><scalar type="int64_t"/></processStartStamp><sequenceStartStamp direction="OUT" name="sequenceStartStamp"><scalar type="int64_t"/></sequenceStartStamp><chainStartStamp direction="OUT" name="chainStartStamp"><scalar type="int64_t"/></chainStartStamp><acquisition-context-field-ref field-name-ref="acquisitionContext"/></acquisition-context-item></GSI-Acquisition-Property><GSI-Acquisition-Property name="MyCBlockProp" visibility="development" subscribable="true" cycle-bound="false" on-change="true"><value-item name="C_dt_fesa" direction="OUT"><array2D type="double"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_dt_fesa"/></value-item><value-item name="C_real_fesa" direction="OUT"><array2D type="float"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_real_fesa"/></value-item><value-item name="C_dint_fesa" direction="OUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_dint_fesa"/></value-item><value-item name="C_int_fesa" direction="OUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_int_fesa"/></value-item><value-item name="C_dword_fesa" direction="OUT"><array2D type="int64_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_dword_fesa"/></value-item><value-item name="C_word_fesa" direction="OUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_word_fesa"/></value-item><value-item name="C_byte_fesa" direction="OUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_byte_fesa"/></value-item><value-item name="C_char_fesa" direction="OUT"><array2D type="int8_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_char_fesa"/></value-item><value-item name="C_date_fesa" direction="OUT"><array2D type="double"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_date_fesa"/></value-item><value-item name="C_float32_fesa" direction="OUT"><array2D type="float"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_float32_fesa"/></value-item><value-item name="C_uint32_fesa" direction="OUT"><array2D type="int64_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_uint32_fesa"/></value-item><value-item name="C_int32_fesa" direction="OUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_int32_fesa"/></value-item><value-item name="C_uint16_fesa" direction="OUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_uint16_fesa"/></value-item><value-item name="C_int16_fesa" direction="OUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_int16_fesa"/></value-item><value-item name="C_uint8_fesa" direction="OUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_uint8_fesa"/></value-item><value-item name="C_int8" direction="OUT"><array2D type="int8_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="C_int8"/></value-item><acq-stamp-item direction="OUT" name="acqStamp"><scalar type="int64_t"/></acq-stamp-item><update-flag-item direction="OUT" name="updateFlags" optional="true"><builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/></update-flag-item><cycle-name-item direction="OUT" name="cycleName" optional="true"><array type="char"><dim>32</dim></array></cycle-name-item><cycle-stamp-item direction="OUT" name="cycleStamp" optional="true"><scalar type="int64_t"/></cycle-stamp-item><get-action><server-action-ref server-action-name-ref="GetMyCBlockProp"/></get-action><acquisition-context-item direction="OUT"><processIndex direction="OUT" name="processIndex"><scalar type="int32_t"/></processIndex><sequenceIndex direction="OUT" name="sequenceIndex"><scalar type="int32_t"/></sequenceIndex><chainIndex direction="OUT" name="chainIndex"><scalar type="int32_t"/></chainIndex><eventNumber direction="OUT" name="eventNumber"><scalar type="int32_t"/></eventNumber><timingGroupID direction="OUT" name="timingGroupID"><scalar type="int32_t"/></timingGroupID><acquisitionStamp direction="OUT" name="acquisitionStamp"><scalar type="int64_t"/></acquisitionStamp><eventStamp direction="OUT" name="eventStamp"><scalar type="int64_t"/></eventStamp><processStartStamp direction="OUT" name="processStartStamp"><scalar type="int64_t"/></processStartStamp><sequenceStartStamp direction="OUT" name="sequenceStartStamp"><scalar type="int64_t"/></sequenceStartStamp><chainStartStamp direction="OUT" name="chainStartStamp"><scalar type="int64_t"/></chainStartStamp><acquisition-context-field-ref field-name-ref="acquisitionContext"/></acquisition-context-item></GSI-Acquisition-Property><GSI-Version-Property cycle-bound="false" name="Version" on-change="false" subscribable="false" visibility="operational">
                     <description>Returns the current software and hardware versions of a piece of equipment.</description>
                     <acq-stamp-item direction="OUT" name="acqStamp">
                         <scalar type="int64_t"/>
@@ -301,13 +299,13 @@ corresponding string array containing keys to illustrate the meaning of the deta
                             <scalar type="bool"/>
                         </mode-item>
                         <host-item direction="INOUT" name="hostName">
-                            <description>Host of the FESA class</description>
+                        	<description>Host of the FESA class</description>
                             <array type="char">
                                 <dim>32</dim>
                             </array>
                         </host-item>
                         <port-item direction="INOUT" name="portNumber">
-                            <description>Port used by the FESA class</description>
+                        	<description>Port used by the FESA class</description>
                             <scalar type="int32_t"/>
                         </port-item>
                         <config-item direction="IN" name="requestConfig">
@@ -335,7 +333,7 @@ corresponding string array containing keys to illustrate the meaning of the deta
                 </diagnostic-property>
             </setting>
             <acquisition>
-                <GSI-DeviceDescription-Property multiplexed="false" name="DeviceDescription" on-change="false" subscribable="false" visibility="operational">
+                <GSI-DeviceDescription-Property cycle-bound="false" name="DeviceDescription" on-change="false" subscribable="false" visibility="operational">
                     <timing-info-item direction="OUT" name="deviceNameTimingReceiver">
                         <array type="char">
                             <variable-dim/>
@@ -369,7 +367,7 @@ corresponding string array containing keys to illustrate the meaning of the deta
         </global-interface>
     </interface>
     <builtin-types>
-        <notification-update-enum name="NOTIFICATION_UPDATE">
+		<notification-update-enum name="NOTIFICATION_UPDATE">
             <IMMEDIATE access="RO" symbol="IMMEDIATE" value="1"/>
             <SET access="RO" symbol="SET" value="2"/>
         </notification-update-enum>
@@ -391,11 +389,11 @@ corresponding string array containing keys to illustrate the meaning of the deta
             <b14 name="LOCAL_CONNECTION_TRACKING"/>
         </diag-fwk-topic>
         <fault-severity name="FaultSeverity">
-            <description>Enumeration listing the available fault severities used by the fault fields</description>
-            <INFO access="RO" meaning="NONE" value="0" symbol="INFO"/>
-            <WARNING access="RO" meaning="WARNING" value="1" symbol="WARNING"/>
-            <ERROR access="RO" meaning="ERROR" value="2" symbol="ERROR"/>
-            <CRITICAL access="RO" meaning="ERROR" value="3" symbol="CRITICAL"/>
+        	<description>Enumeration listing the available fault severities used by the fault fields</description>
+        	<INFO access="RO" meaning="NONE" value="0" symbol="INFO"/>
+        	<WARNING access="RO" meaning="WARNING" value="1" symbol="WARNING"/>
+        	<ERROR access="RO" meaning="ERROR" value="2" symbol="ERROR"/>
+        	<CRITICAL access="RO" meaning="ERROR" value="3" symbol="CRITICAL"/>
         </fault-severity>
 
     </builtin-types>
@@ -537,46 +535,46 @@ corresponding string array containing keys to illustrate the meaning of the deta
             </struct-item>
         </struct>
         <struct name="GSI_ACQ_CONTEXT"><description>WhiteRabbit event specific acquisition information</description>
-            <struct-item name="processIndex">
-                <description>Used in order to index process-multiplexed data</description>
-                <scalar type="int32_t"/>
-            </struct-item>
-            <struct-item name="sequenceIndex">
-                <description>Used in order to index sequence-multiplexed data</description>
-                <scalar type="int32_t"/>
-            </struct-item>
-            <struct-item name="chainIndex">
-                <description>Refers to a specific beam production chain</description>
-                <scalar type="int32_t"/>
-            </struct-item>
-            <struct-item name="eventNumber">
-                <description>The number of the event describes it's type</description>
-                <scalar type="int32_t"/>
-            </struct-item>
-            <struct-item name="timingGroupID">
-                <description>ID of the timing group for which the event is relevant</description>
-                <scalar type="int32_t"/>
-            </struct-item>
-            <struct-item name="acquisitionStamp">
-                <description>The acquisition stamp is used to indicate when a measurement was done</description>
-                <scalar type="int64_t"/>
-            </struct-item>
-            <struct-item name="eventStamp">
-                <description>The event stamp is used to indicate when WhiteRabbit event was triggered on the Timing Receiver</description>
-                <scalar type="int64_t"/>
-            </struct-item>
-            <struct-item name="processStartStamp">
-                <description>The process start stamp indicates when the first event of the current process was triggered</description>
-                <scalar type="int64_t"/>
-            </struct-item>
-            <struct-item name="sequenceStartStamp">
-                <description>The sequence start stamp indicates when the first event of the current sequence was triggered</description>
-                <scalar type="int64_t"/>
-            </struct-item>
-            <struct-item name="chainStartStamp">
-                <description>The chain start stamp indicates when the first event of the current chain was triggered</description>
+        	<struct-item name="processIndex">
+        		<description>Used in order to index process-multiplexed data</description>
+        		<scalar type="int32_t"/>
+        	</struct-item>
+        	<struct-item name="sequenceIndex">
+        	    <description>Used in order to index sequence-multiplexed data</description>
+        		<scalar type="int32_t"/>
+        	</struct-item>
+        	<struct-item name="chainIndex">
+        	    <description>Refers to a specific beam production chain</description>
+        		<scalar type="int32_t"/>
+        	</struct-item>
+        	<struct-item name="eventNumber">
+        	    <description>The number of the event describes it's type</description>
+        		<scalar type="int32_t"/>
+        	</struct-item>
+        	<struct-item name="timingGroupID">
+        	    <description>ID of the timing group for which the event is relevant</description>
+        		<scalar type="int32_t"/>
+        	</struct-item>
+        	<struct-item name="acquisitionStamp">
+        	    <description>The acquisition stamp is used to indicate when a measurement was done</description>
                 <scalar type="int64_t"/>
             </struct-item>
+        	<struct-item name="eventStamp">
+        	    <description>The event stamp is used to indicate when WhiteRabbit event was triggered on the Timing Receiver</description>
+        		<scalar type="int64_t"/>
+        	</struct-item>
+        	<struct-item name="processStartStamp">
+        	    <description>The process start stamp indicates when the first event of the current process was triggered</description>
+        		<scalar type="int64_t"/>
+        	</struct-item>
+        	<struct-item name="sequenceStartStamp">
+        	    <description>The sequence start stamp indicates when the first event of the current sequence was triggered</description>
+        		<scalar type="int64_t"/>
+        	</struct-item>
+        	<struct-item name="chainStartStamp">
+        	    <description>The chain start stamp indicates when the first event of the current chain was triggered</description>
+        		<scalar type="int64_t"/>
+        	</struct-item>
         </struct>
         <constant name="MAX_ERROR_MESSAGE_LENGTH" type="uint32_t" value="256"/>
         <constant name="MAX_NUMBER_OF_ERROR_MESSAGES" type="uint32_t" value="16"/>
@@ -591,16 +589,16 @@ corresponding string array containing keys to illustrate the meaning of the deta
         </enum>
         <enum name="MODULE_STATUS">
         <!-- Mutually exclusive values to describe the status of a hardware / software module-->
-            <item access="RO" value="0" symbol="UNKNOWN"/>
-            <!--The status of the module is not known-->
-            <item access="RO" value="1" symbol="OK"/>
-            <!--The module is in fully operational state-->
-            <item access="RO" value="2" symbol="WARNING"/>
-            <!--The module is not fully operational; A module in WARNING state may still be used operationally, -->
-            <!--but clients must be informed of a problem that might become worse. -->
-            <item access="RO" value="3" symbol="ERROR"/>
-            <!--The module is in a fault state. The related device is not operational.-->
-            <item access="RO" value="4" symbol="NOT_AVAILABLE"/>
+        	<item access="RO" value="0" symbol="UNKNOWN"/>
+        	<!--The status of the module is not known-->
+        	<item access="RO" value="1" symbol="OK"/>
+        	<!--The module is in fully operational state-->
+        	<item access="RO" value="2" symbol="WARNING"/>
+        	<!--The module is not fully operational; A module in WARNING state may still be used operationally, -->
+        	<!--but clients must be informed of a problem that might become worse. -->
+        	<item access="RO" value="3" symbol="ERROR"/>
+        	<!--The module is in a fault state. The related device is not operational.-->
+        	<item access="RO" value="4" symbol="NOT_AVAILABLE"/>
             <!--The module is missing. The related device is not operational.-->
         </enum>
         <constant name="MAX_MODULE_STATUS_LABEL_LENGTH" type="uint32_t" value="30"/>
@@ -623,12 +621,12 @@ corresponding string array containing keys to illustrate the meaning of the deta
                     <default>{INFO,INFO}</default>
                 </GSI-detailed-status-severity-field>
                 <GSI-module-status-labels-field name="moduleStatus_labels">
-                    <array2D type="char">
-                        <custom-constant-dim1 constant-name-ref="MODULE_STATUS_SIZE"/>
-                        
-                        <custom-constant-dim2 constant-name-ref="MAX_MODULE_STATUS_LABEL_LENGTH"/>
-                    </array2D>
-                    <default>{myModule1,myModule2}</default>
+                	<array2D type="char">
+                		<custom-constant-dim1 constant-name-ref="MODULE_STATUS_SIZE"/>
+                		
+                		<custom-constant-dim2 constant-name-ref="MAX_MODULE_STATUS_LABEL_LENGTH"/>
+                	</array2D>
+                	<default>{myModule1,myModule2}</default>
                 </GSI-module-status-labels-field>
             </configuration>
             <setting>
@@ -637,38 +635,38 @@ corresponding string array containing keys to illustrate the meaning of the deta
                 </GSI-power-field>
             </setting>
             <acquisition>
-                <field name="RO_dt_fesa" multiplexed="false" persistent="false"><scalar type="double"/></field><field name="RO_real_fesa" multiplexed="false" persistent="false"><scalar type="float"/></field><field name="RO_dint_fesa" multiplexed="false" persistent="false"><scalar type="int32_t"/></field><field name="RO_int_fesa" multiplexed="false" persistent="false"><scalar type="int16_t"/></field><field name="RO_dword_fesa" multiplexed="false" persistent="false"><scalar type="int64_t"/></field><field name="RO_word_fesa" multiplexed="false" persistent="false"><scalar type="int32_t"/></field><field name="RO_byte_fesa" multiplexed="false" persistent="false"><scalar type="int16_t"/></field><field name="RO_char_fesa" multiplexed="false" persistent="false"><scalar type="int8_t"/></field><field name="RO_date_fesa" multiplexed="false" persistent="false"><scalar type="double"/></field><field name="RO_string_fesa" multiplexed="false" persistent="false"><array type="char"><dim>64</dim></array></field><field name="RO_float32_fesa" multiplexed="false" persistent="false"><scalar type="float"/></field><field name="RO_uint32_fesa" multiplexed="false" persistent="false"><scalar type="int64_t"/></field><field name="RO_int32_fesa" multiplexed="false" persistent="false"><scalar type="int32_t"/></field><field name="RO_uint16_fesa" multiplexed="false" persistent="false"><scalar type="int32_t"/></field><field name="RO_int16_fesa" multiplexed="false" persistent="false"><scalar type="int16_t"/></field><field name="RO_uint8_fesa" multiplexed="false" persistent="false"><scalar type="int16_t"/></field><field name="RO_int8" multiplexed="false" persistent="false"><scalar type="int8_t"/></field><GSI-control-field multiplexed="false" name="control">
+                <field name="RO_dt_fesa" cycle-bound="false" persistent="false"><scalar type="double"/></field><field name="RO_real_fesa" cycle-bound="false" persistent="false"><scalar type="float"/></field><field name="RO_dint_fesa" cycle-bound="false" persistent="false"><scalar type="int32_t"/></field><field name="RO_int_fesa" cycle-bound="false" persistent="false"><scalar type="int16_t"/></field><field name="RO_dword_fesa" cycle-bound="false" persistent="false"><scalar type="int64_t"/></field><field name="RO_word_fesa" cycle-bound="false" persistent="false"><scalar type="int32_t"/></field><field name="RO_byte_fesa" cycle-bound="false" persistent="false"><scalar type="int16_t"/></field><field name="RO_char_fesa" cycle-bound="false" persistent="false"><scalar type="int8_t"/></field><field name="RO_date_fesa" cycle-bound="false" persistent="false"><scalar type="double"/></field><field name="RO_string_fesa" cycle-bound="false" persistent="false"><array type="char"><dim>64</dim></array></field><field name="RO_float32_fesa" cycle-bound="false" persistent="false"><scalar type="float"/></field><field name="RO_uint32_fesa" cycle-bound="false" persistent="false"><scalar type="int64_t"/></field><field name="RO_int32_fesa" cycle-bound="false" persistent="false"><scalar type="int32_t"/></field><field name="RO_uint16_fesa" cycle-bound="false" persistent="false"><scalar type="int32_t"/></field><field name="RO_int16_fesa" cycle-bound="false" persistent="false"><scalar type="int16_t"/></field><field name="RO_uint8_fesa" cycle-bound="false" persistent="false"><scalar type="int16_t"/></field><field name="RO_int8" cycle-bound="false" persistent="false"><scalar type="int8_t"/></field><GSI-control-field cycle-bound="false" name="control">
                     <custom-type-scalar data-type-name-ref="DEVICE_CONTROL"/>
                 </GSI-control-field>
-                <GSI-powerState-field multiplexed="false" name="powerState">
+                <GSI-powerState-field cycle-bound="false" name="powerState">
                     <custom-type-scalar data-type-name-ref="DEVICE_POWER_STATE"/>
                 </GSI-powerState-field>
-                <GSI-status-field multiplexed="false" name="status">
+                <GSI-status-field cycle-bound="false" name="status">
                     <custom-type-scalar data-type-name-ref="DEVICE_STATUS"/>
                 </GSI-status-field>
-                <GSI-interlock-field multiplexed="false" name="interlock">
+                <GSI-interlock-field cycle-bound="false" name="interlock">
                     <scalar type="bool"/>
                 </GSI-interlock-field>
-                <GSI-opReady-field multiplexed="false" name="opReady">
+                <GSI-opReady-field cycle-bound="false" name="opReady">
                     <scalar type="bool"/>
                 </GSI-opReady-field>
-                <GSI-modulesReady-field name="modulesReady" multiplexed="false">
-                    <scalar type="bool"/>
+                <GSI-modulesReady-field name="modulesReady" cycle-bound="false">
+                	<scalar type="bool"/>
                 </GSI-modulesReady-field>
-                <GSI-detailed-status-field multiplexed="false" name="detailedStatus">
+                <GSI-detailed-status-field cycle-bound="false" name="detailedStatus">
                     <array type="bool">
                         <custom-constant-dim constant-name-ref="DETAILED_STATUS_SIZE"/>
                     </array>
                 </GSI-detailed-status-field>
-                <GSI-module-status-field name="moduleStatus" multiplexed="false">
-                    <custom-type-array data-type-name-ref="MODULE_STATUS">
-                        <custom-constant-dim constant-name-ref="MODULE_STATUS_SIZE"/>
-                    </custom-type-array>
+                <GSI-module-status-field name="moduleStatus" cycle-bound="false">
+                	<custom-type-array data-type-name-ref="MODULE_STATUS">
+                		<custom-constant-dim constant-name-ref="MODULE_STATUS_SIZE"/>
+                	</custom-type-array>
                 </GSI-module-status-field>
-                <GSI-acquisition-context-field multiplexed="true" name="acquisitionContext">
+                <GSI-acquisition-context-field cycle-bound="true" name="acquisitionContext">
                     <custom-type-scalar data-type-name-ref="GSI_ACQ_CONTEXT"/>
                 </GSI-acquisition-context-field>
-                <GSI-error_collection-field multiplexed="false" name="error_collection">
+                <GSI-error_collection-field cycle-bound="false" name="error_collection">
                     <custom-type-array data-type-name-ref="GSI_ERROR">
                         <custom-constant-dim constant-name-ref="MAX_NUMBER_OF_ERROR_MESSAGES"/>
                     </custom-type-array>
@@ -698,6 +696,19 @@ corresponding string array containing keys to illustrate the meaning of the deta
         <get-server-action implementation="default" name="StatusGetAction"/>
         <get-server-action implementation="default" name="VersionGetAction"/>
         <get-server-action implementation="default" name="ModuleStatusGetAction"/>
+
+		<rt-action name="StatusUpdateAction"/>	<!-- Pre-defined status update action -->
     <get-server-action name="GetMyROBlockProp" implementation="custom"/><set-server-action name="SetMyRWBlockProp" implementation="custom"/><get-server-action name="GetMyRWBlockProp" implementation="custom"/><set-server-action name="SetMyWOBlockProp" implementation="custom"/><get-server-action name="GetMyCBlockProp" implementation="custom"/></actions>
+    <events>
+	    <logical-events>
+			<logical-event use="required" name="StatusUpdateEvent" type="timer"/>
+		</logical-events>
+	</events>
+	<scheduling-units>
+		<scheduling-unit name="StatusUpdateSchedulingUnit">
+			<rt-action-ref rt-action-name-ref="StatusUpdateAction"/>
+			<logical-event-ref logical-event-name-ref="StatusUpdateEvent"/>
+		</scheduling-unit>
+    </scheduling-units>
 
 </equipment-model>
-- 
GitLab