diff --git a/src/doc/macros.rst b/src/doc/macros.rst
index 3d995c1fbc67b155a6df606ac2f84a0cec26d1a5..3071989f4263ef6ea48fdb71b48f9a21af1646a1 100644
--- a/src/doc/macros.rst
+++ b/src/doc/macros.rst
@@ -37,7 +37,7 @@ The same version using cfood macros could be defined as follows:
         name: null
         filename: null
       definition:
-        ${name}_filename
+        ${name}_filename:
           type: SimpleFile
           match: $filename
           records:
@@ -56,13 +56,40 @@ The same version using cfood macros could be defined as follows:
       - name: README
         filename: ^README.md$
 
+The expanded version of `ExperimentalData` will look like:
 
+.. _example_files_2_expanded:
+.. code-block:: yaml
+
+  ExperimentalData:
+    match: ExperimentalData
+    subtree:
+      README_filename:
+        match: ^README.md$
+        records:
+          README:
+            file: README_filename
+            parents:
+            - MarkdownFile
+            path: README_filename
+            role: File
+        type: SimpleFile
+    type: Directory
 
+This :ref:`example<_example_files_2>` can also be found in the macro unit tests (see :func:`unittests.test_macros.test_documentation_example_2`).
 
 
 Complex Example
 ===============
 
+The following, more complex example, demonstrates the use
+of macro variable substitutions that generate crawler variable substitutions:
+
+- `$$$nodename` will lead to a macro variable substitution of variable `$nodename` during macro expansion.
+- `$$` will be turned into `$`
+- So in the crawler cfood, the string will appear as `$value` if variable `nodename` would be set to `value` when using the macro.
+
+
 .. _example_1:
 .. code-block:: yaml
    
@@ -86,3 +113,118 @@ Complex Example
                file: $$$nodename
              Simulation:
                $recordtype: +$File
+
+The expanded version of :ref:`example<_example_1>` can be seen in :ref:`example<_example_1_expanded>`.
+
+
+.. _example_1_expanded:
+.. code-block:: yaml
+                
+  SimulationData:
+    match: SimulationData
+    subtree:
+      Dataset:
+        match: .*
+        records:
+          File:
+            file: $Dataset
+            parents:
+            - DatasetFile
+            path: $Dataset
+            role: File
+          Simulation:
+            DatasetFile: +$File
+        type: SimpleFile
+    type: Directory
+
+This :ref:`example<_example_1>` can also be found in the macro unit tests (see :func:`unittests.test_macros.test_documentation_example_1`).
+
+
+
+Using Macros Multiple Times
+===========================
+
+To use the same macro multiple times in the same yaml node, lists can be used:
+
+.. _example_multiple:
+.. code-block:: yaml
+
+    ---
+    metadata:
+      macros:
+        - !defmacro
+          name: test_twice
+          params:
+            macro_name: default_name
+            a: 4
+          definition:
+            $macro_name:
+              something:
+                a: $a
+    ---
+    extroot: !macro
+      test_twice:
+      - macro_name: once  # <- This is the first replacement of the macro
+      - macro_name: twice # <- This is the second one, with different arguments
+        a: 5
+      - {}                # <- This is the third one, just using default arguments
+
+        
+This :ref:`example<_example_multiple>` is taken from the macro unit tests (see :func:`unittests.test_macros.test_use_macro_twice`).
+
+The example will be expanded to:
+
+.. _example_multiple_expanded:
+.. code-block:: yaml
+
+    extroot:
+      default_name:
+        something:
+          a: '4'
+      once:
+        something:
+          a: '4'
+      twice:
+        something:
+          a: '5'
+
+
+
+
+Limitation
+----------
+
+Currently it is not possible to use the same macro twice in the same yaml node, but in different
+positions. Consider:
+
+.. _example_multiple_limitation:
+.. code-block:: yaml
+
+    ---
+    metadata:
+      macros:
+        - !defmacro
+          name: test_twice
+          params:
+            macro_name: default_name
+            a: 4
+          definition:
+            $macro_name:
+              something:
+                a: $a
+    ---
+    extroot: !macro
+      test_twice:
+      - macro_name: once  # <- This is the first replacement of the macro
+        
+      Other_node:
+        type: test
+        
+      test_twice:  # This is NOT possible as each
+                   #  dictionary element can only appear once in a yaml node.
+      - macro_name: twice # <- This is the second one, with different arguments
+        a: 5
+      - {}                # <- This is the third one, just using default arguments
+
+However, this should not be a real limitation, as the crawler is designed in a way,
+that the order of the nodes in the same level should not matter.