diff --git a/silecs-codegen/src/xml/fesa/fesa_3_0_0/generateSourceCode.py b/silecs-codegen/src/xml/fesa/fesa_3_0_0/generateSourceCode.py
index 019408f0cad1f85e49e0ead189388a66e2195cfb..a5af44919bf0ca6ea0d21b98bc546ba525e2a483 100644
--- a/silecs-codegen/src/xml/fesa/fesa_3_0_0/generateSourceCode.py
+++ b/silecs-codegen/src/xml/fesa/fesa_3_0_0/generateSourceCode.py
@@ -48,14 +48,14 @@ def genHSource(className, silecsRoot, fesaRoot, sourcePath,logTopics):
     designClass = DesignClass.getDesignClassFromRootNode(silecsRoot)
     source =  fesaTemplates.genHTop(className)
     
-    for block in designClass.getDesignBlocks():
+    for block in designClass.getDesignFesaBlocks():
         if block.isWritable():
             serverActionName = findBlockServerSetActionName(fesaRoot,block.getFesaName())
             source += fesaTemplates.genHTopBlock(className, serverActionName)
         
     source += fesaTemplates.genHTop2(className)
         
-    for block in designClass.getDesignBlocks():
+    for block in designClass.getDesignFesaBlocks():
         if block.isAcquisition():
             source += fesaTemplates.genHBlock('RO', block.name,block.getFesaName() )
         elif block.isCommand():
@@ -65,7 +65,7 @@ def genHSource(className, silecsRoot, fesaRoot, sourcePath,logTopics):
     
     source += fesaTemplates.genHBottom(className)
 
-    for block in designClass.getDesignBlocks():
+    for block in designClass.getDesignFesaBlocks():
         source += fesaTemplates.genHDeclBlocks(block.name)
     
     source += fesaTemplates.genHClosing(className)
@@ -93,7 +93,8 @@ def genHSource(className, silecsRoot, fesaRoot, sourcePath,logTopics):
 def genCppSource(className, silecsRoot, fesaRoot, sourcePath,logTopics):
     designClass = DesignClass.getDesignClassFromRootNode(silecsRoot)
     finalSource =  fesaTemplates.genCTop(className)
-    blockList = designClass.getDesignBlocks()
+    blockList = designClass.getDesignFesaBlocks()
+
     for block in blockList:
         finalSource +=  fesaTemplates.genCGlobal(className, block.name)
     
diff --git a/silecs-codegen/src/xml/genparam.py b/silecs-codegen/src/xml/genparam.py
index 236fc5f8a190901ff4017f10eee8da033f55487b..5b8fb47d7fb47bbfe5586286cb43ba4b802775a1 100644
--- a/silecs-codegen/src/xml/genparam.py
+++ b/silecs-codegen/src/xml/genparam.py
@@ -65,7 +65,7 @@ def computeChecksumController( workspacePath, deploy, controller, silecsVersion,
     
 def computeChecksumClass(designDOM, CRC32, logTopics={'errorlog': True}):
     designClass = DesignClass.getDesignClassFromRootNode(designDOM)
-    for block in designClass.getDesignBlocks():
+    for block in designClass.getDesignMemoryBlocks():
         CRC32     = zlib.crc32(trim(block.name),CRC32)& 0xffffffff
         for register in block.getDesignRegisters():
             CRC32     = zlib.crc32(trim(register.name),CRC32)& 0xffffffff
diff --git a/silecs-codegen/src/xml/genplcsrc.py b/silecs-codegen/src/xml/genplcsrc.py
index 925ad16960d8968a9f10267452546f923f15f247..2ccc9d47c21ac2725503ea77a7642c04c1d8aae3 100644
--- a/silecs-codegen/src/xml/genplcsrc.py
+++ b/silecs-codegen/src/xml/genplcsrc.py
@@ -184,7 +184,7 @@ def generateSiemensSources(param, sourceFolderPath ,logTopics):
         # Generate the Data-Blocks: one DB per Device instance
             for deviceIndex, deviceDOM in enumerate(deviceDOMList):
                 blockList = ''
-                for block in paramClass.getParamBlocks():
+                for block in paramClass.getParamMemoryBlocks():
                     blockList += s7template.stlBlock(paramClass.name, block.name)
                 deviceLabel = deviceDOM.prop('label')
                 stlString += s7template.generateBlock(param.owner, paramClass.name, paramClass.version, param.controller.system, DBnumber, deviceLabel, blockList, (deviceIndex == 0),param.controller.protocol)
@@ -193,7 +193,7 @@ def generateSiemensSources(param, sourceFolderPath ,logTopics):
 
         else:             # BLOCK_MODE
         # Generate the Data-Blocks: one DB per Block of registers
-            for blockIndex, block in enumerate(paramClass.getParamBlocks()):
+            for blockIndex, block in enumerate(paramClass.getParamMemoryBlocks()):
                 deviceList = ''
                 for deviceDOM in deviceDOMList:
                     deviceLabel = deviceDOM.prop('label')
@@ -318,7 +318,7 @@ def generateDIGISources(param,sourceFolderPath,logTopics):
         if param.controller.protocol == 'DEVICE_MODE':
             # Generate the List of block in the class
             blockList =''
-            for block in paramClass.getParamBlocks():
+            for block in paramClass.getParamMemoryBlocks():
                 blockList += DIGITemplate.cDeviceModeBlockInstantiation(paramClass.name, block.name)
 
             deviceList = ''
@@ -328,7 +328,7 @@ def generateDIGISources(param,sourceFolderPath,logTopics):
             deviceList = deviceList[:-2]  # remove last comma space
             classList += DIGITemplate.cDeviceModeClass_deviceList(blockList, deviceList)
         else:  # BLOCK_MODE
-            for block in paramClass.getParamBlocks():
+            for block in paramClass.getParamMemoryBlocks():
                     # DeviceList
                 deviceList = ''
                 for deviceDOM in paramClass.getDeviceInstanceNodes():
diff --git a/silecs-codegen/src/xml/model/Class/Block.py b/silecs-codegen/src/xml/model/Class/Block.py
index df93b6f8d96e9fb78d8451ce48d892c7a472017f..6435f3eefeb993a84d9cc642a54014b9d3b13b41 100644
--- a/silecs-codegen/src/xml/model/Class/Block.py
+++ b/silecs-codegen/src/xml/model/Class/Block.py
@@ -114,6 +114,9 @@ class ParamBlock(Block):
     def initWithDesignBlock(self, designBlock):
         newNode = libxml2.newNode(designBlock.xmlNode.get_name())
         newNode.newProp("name", designBlock.name)
+        if designBlock.xmlNode.hasProp("ioType"):
+            newNode.newProp("ioType", designBlock.xmlNode.prop("ioType"))
+        print newNode.get_name()
         super(ParamBlock, self).__init__(newNode)
         newNode.newProp("size", str(self.size))
         newNode.newProp("address", str(self.address))
diff --git a/silecs-codegen/src/xml/model/Class/Class.py b/silecs-codegen/src/xml/model/Class/Class.py
index e0f678c9e51717d1853c97e3891a643aa7bffeb7..14061cbd069b285308a030ecdfa0723f6d28317b 100644
--- a/silecs-codegen/src/xml/model/Class/Class.py
+++ b/silecs-codegen/src/xml/model/Class/Class.py
@@ -31,6 +31,12 @@ class Class(object):
         return  iecommon.capitalizeString(self.name)
 
     def getBlockNodes(self):
+        return self.getIOBlockNodes() + self.getMemoryBlockNodes()
+    
+    def getIOBlockNodes(self):
+        return self.xmlNode.xpathEval("*[name()='Acquisition-IO-Block' or name()='Setting-IO-Block']")
+    
+    def getMemoryBlockNodes(self):
         return self.xmlNode.xpathEval("*[name()='Acquisition-Block' or name()='Setting-Block' or name()='Command-Block']")
     
 class ParamClass(Class):
@@ -79,8 +85,7 @@ class ParamClass(Class):
         for blockNode in self.getMemoryBlockNodes():
             paramBlock = ParamBlock()
             paramBlock.initWithParamBlockNode(blockNode)
-            if paramBlock.isMEMBlock():
-                paramMemBlocks.append(paramBlock)
+            paramMemBlocks.append(paramBlock)
         return paramMemBlocks
     
     def getDeviceInstanceNodes(self):
@@ -96,12 +101,25 @@ class DesignClass(Class):
     def getFesaName(self):
         return self.fesaPropertyName
     
+    def getDesignFesaBlocks(self):
+        designFesaBlocks = []
+        for block in self.getDesignBlocks():
+            if block.generateFesaProperty:
+                designFesaBlocks.append(block)
+        return designFesaBlocks
+    
     def getDesignBlocks(self):
         designBlocks = []
         for blockNode in self.getBlockNodes():
             designBlocks.append(DesignBlock(blockNode))
         return designBlocks
     
+    def getDesignMemoryBlocks(self):
+        designBlocks = []
+        for blockNode in self.getMemoryBlockNodes():
+            designBlocks.append(DesignBlock(blockNode))
+        return designBlocks
+    
     @staticmethod
     def getDesignClassFromRootNode(silecsRoot):
         classNodes = silecsRoot.xpathEval('/SILECS-Design/SILECS-Class')
diff --git a/silecs-codegen/src/xml/model/Deploy/Controller.py b/silecs-codegen/src/xml/model/Deploy/Controller.py
index 2dedd2a71184cdc19d8bcbc76a30fb092411b996..ce74085248e634037919d93a1d175d6ff66e83be 100644
--- a/silecs-codegen/src/xml/model/Deploy/Controller.py
+++ b/silecs-codegen/src/xml/model/Deploy/Controller.py
@@ -326,7 +326,7 @@ class SiemensController(Controller):
     # Compute the base-address of the next class in the SIEMENS PLC IO area
     # DEVICE or BLOCK mode use the same data size: next base address should be the same
     # 'used-IO' info is expressed in bytes
-    def computeIONextBaseAddress(mapping, nbDev):
+    def computeIONextBaseAddress(self, mapping, nbDev):
         byteSize = nbDev * mapping.deviceDataSize
         self.memSize += byteSize  # global size of the plc configuration
         startAddr = mapping.classBaseAddress              # first byte address used for this class