diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000000000000000000000000000000000000..8ced855367b2e7c00a8eca0dc70f68c06f0df042
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,66 @@
+# Contribution guidelines for DuMu<sup>x</sup>
+
+DuMu<sup>x</sup> and DUNE are community projects and we are happy about all forms of external contributions.
+Here are many easy things that you can do, like
+
+* read the documentation and tell us where and how it should be improved,
+* try to install DuMu<sup>x</sup> on your platform and report bugs if it doesn’t work,
+* fix bugs and open merge requests or send us patches.
+
+If you decide to contribute code please read this contribution guide.
+
+## Style guide
+When contributing code to DuMu<sup>x</sup> please follow the [style guide](doc/styleguide.md). Your work will enjoy much smoother sailing if you stick to it with your changes. DuMu<sup>x</sup> is a pretty large project, and a consistent way of doing things really helps a lot when trying to find your way around the code.
+
+## Contributing
+
+You should get your changes to us in the following way:
+
+* Get an account for our GitLab instance (you might need to contact us if you can't create projects at first login).
+* Fork the core module that you want to contribute to, just as you would do on GitHub.
+* Push your changes to your fork on some branch.
+* Open a merge request using the branch you pushed your changes to as the source branch and the master of the DuMu<sup>x</sup> repository
+  as the target branch. GitLab will usually ask you about opening a merge request if you browse it right after pushing to some branch.
+* Follow the discussion on the merge request to see what improvements should be done to the branch before merging.
+* If you have developer status you don't need to do a fork and you can create branches directly.
+
+If you have any questions or complaints about this workflow of contributing to DuMu<sup>x</sup>, please ask on the
+[DuMu<sup>x</sup> mailing list](https://listserv.uni-stuttgart.de/mailman/listinfo/dumux).
+
+## Git
+* Use Git to your advantage!
+* Check out this [great tutorial](https://www.atlassian.com/git/tutorials/setting-up-a-repository) in order to learn how to use it.
+* Also check out [Dune's Git best practices](https://www.dune-project.org/doc/guides/git_best_practices/).
+* Everything should compile after every single commit.
+* Make small commits with changes limited to a single issue / change.
+* Format commit messages as follows:
+
+    ```
+    [topic] Brief description of the change
+
+    Long description containing the status quo,
+    the changes the commit introduces and why.
+    ```
+
+    where `topic` is usually a foldername, `[assembly]`, a model `[2p2c]`, or any other topic, e.g. `[cmake]`.
+
+* Use `git rebase -i master` to update branches to the changes on the master branch.
+* Feature branches should be called `feature/my-bla-feature`.
+* Bugfix branches should be called `fix/issue-554`.
+* Cleanup branches should be called `cleanup/remove-deprecated-bla`.
+* Use lower case letters only, and hyphens to separate things.
+
+## GitLab
+* Open issues for bugs / discussions / feature requests.
+* Give issues a meaningful title, focus each issue on a single topic, describe what the problem is and what you tried.
+* Open merge request for changes to be merged into master or other branches. Pushing to master is disabled.
+* Give merge requests a meaningful title, describe what the problem is, how this is fixed with this merge request.
+* If you don't have the permissions to open branches, you might have permissions to do a fork in your own GitLab namespace and open a merge request from your fork into the dumux repository.
+* Merge requests get reviewed by at least one main developer.
+* If continuous integration (GitLabCI / BuildBot) is enabled for merge requests, the pipeline has to pass before merging anything to master.
+
+## Patches
+
+* Patches can be supplied via the mailing list,
+* should be formatted with git format-patch.
+* TODO: How to format patches
diff --git a/doc/handbook/4_guidelines.tex b/doc/handbook/4_guidelines.tex
index aafaedfe13428b15b400bb6949fbf381a48179b8..a815a27197c9c883826c1b7460c2b729db45d3b0 100644
--- a/doc/handbook/4_guidelines.tex
+++ b/doc/handbook/4_guidelines.tex
@@ -2,125 +2,5 @@
 \label{sc_guidelines}
 Writing code in a readable manner is very important, especially
 for future code developers (e.g. for adding features, debugging, etc.).
-This section is inspired by the DUNE coding guidelines
-\url{https://www.dune-project.org/dev/codingstyle/}, which is strongly recommended.
-
-\subsection{Documentation:}
-Please document freely what each part of your code \emph{should} do. All comments/documentation
-is in English.
-We proclaim the Doc-Me Dogma, which means whatever you do, please document
-it at least with:
-\begin{lstlisting}[style=DumuxCode]
-  \todo Please doc me!
-\end{lstlisting}
-That way at least the absence of documentation is documented, and it is easier
-to get rid of it systematically.
-In the following we will describe several ways for
-commenting code in \Dumux.\\
-There are four ways to comment a \textbf{single line} of code:
-\begin{lstlisting}[style=DumuxCode]
-Line of code 1 // Short comment on line of code 1 that will not show in doxygen
-Line of code 2 //!< Short comment on line of code 2 that will show in doxygen
-//! Short comment on the following line (line of code 3) that will show in doxygen
-Line of code 3
-/*!
- * Longer comment on line of code 4
- * with several lines of length
- * that will show in doxygen
- */
-Line of code 4
-\end{lstlisting}
-The third and fourth of the above shown options can also be used to document functions with
-neither method parameters nor return value.\\
-For doxygen to be able to group the \textbf{files} correctly, please add before the headerguard:
-\begin{lstlisting}[style=DumuxCode]
-/*!
- * \file
- * \ingroup GroupName
- * \brief A short description of the file.
- */
-
-#ifndef HEADERGUARD
-#define HEADERGUARD
-\end{lstlisting}
-For doxygen to be able to group the \textbf{classes} correctly, please add before each class:
-\begin{lstlisting}[style=DumuxCode]
-/*!
- * \ingroup GroupName
- * \brief A short description of the class.
- *
- * Optional detailed description of the class
- * over several lines.
- */
-template <class TypeTag>
-\end{lstlisting}
-For an overview over all available groups and to add new groups please
-see the file\\ \texttt{doc/doxygen/modules.txt} from the \texttt{dumux} module.\\
-Please add before each \textbf{function} with method parameters or return value:
-\begin{lstlisting}[style=DumuxCode]
-/*!
- * \brief A short description of the function.
- *
- * Optional detailed description of the function
- * over several lines.
- *
- * \param paramName Very short description of paramName
- * \return returnName Very short description of returnName
- */
-paramType functionName(paramType paramName)
-{
-   ...
-   return returnName
-}
-\end{lstlisting}
-Furthermore, please comment \textit{all}:
-\begin{itemize}
-  \item Template Parameters
-  \item Exceptions thrown by a method
-  \item Method parameters which are not self-explanatory should always
-        have a meaningful comment at calling sites. Example:
-  \begin{lstlisting}[style=DumuxCode]
-    localResidual.eval(/*includeBoundaries=*/true);
-  \end{lstlisting}
-\end{itemize}
-
-\subsection{Naming:}
-To avoid duplicated types or variables and for a better understanding and usability
-of the code we have the following naming conventions:
-\begin{itemize}
-\item \textbf{Variables/Functions \ldots}
-  \begin{itemize}
-  \item start in \emph{lower} case and contain letters.
-  \item \emph{CamelCase}: if the name consists of  several words, then
-        the first letter of a new word is capital.
-  \item \emph{Self-Explaining}: in general abbreviations should be avoided (write saturation in stead of S)
-  \item \emph{Abbreviations}: If and only if a single letter that represents an
-         abbreviation or index is followed by a single letter (abbreviation or index),
-         CamelCase is \textbf{not} used. An inner-word underscore is only permitted if
-         it symbolizes a fraction line. Afterwards, we continue with lower case, i.e.
-         the common rules apply to both enumerator and denominator. Examples:
-  \begin{itemize}
-      \item \texttt{pw} but \texttt{pressureW} $\rightarrow$ because ``pressure'' is a word.
-      \item \texttt{srnw} but \texttt{sReg} $\rightarrow$ because ``reg'' is not an
-            abbreviation of a single letter. ``n'' abbreviates ``non'',
-             ``w'' is ``wetting'', so not CamelCase.
-      \item \texttt{pcgw} but \texttt{dTauDPi} $\rightarrow$ Both ``Tau'' and ``Pi''
-            are words, plus longer than a letter.
-      \item \textbf{But:} \texttt{CaCO3} The only exception: chemical formulas are
-            written in their chemically correct way $\rightarrow$ \texttt{CaCO3}
-  \end{itemize}
-  \end{itemize}
-\item \textbf{Private Data Variables:} Names of private data variables end with an
-      underscore and are the only variables that contain underscores.
-\item \textbf{Type names:} For type names, the same rules as for variables apply. The
-      only difference is that the \emph{first letter is capital}.
-\item \textbf{Files:} File names should consist of \emph{lower case} letters
-      exclusively. Header files get the suffix \texttt{.hh}, implementation files the
-      suffix \texttt{.cc}
-\item \textbf{The Exclusive-Access Macro:} Every header file traditionally begins
-      with the definition of a preprocessor constant that is used to make sure that
-      each  header file is only included once. If your header file is called
-      'myheaderfile.hh', this constant should be DUMUX\_MYHEADERFILE\_HH.
-\item \textbf{Macros:} The use of preprocessor macros is strongly discouraged. If you
-      have to use them for whatever reason, please use capital letters only.
-\end{itemize}
+For the style guide and instructions how to contribute to \Dumux visit
+\url{https://git.iws.uni-stuttgart.de/dumux-repositories/dumux/blob/master/CONTRIBUTING.md}.
diff --git a/doc/styleguide.md b/doc/styleguide.md
new file mode 100644
index 0000000000000000000000000000000000000000..496508780f49e74e8591875fbf3fec186cb428a0
--- /dev/null
+++ b/doc/styleguide.md
@@ -0,0 +1,232 @@
+# Style guide
+
+This style guide is taken, modified and enhanced from [DUNE](https://dune-project.org/dev/codingstyle/).
+
+## General formatting
+
+* Use 4 spaces indent (no tabs, not 2 spaces).
+* _Trailing whitespace_: source files may not contain trailing whitespace to reduce
+  the amount of noise in diffs and during merges.
+* In contrast to the remainder of the coding style guidelines, these code formatting
+  rules are (partially) enforced automatically with a pre-commit hook. Due to the
+  distributed nature of Git, this hook can only check your commits once they arrive
+  in the central repository, so it is important to make your local Git repository check
+  your commits as well. The dunecontrol script will automatically install such a pre-commit
+  hook for you.
+
+
+## C++
+
+### Documentation
+
+* Please document freely what each part of your code _should_ do. Document assumptions.
+* All comments/documentation in English.
+* We proclaim the Doc-Me dogma, which means whatever you do, please document it at least with
+
+    ```c++
+    //! \todo Please doc me!
+    ```
+
+* We use Doxygen to generate documentation from the source code
+
+    ```c++
+    int lineOfCode = 1; // Short comment on line of code 1 that will _not_ show in doxygen
+    int lineOfCode = 2; //!< Short comment on line of code 2 that will show in doxygen
+    //! Short comment on the following line (line of code 3) that will show in doxygen
+    int lineOfCode = 3;
+    /*!
+     * Longer comment on line of code 4
+     * with several lines of length
+     * that will show in doxygen
+     */
+    int lineOfCode = 4;
+    ```
+
+* Files always contain the following documentation header before the headerguard:
+
+    ```c++
+    /*!
+     * \file
+     * \ingroup GroupName
+     * \brief A short description of the file.
+     */
+    #ifndef DUMUX_HEADERGUARD_HH
+    #define DUMUX_HEADERGUARD_HH
+    ```
+
+    where `GroupName` is a doxygen module group, click [here](https://git.iws.uni-stuttgart.de/dumux-repositories/dumux/blob/master/doc/doxygen/modules.txt) for an overview of existing groups.
+
+* Each class should be documented using the following style:
+
+    ```c++
+    /*!
+     * \ingroup GroupName
+     * \brief A short description of the class.
+     *
+     * Optional detailed description of the class
+     * over several lines.
+     *
+     * \tparam T very short description of the template parameter T
+     */
+    template<class T>
+    class MyClass {};
+    ```
+
+* Each free function and class member function should be documented using the following style:
+
+    ```c++
+    /*!
+     * \brief A short description of the function.
+     *
+     * Optional detailed description of the function
+     * over several lines.
+     *
+     * \tparam paramType Very short description of paramType
+     * \param paramName Very short description of paramName
+     * \return returnName Very short description of returnName
+     */
+    template<typename paramType>
+    paramType functionName(const paramType& paramName)
+    {
+      ...
+      return returnName
+    }
+    ```
+
+* Also document non-obvious function parameters at call site:
+
+    ```c++
+    localResidual.eval(/*includeBoundaries=*/true);
+    ```
+
+* Possible exceptions thrown by a function.
+
+### Naming schemes
+
+* Avoid abbreviation, i.e. write `saturation` instead of `s`.
+
+
+#### Variables / Functions
+
+* CamelCase starting with a lower case letter, each new word starting with a capital letter.
+* No underscores (except private data members, see below).
+* Exception: If and only if a single letter that represents an
+             abbreviation or index is followed by a single letter (abbreviation or index),
+             CamelCase is __not__ used.
+* Examples:
+    - `pw` but `pressureW`, because "pressure" is a word.
+    - `srnw` but `sReg`, because "Reg" is not an abbreviation consisting of a single letter.
+    - `pcgw` but `dTauDPi`, because "Tau" and "Pi" are words and longer than one letter.
+    - `CaCO3`, because we write chemical formulas in their chemically sensible way.
+
+* Private data members end with an underscore.
+
+#### Typenames / Classes / Aliases / Namespaces
+
+* Same rules as for variables, except the first letter is capital.
+
+
+#### Filenames / Folders
+
+* Lower case letters (filenames, but not foldernames may contain underscores).
+* Header files get the suffix `.hh`, implementation files the suffix `.cc`.
+* Every header file contains a unique header guard. The name should mimic the folder structure and contain the filename,
+  i.e. for a file `common/myfile.hh` it should be
+
+    ```c++
+    #ifndef DUMUX_COMMON_MYFILE_HH
+    #define DUMUX_COMMON_MYFILE_HH
+    ```
+
+#### Macros
+* The use of preprocessor macros is strongly discouraged. If you have to use them for whatever reason, please use capital letters only.
+
+
+### Indent
+
+* The default indent is 4 spaces (no tabs, not 2 spaces).
+
+### Formatting
+
+* Curly brackets that open or close a scope are on a separate line (except for [namespaces](#Namespaces)).
+* There should be a space between `if`,`else if`,`switch` and the condition.
+* `if`,`else if`,`switch` can omit brackets if the expression is only one line.
+
+    ```c++
+    // comment for if block, space between if and (enableGravity)
+    if (enableGravity)
+    {
+        Scalar b = 1.0;
+        return b*gravity_[dimWorld-1];
+    }
+
+    // comment for else-block
+    else
+        return 1.0; // ok, one-liner
+    ```
+
+### Namespaces
+
+* Open curly brackets on the same line.
+* Do not indent the code inside the namespace.
+* Comment closing curly brackets uniquely.
+
+    ```c++
+    namespace Dumux {
+    namespace Properties {
+
+    bool here = true;
+        bool nothere = false; // not like this
+
+    } // end namespace Properties
+    } // end namespace Dumux
+    ```
+
+* Use a `Detail` namespace for hiding implementation details, e.g. for template meta programming.
+
+### Includes
+
+* Space between `#include` and path.
+* C++ standard library includes first, then Dune, then others, then DuMu<sup>x</sup>.
+* Always use project relative paths.
+    - Exception: the other header is in the same folder and closely related (`#include "volumevariables.hh"`).
+
+    ```c++
+    #include <type_traits>
+    #include <dune/common/fvector.hh>
+    #include <dumux/common/exceptions.hh>
+    ```
+
+### Property system
+
+* Prefer class templates with regular template arguments over class templates with a `TypeTag` as template argument.
+
+### Exception
+
+* The use of exceptions for error handling is encouraged.
+* There is a variety of DuMu<sup>x</sup> and Dune-specific exceptions you can throw.
+* All derive (possibly indirectly) from the class `Dune::Exception` in dune-common.
+
+
+
+## Files and folders
+
+* Try to order your new header into the existing directory structure.
+* Headers are named like the classes they contain (usually one class per file, exception: closely tied helper classes / functions).
+* Headers are named lower case only (using underscores only if absolutely necessary for readability).
+* Folder names are lower case only.
+* Tests should be called after model and discretization scheme using underscores and lower case only, e.g.
+
+    ```
+    test_1p_tpfa
+    test_2p2c_box_infiltration
+    ```
+
+## CMake
+
+* Use named arguments only.
+* TODO
+
+## Python
+
+* TODO