diff --git a/README.md b/README.md
index 658f2e7..c9a2ff8 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,10 @@ A simple to use, good enough phone system for medium sized DECT networks.
 FieldPOC requires a Mitel SIP DECT phone system, i.e. RFP L43 WLAN.
 Make sure you have the equipment, else this software is quit useless.
 
+This is more a sample setup.
+Everything described here can be done on multiple different ways.
+We just try to document a way that is proven to work.
+
 Get a computer, i.e. an APU Board, and install Archlinux on it.
 This can be a VM too, but you have to adapt stuff.
 
@@ -417,3 +421,43 @@ List some options:
 ```
 python -m fieldpoc.run --help
 ```
+
+## Architecture
+
+FieldPOC is daemon that takes a defined state and makes all connected services fit that state.
+Each connected service is observed by a dedicated class executed in a seperate thread.
+There exist some more classes and threads to just glue everything together.
+
+### `extensions.json`
+
+The `extensions.json` file is the core of the whole setup and defines the state.
+It contains which extensions exist and for what they should be used.
+
+### `fieldpoc.py`
+
+This file containes the main class `FieldPOC`.
+It spawns the mentioned threads, initializes other classes and provices communication queues between the threads/classes.
+
+### `config.py`
+
+This manages FieldPOCs configuration.
+
+### `controller.py`
+
+The controller provices an interactive interface to manage and debug FieldPOC.
+
+### `run.py`
+
+This is a thin wrapper to start FieldPOC.
+
+### `dect.py`
+
+This deals with the Mitel OMM and configures all phones based on the current state.
+
+### `routing.py`
+
+This part sets up Yate using Ywsd, registers all extensions and configures routing.
+
+### `ywsd.py`
+
+This starts Ywsd with FieldPOC so you don't have to start it seperately.