diff --git a/.gitignore b/.gitignore
index ab11f8441c1690ede967897c0e64745f9ad30f86..c30895c42d4a4bae9f1bea8750f63899102b2fa9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
+# -*- mode:conf; -*-
+
 # configuration files
 /conf/ext/*
 !/conf/core/*.template
@@ -11,8 +13,11 @@
 *.jks
 
 # typical build dirs
+build/
 bin/
 target/
+_apidoc/
+
 # But include server-side scripting
 !/scripting/bin
 
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c1afaf3f2a5274ff9e9a3083dbfd788e629709c0..6683c06a732486eadf4cdf44ace1a77621f3a8ed 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -41,6 +41,7 @@ build-testenv:
     - schedules
   script:
     - cd src/test/docker
+    - time docker load < /image-cache/caosdb-server-testenv.tar || true
     - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
       # use here general latest or specific branch latest...
     - docker pull $CI_REGISTRY_IMAGE || true
@@ -48,6 +49,8 @@ build-testenv:
       --pull
       --cache-from $CI_REGISTRY_IMAGE
       -t $CI_REGISTRY_IMAGE .
+    - docker save $CI_REGISTRY_IMAGE > image.tar;
+          mv image.tar /image-cache/caosdb-server-testenv.tar;
     - docker push $CI_REGISTRY_IMAGE
 
 # Test: run unit tests of the server
@@ -74,3 +77,21 @@ trigger_build:
       -F "variables[TriggerdBy]=SERVER"
       -F "variables[TriggerdByHash]=$CI_COMMIT_SHORT_SHA"
       -F ref=$DEPLOY_REF https://gitlab.indiscale.com/api/v4/projects/14/trigger/pipeline
+
+# Build the sphinx documentation and make it ready for deployment by Gitlab Pages
+# documentation:
+#   stage: deploy
+
+# Special job for serving a static website. See https://docs.gitlab.com/ee/ci/yaml/README.html#pages
+pages:
+  tags: [ cached-dind ]
+  stage: deploy
+  only:
+    - dev
+  script:
+    - echo "Deploying"
+    - make doc
+    - cp -r build/doc/html public
+  artifacts:
+    paths:
+      - public
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 129d02f3f1ddf0f9b74b66bf0feb377b3a39401d..7a3cfb6b73ea8d908b459ffe04c245d8163e2345 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 * New server property `SERVER_SIDE_SCRIPTING_BIN_DIRS` which accepts a comma or
   space separated list as values. The server looks for scripts in all
   directories in the order or the list and uses the first matching file.
+* Automated documentation builds: `make doc`
 
 ### Changed
 
diff --git a/makefile b/Makefile
similarity index 98%
rename from makefile
rename to Makefile
index 5c0e6cdda534c34f9f34109a008feac1d79312dc..d73f140f065ca0b3db62651e40162194f4ffb4eb 100644
--- a/makefile
+++ b/Makefile
@@ -128,3 +128,8 @@ stop-debug-screen:
 easy-units: .m2-local
 	mvn clean
 	mvn deploy:deploy-file -DgroupId=de.timmfitschen -DartifactId=easy-units -Dversion=0.0.1-SNAPSHOT -Durl=file:./.m2-local/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=./lib/easy-units-0.0.1-SNAPSHOT-jar-with-dependencies.jar
+
+# Compile the standalone documentation
+.PHONY: doc
+doc:
+	$(MAKE) -C src/doc html
diff --git a/README_SETUP.md b/README_SETUP.md
index 24fe8bde744585a8e050f1d2f11dc4c5e50c1b6e..cf301e406cd4476d74914f3ede503cf67fd04a70 100644
--- a/README_SETUP.md
+++ b/README_SETUP.md
@@ -179,3 +179,20 @@ before you execute it.
 ```sh
 sed -i.bak -e "s/\(\s*\)\([^.]\)caosdb\.server/\1\2org.caosdb.server/g" FILE_TO_BE_CHANGED
 ```
+
+# Build the documentation #
+
+Stand-alone documentation is built using Sphinx: `make doc`
+
+## Requirements ##
+
+- sphinx
+- javasphinx :: `pip3 install --user javasphinx`
+  - Alternative, if javasphinx fails because python3-sphinx is too recent:
+  (`_l` not found):
+  ```
+git clone git@github.com:simgrid/javasphinx.git
+cd javasphinx
+git checkout 659209069603a
+pip3 install .
+```
diff --git a/conf/core/cache.ccf b/conf/core/cache.ccf
index ad73cb86d259a1de8ecd836f8e72de8aa254793e..b6a50bee08fdd8598dac3c9f3d7aa70f43190127 100644
--- a/conf/core/cache.ccf
+++ b/conf/core/cache.ccf
@@ -1,3 +1,8 @@
+# -*- mode:conf-javaprop; -*-
+
+# Configuration for the Java Caching System (JCS) which is used by the server.  Please look at
+# http://commons.apache.org/proper/commons-jcs/getting_started/intro.html for further information.
+
 # default caching options
 jcs.default.cacheattributes=org.apache.commons.jcs.engine.CompositeCacheAttributes
 jcs.default.cacheattributes.MaxObjects=1000
diff --git a/conf/core/global_entity_permissions.xml b/conf/core/global_entity_permissions.xml
index 3cebb79bd1c40564c99219519aa92b59a92e9dcd..3b0cf1b5ccb3f50c73f7a0ad8f4a2651c2dad221 100644
--- a/conf/core/global_entity_permissions.xml
+++ b/conf/core/global_entity_permissions.xml
@@ -1,4 +1,10 @@
 <globalPermissions>
+    <!--
+         4-store for permissions, implemented as a mapping:
+         {Grant/Deny, priority, role} -> List of permissions
+
+         Please look at the permission documentation for more information.
+    -->
     <Grant priority="false" role="?OWNER?"><Permission name="*"/></Grant>
     <Grant priority="false" role="?OTHER?"><Permission name="RETRIEVE:*"/></Grant>
     <Grant priority="false" role="?OTHER?"><Permission name="USE:*"/></Grant>
diff --git a/conf/core/log4j2-debug.properties b/conf/core/log4j2-debug.properties
index 40ffe0fc02c16eb3c80a9216f58b317faecc41dc..3ae3ed266ef865fcffde45c21458650dc5ccc0c1 100644
--- a/conf/core/log4j2-debug.properties
+++ b/conf/core/log4j2-debug.properties
@@ -1,3 +1,5 @@
+# This log4j2-debug.properties file is only loaded when the server runs in debug mode.
+
 # override location of log files for debugging and testing
 property.LOG_DIR = testlog
 
diff --git a/conf/core/log4j2-default.properties b/conf/core/log4j2-default.properties
index b1697a73fe6703850865406e1441947614d00f47..974ce34df0f8290d763bf6a993554dab0ec7eeb2 100644
--- a/conf/core/log4j2-default.properties
+++ b/conf/core/log4j2-default.properties
@@ -1,3 +1,6 @@
+# This log4j2-default.properties file describes the logging settings.  See
+# https://logging.apache.org/log4j/2.x/ for more information.
+
 name = base_configuration
 status = TRACE
 verbose = true
diff --git a/conf/core/server.conf b/conf/core/server.conf
index cdb34fe0eb24f92167ca7bcf8eadb4ccb7efd7db..3cf98872eaa0cdb6a3d59b5049da457b34769495 100644
--- a/conf/core/server.conf
+++ b/conf/core/server.conf
@@ -145,7 +145,7 @@ MAIL_TO_FILE_HANDLER_LOC=./
 
 # --------------------------------------------------
 # Admin settings
-# # --------------------------------------------------
+# --------------------------------------------------
 # Name of the administrator of this instance
 ADMIN_NAME=CaosDB Admin
 # Email of the administrator of this instance
@@ -182,4 +182,9 @@ CHECK_ENTITY_ACL_ROLES_MODE=MUST
 # part of any Entity ACL.
 GLOBAL_ENTITY_PERMISSIONS_FILE=./conf/core/global_entity_permissions.xml
 
+# --------------------------------------------------
+# Extensions
+# --------------------------------------------------
+
+# If set to true, versioning of entities' history is enabled.
 ENTITY_VERSIONING_ENABLED=true
diff --git a/conf/core/usersources.ini.template b/conf/core/usersources.ini.template
index 270a4ad069305ef47b7ad46b36bd69673860fb97..9053093eba21af0adcc5846112932a8a84b8250c 100644
--- a/conf/core/usersources.ini.template
+++ b/conf/core/usersources.ini.template
@@ -1,4 +1,5 @@
-#
+# -*- mode:conf; -*-
+
 # ** header v3.0
 # This file is a part of the CaosDB Project.
 #
@@ -20,17 +21,30 @@
 #
 # ** end header
 #
+
+# `realms` is a comma and/or space separated list of realms which users can use for authentication
 realms = PAM
+
+# This is the default realm, to be used when no other realms is specified
 defaultRealm = PAM
 
+# Each realm has one section with specific options.  The options for a specific realm can be looked
+# up in that realm's documentation.
+#
+# Hint: Realms are implemented by classes which are typically in the
+# org.caosdb.server.accessControl.Pam package and implement the UserSource interface.
+
+# Options for authentication against Linux' PAM.
 [PAM]
 class = org.caosdb.server.accessControl.Pam
+# The script which does the actual checking.
 ; pam_script = ./misc/pam_authentication/pam_authentication.sh
 default_status = ACTIVE
+# Only users which fulfill these criteria are accepted.
 ;include.user = [uncomment and put your users here]
 ;include.group = [uncomment and put your groups here]
 ;exclude.user = [uncomment and put excluded users here]
 ;exclude.group = [uncomment and put excluded groups here]
 
-;it is necessary to add at least one admin
+# It is typically necessary to add at least one admin
 ;user.[uncomment a set a username here].roles = administration
diff --git a/src/doc/Makefile b/src/doc/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..4f177fd3850423c3005829a75a2b37625dc68a87
--- /dev/null
+++ b/src/doc/Makefile
@@ -0,0 +1,47 @@
+# ** header v3.0
+# This file is a part of the CaosDB Project.
+#
+# Copyright (C) 2020 IndiScale GmbH <info@indiscale.com>
+# Copyright (C) 2020 Daniel Hornung <d.hornung@indiscale.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# ** end header
+
+# This Makefile is a wrapper for sphinx scripts.
+#
+# It is based upon the autocreated makefile for Sphinx documentation.
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS    ?= -a
+SPHINXBUILD   ?= sphinx-build
+SPHINXAPIDOC   ?= javasphinx-apidoc
+SOURCEDIR     = .
+BUILDDIR      = ../../build/doc
+
+.PHONY: doc-help Makefile apidoc
+
+# Put it first so that "make" without argument is like "make help".
+doc-help:
+	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile apidoc
+	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+#	sphinx-build -M html . ../../build/doc
+
+apidoc:
+	@$(SPHINXAPIDOC) -o _apidoc --update --title="CaosDB Server" ../main/
diff --git a/src/doc/administration/configuration.rst b/src/doc/administration/configuration.rst
new file mode 100644
index 0000000000000000000000000000000000000000..4170fd0ed31c7a0ec5c1b4e589ff919267cf7de9
--- /dev/null
+++ b/src/doc/administration/configuration.rst
@@ -0,0 +1,62 @@
+Configuration
+=============
+
+The server is configured through configuration files. There are two directories with config files:
+
+``conf/core``
+   Upstream defaults are stored here.
+``conf/ext``
+   User specific configuration should be stored here, settings in ``ext`` override settings in
+   ``core``.  Additionally, configuration files may be stored in ``*.d`` directories here, named
+   after the original config file name.  For example, the general server configuration will be
+   assembled from ``conf/core/server.conf``, ``conf/ext/server.conf`` and any ``*.conf`` files found
+   in ``conf/ext/server.conf.d``.
+
+Configuration files
+-------------------
+
+In each of these directories, the server looks for the following files:
+
+``server.conf``
+   General server configuration options.  The possible configuration options are documented inside
+   the `default file <https://gitlab.com/caosdb/caosdb-server/-/blob/dev/conf/core/server.conf>`_.
+
+``global_entity_permissions.xml``
+   :ref:`Permissions <concepts:Permissions>` which are automatically set, based on user roles.
+
+``usersources.ini``
+   This file defines possible sources which are checked when a user tries to authenticate.  Each
+   defined source has a special section, the possible options are defined separately for each user
+   source.  At the moment the best place to look for this specific documentation is at the API
+   documentation of :java:type:`UserSource` and its implementing classes.  The provided `template
+   file <https://gitlab.com/caosdb/caosdb-server/-/blob/dev/conf/core/usersources.ini.template>`_
+   also has some information.  The general concept about authentication realms is described in
+   :java:type:`UserSources`.
+
+``authtoken.yaml``
+   Configuration for dispensed authentication tokens, which can be used to authenticate to CaosDB
+   without the need of a user/password combination.  Possible use cases are server-side scripts or
+   initial setup after the server start.  There is more documentation inside the `template file
+   <https://gitlab.com/caosdb/caosdb-server/-/blob/dev/conf/core/authtoken.example.yaml>`_.
+
+``cache.ccf``
+   Configuration for the Java Caching System (JCS) which can be used by the server.  More
+   documentation is `upstream
+   <http://commons.apache.org/proper/commons-jcs/getting_started/intro.html>`_ and inside `the file
+   <https://gitlab.com/caosdb/caosdb-server/-/blob/dev/conf/core/cache.ccf>`_.
+
+``log4j2-default.properties``, ``log4j2-debug.properties``
+   Configuration for logging, following the standard described by the `log4j library
+   <https://logging.apache.org/log4j/2.x/>`_.  The ``default`` file is always loaded, in debug mode
+   the ``debug`` file iss added as well.
+
+
+Changing the configuration at runtime
+-------------------------------------
+
+Remark:
+   Only when the server is in debug mode, the general configuration can be changed at runtime.
+
+In the debug case, the server provides the ``_server_properties`` resource which allows the ``GET``
+and ``POST`` methods to access the server's properties.  The Python client library conveniently
+wraps this in the :any:`caosdb-pylib:caosdb.common.administration` module.
diff --git a/src/doc/concepts.rst b/src/doc/concepts.rst
new file mode 100644
index 0000000000000000000000000000000000000000..ec93719548a7d7c577ac62c6615b3fcf24111b42
--- /dev/null
+++ b/src/doc/concepts.rst
@@ -0,0 +1,29 @@
+===================================
+Basic concepts of the CaosDB server
+===================================
+
+The CaosDB server provides the HTTP API resources to users and client libraries.  It uses a plain
+MariaDB/MySQL database as backend for data storage, raw files are stored separately on the file
+system.
+
+
+Configuration
+-------------
+
+Administrators may configure the server through :doc:`configuration
+files<administration/configuration>`.  Additionally, configurations may be set via the API if the
+server is in debug mode.
+
+
+Permissions
+-----------
+
+CaosDB has a fine grained role based permission system.  Each interaction with the server is
+governed by the current rules of the user, by default this is the ``anonymous`` role.  The
+permissions for an action which involves one or more objects are set either manually or via default
+permissions which can be configured.  For more detailed information, there is separate
+:doc:`documentation of the permission system<permissions>`.
+
+
+
+
diff --git a/src/doc/conf.py b/src/doc/conf.py
new file mode 100644
index 0000000000000000000000000000000000000000..0a7eefd8d1059ea11400daa023d21ec25bfdb37e
--- /dev/null
+++ b/src/doc/conf.py
@@ -0,0 +1,211 @@
+# -*- coding: utf-8 -*-
+#
+# Configuration file for the Sphinx documentation builder.
+#
+# This file only contains a selection of the most common options. For a full
+# list see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+# -- Path setup --------------------------------------------------------------
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+# import os
+# import sys
+# sys.path.insert(0, os.path.abspath('../caosdb'))
+
+
+# -- Project information -----------------------------------------------------
+
+project = 'caosdb-server'
+copyright = '2020, IndiScale GmbH'
+author = 'Daniel Hornung'
+
+# The short X.Y version
+version = '0.X.Y'
+# The full version, including alpha/beta/rc tags
+release = '0.x.y-beta-rc2'
+
+
+# -- General configuration ---------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#
+# needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    'javasphinx',
+    'sphinx.ext.autodoc',
+    'sphinx.ext.intersphinx',
+    'sphinx.ext.napoleon',     # For Google style docstrings
+    "recommonmark",            # For markdown files.
+    "sphinx.ext.autosectionlabel",  # Allow reference sections using its title
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+#
+# source_suffix = ['.rst', '.md']
+source_suffix = '.rst'
+
+# The master toctree document.
+master_doc = 'index'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = []
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = None
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+#
+html_theme = 'alabaster'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#
+# html_theme_options = {}
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# Custom sidebar templates, must be a dictionary that maps document names
+# to template names.
+#
+# The default sidebars (for documents that don't match any pattern) are
+# defined by theme itself.  Builtin themes are using these templates by
+# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
+# 'searchbox.html']``.
+#
+# html_sidebars = {}
+
+
+# -- Options for HTMLHelp output ---------------------------------------------
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'caosdb-serverdoc'
+
+
+# -- Options for LaTeX output ------------------------------------------------
+
+latex_elements = {
+    # The paper size ('letterpaper' or 'a4paper').
+    #
+    # 'papersize': 'letterpaper',
+
+    # The font size ('10pt', '11pt' or '12pt').
+    #
+    # 'pointsize': '10pt',
+
+    # Additional stuff for the LaTeX preamble.
+    #
+    # 'preamble': '',
+
+    # Latex figure (float) alignment
+    #
+    # 'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+#  author, documentclass [howto, manual, or own class]).
+latex_documents = [
+    (master_doc, 'caosdb-server.tex', 'caosdb-server Documentation',
+     'IndiScale GmbH', 'manual'),
+]
+
+
+# -- Options for manual page output ------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    (master_doc, 'caosdb-server', 'caosdb-server Documentation',
+     [author], 1)
+]
+
+
+# -- Options for Texinfo output ----------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+    (master_doc, 'caosdb-server', 'caosdb-server Documentation',
+     author, 'caosdb-server', 'One line description of project.',
+     'Miscellaneous'),
+]
+
+
+# -- Options for Epub output -------------------------------------------------
+
+# Bibliographic Dublin Core info.
+epub_title = project
+
+# The unique identifier of the text. This can be a ISBN number
+# or the project homepage.
+#
+# epub_identifier = ''
+
+# A unique identification for the text.
+#
+# epub_uid = ''
+
+# A list of files that should not be packed into the epub file.
+epub_exclude_files = ['search.html']
+
+
+# -- Extension configuration -------------------------------------------------
+
+# -- Options for javasphinx --------------------------------------------------
+# See also https://bronto-javasphinx.readthedocs.io/en/latest/
+
+# javadoc_url_map = {
+#     '<namespace_here>' : ('<base_url_here>', 'javadoc'),
+# }
+
+
+# -- Options for intersphinx -------------------------------------------------
+
+# https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html#confval-intersphinx_mapping
+intersphinx_mapping = {
+    "python": ("https://docs.python.org/", None),
+    "caosdb-pylib": ("https://caosdb.gitlab.io/caosdb-pylib/", None),
+}
+
+
+# -- Options for autodoc -----------------------------------------------------
+# TODO Which options do we want?
+autodoc_default_options = {
+    'members': None,
+    'undoc-members': None,
+}
+
+
+# -- Options for autosectionlabel --------------------------------------------
+
+autosectionlabel_prefix_document = True
diff --git a/src/doc/getting_started.md b/src/doc/getting_started.md
new file mode 100644
index 0000000000000000000000000000000000000000..6805181e73a7f338fbacb74bdd9f734360404372
--- /dev/null
+++ b/src/doc/getting_started.md
@@ -0,0 +1,5 @@
+# Getting started with pycaosdb #
+
+1. Install
+2. import
+3. enjoy
diff --git a/src/doc/index.rst b/src/doc/index.rst
new file mode 100644
index 0000000000000000000000000000000000000000..e9734cbbcc009bc3625216b755258250a9a04d58
--- /dev/null
+++ b/src/doc/index.rst
@@ -0,0 +1,28 @@
+
+Welcome to caosdb-server's documentation!
+=========================================
+
+.. toctree::
+   :maxdepth: 2
+   :caption: Contents:
+   :hidden:
+   :glob:
+
+   Getting started <getting_started>
+   Concepts <concepts>
+   tutorials
+   administration/*
+   API documentation<_apidoc/packages>
+
+Welcome to the CaosDB, the flexible semantic data management toolkit!
+
+This documentation helps you to :doc:`get started<getting_started>`, explains the most important
+:doc:`concepts<concepts>` and offers a range of :doc:`tutorials<tutorials>`.
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/VersionTransaction.java b/src/main/java/org/caosdb/server/database/backend/transaction/VersionTransaction.java
index 8a98564050f5fb860402aff0f55f1dd9de417a39..ee617a1c1110e9a01e9a6d6ee4c799e44cd66ab3 100644
--- a/src/main/java/org/caosdb/server/database/backend/transaction/VersionTransaction.java
+++ b/src/main/java/org/caosdb/server/database/backend/transaction/VersionTransaction.java
@@ -35,7 +35,7 @@ import org.caosdb.server.entity.EntityInterface;
 import org.caosdb.server.entity.Version;
 
 /**
- * Abstract base class which retrieves and caches the full, but flag version history. The
+ * Abstract base class which retrieves and caches the full, but flat version history. The
  * implementations then use the flat version history to construct either single version information
  * items (see {@link RetrieveVersionInfo}) or the complete history as a tree (see {@link
  * RetrieveVersionHistory})
diff --git a/src/main/java/org/caosdb/server/jobs/Job.java b/src/main/java/org/caosdb/server/jobs/Job.java
index d1e3fef39fcd6a2fb5175e4dd396686bcf773b4e..b3bfda36bedbabfa3eac2eada3938c731041178d 100644
--- a/src/main/java/org/caosdb/server/jobs/Job.java
+++ b/src/main/java/org/caosdb/server/jobs/Job.java
@@ -57,6 +57,13 @@ import org.caosdb.server.utils.Observer;
 import org.caosdb.server.utils.ServerMessages;
 import org.reflections.Reflections;
 
+
+/**
+ * This is a Job.
+ *
+ * @todo Describe me.
+ *
+ */
 public abstract class Job extends AbstractObservable implements Observer {
   private Transaction<? extends TransactionContainer> transaction = null;
   private Mode mode = null;
diff --git a/src/test/docker/Dockerfile b/src/test/docker/Dockerfile
index ecc6b332b2d88e0d587fdb3df0fc13cdfd0c159a..84564843306b0dd9ce08cec00b26b59a79afc10b 100644
--- a/src/test/docker/Dockerfile
+++ b/src/test/docker/Dockerfile
@@ -1,5 +1,16 @@
 FROM debian:buster
 RUN apt-get update && \
-  apt-get install \
-      git make mariadb-server maven openjdk-11-jdk-headless \
-      python3-pip screen libpam0g-dev unzip curl shunit2 -y
+  apt-get install -y \
+    git make mariadb-server maven openjdk-11-jdk-headless \
+    python3-pip screen libpam0g-dev unzip curl shunit2 \
+    python3-sphinx \
+  && \
+  pip3 install javasphinx recommonmark
+
+# Alternative, if javasphinx fails because python3-sphinx is too recent:
+# (`_l` not found):
+#
+# git clone git@github.com:simgrid/javasphinx.git
+# cd javasphinx
+# git checkout 659209069603a
+# pip3 install .