diff --git a/args_cleanup.txt b/args_cleanup.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5e563a7b946447de193b605120e71bcd33a9b23f
--- /dev/null
+++ b/args_cleanup.txt
@@ -0,0 +1,102 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright 2020
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+-------------------------------------------------------------------------------
+--
+-- Author: E. Kooistra
+-- Purpose: ARGS clean up steps
+--
+
+References
+[1] mm_port_naming.txt
+
+Jira tickets backlog to cleanup the ARGS code:
+
+L2SDP-251: Support new MMAP format in SDP
+- Compressed mmap. Use bash to remove redundant spaces from mmap file, before putting it in the FPGA system info ROM.
+
+L2SDP-255 : Cleanup the ARGS code:
+- Simplify ARGS code structure (minimize features, remove platform specific code)
+- Clean up ARGS parse checks and warnings
+- Clean up gen_rom_mmap.py (remove work arounds)
+
+  Cleanup details:
+  - Read ARGS yaml configuration into Python
+    - read in and parse yaml file (fpga or peripheral)
+      . check yaml syntax
+      . check ARGS syntax
+        - check that the keys in yaml are valid
+    - if fpga.yaml:
+      - read in and parse peripheral.yaml files that are used in the fpga.yaml file
+          - check that peripheral instantiations in fpga.yaml exist in the periperal.yaml
+          - check that parameter_overrides in fpga.yaml exist on the peripheral
+          - add default keys with their default value (typically None = not specified -->
+              let gen_* script fill in value dependent on the function of the gen_* script)
+      - evalutate/substitute the fpga.yaml peripheral parameters overrides
+        . put fields in address_offset order
+        . check valid values
+          - string naming rules (must start with an a-z,A_Z character)
+          - field address_offset multiple of MM_BUS_SIZE = 4 bytes
+          - field bit_offset + mm_width <= MM_BUS_WIDTH = 32 bit
+      ==> Common representation of register map in Python
+
+  - Simplify the ARGS code structure (using seperate, independent steps for parse, check, evaluate and generate)
+    - yaml parser
+      . yaml syntax
+    - ARGS parser
+      . ARGS syntax per file
+      . Remove platform specific code (AXI, Xilinx, QSYS) from core ARGS (= fpga.py, peripheral.py)
+      . if fpga.yaml:
+        . ARGS correctness between fpga and instantiated peripherals
+        . ARGS parameter overrides of peripherals in fpga
+        . do not fill in or calculate base address values, do that in generate script
+        . do not use structured naming, only support the manual naming:
+          - no structured mm_port_names naming in fpga.yaml (using peripheral_group as postfix)
+          - no structured field_name naming in peripheral.yaml (using field_group string as prefix)
+      . for peripheral.yaml:
+        . rename Register.py into reg.py and REG.
+        . keep field_group (no need for explicit field_group key, the implicit field_group key string is fine)
+        . do not distinghuis beteen mm_port_types (REG, RAM, FIFO), they all use fields
+        . do not unroll arrays (number_of_peripherals, number_of_mm_ports, number_of_fields)
+    ==> Minimal representation of fpga.yaml in Python that forms the base for generate scripts
+    - Generate scripts, e.g.
+      . for fpga.yaml
+        . derive MM addresses for fpga.yaml
+          . Separate getting MM bus base addresses from QSYS out of fpga.py (because it is Altera platform specfic)
+          . Separate calculating MM bus base addresses, based on peripheral and mm_port spans (see point 4k)
+        . gen_rom_mmap.py: generate MMAP file for fpga.yaml
+
+
+L2SDP- : Cleanup base address derivation:
+- Add separate code to derive MM addresses for fpga.yaml from QSYS mm_port base addresses
+- Add separate code to derive MM addresses for fpga.yaml from calculation based on peripheral
+  and mm_port spans (see 4k) in [1]
+
+L2SDP- : Jira story Generate markdown document for fpga.yaml:
+- Generate simple markdown document for fpga.yaml.
+  . With title, contents, sections, tables and based on evaluated parameter values.
+  . Instead of using Latex as in gen_doc.py, because markdown is simpler and thus easier to maintain.
+
+Future ARGS features:
+. Numbers (int, float) and boolean (True, TRUE, False) are supported as parameters values,
+  but strings are not (yet) supported.
+. For fpga.yaml
+  . Add instance_description key in fpga.yaml to support describing some peripheral instance specifics.
+  . generate MM bus HDL code for fpga.yaml
+. For peripheral.yaml:
+  . generate MM interface HDL code for a periperal in a periperal.yaml
diff --git a/slave_port_naming.txt b/slave_port_naming.txt
index 36d9661a7b891fa26eee05a276140b7ab6e3049f..aa4f0edf305796798f0c53750fa6a181b00170c4 100644
--- a/slave_port_naming.txt
+++ b/slave_port_naming.txt
@@ -136,6 +136,7 @@ c) Remove structured MM port naming:
 d) Do not mix generic ARGS code with platform specific code:
    - Use dedicated new mm_port_type to support e.g. AXI Lite registers, so keep the mm_port_type REG generic
    - Remove mm_port_protocol
+   - Platform specific code (e.g. for AXI bus, Xilinx) should be in generate scripts, not in core ARGS code.
 e) field
    - use exaxt yaml names in the Python code, so then e.g ?:
      . periperal.name --> periperal.periperal_name
@@ -510,8 +511,6 @@ j) endianess per MM word (l, b) and for multi MM word (L, B)
    endianess column in mmap met enum of number?
 
 
-
-
 k) address calculation
   - Use base addresses from QSYS or calculate base addresses based on peripheral spans
   - MM port span is largest for all fields of ceil_log2(address offset of field + largest(width, radix_width) / 32)
@@ -527,51 +526,6 @@ k) address calculation
     span = 0 to use the calculated minimal required span. The span is the actual number of
     bytes (multiple of 4), the 2**span_w yields the occupied address space.
 
-l) ARGS steps
-  - read in and parse fpga.yaml file
-    . check yaml syntax
-    . check ARGS syntax
-      - check that the keys in fpga.yaml are valid
-  - read in and parse peripheral.yaml files that are used in the fpga.yaml file
-    . check yaml syntax
-    . check ARGS syntax
-      - check that the keys in peripheral.yaml are valid
-      - check that peripheral instantiations in fpga.yaml exist in the periperal.yaml
-      - check that parameter_overrides in fpga.yaml exist on the peripheral
-      - add default keys with their default value (typically None = not specified -->
-          let gen_* script fill in value dependent on the function of the gen_* script)
-  - evalutate/substitute the parameters overrides
-    . put fields in address_offset order
-    . check valid values
-      - string naming rules (must start with an a-z,A_Z character)
-      - field address_offset multiple of MM_BUS_SIZE = 4 bytes
-      - field bit_offset + mm_width <= MM_BUS_WIDTH = 32 bit
-    . do not unroll arrays (number_of_peripherals, number_of_mm_ports, number_of_fields)
-
-  - ARGS code structure
-    - Read ARGS yaml configuration into Python:
-      yaml parser,
-      fpga uses peripherals,
-      peripherals uses mm_ports,
-      there are multiple mm_port type (REG, RAM, FIFO) but they all use fields.
-    - Generate scripts, e.g.
-      . gen_rom_mmap.py: generate MMAP file for fpga.yaml
-      . gen_doc.py: generate ICD document file for fpga.yaml, better use markdown then
-                    LaTeX, because markdown is simpler and thus easier to maintain.
-      . generate MM bus base addresses for fpga.yaml, based on peripheral and mm_port spans
-      . get MM bus base addresses from QSYS for fpga.yaml
-      . generate MM bus HDL for fpga.yaml
-      . generate MM interface HDL for a periperal or all periperals in a periperal.yaml
-
-
-z) Other:
-  - Rename Register.py into reg.py and REG.
-  - Numbers (int, float) and boolean (True, TRUE, False) are supported as parameters values,
-    but strings are not (yet) supported.
-  - Add instance_description key in fpga.yaml to support describing some peripheral instance specifics.
-  - parameter_overrides does not yet check whether parameter actually exists on periperal
-
-   
 
 ###############################################################################
 #