diff --git a/tools/oneclick/prestudy/YAML/bf/bf.peripheral.yaml b/tools/oneclick/prestudy/YAML/bf/bf.peripheral.yaml
index 1fc41a01c9b3b1b04a3e8f9149fa08e5527c21db..aef117fe8e2f0e82af692acb55ea75e7e4c577dd 100644
--- a/tools/oneclick/prestudy/YAML/bf/bf.peripheral.yaml
+++ b/tools/oneclick/prestudy/YAML/bf/bf.peripheral.yaml
@@ -2,11 +2,11 @@ protocol_name   : args
 protocol_version: 1.0
 protocol_type   : peripheral
 
-library_name    : bf
-library_description: " This is the description for the bf package "
+hdl_library_name       : bf
+hdl_library_description: " This is the description for the bf package "
 
 peripherals:
-  - peripheral_component_name: bf_unit
+  - peripheral_name: bf_unit
  
     parameters:
       - { name: g_bf.in_weights_w            , value: 16 }
@@ -18,8 +18,9 @@ peripherals:
 
     slave_ports:
       - 
+        # ram_bf_weights
         slave_prefix : BF 
-        slave_name   : WEIGHTS  # ram_bf_weights
+        slave_name   : WEIGHTS 
         slave_postfix: RAM
         number_of_slaves: g_bf.nof_weights
         slave_type: RAM
@@ -27,47 +28,51 @@ peripherals:
           - 
             field_name    : bf_weights 
             width         : g_bf.in_weights_w * c_nof_complex
-            address_length: g_bf.nof_signal_paths
+
+            number_of_fields: g_bf.nof_signal_paths
             field_description: |
                         "Contains the weights. 
                         The real and the imaginary parts are concatenated: W_real in Lower part. W_imag in Higher part."
         slave_discription: |
                 " "
       - 
-        slave_prefix : # BF 
-        slave_name   : ram_ss_ss_wide  # SS_SS_WIDE
-        slave_postfix: # RAM    
+        # ram_ss_ss_wide
+        slave_prefix : BF 
+        slave_name   : SS_SS_WIDE
+        slave_postfix: RAM    
         number_of_slaves: g_bf.nof_weights
         slave_type: RAM
         fields:
           - 
             field_name: ss_ss_wide
             width: ceil_log2(g_bf.nof_subbands * c_nof_signal_paths_per_stream)
-            address_length: g_bf.nof_input_streams * c_nof_signal_paths_per_stream  # 16*4=64, nof_input_streams*nof_signal_paths_per_stream
+            number_of_fields: g_bf.nof_input_streams * c_nof_signal_paths_per_stream  # 16*4=64, nof_input_streams*nof_signal_paths_per_stream
             field_description: |
                 "Contains the addresses to select from the stored subbands."
         slave_discription: |
             " "
       - 
-        slave_prefix : # BF 
-        slave_name   : ram_st_sst_bf  # ST_SST
-        slave_postfix: # RAM
+        # ram_st_sst_bf
+        slave_prefix : BF 
+        slave_name   : ST_SST
+        slave_postfix: RAM
         number_of_slaves: g_bf.nof_weights
         slave_type: RAM 
         fields:
           - 
             field_name: st_sst_bf
             width: 56
-            address_length: c_nof_complex  # 2
+            number_of_fields: 512
             access_mode : RO   
             field_description: |
                 "Contains the weights.
                 The real and the imaginary parts are concatenated: W_real in Lower part. W_imag in Higher part."
         slave_discription: |
       - 
-        slave_prefix : # BF 
-        slave_name   : reg_st_sst_bf  # ST_SST
-        slave_postfix: # REG
+        # reg_st_sst_bf
+        slave_prefix : BF 
+        slave_name   : ST_SST
+        slave_postfix: REG
         number_of_slaves: 1
         slave_type: REG
         fields:
diff --git a/tools/oneclick/prestudy/YAML/demo.system.yaml b/tools/oneclick/prestudy/YAML/demo.system.yaml
index 37a7772d3944dcbbd20835006a1992464576ccb0..49760239355fcad9ed94696660ccac46a9092520 100644
--- a/tools/oneclick/prestudy/YAML/demo.system.yaml
+++ b/tools/oneclick/prestudy/YAML/demo.system.yaml
@@ -2,7 +2,9 @@ protocol_name   : args
 protocol_version: 1.0
 protocol_type   : system
 
-library_name    : demo
+hdl_library_name: demo
+
+system_name       : demo
 system_description: |
         "DEMO system for testing mm tools
         Now with extra line ??"
@@ -16,36 +18,65 @@ parameters:
   - { name : nof_streams,           value: 12 }
 
 peripherals:
-  - peripheral_component_name: rom_system_info
-    peripheral_prefix        : ''
+  - peripheral_name: rom_system_info
+    subsystem_name : ''
+    slave_port_names:
+        - rom_system_info
     
-  - peripheral_component_name: reg_system_info
-    peripheral_prefix        : ''
-
-  - peripheral_component_name: fringe_stop_unit
-    peripheral_prefix        : ''
-    number_of_peripherals    : nof_fringe_stop_units
+  - peripheral_name: reg_system_info
+    subsystem_name : ''
+    slave_port_names:
+        - reg_system_info
+
+  - peripheral_name: fringe_stop_unit
+    subsystem_name : ''
+    number_of_peripherals: nof_fringe_stop_units
+    slave_port_names:
+        - ram_fringe_stop_step
+        - fringe_stop_offset
     
-  - peripheral_component_name: diag_block_gen
-    peripheral_prefix        : input
+  - peripheral_name: diag_block_gen
+    subsystem_name : input
+    slave_port_names:
+        - reg_diag_bg_input
+        - ram_diag_bg_input
     parameters:
       - { name : g_nof_streams, value: nof_streams }
       - { name : g_buf_addr_w,  value: 7 }
 
-  - peripheral_component_name: diag_block_gen
-    peripheral_prefix        : mesh
+  - peripheral_name: diag_block_gen
+    subsystem_name : output
+    slave_port_names:
+        - reg_diag_bg_output
+        - ram_diag_bg_output
+    parameters:
+      - { name : g_nof_streams, value: 2 }
+
+  - peripheral_name: diag_block_gen
+    subsystem_name : mesh
+    slave_port_names:
+        - reg_diag_bg_mesh
+        - ram_diag_bg_mesh
     parameters:
       - { name : g_nof_streams, value: 8 }
       - { name : g_buf_addr_w,  value: 8 }
 
-  - peripheral_component_name: diag_block_gen
-    peripheral_prefix        : proc
+  - peripheral_name: diag_block_gen
+    subsystem_name : proc
+    slave_port_names:
+        - reg_diag_bg_proc
+        - ram_diag_bg_proc
     parameters:
       - { name : g_nof_streams, value: nof_streams }
       - { name : g_buf_addr_w,  value: 7 }
 
-  - peripheral_component_name: bf_unit
-    peripheral_prefix    : ''
+  - peripheral_name: bf_unit
+    subsystem_name : ''
+    slave_port_names:
+        - ram_bf_weights
+        - ram_ss_ss_wide
+        - ram_st_sst_bf
+        - reg_st_sst_bf
     parameters:
       - { name : g_bf.in_weights_w,      value: 3 }
       - { name : g_bf.nof_weights,       value: 128 }
@@ -53,46 +84,57 @@ peripherals:
       - { name : g_bf.nof_subbands,      value: 12 }
       - { name : g_bf.nof_input_streams, value: 8 }
 
-  - peripheral_component_name: diag_block_gen
-    peripheral_prefix        : output
-    parameters:
-      - { name : g_nof_streams, value: 2 }
-
-  - peripheral_component_name: diag_data_buffer 
-    peripheral_prefix        : input_pre
+  - peripheral_name: diag_data_buffer 
+    subsystem_name : input_pre
+    slave_port_names:
+        - reg_diag_data_buffer_input_pre
+        - ram_diag_data_buffer_input_pre
     parameters:    
       - { name : g_nof_streams, value: nof_streams }
       - { name : g_data_w, value: 16 }
       - { name : g_buf_nof_data, value: 8192 }
 
-  - peripheral_component_name: diag_data_buffer
-    peripheral_prefix        : input_post
+  - peripheral_name: diag_data_buffer
+    subsystem_name : input_post
+    slave_port_names:
+        - reg_diag_data_buffer_input_post
+        - ram_diag_data_buffer_input_post
     parameters:
       - { name : g_nof_streams, value: nof_streams }
       - { name : g_data_w, value: 16 }
       - { name : g_buf_nof_data, value: 8192 }
 
-  - peripheral_component_name: diag_data_buffer
-    peripheral_prefix        : mesh
+  - peripheral_name: diag_data_buffer
+    subsystem_name : mesh
+    slave_port_names:
+        - reg_diag_data_buffer_mesh
+        - ram_diag_data_buffer_mesh
     parameters:
       - { name : g_nof_streams, value: 8 }
       - { name : g_data_w, value: 16 }
       - { name : g_buf_nof_data, value: 8 }
 
-  - peripheral_component_name: diag_data_buffer
-    peripheral_prefix        : proc
+  - peripheral_name: diag_data_buffer
+    subsystem_name : proc
+    slave_port_names:
+        - reg_diag_data_buffer_proc
+        - ram_diag_data_buffer_proc
     parameters:
       - { name : g_nof_streams, value: nof_streams }
       - { name : g_data_w, value: 16 }
       - { name : g_buf_nof_data, value: 128 }
 
-  - peripheral_component_name: dp_bsn_align
-    peripheral_prefix        : input
+  - peripheral_name: dp_bsn_align
+    subsystem_name : input
+    slave_port_names:
+        - reg_dp_bsn_align_input
     parameters:
       - { name : g_nof_input, value: 3 }
 
-  - peripheral_component_name: dp_fifo_fill
-    peripheral_prefix        : ''
+  - peripheral_name: dp_fifo_fill
+    subsystem_name : ''
+    slave_port_names:
+        - reg_dp_fifo_fill
     parameters:
       - { name : g_nof_streams, value: 3 }
         
diff --git a/tools/oneclick/prestudy/YAML/diag/diag.peripheral.yaml b/tools/oneclick/prestudy/YAML/diag/diag.peripheral.yaml
index fcaa4cf6ca1dc3a2e0b4aaad39a307403b19f7cc..aa186adb5794a16f8575d1764a750fe4d5e4ccf8 100644
--- a/tools/oneclick/prestudy/YAML/diag/diag.peripheral.yaml
+++ b/tools/oneclick/prestudy/YAML/diag/diag.peripheral.yaml
@@ -2,12 +2,12 @@ protocol_name   : args
 protocol_version: 1.0
 protocol_type   : peripheral
 
-library_name    : diag
-library_description: " This is the description for the bf package "
+hdl_library_name       : diag
+hdl_library_description: " This is the description for the bf package "
 
 peripherals:
   - 
-    peripheral_component_name:  diag_block_gen
+    peripheral_name:  diag_block_gen
 
     parameters:
       - { name: g_nof_streams, value: 1 }
@@ -16,8 +16,9 @@ peripherals:
 
     slave_ports:
       - 
+        # actual hdl name: reg_diag_bg 
         slave_prefix : DIAG 
-        slave_name   : BG  # reg_diag_bg 
+        slave_name   : BG  
         slave_postfix: REG
         slave_type : REG
         fields:
@@ -31,21 +32,21 @@ peripherals:
             field_name    :     Samples_per_packet
             width         : 16
             address_offset: 0x1
-            default_value : 256
+            reset_value   : 256
             field_description: |
                 "This REG specifies the number samples in a packet"
           - 
             field_name    :     Blocks_per_sync
             width         : 16
             address_offset: 0x2
-            default_value : 781250
+            reset_value   : 781250
             field_description: |
                 "This REG specifies the number of packets in a sync period"
           - 
             field_name    :     Gapsize
             width         : 16
             address_offset: 0x3
-            default_value : 80
+            reset_value   : 80
             field_description: |
                 "This REG specifies the gap in number of clock cycles between two consecutive packets"
           - 
@@ -71,8 +72,9 @@ peripherals:
             field_description: |
                 "This REG specifies the higher(MSB) 32 bits [63:32] of the initialization BSN"
       - 
+        # actual hdl name: ram_diag_bg
         slave_prefix : DIAG 
-        slave_name   : BG  # ram_diag_bg
+        slave_name   : BG  
         slave_postfix: RAM
         number_of_slaves: g_nof_streams
         slave_type      : RAM
@@ -80,13 +82,13 @@ peripherals:
           - 
             field_name: diag_bg
             width: g_buf_dat_w
-            depth: 2**g_buf_addr_w
+            number_of_fields: 2**g_buf_addr_w
             field_description  : |
                 "Contains the Waveform data for the data-streams to be send"
     peripheral_description: |
         "Block generator"
   - 
-    peripheral_component_name: diag_data_buffer
+    peripheral_name: diag_data_buffer
 
     parameters:
       -  { name: g_nof_streams , value: 1 }
@@ -95,8 +97,9 @@ peripherals:
     
     slave_ports:
       - 
+        # actual hdl name: reg_diag_data_buffer
         slave_prefix : DIAG 
-        slave_name   : DATA_BUFFER  # reg_diag_data_buffer
+        slave_name   : DATA_BUFFER  
         slave_postfix: REG
         slave_type   : REG
         fields:
@@ -134,8 +137,9 @@ peripherals:
                 "Version contains the version number of the databuffer peripheral."
         slave_description: ""
       - 
+        # actual hdl name: ram_diag_data_buffer
         slave_prefix : DIAG 
-        slave_name   : DATA_BUFFER  # ram_diag_data_buffer
+        slave_name   : DATA_BUFFER  
         slave_postfix: RAM    
         number_of_slaves: g_nof_streams
         slave_type      : RAM
@@ -143,7 +147,7 @@ peripherals:
           - 
             field_name    : ram
             width         : g_data_w
-            address_length: 2**ceil_log2(g_buf_nof_data)
+            number_of_fields: 2**ceil_log2(g_buf_nof_data)
             field_description: |
                 "Contains the data that is being captured."
             slave_description: ""
diff --git a/tools/oneclick/prestudy/YAML/dp/dp.peripheral.yaml b/tools/oneclick/prestudy/YAML/dp/dp.peripheral.yaml
index 95d308c29fd6448afd53fd0307bfaada1197a908..1391b45129769ac82406e3d66ac2e092d77c3e87 100644
--- a/tools/oneclick/prestudy/YAML/dp/dp.peripheral.yaml
+++ b/tools/oneclick/prestudy/YAML/dp/dp.peripheral.yaml
@@ -2,20 +2,21 @@ protocol_name   : args
 protocol_version: 1.0
 protocol_type   : peripheral
 
-library_name    : dp
-library_description: " This is the description for the dp package "
+hdl_library_name       : dp
+hdl_library_description: " This is the description for the dp package "
 
 peripherals:
   - 
-    peripheral_component_name: dp_bsn_align
+    peripheral_name: dp_bsn_align
 
     parameters:
         - { name: g_nof_input, value : 2 }
 
     slave_ports:
       - 
+        # actual hdl name: reg_dp_bsn_align
         slave_prefix : DP 
-        slave_name   : BSN_ALIGN  # reg_dp_bsn_align
+        slave_name   : BSN_ALIGN  
         slave_postfix: REG
         number_of_slaves: g_nof_input
         slave_type      : REG
@@ -31,14 +32,15 @@ peripherals:
             
     peripheral_description: "This is the BSN aligner"
   - 
-    peripheral_component_name: mms_dp_fifo_fill
+    peripheral_name: dp_fifo_fill
     parameters:
         - { name : g_nof_streams, value: 3 }
 
     slave_ports:
       - 
+        # actual hdl name: reg_dp_fifo_fill
         slave_prefix : DP 
-        slave_name   : FIFO_FILL  # reg_dp_fifo_fill
+        slave_name   : FIFO_FILL  
         slave_postfix: REG
         number_of_slaves: g_nof_streams
         slave_type      : REG
diff --git a/tools/oneclick/prestudy/YAML/eth/eth.peripheral.yaml b/tools/oneclick/prestudy/YAML/eth/eth.peripheral.yaml
index 88e35b711b6c056fd17d6d837de4141b535243e8..64ed1c7da70b9dc03ec3d22173703821405e93ac 100644
--- a/tools/oneclick/prestudy/YAML/eth/eth.peripheral.yaml
+++ b/tools/oneclick/prestudy/YAML/eth/eth.peripheral.yaml
@@ -2,12 +2,12 @@ protocol_name   : args
 protocol_version: 1.0
 protocol_type   : peripheral
 
-library_name    : eth
-library_description: " This is the description for the eth package "
+hdl_library_name       : eth
+hdl_library_description: " This is the description for the eth package "
 
 peripherals:
   - 
-    peripheral_component_name: eth1g
+    peripheral_name: eth1g
     
     parameters:
       - { name: c_eth_ram_nof_words,  value: 1024 }
@@ -16,8 +16,9 @@ peripherals:
 
     slave_ports:
       - 
+        # actual hdl name: reg_tse
         slave_prefix : ETH 
-        slave_name   : TSE  # reg_tse
+        slave_name   : TSE  
         slave_postfix: REG
         slave_type   : REG
         fields:
@@ -29,8 +30,9 @@ peripherals:
                 " reg tse "
         slave_description: ""
       - 
+        # actual hdl name: reg
         slave_prefix : ETH 
-        slave_name   : REG  # reg
+        slave_name   : REG  
         slave_postfix: REG
         slave_type   : REG    
         fields:
@@ -41,14 +43,15 @@ peripherals:
             field_description : " reg registers "
         slave_description: " "
       - 
+        # actual hdl name: ram
         slave_prefix : ETH 
-        slave_name   : RAM  # ram
+        slave_name   : RAM  
         slave_postfix: RAM
         slave_type   : RAM
         fields:
           - 
             field_name: ram
-            address_length: c_eth_ram_nof_words
+            number_of_fields: c_eth_ram_nof_words
             field_description: |
                 "Contains the Waveform data for the data-streams to be send"
         slave_description: " "
diff --git a/tools/oneclick/prestudy/YAML/fringe_stop/fringe_stop.peripheral.yaml b/tools/oneclick/prestudy/YAML/fringe_stop/fringe_stop.peripheral.yaml
index a565e02b3bfd3a771d58812565a693ee2d0169e1..c2929af2f4ad9dccfa41d4d0bd588ebbb359ec17 100644
--- a/tools/oneclick/prestudy/YAML/fringe_stop/fringe_stop.peripheral.yaml
+++ b/tools/oneclick/prestudy/YAML/fringe_stop/fringe_stop.peripheral.yaml
@@ -2,12 +2,12 @@ protocol_name   : args
 protocol_version: 1.0
 protocol_type   : peripheral
 
-library_name    : fringe_stop
-library_description: " This is the description for the finge_stop library "
+hdl_library_name       : fringe_stop
+hdl_library_description: " This is the description for the finge_stop library "
 
 peripherals:
   - 
-    peripheral_component_name: fringe_stop_unit
+    peripheral_name: fringe_stop_unit
 
     parameters:
       - { name: g_nof_channels,  value: 256 }
@@ -16,29 +16,31 @@ peripherals:
     
     slave_ports:
       - 
+        # actual hdl name: ram_fringe_stop_step
         slave_prefix : FRINGE_STOP 
-        slave_name   : STEP  # ram_fringe_stop_step
+        slave_name   : STEP  
         slave_postfix: RAM
         slave_type   : RAM
         fields:
           - 
             field_name  : fringe_stop_step
             width: g_fs_step_w
-            address_length: g_nof_channels
+            number_of_fields: g_nof_channels
             field_description: |
                 "Contains the step size for all nof_channels channels."
         slave_discription: " "
 
       - 
+        # actual hdl name: fringe_stop_offset
         slave_prefix : FRINGE_STOP 
-        slave_name   : OFFSET  # fringe_stop_offset
+        slave_name   : OFFSET  
         slave_postfix: RAM
         slave_type   : RAM
         fields:
           - 
             field_name:  fringe_stop_offset
             width: g_fs_offset_w
-            address_length: g_nof_channels
+            number_of_fields: g_nof_channels
             field_description: |
                 "Contains the offset for all nof_channels channels."
         slave_discription: " "
@@ -85,7 +87,7 @@ peripherals:
         synchronization with the sync-pulse can be done, using one of the BSN Monitors in the system. In the Apertif system
         the BSN Monitor at the input of the beamformer can be used.
         
-        The address_length of both RAMs is determined by the number of unique channels that ought to be processed.
+        The number_of_fields of both RAMs is determined by the number of unique channels that ought to be processed.
         
         RAM_FRINGE_STOP_OFFSET
         This RAM contains the offset values for all channels, ranging from Channel 0 to Channel Max-1. The width of the RAM is
diff --git a/tools/oneclick/prestudy/YAML/ppsh/ppsh.peripheral.yaml b/tools/oneclick/prestudy/YAML/ppsh/ppsh.peripheral.yaml
index 7fdac5ad95ed641df36c6669bc81cbe2308b132d..340e0e154f3ab6090d35f5af032e148c617383b9 100644
--- a/tools/oneclick/prestudy/YAML/ppsh/ppsh.peripheral.yaml
+++ b/tools/oneclick/prestudy/YAML/ppsh/ppsh.peripheral.yaml
@@ -2,20 +2,21 @@ protocol_name   : args
 protocol_version: 1.0
 protocol_type   : peripheral
 
-library_name    : ppsh
-library_description: " This is the description for the finppshge_stop library "
+hdl_library_name       : ppsh
+hdl_library_description: " This is the description for the finppshge_stop library "
 
 peripherals: 
   - 
-    peripheral_component_name: ppsh
+    peripheral_name: ppsh
     parameters:
       - { name: g_cross_clock_domain, value: TRUE }
       - { name: g_st_clk_freq,        value: 200 * 10**6 }
     
     slave_ports:
       - 
+        # actual hdl name: reg_ppsh
         slave_prefix : PPSH 
-        slave_name   : PPSH  # reg_ppsh
+        slave_name   : PPSH  
         slave_postfix: REG
         slave_type   : REG
         fields:
diff --git a/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral.py b/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral.py
index dbdde7624268f51a9c780573a19ba0fc758d03af..4409dcc785f1dd29f7eb88f9bfe23a1a5ea69f19 100755
--- a/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral.py
+++ b/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral.py
@@ -65,7 +65,7 @@ class Peripheral(BaseObject):
         self.registers       = {}  # all used registers
         self.rams            = {}  # all used rams
         self.fifos           = {}  # all used fifos
-        self._component_name = library_config['peripheral_component_name']
+        self._component_name = library_config['peripheral_name']
         self.name(self._component_name)
 
         self._valid_keys = ['number_of_peripherals']
@@ -75,6 +75,18 @@ class Peripheral(BaseObject):
         logger.debug("extract config for %s", self.component_name())
         self.extract_config()
 
+    def get_slave(self, name):
+        for reg in self.registers.values():
+            if name == reg.name() or reg.user_defined_name():
+                return reg
+        for ram in self.rams.values():
+            if name == ram.name() or ram.user_defined_name():
+                return ram        
+        for fifo in self.fifos.values():
+            if name == fifo.name() or fifo.user_defined_name():
+                return fifo
+        return None
+    
     def component_name(self):
         """ get component_name """
         return self._component_name
@@ -113,6 +125,17 @@ class Peripheral(BaseObject):
             return
         return self._parameters[key]
 
+    def set_user_defined_slavename(self, slave_nr, name):
+        """ set user defined slave name """
+        slave_key = 'slave_{}'.format(slave_nr)
+        if slave_key in self.registers:
+            self.registers[slave_key].user_defined_name(name)
+        elif slave_key in self.rams:
+            self.rams[slave_key].user_defined_name(name)
+        elif slave_key in self.fifos:
+            self.fifos[slave_key].user_defined_name(name)
+        else:
+            logger.error("Unknown slave number")
 
     def extract_config(self):
         """ extract all kv pairs from the config (yaml file)
@@ -162,6 +185,8 @@ class Peripheral(BaseObject):
                 name  = parameter_set['name']
                 value = parameter_set['value']
                 logger.debug("eval of name=%s and value=%s not posible", name, value)
+            
+            logger.info("used parameters=%s", str(self._parameters))
 
         if 'slave_ports' in self._config:
 
@@ -170,7 +195,7 @@ class Peripheral(BaseObject):
             if not isinstance(slave_ports, list):
                 logger.error("slave_ports not a list")
 
-            for slave_info in slave_ports:
+            for slave_nr, slave_info in enumerate(slave_ports):
                 logger.debug("slave_prefix=%s, slave_name=%s, slave_postfix=%s",
                              slave_info['slave_prefix'], slave_info['slave_name'], slave_info['slave_postfix'])
 
@@ -184,7 +209,7 @@ class Peripheral(BaseObject):
                 slave_name = '.'.join(slave_name)
 
                 if slave_info['slave_type'] in ('REG', 'RAM'):
-                    number_of_slaves = self._eval(slave_info.get('number_of_slaves', DEFAULT_NUMBER_OF_SLAVES))
+                    number_of_slaves = slave_info.get('number_of_slaves', DEFAULT_NUMBER_OF_SLAVES)
                     fields = {}
                     if 'fields' in slave_info:
                         for field_info in slave_info['fields']:
@@ -205,16 +230,14 @@ class Peripheral(BaseObject):
                                     field.side_effect(val)
                                 elif key == 'address_offset':
                                     field.address_offset(val)
-                                elif key == 'address_length':
-                                    field.address_length(val)
+                                elif key == 'number_of_fields':
+                                    field.number_of_fields(val)
                                 elif key == 'reset_value':
                                     field.reset_value(val)
                                 elif key == 'software_value':
                                     field.software_value(val)
                                 elif key == 'radix':
                                     field.radix(val)
-                                elif key == 'number_of_fields':
-                                    field.number_of_fields(self._eval(val))
                                 elif key == 'field_description':
                                     field.field_description(val)
                                 else:
@@ -225,9 +248,9 @@ class Peripheral(BaseObject):
                                 logger.error("field '%s' not succesfull added to fields", field_name)
 
                     if slave_info['slave_type'] == 'RAM':
-                        self.add_ram(slave_name, fields, number_of_slaves)
+                        self.add_ram(slave_nr, slave_name, fields, number_of_slaves)
                     else:
-                        self.add_register(slave_name, fields, number_of_slaves)
+                        self.add_register(slave_nr, slave_name, fields, number_of_slaves)
 
                     if 'slave_description' in slave_info:
                         self.update_args({'slave_description': slave_info['slave_description']})
@@ -248,18 +271,23 @@ class Peripheral(BaseObject):
         _val = str(val)
         # first replace all knowns parameter names with its assigned value
         for key1, val1 in self._parameters.items():
-            logger.debug("key1={}, val1={}".format(key1, val1))
+            #logger.debug("key1={}, val1={}".format(key1, val1))
             # if val is a dict, in vhdl it's a struct
             if isinstance(val1, dict):
                 for key2, val2 in val1.items():
                     key = "{}.{}".format(key1, key2)
-                    logger.debug("replace %s with %s", key, str(val2))
+                    #logger.debug("replace %s with %s", key, str(val2))
                     _val = _val.replace(key, str(val2))
             else:
-                logger.debug("replace %s with %s", key1, str(val1))
+                #logger.debug("replace %s with %s", key1, str(val1))
                 _val = _val.replace(key1, str(val1))
         #logger.debug("_val={}".format(_val))
-        result = eval(_val)
+        try:
+            result = eval(_val)
+            if isinstance(result, float):
+                result = int(result)
+        except NameError:
+            result = _val
         logger.debug("_eval(%s) returns eval(%s) = %s", str(val), _val, str(result))
         return result
 
@@ -268,19 +296,43 @@ class Peripheral(BaseObject):
         """
         self._parameters[name] = value
 
-    def add_register(self, name, fields, number_of_slaves):
+    def add_register(self, slave_nr, name, fields, number_of_slaves):
         """ add register to peripheral
         """
         register = Register(name, fields)
         register.number_of_slaves(number_of_slaves)
-        self.registers[name] = register
+        self.registers['slave_{}'.format(slave_nr)] = register
 
-    def add_ram(self, name, fields, number_of_slaves):
+    def add_ram(self, slave_nr, name, fields, number_of_slaves):
         """ add RAM to peripheral
         """
         ram = RAM(name, fields)
         ram.number_of_slaves(number_of_slaves)
-        self.rams[name] = ram
+        self.rams['slave_{}'.format(slave_nr)] = ram
+
+    def add_fifo(self, slave_nr, name, fields, number_of_slaves):
+        """ add FIFO to peripheral
+        """
+        fifo = FIFO(name, fields)
+        fifo.number_of_slaves(number_of_slaves)
+        self.fifo['slave_{}'.format(slave_nr)] = fifo
+
+
+    def eval_fields(self, fields):
+        # Evaluate the fields.
+        # ['number_of_fields', 'width', 'bit_offset', 'access_mode', 'side_effect', 
+        #  'address_offset', 'reset_value', 'software_value', 'radix', 'field_description']
+
+        for field in fields.values():
+            field.width(val=self._eval(field.width()))
+            field.bit_offset(val=self._eval(field.bit_offset()))
+            field.access_mode(val=self._eval(field.access_mode()))
+            field.side_effect(val=self._eval(field.side_effect()))
+            field.address_offset(val=self._eval(field.address_offset()))
+            field.number_of_fields(val=self._eval(field.number_of_fields()))
+            field.reset_value(val=self._eval(field.reset_value()))
+            field.software_value(val=self._eval(field.software_value()))
+            field.radix(val=self._eval(field.radix()))
 
     def eval_ram(self):
         """Evaluate the parameters and the nof_inst of the peripheral in order to define the
@@ -290,9 +342,10 @@ class Peripheral(BaseObject):
 
         for ram in self.rams.values():
             # Evaluate the fields and see if there are field that have to be repeated.
-            for field in ram.fields.values():
-                field.address_length(val=ceil_pow2(self._eval(field.address_length())))
-                field.width(val=self._eval(field.width()))
+
+            self.eval_fields(ram.fields)
+            
+            ram.number_of_slaves(val=self._eval(ram.number_of_slaves()))
 
             ram_name = []
             if self.prefix() not in (None, ''):
@@ -302,7 +355,7 @@ class Peripheral(BaseObject):
 
             fields_eval = {}
             for peri_nr in range(self.number_of_peripherals()):
-                _field_name = ['', '', '', '', '']
+                _field_name = ['', '', '', '']
                 if self.number_of_peripherals() > 1:
                     _field_name[1] = ".{}".format(peri_nr)
                 for ram_nr in range(ram.number_of_slaves()):
@@ -310,13 +363,12 @@ class Peripheral(BaseObject):
                         _field_name[2] = ".{}".format(ram_nr)
                     for field_name, field in ram.fields.items():
                         _field_name[0] = field_name
-                        for field_nr in range(field.number_of_fields()):
-                            if field.number_of_fields() > 1:
-                                _field_name[3] = ".{}".format(field_nr)
-                            _field = deepcopy(field)
-                            _field.name("{}{}{}{}{}".format(*_field_name).strip())
-                            fields_eval[_field.name()] = _field
+                        _field = deepcopy(field)
+                        _field.name("{}{}{}{}".format(*_field_name).strip())
+                        fields_eval[_field.name()] = _field
             ram.fields = fields_eval                  # Update the fields with evaluated fields
+            ram.update_address_length() # Estimate the new address_length after evaluation of the fields and nof_inst
+            logger.debug("  %s address_length: %d", ram.name(), ram.address_length())
 
 
     def eval_register(self):
@@ -329,9 +381,9 @@ class Peripheral(BaseObject):
         for register in self.registers.values():
             register.number_of_slaves(val=self._eval(register.number_of_slaves()))
             # Evaluate the fields and see if there are field that have to be repeated.
-            for field in register.fields.values():
-                field.address_length(val=ceil_pow2(self._eval(field.address_length())))
-                field.width(val=self._eval(field.width()))
+            self.eval_fields(register.fields)
+
+            register.number_of_slaves(val=self._eval(register.number_of_slaves()))
 
             register_name = []
             if self.prefix() not in (None, ''):
@@ -342,7 +394,7 @@ class Peripheral(BaseObject):
             fields_eval = {}
             offset = 0
             for peri_nr in range(self.number_of_peripherals()):
-                _field_name = ['', '', '', '', '']
+                _field_name = ['', '', '', '']
                 if self.number_of_peripherals() > 1:
                     _field_name[1] = ".{}".format(peri_nr)
                 for reg_nr in range(register.number_of_slaves()):
@@ -350,14 +402,11 @@ class Peripheral(BaseObject):
                         _field_name[2] = ".{}".format(reg_nr)
                     for field_name, field in register.fields.items():
                         _field_name[0] = field_name
-                        for field_nr in range(field.number_of_fields()):
-                            if field.number_of_fields() > 1:
-                                _field_name[3] = ".{}".format(field_nr)
-                            _field = deepcopy(field)
-                            _field.name("{}{}{}{}{}".format(*_field_name).strip())
-                            _field.address_offset(offset)
-                            offset += 1
-                            fields_eval[_field.name()] = _field
+                        _field = deepcopy(field)
+                        _field.name("{}{}{}{}".format(*_field_name).strip())
+                        _field.address_offset(offset)
+                        offset += 1
+                        fields_eval[_field.name()] = _field
 
             register.fields = fields_eval                  # Update the fields with evaluated fields
 
@@ -403,9 +452,9 @@ class Peripheral(BaseObject):
                 logger.info("        %-20s:", _name)
                 #if field.number_of_fields() > 1:
                 #    logger.info("          number_of_fields=%s", str(field.number_of_fields()))
-                logger.info("          width=%-2s       address_length=%s",
+                logger.info("          width=%-2s       number_of_fields=%s",
                             str(field.width()),
-                            str(field.address_length()))
+                            str(field.number_of_fields()))
 
         for reg in self.registers.values():
             #logger.debug("reg_fields=%s", str(reg.fields))
@@ -432,8 +481,8 @@ class Peripheral(BaseObject):
                             str(field.width()), field.address_offset(),
                             field.access_mode(), str(field.reset_value()),
                             field.radix())
-                logger.info("          bit_offset=%-2s  address_length=%-4s  side_effect=%-4s  software_value=%-4s",
-                            str(field.bit_offset()), str(field.address_length()),
+                logger.info("          bit_offset=%-2s  number_of_fields=%-4s  side_effect=%-4s  software_value=%-4s",
+                            str(field.bit_offset()), str(field.number_of_fields()),
                             field.side_effect(), str(field.software_value()))
 
         logger.info("  parameters:")
diff --git a/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/base_object.py b/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/base_object.py
index b51708d570b39a00fe7b9beb123f58d15d557b33..cafaf7a4e50024c51b3b69a0693cbc298838236f 100644
--- a/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/base_object.py
+++ b/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/base_object.py
@@ -29,9 +29,10 @@ logger = logging.getLogger('main.peripheral')
 
 class BaseObject(object):
     def __init__(self):
-        self.success         = True
-        self._name           = ""
-        self._prefix         = ""
+        self.success            = True
+        self._name              = ""
+        self._user_defined_name = None
+        self._prefix            = ""
         self._args = {}
 
     def update_args(self, args):
@@ -87,6 +88,13 @@ class BaseObject(object):
             return
         return self._name
 
+    def user_defined_name(self, val=None):
+        """ set/get user_defined_name """
+        if val is not None:
+            self._user_defined_name = val
+            return
+        return self._user_defined_name
+
     def prefix(self, val=None):
         """ set/get prefix """
         if val is not None:
diff --git a/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/constants.py b/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/constants.py
index 6e58158e3ec1254a44adebbfd11b067169255646..dc279e6d6cda20ee1d48a81776400842f0d96691 100644
--- a/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/constants.py
+++ b/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/constants.py
@@ -1,4 +1,5 @@
-"""
+"""P1eter;)
+
  Constants used by peripheral.py and system.py
  this constants can be used in the yaml files
 """
@@ -13,16 +14,17 @@ VALID_RADIXS       = ['UNSIGNED', 'SIGNED', 'HEXADECIMAL']
 
 DEFAULT_NUMBER_OF_PERIPHERALS = 1
 DEFAULT_NUMBER_OF_SLAVES      = 1
-DEFAULT_NUMBER_OF_FIELDS      = 1
-
-DEFAULT_WIDTH          = c_word_w
-DEFAULT_BIT_OFFSET     = 0
-DEFAULT_ACCESS_MODE    = 'RW'
-DEFAULT_SIDE_EFFECT    = None
-DEFAULT_ADDRESS_OFFSET = 0
-DEFAULT_ADDRESS_LENGTH = 1
-RESET_VALUE            = 0
-DEFAULT_SOFTWARE_VALUE = 0
-DEFAULT_RADIX          = 'signed'
-DEFAULT_DESCRIPTION    = 'none'
+
+DEFAULT_WIDTH            = c_word_w
+DEFAULT_BIT_OFFSET       = 0
+DEFAULT_ACCESS_MODE      = 'RW'
+DEFAULT_SIDE_EFFECT      = None
+DEFAULT_ADDRESS_OFFSET   = 0
+DEFAULT_NUMBER_OF_FIELDS = 1
+RESET_VALUE              = 0
+DEFAULT_SOFTWARE_VALUE   = 0
+DEFAULT_RADIX            = 'signed'
+DEFAULT_DESCRIPTION      = 'none'
+
+DEFAULT_ADDRESS_LENGTH   = 1
 
diff --git a/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/field.py b/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/field.py
index 35291a0a0a56f040174dec32f47e70f33369b914..7d8b5f013efd64d99c47f92bae6397ffd153e266 100644
--- a/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/field.py
+++ b/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/field.py
@@ -39,7 +39,7 @@ class Field(BaseObject):
         super().__init__()
         self.name(name)
         self._valid_keys = ['number_of_fields', 'width', 'bit_offset', 'access_mode', 'side_effect', 'address_offset',
-                            'address_length', 'reset_value', 'software_value', 'radix', 'field_description']
+                            'reset_value', 'software_value', 'radix', 'field_description']
 
         self._args.update({'number_of_fields' : DEFAULT_NUMBER_OF_FIELDS,
                            'width'            : DEFAULT_WIDTH,
@@ -47,7 +47,6 @@ class Field(BaseObject):
                            'access_mode'      : DEFAULT_ACCESS_MODE,
                            'side_effect'      : DEFAULT_SIDE_EFFECT,
                            'address_offset'   : DEFAULT_ADDRESS_OFFSET,
-                           'address_length'   : DEFAULT_ADDRESS_LENGTH,
                            'reset_value'      : RESET_VALUE,
                            'software_value'   : DEFAULT_SOFTWARE_VALUE,
                            'radix'            : DEFAULT_RADIX,
@@ -109,12 +108,13 @@ class Field(BaseObject):
         val: if not None and a valid side_effect set side_effect of field
         return: actual side_effect of field """
         if val is not None:
-            if val.upper() in VALID_SIDE_EFFECTS:
-                return self.set_kv('side_effect', val.upper())
-            else:
-                logger.error("unknown side_effect '%s'", val)
-                self.success = False
-                return False
+            if val.upper() != 'NONE':
+                if val.upper() in VALID_SIDE_EFFECTS:
+                    return self.set_kv('side_effect', val.upper())
+                else:
+                    logger.error("unknown side_effect '%s'", val)
+                    self.success = False
+                    return False
         return self._as_str('side_effect').upper()
 
     def address_offset(self, val=None):
@@ -125,14 +125,6 @@ class Field(BaseObject):
             return self.set_kv('address_offset', val)
         return self._as_int('address_offset')
 
-    def address_length(self, val=None):
-        """ set/get address length of field
-        val: if not None set address length of field
-        return: active address_length of field """
-        if val is not None:
-            return self.set_kv('address_length', val)
-        return self._as_int('address_length')
-
     def reset_value(self, val=None):
         """ set/get default hardware reset value of field
         val: if not None set default value of field
@@ -168,4 +160,15 @@ class Field(BaseObject):
         return: description of field """
         if val is not None:
             return self.set_kv('field_description', val)
-        return self._as_str('field_discription')
\ No newline at end of file
+        return self._as_str('field_discription')
+
+    # TODO: calc size in bytes 
+    # def get_byte_size(self):
+
+    #def address_length(self, val=None):
+    #    """ set/get address length of field
+    #    val: if not None set address length of field
+    #    return: active address_length of field """
+    #    if val is not None:
+    #        return self.set_kv('address_length', val)
+    #    return self._as_int('address_length')
\ No newline at end of file
diff --git a/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/fifo.py b/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/fifo.py
index 05366354d21cbe763d40bd36a006b13cee1d9728..07b17b5755597b0136de701283e10c8a166fa8dd 100644
--- a/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/fifo.py
+++ b/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/fifo.py
@@ -39,7 +39,7 @@ class FIFO(object):
     """ A FIFO is a specific set of Fields
     """
     def __init__(self, name, settings):
-        self.number_offifos = 1
+        self.number_of_fifos = 1
         fifo_fields = {}
         fifo_fields["fifo_status"] =    Field(name="fifo_status",
                                               settings={
diff --git a/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/ram.py b/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/ram.py
index def44030d0fad20e56663ac0070391eccbc25a79..67f4f45e5c1a476ccf0951ad07c7139f60bd05f0 100644
--- a/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/ram.py
+++ b/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/ram.py
@@ -58,7 +58,7 @@ class RAM(BaseObject):
         field = Field(name, settings)
         if field.success:
             self.fields[name] = Field(name, settings)
-            self.update_address_length()
+            #self.update_address_length()
             return True
         return False
 
@@ -69,6 +69,14 @@ class RAM(BaseObject):
             return
         n_words = 0
         for field in self.fields.values():
-            n_words += int(ceil(float(field.width()) / c_word_w))
+            n_words += int(ceil(float(field.width()) / c_word_w)) * field.number_of_fields()
 
         self.set_kv('address_length', n_words)
+
+    def address_length(self, val=None):   
+        """ set/get address_length of register
+        val: if not None set address_length of register
+        return: address_length of register """
+        if val is not None:
+            return self.set_kv('address_length', val)
+        return self._as_int('address_length', default=1)
\ No newline at end of file
diff --git a/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/register.py b/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/register.py
index 9d29d9cc4186b9cfe35633fe057f549a0ede7c3f..e197bfbfb834fbf14987e98d8887944951972478 100644
--- a/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/register.py
+++ b/tools/oneclick/prestudy/YAML/py_mm_lib/peripheral_lib/register.py
@@ -38,6 +38,7 @@ class Register(BaseObject):
     """
     def __init__(self, name, fields=None, settings=None):
         super().__init__()
+        
         self.name(name)
 
         self.fields   = {} if fields is None else fields
@@ -48,7 +49,8 @@ class Register(BaseObject):
                            'address_length'   : DEFAULT_ADDRESS_LENGTH,
                            'slave_discription': DEFAULT_DESCRIPTION})
 
-        self.update_address_length()
+        #self.update_address_length()
+    
 
     def number_of_slaves(self, val=None):
         """ set/get number of slaves """
@@ -63,7 +65,7 @@ class Register(BaseObject):
         field = Field(name, settings)
         if field.success:
             self.fields[name] = field
-            self.update_address_length()
+            #self.update_address_length()
             return True
         return False
 
@@ -74,7 +76,7 @@ class Register(BaseObject):
             return
         n_words = 0
         for field in self.fields.values():
-            n_words += int(ceil(float(field.width()) / c_word_w))
+            n_words += int(ceil(float(field.width()) / c_word_w)) * field.number_of_fields()
 
         self.set_kv('address_length', n_words)  # ceil_pow2(n_words))
 
diff --git a/tools/oneclick/prestudy/YAML/py_mm_lib/rom_system.py b/tools/oneclick/prestudy/YAML/py_mm_lib/rom_system.py
index 4c3eb35cd2f4ce5666cb5ac18ee07c2b4bb3eea3..bad79ce2773ccffd62e1783f92fcaeded761dae5 100644
--- a/tools/oneclick/prestudy/YAML/py_mm_lib/rom_system.py
+++ b/tools/oneclick/prestudy/YAML/py_mm_lib/rom_system.py
@@ -164,25 +164,29 @@ class RomSystem(object):
         peripheral = peripherals['reg_system_info']
         #print(peripheral.registers)
         base_address    = int(peripheral.parameter('lock_base_address'))
-        size            = int(peripheral.registers['.REG_SYSTEM_INFO.'].fields['field_reg_info'].get_kv('address_length'))  # TODO: if not available calculate real size
+        size            = int(peripheral.get_slave('reg_system_info').fields['field_reg_info'].number_of_fields())  # TODO: if not available calculate real size
         memory_mapper.add(name="REG_SYSTEM_INFO", size=size, nof_instances=1, base_address=base_address)
 
         peripheral = peripherals['rom_system_info']
         base_address    = int(peripheral.parameter('lock_base_address'))
-        size            = int(peripheral.registers['.ROM_SYSTEM_INFO.'].fields['field_rom_info'].get_kv('address_length'))  # TODO: if not available calculate real size
+        size            = int(peripheral.get_slave('rom_system_info').fields['field_rom_info'].number_of_fields())  # TODO: if not available calculate real size
         memory_mapper.add(name="ROM_SYSTEM_INFO", size=size, nof_instances=1, base_address=base_address)
 
         size_info = []
         for peripheral in peripherals.values():
             nof_peri_inst = peripheral.number_of_peripherals()
             for rkey, rval in peripheral.rams.items():
+                #n_addresses = rval.get_kv('address_length')
                 n_addresses = 0
                 for fkey, fval in rval.fields.items():
                     # n_words = width in bits rounded up to wordt_size bits
                     n_words = int(ceil(float(fval.width()) / self.word_size))
-                    n_addresses += n_words * fval.address_length()
+                    n_addresses += n_words * fval.number_of_fields()
                 nof_inst = rval.number_of_slaves() * peripheral.number_of_peripherals()
-                _name = rval.name()
+                if rval.user_defined_name() is not None:
+                    _name = rval.user_defined_name()
+                else:
+                    _name = rval.name()
                 #print("%s %s" % (str(rkey), str(n_addresses)))
                 size_info.append([n_addresses, nof_inst, _name])
 
@@ -190,12 +194,15 @@ class RomSystem(object):
                 n_addresses = 0
                 n_words     = 0
                 for fkey, fval in rval.fields.items():
-                    n_words     = max(n_words, int(ceil(float(fval.width()) / self.word_size)))
+                    n_words     = max(n_words, int(ceil(float(fval.width()) / float(self.word_size))))
                     n_addresses = max(n_addresses, fval.address_offset())
 
                 n_addresses += 1
                 nof_inst = rval.number_of_slaves() * peripheral.number_of_peripherals()
-                _name = rval.name()
+                if rval.user_defined_name() is not None:
+                    _name = rval.user_defined_name()
+                else:
+                    _name = rval.name()
                 if _name.upper() in ('.REG_SYSTEM_INFO.', '.ROM_SYSTEM_INFO.', 'REG_SYSTEM_INFO', 'ROM_SYSTEM_INFO'):
                     continue
                 #print("%s %s" % (str(rkey), str(n_addresses * n_words)))
diff --git a/tools/oneclick/prestudy/YAML/py_mm_lib/system.py b/tools/oneclick/prestudy/YAML/py_mm_lib/system.py
index 227a01ca493bebb7f271cc8b9ff211aca0826556..00849993d4023b001323911801361eb5609eb576 100755
--- a/tools/oneclick/prestudy/YAML/py_mm_lib/system.py
+++ b/tools/oneclick/prestudy/YAML/py_mm_lib/system.py
@@ -76,7 +76,7 @@ class System(object):
         """ Create a system object based on the information in the system_config """
         logger.debug("Creating system")
         logger.debug("Instantiating the peripherals from the peripheral Library")
-        self.system_name = self.system_config['library_name']
+        self.system_name = self.system_config['hdl_library_name']
         config = self.system_config
 
         if "system_description" in config:
@@ -120,8 +120,8 @@ class System(object):
 
         for peripheral_config in config['peripherals']:
             # (Deep)Copy the peripheral from the library in order to avoid creating a reference
-            component_name         = peripheral_config['peripheral_component_name']
-            component_prefix       = peripheral_config['peripheral_prefix']
+            component_name         = peripheral_config['peripheral_name']
+            component_prefix       = peripheral_config['subsystem_name']
             number_of_peripherals  = int(self._eval(peripheral_config.get('number_of_peripherals', 1)))
             
             peripheral_from_lib = copy.deepcopy(self.peri_lib.find_peripheral(component_name))
@@ -129,7 +129,7 @@ class System(object):
                 logger.warning("component_name '%s' not found in library", component_name)
                 continue
 
-            logger.debug(" Finding %s", peripheral_from_lib.name)
+            logger.debug(" Finding %s", peripheral_from_lib.name())
 
             if 'parameters' in peripheral_config:
                 logger.debug("parameters={}".format(peripheral_config['parameters']))
@@ -138,11 +138,12 @@ class System(object):
                     value = parameter_set['value']
                     peripheral_from_lib.parameter(key=name, val=self._eval(value))
 
-             #peripheral_from_lib.set_nof_instances(nof_instances)
-             #for i in range(nof_instances):
-             #    _system_name = system_name
-             #    if nof_instances > 1:
-             #        _system_name = "{}{}".format(system_name,i)
+
+            if 'slave_port_names' in peripheral_config:
+                logger.debug("slave_port_names={}".format(peripheral_config['slave_port_names']))
+                for slave_nr, slave_port_name in enumerate(peripheral_config['slave_port_names']):
+                    peripheral_from_lib.set_user_defined_slavename(slave_nr, slave_port_name)
+
             peripheral_from_lib.number_of_peripherals(number_of_peripherals)
             peripheral_from_lib.prefix(component_prefix)
             peripheral_name = []
diff --git a/tools/oneclick/prestudy/YAML/work/system_info.peripheral.yaml b/tools/oneclick/prestudy/YAML/work/system_info.peripheral.yaml
index 9d08ba685ad624a573cfc1efd7ed13647763ce39..dc30116ca3bc74b18bcd9266e538e46eb02a14d8 100644
--- a/tools/oneclick/prestudy/YAML/work/system_info.peripheral.yaml
+++ b/tools/oneclick/prestudy/YAML/work/system_info.peripheral.yaml
@@ -2,27 +2,28 @@ protocol_name   : args
 protocol_version: 1.0
 protocol_type   : peripheral
 
-library_name    : system_info
-library_description: " This is the description for the system_info library "
+hdl_library_name       : system_info
+hdl_library_description: " This is the description for the system_info library "
 
 peripherals:
   - 
-    peripheral_component_name: rom_system_info
+    peripheral_name: rom_system_info
     parameters:
       - { name: lock_base_address,  value: 0x1000 }
     
     slave_ports:
       - 
-        slave_prefix :  
-        slave_name   : ROM_SYSTEM_INFO  # rom_system_info
-        slave_postfix: 
+        # rom_system_info
+        slave_prefix : WORK 
+        slave_name   : ROM_SYSTEM_INFO  
+        slave_postfix: REG
         slave_type   : REG
         fields:
           -
             field_name    : field_rom_info
             access_mode   : RO
             address_offset: 0x0
-            address_length: 4096
+            number_of_fields: 4096
             field_description: |
                 "address place for rom_system_info"
         slave_description: " rom_info  "
@@ -30,22 +31,23 @@ peripherals:
     peripheral_description: |
         " settings for rom_system_info register "
   - 
-    peripheral_component_name: reg_system_info
+    peripheral_name: reg_system_info
     parameters:
       - { name: lock_base_address, value: 0x0 }
     
     slave_ports:
       -
-        slave_prefix : 
-        slave_name   : REG_SYSTEM_INFO  # reg_system_info
-        slave_postfix: 
+        # reg_system_info
+        slave_prefix : WORK
+        slave_name   : REG_SYSTEM_INFO  
+        slave_postfix: REG
         slave_type   : REG
         fields:
           -
             field_name    : field_reg_info
             access_mode   : RO
             address_offset: 0x0
-            address_length: 128
+            number_of_fields: 128
             field_description: |
                 "address place for reg_system_info"
         slave_description: " reg_info "
diff --git a/tools/oneclick/prestudy/YAML/work/work.peripheral.yaml b/tools/oneclick/prestudy/YAML/work/work.peripheral.yaml
index ecc081aa1678c9d33d58690ae6fc5bed65563219..610bb3516dbb0bcf9e252f67e22f11162dedabdf 100644
--- a/tools/oneclick/prestudy/YAML/work/work.peripheral.yaml
+++ b/tools/oneclick/prestudy/YAML/work/work.peripheral.yaml
@@ -2,29 +2,30 @@ protocol_name   : args
 protocol_version: 1.0
 protocol_type   : peripheral
 
-library_name    : work
-library_description: " This is the description for the work package "
+hdl_library_name       : work
+hdl_library_description: " This is the description for the work package "
 
 peripherals:
   - 
-    peripheral_component_name: unb1_board_sens
+    peripheral_name: unb1_board_sens
 
     parameters:
       - { name: g_temp_high, value: 85 }
 
     slave_ports:
       - 
+        # actual hdl name: reg_unb1_sens
         slave_prefix : WORK
-        slave_name   : UNB1_SENS  # reg_unb1_sens
+        slave_name   : UNB1_SENS
         slave_postfix: REG
         slave_type   : REG
         fields:
           -
             field_name    : sens_data
             width         : 8
-            access_mode   : R
+            access_mode   : RO
             address_offset: 0x0
-            address_length: 4
+            number_of_fields: 4
             field_description: | 
                 " data array with sens data 
                 0x0 = fpga temperature in degrees (two's complement) 
@@ -34,7 +35,7 @@ peripherals:
           -
             field_name    : sens_err
             width         : 1
-            access_mode   : R
+            access_mode   : RO
             address_offset: 0x4
             radix         : unsigned 
             field_description: |
@@ -43,7 +44,8 @@ peripherals:
             field_name    : temp_high
             width         : 7
             address_offset: 0x5
-            default_value : g_temp_high
+            reset_value   : g_temp_high
+            software_value: g_temp_high
             field_description: | 
                 ""
         slave_description:  " "