diff --git a/src/doc/conf.py b/src/doc/conf.py
index fee036d0a8a6a090edcdb0025cbc1198406b8f40..119f966e706a5c440a74b62eae93b984e7151552 100644
--- a/src/doc/conf.py
+++ b/src/doc/conf.py
@@ -47,6 +47,7 @@ extensions = [
     "recommonmark",            # For markdown files.
     "sphinx.ext.autosectionlabel",  # Allow reference sections using its title
     "sphinx_rtd_theme",
+    "sphinxcontrib.plantuml",  # PlantUML diagrams
 ]
 
 # Add any paths that contain templates here, relative to this directory.
diff --git a/src/doc/development/structure.rst b/src/doc/development/structure.rst
index 03950db99b0b5257a55f0ae8285bfe60d35b897a..41fd33241250da8ce5368e1d87292e69879f6158 100644
--- a/src/doc/development/structure.rst
+++ b/src/doc/development/structure.rst
@@ -30,8 +30,12 @@ Transactions are explained in detail in the :ref:`Transactions and Schedules<tra
 .. uml::
 
   @startuml
-  abstract AbstractCaosDBServerResource
-  class RetrieveEntityResource
+  abstract AbstractCaosDBServerResource {
+    {abstract} httpGetInChildClass()
+    {abstract} httpPostInChildClass()
+    {abstract} ...InChildClass()
+  }
+  abstract RetrieveEntityResource
   class EntityResource
   AbstractCaosDBServerResource <|-- RetrieveEntityResource
   RetrieveEntityResource <|-- EntityResource
@@ -60,6 +64,43 @@ main packages which handle the backend:
     method.  These classes may use specific backend implementations (like for example the MySQL
     implementations) to interact with the backend database.
 
+
+.. uml::
+
+  @startuml
+  together {
+    abstract BackendTransaction {
+      HashMap impl // stores all implementations
+      abstract execute()
+    }
+    note left of BackendTransaction::impl
+      Stores the
+      implementation
+      for each
+      interface."
+    end note
+    package ...backend.interfaces {
+      interface GetIDByNameImpl {
+        abstract execute(String name, String role, String limit)
+      }
+    }
+  }
+  together {
+    package ...backend.transaction {
+      class GetIDByName extends BackendTransaction {
+        execute()
+      }
+    }
+    package ...backend.implementation.MySQL {
+      class MySQLGetIDByName implements GetIDByNameImpl {
+        execute(String name, String role, String limit)
+      }
+    }
+  }
+
+  GetIDByName::execute --r-> MySQLGetIDByName
+  @enduml
+
 .. _transactions:
 
 Transactions and Schedules
diff --git a/src/test/docker/Dockerfile b/src/test/docker/Dockerfile
index 08a2a0884d1f154bb941388075b2bdd915125f99..f3c8b98fdab34400cccfc11f0c9211eeca37f845 100644
--- a/src/test/docker/Dockerfile
+++ b/src/test/docker/Dockerfile
@@ -2,10 +2,11 @@ FROM debian:buster
 RUN apt-get update && \
   apt-get install -y \
     git make mariadb-server maven openjdk-11-jdk-headless \
+    plantuml \
     python3-pip screen libpam0g-dev unzip curl shunit2 \
     python3-sphinx \
   && \
-  pip3 install javasphinx recommonmark sphinx-rtd-theme
+  pip3 install javasphinx recommonmark sphinx-rtd-theme sphinxcontrib-plantuml
 
 # Alternative, if javasphinx fails because python3-sphinx is too recent:
 # (`_l` not found):