diff --git a/doc.zih.tu-dresden.de/docs/access/jupyterhub_for_teaching.md b/doc.zih.tu-dresden.de/docs/access/jupyterhub_for_teaching.md
index 89850258fe30f74f7f92d4028630d7444923ae7c..ab243e76cd0342444db9e23d49b356678a1638db 100644
--- a/doc.zih.tu-dresden.de/docs/access/jupyterhub_for_teaching.md
+++ b/doc.zih.tu-dresden.de/docs/access/jupyterhub_for_teaching.md
@@ -12,7 +12,7 @@ Please be aware of the following notes:
 - ZIH systems operate at a lower availability level than your usual Enterprise
 Cloud VM. There can always be downtimes, e.g. of the filesystems or the batch
 system.
-- Scheduled downtimes are announced by email. Please plan your courses
+- Scheduled downtimes are announced by e-mail. Please plan your courses
 accordingly.
 - Access to HPC resources is handled through projects. See your course as a
 project. Projects need to be registered beforehand (more info on the page
diff --git a/doc.zih.tu-dresden.de/docs/contrib/content_rules.md b/doc.zih.tu-dresden.de/docs/contrib/content_rules.md
index 189365b7d5c898f2ce97ccabc9d0c2963e296dcd..1a325b90c7664e8dd6c15928d3d71769fdbbdcfe 100644
--- a/doc.zih.tu-dresden.de/docs/contrib/content_rules.md
+++ b/doc.zih.tu-dresden.de/docs/contrib/content_rules.md
@@ -33,7 +33,7 @@ These licenses also apply to your contributions.
 
 If you are in doubt, please contact us either via
 [GitLab Issue](https://gitlab.hrz.tu-chemnitz.de/zih/hpcsupport/hpc-compendium/-/issues)
-or via [Email](mailto:hpc-support@tu-dresden.de).
+or via [e-mail](mailto:hpc-support@tu-dresden.de).
 
 ## Quick Overview
 
@@ -326,9 +326,17 @@ highlighting. There is a complete list of supported
 #### Data Privacy and Generic Names
 
 Where possible, replace login, project name, and other private data with clearly recognizable
-placeholders. In particular, use the generic login `marie` and the project title `p_number_crunch`
-as placeholders at first. If you need a second login and a second project stick to `martin` and
-`p_long_computations`.
+placeholders. In particular, use the generic placeholders depicted in the following table.
+The table also holds a second placeholder, if, e.g., you need a second login to formulate an example.
+
+| Description | Placeholder | 2nd Placeholder |
+|---|---|
+| Username | Marie | Martin |
+| Login | `marie` | `martin` |
+| E-mail | marie@tu-dresden.de | martin@tu-dresden.de |
+| Project title | `p_number_crunch` | `p_long_computations` |
+| Workspace title | `number_crunch` | `long_computations` |
+{: summary="Generic placeholders", align="bottom"}
 
 ```console
 marie@login$ ls -l
diff --git a/doc.zih.tu-dresden.de/docs/contrib/contribute_container.md b/doc.zih.tu-dresden.de/docs/contrib/contribute_container.md
index 1ccaef449f7bed091f5b794d935a7f69e3bfc3f0..13fd3516658ba6190c7954d80fbc76b1a8cbef0b 100644
--- a/doc.zih.tu-dresden.de/docs/contrib/contribute_container.md
+++ b/doc.zih.tu-dresden.de/docs/contrib/contribute_container.md
@@ -79,7 +79,7 @@ faster.
 Assuming you already have a working Docker installation and have cloned the repository as mentioned
 above, a few more steps are necessary.
 
-Build the docker image. This might take a bit longer, as `mkdocs` and other necessary software
+Build the Docker image. This might take a bit longer, as `mkdocs` and other necessary software
 needs to be downloaded, but you have to run it only once in a while.
 Building a container could be done with the following steps:
 
@@ -155,9 +155,10 @@ cp doc.zih.tu-dresden.de/util/pre-commit .git/hooks/
 ```
 
 !!! note
-    The pre-commit hook only works, if you can use docker without using `sudo`. If this is not
-    already the case, use the command `adduser $USER docker` to enable docker commands without
-    `sudo` for the current user. Restart the docker daemons afterwards.
+
+    The pre-commit hook only works, if you can use Docker without using `sudo`. If this is not
+    already the case, use the command `adduser $USER docker` to enable Docker commands without
+    `sudo` for the current user. Restart the Docker daemons afterwards.
 
 Read on if you want to run a specific check.
 
diff --git a/doc.zih.tu-dresden.de/docs/data_lifecycle/workspaces.md b/doc.zih.tu-dresden.de/docs/data_lifecycle/workspaces.md
index 4a035e6db5401f2a71e7811f75e025779e1faf7c..e810605f17da8371f78b62dfd41679f9e877b5eb 100644
--- a/doc.zih.tu-dresden.de/docs/data_lifecycle/workspaces.md
+++ b/doc.zih.tu-dresden.de/docs/data_lifecycle/workspaces.md
@@ -31,7 +31,7 @@ Since the workspace filesystems are intended for different use cases and thus di
 performance, their granted timespans differ accordingly. The maximum lifetime and number of
 renewals are provided in the following table.
 
-| Filesystem (use with parameter `--filesystem=<filesystem>`) | Max. Duration in Days | Extensions | Keeptime | [Filesystem Feature](../jobs_and_resources/slurm.md#filesystem-features) |
+| Filesystem (use with parameter `--filesystem <filesystem>`) | Max. Duration in Days | Extensions | Keeptime | [Filesystem Feature](../jobs_and_resources/slurm.md#filesystem-features) |
 |:------------------------------------------------------------|---------------:|-----------:|---------:|:-------------------------------------------------------------------------|
 | `      horse`                                               | 100            | 10         | 30       |                                                                          |
 | `      walrus`                                              | 100            | 10         | 60       |                                                                          |
@@ -49,7 +49,7 @@ renewals are provided in the following table.
     The filesystems `warm_archive`, `ssd` and `scratch` will be switched off end of 2023. Do not use
     them anymore!
 
-    | Filesystem (use with parameter `--filesystem=<filesystem>`) | Duration, days | Extensions | [Filesystem Feature](../jobs_and_resources/slurm.md#filesystem-features) | Remarks |
+    | Filesystem (use with parameter `--filesystem <filesystem>`) | Duration, days | Extensions | [Filesystem Feature](../jobs_and_resources/slurm.md#filesystem-features) | Remarks |
     |:-------------------------------------|---------------:|-----------:|:-------------------------------------------------------------------------|:--------|
     | `scratch` (default)                  | 100            | 10         | `fs_lustre_scratch2`                                                     | Scratch filesystem (`/lustre/scratch2`, symbolic link: `/scratch`) with high streaming bandwidth, based on spinning disks |
     | `ssd`                                | 30             | 2          | `fs_lustre_ssd`                                                          | High-IOPS filesystem (`/lustre/ssd`, symbolic link: `/ssd`) on SSDs. |
@@ -89,24 +89,12 @@ provides information which filesystem is available on which cluster.
     horse
     ```
 
-=== "Taurus (deprecated)"
-
-    ```console
-    marie@login.taurus$ ws_list -l
-    available filesystems:
-    scratch (default)
-    warm_archive
-    ssd
-    beegfs_global0
-    beegfs
-    ```
-
 !!! note "Default filesystem"
 
     The output of the commands `ws_find --list` and `ws_list -l` will indicate the
     **default filesystem**. If you prefer another filesystem (cf. section
     [List Available Filesystems](#list-available-filesystems)), you have to explictly
-    provide the option `--filesystem=<filesystem>` to the workspace commands. If the default
+    provide the option `--filesystem <filesystem>` to the workspace commands. If the default
     filesystems is the one you want to work with, you can omit this option.
 
 ### List Current Workspaces
@@ -130,7 +118,7 @@ overview of some of these options. All available options can be queried by `ws_l
 === "Certain filesystem"
 
     ```console
-    marie@login$ ws_list --filesystem=walrus
+    marie@login$ ws_list --filesystem walrus
     id: marie-numbercrunch
         workspace directory  : /data/walrus/ws/marie-numbercrunch
         remaining time       : 89 days 23 hours
@@ -151,7 +139,7 @@ overview of some of these options. All available options can be queried by `ws_l
         expiration date      : Tue Mar  5 14:46:12 2024
         filesystem name      : scratch
         available extensions : 10
-        acctcode             : p_numbercrunch
+        acctcode             : p_number_crunch
         reminder             : Tue Feb 27 14:46:12 2024
         mailaddress          : marie@tu-dresden.de
     ```
@@ -240,10 +228,10 @@ Options:
 === "Specific filesystem"
 
     In order to allocate a workspace on a non-default filesystem, the option
-    `--filesystem=<filesystem>` is required.
+    `--filesystem <filesystem>` is required.
 
     ```console
-    marie@login$ ws_allocate --filesystem=walrus test-workspace 99
+    marie@login$ ws_allocate --filesystem walrus test-workspace 99
     Info: creating workspace.
     /lustre/ssd/ws/marie-test-workspace
     remaining extensions  : 2
@@ -258,7 +246,7 @@ Options:
     day starting 7 days prior to expiration. We strongly recommend setting this e-mail reminder.
 
     ```console
-    marie@login$ ws_allocate --reminder=7 --mailaddress=marie@tu-dresden.de test-workspace 99
+    marie@login$ ws_allocate --reminder 7 --mailaddress marie@tu-dresden.de test-workspace 99
     Info: creating workspace.
     /horse/ws/marie-test-workspace
     remaining extensions  : 10
@@ -311,7 +299,7 @@ workspace is not forgotten.
 An e-mail reminder can be set at workspace allocation using
 
 ```console
-ws_allocate --reminder=<N> --mailaddress=<mail> [...]
+ws_allocate --reminder <N> --mailaddress <your.email>@tu-dresden.de [...]
 ```
 
 This will send an e-mail every day starting `N` days prior to the expiration date.
@@ -321,25 +309,31 @@ If you missed setting an e-mail reminder at workspace allocation, you can add a
 
 ```
 # initial allocation
-marie@login$ ws_allocate --name=FancyExp --duration=17
+marie@login$ ws_allocate --name test-workspace --duration 17
 [...]
 # add e-mail reminder
-marie@login$ ws_allocate --name=FancyExp --duration=17 --reminder=7 --mailaddress=marie@dlr.de
+marie@login$ ws_allocate --name test-workspace --duration 17 --reminder 7 --mailaddress <your.email>@tu-dresden.de
 --extension
 ```
 
 This will reallocate the workspace, which counts against your maximum number of reallocations (Note:
 No data is deleted, but the database entry is modified).
 
-#### Send Calender Invitation
+#### Send Calendar Invitation
 
-The command `ws_send_ical` sends you an ical event on the expiration date of a specified workspace. This
-   calender invitation can be further managed according to your personal preferences. The syntax is
-   as follows:
+The command `ws_send_ical` sends you an ical event on the expiration date of a specified workspace.
+This calendar invitation can be further managed according to your personal preferences.
+The syntax is as follows:
 
-   ```console
-   ws_send_ical [--filesystem <filesystem>] --mail <e-mail-address> --workspace <workspace name>
-   ```
+```console
+ws_send_ical [--filesystem <filesystem>] --mail <mail address> --workspace <workspace name>
+```
+
+E.g.
+
+```console
+ws_send_ical --filesystem horse --mail <your.email>@tu-dresden.de --workspace test-workspace
+```
 
 ### Deletion of a Workspace
 
@@ -347,7 +341,7 @@ To delete a workspace use the `ws_release` command. It is mandatory to specify t
 workspace and the filesystem in which it is allocated:
 
 ```console
-marie@login$ ws_release --filesystem=horse --name=test-workspace
+marie@login$ ws_release --filesystem horse --name test-workspace
 ```
 
 You can list your already released or expired workspaces using the `ws_restore --list` command.
@@ -414,7 +408,7 @@ to get a list of your expired workspaces, and then restore them like that into a
 workspace 'new_ws':
 
 ```console
-marie@login$ ws_restore --filesystem=horse marie-test-workspace-1701873807 new_ws
+marie@login$ ws_restore --filesystem horse marie-test-workspace-1701873807 new_ws
 ```
 
 The expired workspace has to be specified by its full name as listed by `ws_restore --list`,
@@ -487,9 +481,9 @@ the following example (which works [for the program g16](../software/nanoscale_s
     RESULT_WSDIR="/path/to/workspace-experiments-results"
     test -z "${RESULT_WSDIR}" && echo "Error: Cannot find workspace ${RESULT_WSDIR}" && exit 1
 
-    # Allocate workspace for this job. Adjust time span to time limit of the job (-d <N>).
+    # Allocate workspace for this job. Adjust time span to time limit of the job (--duration).
     WSNAME=computation_$SLURM_JOB_ID
-    export WSDDIR=$(ws_allocate --filesystem=ssd --name=${WSNAME} --duration=2)
+    export WSDDIR=$(ws_allocate --filesystem ssd --name ${WSNAME} --duration 2)
     echo ${WSDIR}
 
     # Check allocation
@@ -532,7 +526,7 @@ For a series of jobs or calculations that work on the same data, you should allo
 once, e.g., in `horse` for 100 days:
 
 ```console
-marie@login$ ws_allocate --filesystem=horse my_scratchdata 100
+marie@login$ ws_allocate --filesystem horse my_scratchdata 100
 Info: creating workspace.
 /data/horse/ws/marie-my_scratchdata
 remaining extensions  : 10
@@ -562,7 +556,7 @@ that this is mounted read-only on the compute nodes, so you cannot use it as a w
 your jobs!
 
 ```console
-marie@login$ ws_allocate --filesystem=walrus my_inputdata 100
+marie@login$ ws_allocate --filesystem walrus my_inputdata 100
 /data/walrus/ws/marie-my_inputdata
 remaining extensions  : 2
 remaining time in days: 100
@@ -612,7 +606,7 @@ to others (if in the same group) via `ws_list -g`.
     in the project `p_number_crunch`, she can allocate a so-called group workspace.
 
     ```console
-    marie@login$ ws_allocate --group --name=numbercrunch --duration=30
+    marie@login$ ws_allocate --group --name numbercrunch --duration 30
     Info: creating workspace.
     /data/horse/ws/marie-numbercrunch
     remaining extensions  : 10
@@ -675,8 +669,15 @@ e-mail alert functionality to an existing workspace?
 **A**: You can add the e-mail alert by "overwriting" the workspace settings via
 
 ```console
-marie@login$ ws_allocate --extension --mailaddress=<mail address> --reminder=<days> \
-             --name=<workspace-name> --duration=<duration> --filesystem=<filesystem>
+marie@login$ ws_allocate --extension --mailaddress <mail address> --reminder <days> \
+             --name <workspace-name> --duration <duration> --filesystem <filesystem>
+```
+
+E.g.
+
+```console
+marie@login$ ws_allocate --extension --mailaddress <your.email>@tu-dresden.de --reminder 7 \
+             --name numbercrunch --duration 20 --filesystem horse
 ```
 
 This will lower the remaining extensions by one.
diff --git a/doc.zih.tu-dresden.de/docs/software/containers.md b/doc.zih.tu-dresden.de/docs/software/containers.md
index f15caa5c8fbade1ec026c55d64a214da679cc6f1..2801165ab2832643d166e450c66e5331be0501c8 100644
--- a/doc.zih.tu-dresden.de/docs/software/containers.md
+++ b/doc.zih.tu-dresden.de/docs/software/containers.md
@@ -34,9 +34,9 @@ environment.
 However, new containers can be created on your local workstation and moved to ZIH systems for
 execution. Follow the instructions for [locally installing Singularity](#local-installation) and
 [container creation](#container-creation). Moreover, existing Docker container can easily be
-converted, see [Import a docker container](#import-a-docker-container).
+converted, see [Import a Docker container](#import-a-docker-container).
 
-If you are already familiar with Singularity, you might be more interested in our [singularity
+If you are already familiar with Singularity, you might be more interested in our [Singularity
 recipes and hints](singularity_recipe_hints.md).
 
 ### Local Installation
@@ -119,7 +119,7 @@ where you choose the base and
 [sections](https://sylabs.io/guides/3.2/user-guide/definition_files.html#sections)
 where you install your software.
 
-The most common approach is to start from an existing docker image from DockerHub. For example, to
+The most common approach is to start from an existing Docker image from DockerHub. For example, to
 start from an [Ubuntu image](https://hub.docker.com/_/ubuntu) copy the following into a new file
 called `ubuntu.def` (or any other filename of your choice)
 
@@ -166,8 +166,8 @@ https://github.com/singularityware/singularity/tree/master/examples.
 !!! hint
 
     As opposed to bootstrapping a container, importing from Docker does **not require root
-    privileges** and therefore works on ZIH systems directly. Please note, that the singularity commands
-    are only available on the compute nodes and not on the login nodes.
+    privileges** and therefore works on ZIH systems directly. Please note, that the Singularity
+    commands are only available on the compute nodes and not on the login nodes.
 
 You can import an image directly from the Docker repository (Docker Hub):
 
@@ -175,7 +175,7 @@ You can import an image directly from the Docker repository (Docker Hub):
 marie@compute$ singularity build my-container.sif docker://ubuntu:latest
 ```
 
-Creating a singularity container directly from a local docker image is possible but not
+Creating a Singularity container directly from a local Docker image is possible but not
 recommended. The steps are:
 
 ```console
@@ -210,7 +210,7 @@ marie@local$ pip3 install -U spython
 ```
 
 With this you can simply issue the following command to convert a Dockerfile in the current folder
-into a singularity definition file:
+into a Singularity definition file:
 
 ```console
 marie@local$ spython recipe Dockerfile myDefinition.def
@@ -265,9 +265,9 @@ marie@compute$ singularity shell my-container.sif
     ```
 
 You can write into those folders by default. If this is not desired, add an `:ro` for read-only to
-the bind specification (e.g. `-B /data/horse:/data/horse:ro\`).  Note that we already defined bind paths
-for `/data/horse`, `/projects` and `/sw` in our global `singularity.conf`, so you needn't use the `-B`
-parameter for those.
+the bind specification (e.g. `-B /data/horse:/data/horse:ro\`).  Note that we already defined bind
+paths for `/data/horse`, `/projects` and `/sw` in our global `singularity.conf`, so you needn't use
+the `-B` parameter for those.
 
 If you wish to install additional packages, you have to use the `-w` parameter to
 enter your container with it being writable. This, again, must be done on a system where you have
@@ -339,7 +339,7 @@ Alternatively you can execute the container directly which is equivalent:
 marie@compute$ ./my-container.sif first_arg 2nd_arg
 ```
 
-With this you can even masquerade an application with a singularity container as if it was an actual
+With this you can even masquerade an application with a Singularity container as if it was an actual
 program by naming the container just like the binary:
 
 ```console
diff --git a/doc.zih.tu-dresden.de/docs/software/machine_learning.md b/doc.zih.tu-dresden.de/docs/software/machine_learning.md
index 451e5bb36262d7874118d5203d0fb6458df5f036..13a823e0fe7311469537f011416296b6c85dc116 100644
--- a/doc.zih.tu-dresden.de/docs/software/machine_learning.md
+++ b/doc.zih.tu-dresden.de/docs/software/machine_learning.md
@@ -85,7 +85,7 @@ the [PowerAI container](https://hub.docker.com/r/ibmcom/powerai/) DockerHub repo
 
 !!! note
 
-    You could find other versions of software in the container on the "tag" tab on the docker web
+    You could find other versions of software in the container on the "tag" tab on the Docker web
     page of the container.
 
 In the following example, we build a Singularity container with TensorFlow from the DockerHub and
diff --git a/doc.zih.tu-dresden.de/docs/software/singularity_recipe_hints.md b/doc.zih.tu-dresden.de/docs/software/singularity_recipe_hints.md
index 1dc36a50a8bd17556e08aea9458e6db31cf47d59..78cc40df749a52e809b8612dfb0464a24460a347 100644
--- a/doc.zih.tu-dresden.de/docs/software/singularity_recipe_hints.md
+++ b/doc.zih.tu-dresden.de/docs/software/singularity_recipe_hints.md
@@ -120,7 +120,7 @@ This will create the `ubuntu_mpich.sif` file that you have to copy to HPC system
 At the HPC system run as following:
 
 ```console
-marie@login$ srun -n 4 --ntasks-per-node 2 --time=00:10:00 singularity exec ubuntu_mpich.sif /opt/mpitest
+marie@login$ srun ---nodes=4 --ntasks-per-node=2 --time=00:10:00 singularity exec ubuntu_mpich.sif /opt/mpitest
 ```
 
 ### CUDA + CuDNN + Open MPI
diff --git a/doc.zih.tu-dresden.de/docs/software/virtual_machines.md b/doc.zih.tu-dresden.de/docs/software/virtual_machines.md
index d8391dc2d0eed5e5ff71ac4f2d25f8e85c2cbd67..ff8ab1123061787fcd2d4f7b6f29f0790658e05b 100644
--- a/doc.zih.tu-dresden.de/docs/software/virtual_machines.md
+++ b/doc.zih.tu-dresden.de/docs/software/virtual_machines.md
@@ -8,7 +8,7 @@ and a compatible kernel. If some of these requirements cannot be fulfilled, then
 option of using the provided virtual machines (VM) on ZIH systems.
 
 Currently, starting VMs is only possible on the cluster `power` (and `hpdlf`?). The VMs on the power
-nodes are used to build singularity containers for the Power9 architecture and the HPDLF nodes to
+nodes are used to build Singularity containers for the Power9 architecture and the HPDLF nodes to
 build Singularity containers for the x86 architecture.
 
 ## Create a Virtual Machine
diff --git a/doc.zih.tu-dresden.de/docs/support/support.md b/doc.zih.tu-dresden.de/docs/support/support.md
index fb8d7b4d164b92fe7e6cd86fb8fcdb621e425bc4..03300750807f6ee9630065117dbdbcd07d509fa3 100644
--- a/doc.zih.tu-dresden.de/docs/support/support.md
+++ b/doc.zih.tu-dresden.de/docs/support/support.md
@@ -36,4 +36,4 @@ We offer an open Q&A session for users of the NHR@TUD-Computing-Clusters. It is
 Mondays from 1.30 - 2.30 pm.
 
 * Event page: [https://tu-dresden.de/zih/qa-sessions-nhr-at-tud](https://tu-dresden.de/zih/qa-sessions-nhr-at-tud)
-* [Import the event series to your calender](https://tu-dresden.de/zih/die-einrichtung/termine/termine/qa-session-nhr-at-tud/ics_view).
+* [Import the event series to your calendar](https://tu-dresden.de/zih/die-einrichtung/termine/termine/qa-session-nhr-at-tud/ics_view).
diff --git a/doc.zih.tu-dresden.de/util/check-templated-code-snippets.py b/doc.zih.tu-dresden.de/util/check-templated-code-snippets.py
index da42efaca3577c010e66a6d7ca2d9e6369e4a5a5..ffbb0659447c76927f4d321b6df6f3ea19797244 100755
--- a/doc.zih.tu-dresden.de/util/check-templated-code-snippets.py
+++ b/doc.zih.tu-dresden.de/util/check-templated-code-snippets.py
@@ -1,10 +1,12 @@
 #!/usr/bin/env python
-#-*- coding: utf-8 -*-
+# -*- coding: utf-8 -*-
 import re
 import sys
 
+
 def escapeSomeSigns(someString):
-    return someString.replace("\\", "\\\\").replace("$", "\\$").replace("(", "\\(").replace(")", "\\)").replace("*", "\\*")
+    return someString.translate({i: '\\' + chr(i) for i in b'\\$()*[]'})
+
 
 fileName = sys.argv[1]
 print("FILE: " + fileName)
@@ -12,8 +14,9 @@ lines = []
 NORMAL_MODE = 0
 CODE_MODE = 1
 readMode = NORMAL_MODE
-#We need to avoid matches for "#include <iostream>", "<Ctrl+D>", "<-" (typically in R) and "<594>" (VampirServer)
-pattern = re.compile(r"(?<!#include )<(?!Ctrl\+)[^0-9 -][^<>']*>")
+# We need to avoid matches for "#include <iostream>", <your.email>@tu-dresden.de,
+# "<Ctrl+D>", "<-" (typically in R) and "<594>" (VampirServer)
+pattern = re.compile(r"(?<!#include )<(?!your.email|Ctrl\+)[^0-9 -][^<>']*>")
 try:
     with open(fileName) as f:
         lineNumber = 1
@@ -22,22 +25,26 @@ try:
                 # toggle read mode if we find a line with ```, so that we know that we are in a code block or not
                 readMode = CODE_MODE if readMode == NORMAL_MODE else NORMAL_MODE
             strippedLine = line.strip()
-            # We want tuples with lineNumber, the line itself, whether it is a code line, whether it contains a template (e. g. <FILENAME>) and the line again with all templats replaced by '\\S'
-            lines.append((lineNumber, strippedLine, readMode, pattern.search(strippedLine) != None, pattern.sub(r"\\S*", escapeSomeSigns(strippedLine))))
+            # We want tuples with lineNumber, the line itself, whether it is a code line, whether it contains a template (e. g. <FILENAME>)
+            lines.append((lineNumber, strippedLine, readMode, pattern.search(strippedLine) is not None))
             lineNumber += 1
 except FileNotFoundError:
     print("  File not found, probably deleted")
 # those tuples with the CODE_MODE as field 2 represent code lines
-codeLines = list(filter(lambda line: line[2] == CODE_MODE, lines))
-# we take line number, the line and a regular expression from the those code lines which contain a template, call them templatedLines
-templatedLines = list(map(lambda line: (line[0], line[1], re.compile(line[4])), filter(lambda line: line[3], codeLines)))
+codeLines = [line for line in lines if line[2] == CODE_MODE]
+# From the code lines which contain a template we take
+# line number, the line, and a regular expression of the line with all templates replaced by '\S'
+templatedLines = [(lineNumber, line, re.compile(pattern.sub(r"\\S*", escapeSomeSigns(line))))
+                  for lineNumber, line, _, isTemplate in codeLines if isTemplate]
 allPatternsFound = True
-for templateLine in templatedLines:
-    # find code lines which have a higher line number than the templateLine, contain no template themselves and match the pattern of the templateLine
-    matchingCodeLines = list(filter(lambda line: (line[0] > templateLine[0]) and (not line[3]) and (templateLine[2].match(line[1]) != None), codeLines))
-    if len(matchingCodeLines) == 0:
+for templateLineNum, templateLine, templateRegex in templatedLines:
+    # find code lines which have a higher line number than the templateLine,
+    # contain no template themselves and match the pattern of the templateLine
+    matchingCodeLines = (lineNumber > templateLineNum and not isTemplate and templateRegex.match(line) is not None
+                         for lineNumber, line, _, isTemplate in codeLines)
+    if not any(matchingCodeLines):
         allPatternsFound = False
-        print("  Example for \"" + templateLine[1] + "\" (Line " + str(templateLine[0]) + ") missing")
+        print("  Example for \"" + templateLine + "\" (Line " + str(templateLineNum) + ") missing")
 
 if not allPatternsFound:
     sys.exit(1)