diff --git a/doc/contributing.rst b/doc/contributing.rst
index ac0a15f3733e58afcf3c8aaaceeae0e9fa25343a..832af70cc2e46a71d3850967a075a8f423ece6d8 100644
--- a/doc/contributing.rst
+++ b/doc/contributing.rst
@@ -23,7 +23,6 @@ tell you for which branch you went, a story of failure otherwise.
 
    $ git checkout develop
    Switched to branch 'develop'
-   $
 
 Sitting on top of the right code basis, you should just spawn your own branch
 from it. As an example, your feature will go by the name of 'sidechain'.
@@ -32,7 +31,6 @@ from it. As an example, your feature will go by the name of 'sidechain'.
 
    $ git checkout -b sidechain
    Switched to a new branch 'sidechain'
-   $
 
 This time, |git| should tell you about going for **a new** branch.
 
@@ -42,7 +40,6 @@ install our very own |git| hook to check some coding rules on commit.
 .. code-block:: console
 
    $ cp extras/pre_commit/pre-commit .git/hooks/
-   $
 
 With that in place, changes which break our coding standards will abort any
 commit.
@@ -55,7 +52,6 @@ list of directories which are likely to be used in every project.
    $ mkdir -p sidechain/doc
    $ mkdir -p sidechain/pymod
    $ mkdir -p sidechain/tests
-   $
 
 If you run ``git status`` at this point, you will see basically nothing. That
 is, |git| does not admire empty directories. Before you bring your module under
@@ -66,7 +62,6 @@ version control, create a couple of files which are always needed.
    $ touch sidechain/pymod/__init__.py
    $ echo ":mod:\`~promod3.sidechain\` - ProMod3 side chain optimiser" >> sidechain/doc/index.rst
    $ echo "================================================================================" >> sidechain/doc/index.rst
-   $
 
 Having an empty :file:`__init__.py` is perfectly fine for |python|, it just
 announces a directory as a module. But a blank :file:`index.rst` has the chance
@@ -82,7 +77,6 @@ extending some around the directory root.
    $ touch sidechain/CMakeLists.txt
    $ touch sidechain/pymod/CMakeLists.txt
    $ touch sidechain/doc/CMakeLists.txt
-   $
 
 Each of those files still needs a bit of content. The simplest one comes from
 the module's root, :file:`sidechain/CMakeLists.txt`:
@@ -182,7 +176,6 @@ will not show up in ``git status``.
 
    $ mkdir build
    $ cd build
-   $
 
 To actually create all the makefiles and generated files, you may use one of
 the configuration scripts from the :file:`conf-scripts` directory. Usually
@@ -255,6 +248,8 @@ Note how we listed the test data that we require in the unit test by defining
 Now tests should be available by ``make check``, ``make codetest`` and
 ``make test_reconstruct_sidechains.py_run``.
 
+.. _how-to-start-your-own-action:
+
 --------------------------------------------------------------------------------
 How To Start Your Own Action
 --------------------------------------------------------------------------------
@@ -463,6 +458,8 @@ the ``doctest`` and ``linkcheck`` targets. Alternatively you can run:
   will provide you with a target ``test_awesome_feature.py_run``. If your module
   has |C++| tests, those will be available by ``test_suite_your_module_run``.
 
+.. _writing-documentation:
+
 --------------------------------------------------------------------------------
 Writing Documentation
 --------------------------------------------------------------------------------
@@ -483,7 +480,8 @@ documentation, here is a helpful list of standard formatters:
 http://sphinx-doc.org/markup/inline.html
 
 If you write new functionality for |project|, or fix bugs, feel free to extend
-the Changelog. It will be automatically pulled into the documentation.
+the :file:`CHANGELOG` file. It will be automatically pulled into the
+documentation.
 
 It is highly recommended to add code examples with your documentation. For that
 purpose, you should write a fully runnable script, which is to be placed in the
@@ -519,6 +517,18 @@ codes for examples). A few more guidelines for example codes:
   the external dependencies are not available, output a warning and skip the
   test.
 
+A copy of the generated html documentation is kept in :file:`doc/html` so that
+there is no need to compile |project| to read it. Our policy is to keep that
+folder in-sync with the latest documentation at least on the ``master`` branch
+(i.e. for every release). You can use the following commands to do the update:
+
+.. code-block:: console
+
+   $ cd <PROMOD3_PATH>/build
+   $ make html
+   $ rsync -iv -az --exclude=".*" --delete \
+           "stage/share/promod3/html/" "../doc/html"
+
 --------------------------------------------------------------------------------
 Third Party Contributions (License Issues)
 --------------------------------------------------------------------------------
diff --git a/doc/dev_setup.rst b/doc/dev_setup.rst
index ea7f1c86cc352fab623b30a94e1d5ee4690fb8a2..3b450accf0a5cb18ada95e2e7b1ab6d0e35799dd 100644
--- a/doc/dev_setup.rst
+++ b/doc/dev_setup.rst
@@ -168,18 +168,18 @@ repository root. The directory structure of your module should look like this:
 .. code-block:: text
 
    promod3.git/                            Project folder
-         your_module/                      Directory housing your project
-               CMakeLists.txt              CMake configuration for this module
+         your_module/                      Module directory
+               CMakeLists.txt              CMake configuration
                data/                       Extra data (if needed)
                      CMakeLists.txt        CMake configuration
                      ...
                doc/                        Documentation
                      CMakeLists.txt        CMake configuration
-                     your_module.rst       Overview/ frame of your module
+                     your_module.rst       Overview/frame of your module
                      ...
                pymod/                      Python code
                      CMakeLists.txt        CMake configuration
-                     __init__.py           Init file needed for importing
+                     __init__.py           Init file needed for import
                      submodule1.py         Code
                      ...
                src/                        C/ C++ code
@@ -195,6 +195,20 @@ repository root. The directory structure of your module should look like this:
                      test_submodule1.py    Unit tests for submodule1
                      ...
 
+Additionally to the module directories there are a few extra folders:
+
+- :file:`actions`: Scripts callable as ``pm <ACTION_NAME>``.
+  See :ref:`here <how-to-start-your-own-action>` for details.
+- :file:`cmake_support`: Helper functions for |cmake|.
+  See :ref:`here <pm3-cmake-doc>` for details.
+- :file:`doc`: High-level documentation, test scripts (:file:`doc/tests`) and a
+  copy of the generated html documentation (:file:`doc/html`). The latter must
+  be kept up-to-date at least on the ``master`` branch.
+  See :ref:`here <writing-documentation>` for details.
+- :file:`extras`: Extra data and information that doesn't fit anywhere
+  else (e.g. |git| hooks or scripts to recreate the binary files).
+- :file:`scripts`: Input for scripts that end up in :file:`stage/bin`
+
 --------------------------------------------------------------------------------
 |cmake|
 --------------------------------------------------------------------------------