diff --git a/Documentation/conf.py b/Documentation/conf.py
index d5c08c5f4b769dea51941bc31451da0b19eee0df..b80d8dadd0485fdaee5a14577412eb6972d6b213 100644
--- a/Documentation/conf.py
+++ b/Documentation/conf.py
@@ -62,6 +62,8 @@ class ColorExample(rst.Directive):
         color = self.arguments[0]
         html_text = '<div style="width: 30px;height: 30px;background: {};border: black 1px solid;border-radius: 15px;"></div>'
         return [nodes.raw("", html_text.format(color), format="html")]
+
+
 # }}}
 
 # -- Options for HTML output ------------------------------------------------- {{{
@@ -112,6 +114,7 @@ autodoc_mock_imports = [
     "sys_display",
     "sys_leds",
     "sys_max30001",
+    "sys_config",
     "ucollections",
     "urandom",
     "utime",
diff --git a/Documentation/index.rst b/Documentation/index.rst
index 6693f3c2637eb5f53ed908623723231bfd8a6559..f6ce6fcd564b08a7f01229a1a235334bb8d1c7c2 100644
--- a/Documentation/index.rst
+++ b/Documentation/index.rst
@@ -27,6 +27,7 @@ Last but not least, if you want to start hacking the lower-level firmware, the
    pycardium/max30001
    pycardium/buttons
    pycardium/color
+   pycardium/config
    pycardium/display
    pycardium/gpio
    pycardium/leds
diff --git a/Documentation/pycardium/config.rst b/Documentation/pycardium/config.rst
new file mode 100644
index 0000000000000000000000000000000000000000..926098eb1daa66b553732648eb344634626cb621
--- /dev/null
+++ b/Documentation/pycardium/config.rst
@@ -0,0 +1,9 @@
+``config`` - Configuration
+==========================
+The ``config`` module provides functions to interact with card10's
+configuration file (``card10.cfg``).
+
+.. automodule:: config
+   :members:
+
+
diff --git a/pycardium/modules/py/config.py b/pycardium/modules/py/config.py
index 1ac6552964417821664e271bdd89027785fd3f0d..8d70936ff2ba9c161712ad07a244f6ebe583a646 100644
--- a/pycardium/modules/py/config.py
+++ b/pycardium/modules/py/config.py
@@ -2,8 +2,47 @@ import sys_config
 
 
 def set_string(key, value):
-    sys_config.set_string(key, str(value))
+    """
+    Write a string to the configuration file ``card10.cfg``.
+
+    Both ``key`` and ``value`` must be strings or must be
+    convertible to a string using the ``str()`` function.
+
+    ``key`` must not contain spaces, control characters (including tabs),
+    number signs ans equal signs.
+    ``value` must not contain control characters (including tabs).
+    Neither is allowed to contain the sub-string ``execute_elf``.
+
+    The key/value pair is immediately written to the configuration
+    file (``card10.cfg``). After the file is written, configuration
+    is read again and the new value is available via ``config.get_string``.
+
+    :param str key:     Name of the configuration option.
+    :param str value:   Value to write.
+    :raises OSError: If writing to the configuration file failed.
+    :raises OSError: If key or value contain illegal characters.
+    :raises ValueError: If key or value contain the sub-string ``execute_elf``.
+
+    .. versionadded:: 1.16
+    """
+
+    sys_config.set_string(str(key), str(value))
 
 
 def get_string(key):
-    return sys_config.get_string(key)
+    """
+    Read a string from the configuration file ``card10.cfg``.
+
+    ``key`` must be a string or must be convertible to a string using
+    the ``str()`` function.
+
+
+    :param str key: Name of the configuration option.
+    :rtype: str
+    :returns: Value of the configuration option.
+    :raises OSError: if the key is not present in the configuration.
+
+    .. versionadded:: 1.16
+    """
+
+    return sys_config.get_string(str(key))