diff --git a/.env.win.example b/.env.win.example
index f023263227441bb2fd8ea579cb9c6ac1f79d33c0..c7e7597ae89f119147a8ce294b276e0c130ccddb 100644
--- a/.env.win.example
+++ b/.env.win.example
@@ -19,4 +19,4 @@ SMTP_PORT=
 SMTP_USERNAME=
 SMTP_PASSWORD=
 EUREKA_SERVER=http://discovery-service:9090/eureka/
-SHARED_FILESYSTEM=%localappdata%\Temp
+SHARED_FILESYSTEM=C:\tmp
diff --git a/.gitignore b/.gitignore
index 2518b0c4381fc97771b8dce72bfd8f036b7d0660..34c4c63aa365cc14a429cddf83a00438c9fbb3c9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,7 +8,6 @@ target/
 .jupyter/.idea/
 .jupyter/.ipynb_checkpoints
 .jupyter/api_authentication
-.jupyter/api_broker
 .jupyter/api_container
 .jupyter/api_database
 .jupyter/api_identifier
diff --git a/.jupyter/.gitignore b/.jupyter/.gitignore
index 4da7d714ec15b1625e404b2958fffb0906fa97e8..83270ebc6e2391db8d76e1db4ef3313d8939184a 100644
--- a/.jupyter/.gitignore
+++ b/.jupyter/.gitignore
@@ -1,6 +1,2 @@
-__pycache__
-venv/
-
-publish.py
-
-./swagger-codegen-cli.jar
\ No newline at end of file
+# Python
+__pycache__
\ No newline at end of file
diff --git a/.jupyter/api_broker/BrokerServiceClient.py b/.jupyter/api_broker/BrokerServiceClient.py
new file mode 100644
index 0000000000000000000000000000000000000000..e7bfd582a87bb59a8f604cc3addd760e29f5413a
--- /dev/null
+++ b/.jupyter/api_broker/BrokerServiceClient.py
@@ -0,0 +1,26 @@
+import json
+from pika import BlockingConnection, ConnectionParameters
+from pika.credentials import PlainCredentials
+
+
+class BrokerServiceClient:
+
+    def __init__(self, exchange, routing_key, host, username, password):
+        self.exchange = exchange
+        self.routing_key = routing_key
+        self.host = host
+        self.username = username
+        self.password = password
+        self.connection = BlockingConnection(ConnectionParameters(self.host,
+                                                                  credentials=PlainCredentials(
+                                                                      username=self.username,
+                                                                      password=self.password)))
+
+    def send(self, message):
+        channel = self.connection.channel()
+        payload = json.dumps(message)
+        print("... sending tuple %s" % payload)
+        channel.basic_publish(exchange=self.exchange, routing_key=self.routing_key,
+                              body=bytes(payload, encoding='utf8'))
+        print("... sent tuple")
+        channel.close()
diff --git a/.jupyter/api_broker/__init__.py b/.jupyter/api_broker/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/.jupyter/dev.py b/.jupyter/dev.py
old mode 100644
new mode 100755
index 63f03ca33a51837167b92bd35e411dd2f6c90bdb..0f75b2eb77f900e2691d2edddb650bf305a5d279
--- a/.jupyter/dev.py
+++ b/.jupyter/dev.py
@@ -1,34 +1,7 @@
 #!/bin/env python3
-import time
-
 from api_broker.BrokerServiceClient import BrokerServiceClient
 
-broker = BrokerServiceClient(exchange="airquality2", routing_key="airquality2", host="localhost", username="user",
-                             password="user")
-payload = {'date': '2022-07-21', 'location': 'Kuala Lumpur', 'parameter': 'T', 'interval': 'h1', 'unit': 'deg-celsius',
-           'value': 33.0, 'status': 'tentative'}
-response = broker.send(payload)
-print(payload)
-
-# faulty date
-payload = {'date': '2022-07', 'location': 'Kuala Lumpur', 'parameter': 'T', 'interval': 'h1', 'unit': 'deg-celsius',
-           'value': 33.0, 'status': 'tentative'}
-response = broker.send(payload)
-print(payload)
-
-# faulty number
-payload = {'date': '2022-07-01', 'location': 'Kuala Lumpur', 'parameter': 'T', 'interval': 'h1', 'unit': 'deg-celsius',
-           'value': 'hello', 'status': 'tentative'}
-response = broker.send(payload)
-print(payload)
-
-# faulty string
-payload = {'date': '2022-07-01', 'location': 'Kuala Lumpur', 'parameter': 'T', 'interval': 'h1', 'unit': 'deg-celsius',
-           'value': 33.0, 'status': 88}
+broker = BrokerServiceClient(exchange="airquality_6f28efee-2377-11ed-9491-8c8caada74c3", routing_key="airquality_6f510ee8-2377-11ed-9491-8c8caada74c3", host="localhost", username="test1",
+                             password="test1")
+payload = {"date": "2021-01-01", "location": "Stampfenbachstrasse", "parameter": "CO", "interval": "h1", "unit": "mg/m3", "value": 0.44, "status": "tentative"}
 response = broker.send(payload)
-print(payload)
-
-while True:
-    response = broker.send(payload)
-    print(payload)
-    time.sleep(1)
diff --git a/.jupyter/load_test.py b/.jupyter/load_test.py
old mode 100644
new mode 100755
index 3b3afa3705c42d0d5400b88f9b1ad65bf355eff5..1336060476a256866612399cfa3030cbfb236a82
--- a/.jupyter/load_test.py
+++ b/.jupyter/load_test.py
@@ -8,6 +8,7 @@ import requests as rq
 from postgres import Postgres
 
 import api_query.rest
+from api_broker.BrokerServiceClient import BrokerServiceClient
 from api_authentication.api.authentication_endpoint_api import AuthenticationEndpointApi
 from api_authentication.api.user_endpoint_api import UserEndpointApi
 from api_container.api.container_endpoint_api import ContainerEndpointApi
@@ -99,6 +100,12 @@ def create_database(container_id, is_public=True):
     return response
 
 
+def find_database(container_id, database_id):
+    response = database.find_by_id(container_id, database_id)
+    print("found database with id %d" % response.id)
+    return response
+
+
 def update_database(container_id, database_id, is_public=True):
     response = database.update({
         "description": "This dataset includes daily values from 1983 to the current day, divided into annual files. This includes the maximum hourly average and the number of times the hourly average limit value for ozone was exceeded and the daily averages for sulfur dioxide (SO2), carbon monoxide (CO), nitrogen oxide (NOx), nitrogen monoxide (NO), nitrogen dioxide (NO2), particulate matter (PM10 and PM2.5). ) and particle number (PN), provided that they are of sufficient quality. The values of the completed day for the current year are updated every 30 minutes after midnight (UTC+1).",
@@ -295,6 +302,14 @@ def download_identifier_metadata(container_id, database_id, identifier_id):
     return response
 
 
+def send_tuple(exchange, routing_key, username, password, payload):
+    broker = BrokerServiceClient(exchange=exchange, routing_key=routing_key, host="localhost", username=username,
+                                 password=password)
+    response = broker.send(payload)
+    print("sent tuple to exchange with routing key %s" % routing_key)
+    return response
+
+
 if __name__ == '__main__':
     #
     # create 1 user and 3 containers (public, private, public)
@@ -349,6 +364,7 @@ if __name__ == '__main__':
     cid = create_container().id
     start_container(cid)
     dbid = create_database(cid).id
+    dbexchange = find_database(cid, dbid).exchange
     update_database(cid, dbid)
     create_table(cid, dbid, columns=[])
     create_table(cid, dbid, columns=[{
@@ -365,6 +381,10 @@ if __name__ == '__main__':
         "primary_key": True,
         "null_allowed": False,
     }]).id
+    ttopic = find_table(cid, dbid, tid).topic
+    send_tuple(dbexchange, ttopic, "test1", "test1", {"primary": 1})
+    send_tuple(dbexchange, ttopic, "test1", "test1", {"primary": 2})
+    send_tuple(dbexchange, ttopic, "test1", "test1", {"primary": 3})
     create_table(cid, dbid, columns=[{
         "name": "primary",
         "type": "date",
@@ -400,3 +420,4 @@ if __name__ == '__main__':
     auth_user("test3")
     update_user(uid)
     update_theme(uid)
+    print("FINISHED")
diff --git a/.jupyter/requirements.txt b/.jupyter/requirements.txt
index 1ea469ff4a0a04b6fbdc486eba98da9be95b38d2..4dadefc848e4ec094ec8ce79b6edefcd93e3f5b9 100644
--- a/.jupyter/requirements.txt
+++ b/.jupyter/requirements.txt
@@ -1,3 +1,4 @@
 requests>=2.28.0
 pandas>=1.4.3
-postgres>=4.0
\ No newline at end of file
+postgres>=4.0
+pika>=1.3.0
\ No newline at end of file
diff --git a/.jupyter/resources/ugz_ogd_air_h1_2021.csv b/.jupyter/resources/ugz_ogd_air_h1_2021.csv
index ec8080c0a861c649f400bd7ed95928d8b006a5fa..18fb5aef99a3cd2c4207d02d882c66354254c33c 100644
--- a/.jupyter/resources/ugz_ogd_air_h1_2021.csv
+++ b/.jupyter/resources/ugz_ogd_air_h1_2021.csv
@@ -1,4 +1,3 @@
-Date,Location,Parameter,Interval,Unit,Value,Status
 2021-01-01,Stampfenbachstrasse,CO,h1,mg/m3,0.44,tentative
 2021-01-01,Stampfenbachstrasse,SO2,h1,µg/m3,4.88,tentative
 2021-01-01,Stampfenbachstrasse,NOx,h1,ppb,29.46,tentative
diff --git a/.jupyter/setup.py b/.jupyter/setup.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/.jupyter/tuple_publish.ipynb b/.jupyter/tuple_publish.ipynb
index 1c34c2d3f8a3afa3b54511733838020fb3f7bf6a..bc9935849e9fcb50a7c4e327552f7502d1c12ac4 100644
--- a/.jupyter/tuple_publish.ipynb
+++ b/.jupyter/tuple_publish.ipynb
@@ -55,7 +55,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 2,
    "metadata": {
     "pycharm": {
      "name": "#%%\n"
@@ -83,7 +83,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 3,
    "metadata": {
     "pycharm": {
      "name": "#%%\n"
@@ -98,10 +98,10 @@
       " 'authorities': [{'authority': 'ROLE_RESEARCHER'}],\n",
       " 'containers': None,\n",
       " 'databases': None,\n",
-      " 'email': 'martinweiseat@gmail.com',\n",
+      " 'email': 'martin.weise@tuwien.ac.at',\n",
       " 'email_verified': False,\n",
       " 'firstname': 'Martin',\n",
-      " 'id': 3,\n",
+      " 'id': 5,\n",
       " 'identifiers': None,\n",
       " 'lastname': 'Weise',\n",
       " 'orcid': None,\n",
@@ -122,7 +122,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 4,
    "metadata": {
     "pycharm": {
      "name": "#%%\n"
@@ -133,21 +133,22 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "{'created': datetime.datetime(2022, 8, 17, 10, 59, 9, 964000, tzinfo=tzutc()),\n",
+      "{'created': datetime.datetime(2022, 8, 24, 6, 44, 27, 20000, tzinfo=tzutc()),\n",
       " 'creator': {'affiliation': None,\n",
+      "             'email_verified': False,\n",
       "             'firstname': 'Martin',\n",
-      "             'id': 3,\n",
+      "             'id': 5,\n",
       "             'lastname': 'Weise',\n",
       "             'orcid': None,\n",
       "             'theme_dark': False,\n",
       "             'titles_after': None,\n",
       "             'titles_before': None,\n",
       "             'username': 'test'},\n",
-      " 'hash': '5188e3aa1d16411f98b0cde473c39e79f54c205da3d0f5cae601e797efd053cb',\n",
-      " 'id': 2,\n",
-      " 'internal_name': 'fda-userdb-airquality-9c04db38-1e1b-11ed-b193-8c8caada74c3',\n",
+      " 'hash': '56eb904f34a73adb34a5dc93ce4895de05d2d7891ccff38b7a7ed45bc654aa64',\n",
+      " 'id': 8,\n",
+      " 'internal_name': 'fda-userdb-airquality-328b5a3a-2378-11ed-b35c-8c8caada74c3',\n",
       " 'is_public': None,\n",
-      " 'name': 'Airquality 9c04db38-1e1b-11ed-b193-8c8caada74c3'}\n"
+      " 'name': 'Airquality 328b5a3a-2378-11ed-b35c-8c8caada74c3'}\n"
      ]
     }
    ],
@@ -163,7 +164,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": 5,
    "metadata": {
     "pycharm": {
      "name": "#%%\n"
@@ -174,21 +175,22 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "{'created': datetime.datetime(2022, 8, 17, 10, 59, 9, 964000, tzinfo=tzutc()),\n",
+      "{'created': datetime.datetime(2022, 8, 24, 6, 44, 27, 20000, tzinfo=tzutc()),\n",
       " 'creator': {'affiliation': None,\n",
+      "             'email_verified': False,\n",
       "             'firstname': 'Martin',\n",
-      "             'id': 3,\n",
+      "             'id': 5,\n",
       "             'lastname': 'Weise',\n",
       "             'orcid': None,\n",
       "             'theme_dark': False,\n",
       "             'titles_after': None,\n",
       "             'titles_before': None,\n",
       "             'username': 'test'},\n",
-      " 'hash': '5188e3aa1d16411f98b0cde473c39e79f54c205da3d0f5cae601e797efd053cb',\n",
-      " 'id': 2,\n",
-      " 'internal_name': 'fda-userdb-airquality-9c04db38-1e1b-11ed-b193-8c8caada74c3',\n",
+      " 'hash': '56eb904f34a73adb34a5dc93ce4895de05d2d7891ccff38b7a7ed45bc654aa64',\n",
+      " 'id': 8,\n",
+      " 'internal_name': 'fda-userdb-airquality-328b5a3a-2378-11ed-b35c-8c8caada74c3',\n",
       " 'is_public': None,\n",
-      " 'name': 'Airquality 9c04db38-1e1b-11ed-b193-8c8caada74c3'}\n"
+      " 'name': 'Airquality 328b5a3a-2378-11ed-b35c-8c8caada74c3'}\n"
      ]
     }
    ],
@@ -202,7 +204,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 6,
    "metadata": {
     "pycharm": {
      "name": "#%%\n"
@@ -213,25 +215,27 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "{'container': {'created': datetime.datetime(2022, 8, 17, 10, 59, 9, 964000, tzinfo=tzutc()),\n",
+      "{'container': {'created': datetime.datetime(2022, 8, 24, 6, 44, 27, 20000, tzinfo=tzutc()),\n",
       "               'creator': {'affiliation': None,\n",
+      "                           'email_verified': False,\n",
       "                           'firstname': 'Martin',\n",
-      "                           'id': 3,\n",
+      "                           'id': 5,\n",
       "                           'lastname': 'Weise',\n",
       "                           'orcid': None,\n",
       "                           'theme_dark': False,\n",
       "                           'titles_after': None,\n",
       "                           'titles_before': None,\n",
       "                           'username': 'test'},\n",
-      "               'hash': '5188e3aa1d16411f98b0cde473c39e79f54c205da3d0f5cae601e797efd053cb',\n",
-      "               'id': 2,\n",
-      "               'internal_name': 'fda-userdb-airquality-9c04db38-1e1b-11ed-b193-8c8caada74c3',\n",
+      "               'hash': '56eb904f34a73adb34a5dc93ce4895de05d2d7891ccff38b7a7ed45bc654aa64',\n",
+      "               'id': 8,\n",
+      "               'internal_name': 'fda-userdb-airquality-328b5a3a-2378-11ed-b35c-8c8caada74c3',\n",
       "               'is_public': None,\n",
-      "               'name': 'Airquality 9c04db38-1e1b-11ed-b193-8c8caada74c3'},\n",
-      " 'created': datetime.datetime(2022, 8, 17, 10, 59, 15, 497000, tzinfo=tzutc()),\n",
+      "               'name': 'Airquality 328b5a3a-2378-11ed-b35c-8c8caada74c3'},\n",
+      " 'created': datetime.datetime(2022, 8, 24, 6, 44, 32, 558000, tzinfo=tzutc()),\n",
       " 'creator': {'affiliation': None,\n",
+      "             'email_verified': False,\n",
       "             'firstname': 'Martin',\n",
-      "             'id': 3,\n",
+      "             'id': 5,\n",
       "             'lastname': 'Weise',\n",
       "             'orcid': None,\n",
       "             'theme_dark': False,\n",
@@ -240,9 +244,9 @@
       "             'username': 'test'},\n",
       " 'description': 'Airquality',\n",
       " 'engine': 'mariadb:10.5',\n",
-      " 'id': 2,\n",
+      " 'id': 8,\n",
       " 'is_public': False,\n",
-      " 'name': 'Airquality a24d3738-1e1b-11ed-b193-8c8caada74c3'}\n"
+      " 'name': 'Airquality 35dc8a38-2378-11ed-b35c-8c8caada74c3'}\n"
      ]
     }
    ],
@@ -258,28 +262,29 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 7,
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
       "{'contact': None,\n",
-      " 'container': {'created': datetime.datetime(2022, 8, 17, 10, 59, 9, 964000, tzinfo=tzutc()),\n",
+      " 'container': {'created': datetime.datetime(2022, 8, 24, 6, 44, 27, 20000, tzinfo=tzutc()),\n",
       "               'databases': None,\n",
-      "               'hash': '5188e3aa1d16411f98b0cde473c39e79f54c205da3d0f5cae601e797efd053cb',\n",
-      "               'id': 2,\n",
+      "               'hash': '56eb904f34a73adb34a5dc93ce4895de05d2d7891ccff38b7a7ed45bc654aa64',\n",
+      "               'id': 8,\n",
       "               'image': {'id': 1, 'repository': 'mariadb', 'tag': '10.5'},\n",
-      "               'internal_name': 'fda-userdb-airquality-9c04db38-1e1b-11ed-b193-8c8caada74c3',\n",
+      "               'internal_name': 'fda-userdb-airquality-328b5a3a-2378-11ed-b35c-8c8caada74c3',\n",
       "               'ip_address': None,\n",
       "               'is_public': None,\n",
-      "               'name': 'Airquality 9c04db38-1e1b-11ed-b193-8c8caada74c3',\n",
-      "               'port': 11584,\n",
+      "               'name': 'Airquality 328b5a3a-2378-11ed-b35c-8c8caada74c3',\n",
+      "               'port': 12709,\n",
       "               'state': None},\n",
-      " 'created': datetime.datetime(2022, 8, 17, 10, 59, 15, 497000, tzinfo=tzutc()),\n",
+      " 'created': datetime.datetime(2022, 8, 24, 6, 44, 32, 558000, tzinfo=tzutc()),\n",
       " 'creator': {'affiliation': None,\n",
+      "             'email_verified': False,\n",
       "             'firstname': 'Martin',\n",
-      "             'id': 3,\n",
+      "             'id': 5,\n",
       "             'lastname': 'Weise',\n",
       "             'orcid': None,\n",
       "             'theme_dark': False,\n",
@@ -288,57 +293,63 @@
       "             'username': 'test'},\n",
       " 'deleted': None,\n",
       " 'description': 'Airquality',\n",
-      " 'exchange': 'airquality_a24d3738-1e1b-11ed-b193-8c8caada74c3',\n",
-      " 'id': 2,\n",
+      " 'exchange': 'airquality_35dc8a38-2378-11ed-b35c-8c8caada74c3',\n",
+      " 'id': 8,\n",
       " 'image': {'compiled': None,\n",
-      "           'date_formats': [{'created_at': datetime.datetime(2022, 8, 17, 10, 21, 43, 614000, tzinfo=tzutc()),\n",
+      "           'date_formats': [{'created_at': datetime.datetime(2022, 8, 24, 6, 15, 21, 255000, tzinfo=tzutc()),\n",
       "                             'database_format': '%Y-%c-%d',\n",
       "                             'example': '2022-01-30',\n",
       "                             'has_time': False,\n",
       "                             'id': 1,\n",
       "                             'unix_format': 'yyyy-MM-dd'},\n",
-      "                            {'created_at': datetime.datetime(2022, 8, 17, 10, 21, 43, 622000, tzinfo=tzutc()),\n",
+      "                            {'created_at': datetime.datetime(2022, 8, 24, 6, 15, 21, 255000, tzinfo=tzutc()),\n",
       "                             'database_format': '%d.%c.%Y',\n",
       "                             'example': '30.01.2022',\n",
       "                             'has_time': False,\n",
       "                             'id': 2,\n",
       "                             'unix_format': 'yyyy-MM-dd'},\n",
-      "                            {'created_at': datetime.datetime(2022, 8, 17, 10, 21, 43, 625000, tzinfo=tzutc()),\n",
+      "                            {'created_at': datetime.datetime(2022, 8, 24, 6, 15, 21, 255000, tzinfo=tzutc()),\n",
       "                             'database_format': '%d.%c.%y',\n",
       "                             'example': '30.01.22',\n",
       "                             'has_time': False,\n",
       "                             'id': 3,\n",
       "                             'unix_format': 'yyyy-MM-dd'},\n",
-      "                            {'created_at': datetime.datetime(2022, 8, 17, 10, 21, 43, 628000, tzinfo=tzutc()),\n",
+      "                            {'created_at': datetime.datetime(2022, 8, 24, 6, 15, 21, 255000, tzinfo=tzutc()),\n",
       "                             'database_format': '%c/%d/%Y',\n",
       "                             'example': '01/30/2022',\n",
       "                             'has_time': False,\n",
       "                             'id': 4,\n",
       "                             'unix_format': 'yyyy-MM-dd'},\n",
-      "                            {'created_at': datetime.datetime(2022, 8, 17, 10, 21, 43, 631000, tzinfo=tzutc()),\n",
+      "                            {'created_at': datetime.datetime(2022, 8, 24, 6, 15, 21, 255000, tzinfo=tzutc()),\n",
       "                             'database_format': '%c/%d/%y',\n",
       "                             'example': '01/30/22',\n",
       "                             'has_time': False,\n",
       "                             'id': 5,\n",
       "                             'unix_format': 'yyyy-MM-dd'},\n",
-      "                            {'created_at': datetime.datetime(2022, 8, 17, 10, 21, 43, 634000, tzinfo=tzutc()),\n",
-      "                             'database_format': '%Y-%c-%d %H:%i:%S.%f',\n",
-      "                             'example': '2022-01-30 13:44:25.0',\n",
+      "                            {'created_at': datetime.datetime(2022, 8, 24, 6, 15, 21, 255000, tzinfo=tzutc()),\n",
+      "                             'database_format': \"%Y-%c-%d'T'%H:%i:%S.%f\",\n",
+      "                             'example': '2022-01-30T13:44:25.499',\n",
       "                             'has_time': True,\n",
       "                             'id': 6,\n",
-      "                             'unix_format': 'yyyy-MM-dd HH:mm:ss.SSSSSS'},\n",
-      "                            {'created_at': datetime.datetime(2022, 8, 17, 10, 21, 43, 636000, tzinfo=tzutc()),\n",
-      "                             'database_format': '%Y-%c-%d %H:%i:%S',\n",
-      "                             'example': '2022-01-30 13:44:25',\n",
+      "                             'unix_format': \"yyyy-MM-dd'T'HH:mm:ss.SSSSSS\"},\n",
+      "                            {'created_at': datetime.datetime(2022, 8, 24, 6, 15, 21, 255000, tzinfo=tzutc()),\n",
+      "                             'database_format': '%Y-%c-%d %H:%i:%S.%f',\n",
+      "                             'example': '2022-01-30 13:44:25.499',\n",
       "                             'has_time': True,\n",
       "                             'id': 7,\n",
-      "                             'unix_format': 'yyyy-MM-dd HH:mm:ss'},\n",
-      "                            {'created_at': datetime.datetime(2022, 8, 17, 10, 21, 43, 640000, tzinfo=tzutc()),\n",
-      "                             'database_format': '%d.%c.%Y %H:%i:%S',\n",
-      "                             'example': '30.01.2022 13:44:25',\n",
+      "                             'unix_format': 'yyyy-MM-dd HH:mm:ss.SSSSSS'},\n",
+      "                            {'created_at': datetime.datetime(2022, 8, 24, 6, 15, 21, 255000, tzinfo=tzutc()),\n",
+      "                             'database_format': \"%Y-%c-%d'T'%H:%i:%S\",\n",
+      "                             'example': '2022-01-30T13:44:25',\n",
       "                             'has_time': True,\n",
       "                             'id': 8,\n",
-      "                             'unix_format': 'dd.MM.yyyy HH:mm:ss'}],\n",
+      "                             'unix_format': \"yyyy-MM-dd'T'HH:mm:ss\"},\n",
+      "                            {'created_at': datetime.datetime(2022, 8, 24, 6, 15, 21, 255000, tzinfo=tzutc()),\n",
+      "                             'database_format': '%Y-%c-%d %H:%i:%S',\n",
+      "                             'example': '2022-01-30 13:44:25',\n",
+      "                             'has_time': True,\n",
+      "                             'id': 9,\n",
+      "                             'unix_format': 'yyyy-MM-dd HH:mm:ss'}],\n",
       "           'default_port': 3306,\n",
       "           'dialect': 'org.hibernate.dialect.MariaDBDialect',\n",
       "           'driver_class': 'org.mariadb.jdbc.Driver',\n",
@@ -364,11 +375,11 @@
       "           'repository': 'mariadb',\n",
       "           'size': None,\n",
       "           'tag': '10.5'},\n",
-      " 'internal_name': 'airquality_a24d3738-1e1b-11ed-b193-8c8caada74c3',\n",
+      " 'internal_name': 'airquality_35dc8a38-2378-11ed-b35c-8c8caada74c3',\n",
       " 'is_public': False,\n",
       " 'language': None,\n",
       " 'license': None,\n",
-      " 'name': 'Airquality a24d3738-1e1b-11ed-b193-8c8caada74c3',\n",
+      " 'name': 'Airquality 35dc8a38-2378-11ed-b35c-8c8caada74c3',\n",
       " 'publication_year': 2022,\n",
       " 'publisher': None,\n",
       " 'subjects': [],\n",
@@ -390,7 +401,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
+   "execution_count": 8,
    "metadata": {
     "pycharm": {
      "name": "#%%\n"
@@ -401,25 +412,27 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "{'container': {'created': datetime.datetime(2022, 8, 17, 10, 59, 9, 964000, tzinfo=tzutc()),\n",
+      "{'container': {'created': datetime.datetime(2022, 8, 24, 6, 44, 27, 20000, tzinfo=tzutc()),\n",
       "               'creator': {'affiliation': None,\n",
+      "                           'email_verified': False,\n",
       "                           'firstname': 'Martin',\n",
-      "                           'id': 3,\n",
+      "                           'id': 5,\n",
       "                           'lastname': 'Weise',\n",
       "                           'orcid': None,\n",
       "                           'theme_dark': False,\n",
       "                           'titles_after': None,\n",
       "                           'titles_before': None,\n",
       "                           'username': 'test'},\n",
-      "               'hash': '5188e3aa1d16411f98b0cde473c39e79f54c205da3d0f5cae601e797efd053cb',\n",
-      "               'id': 2,\n",
-      "               'internal_name': 'fda-userdb-airquality-9c04db38-1e1b-11ed-b193-8c8caada74c3',\n",
+      "               'hash': '56eb904f34a73adb34a5dc93ce4895de05d2d7891ccff38b7a7ed45bc654aa64',\n",
+      "               'id': 8,\n",
+      "               'internal_name': 'fda-userdb-airquality-328b5a3a-2378-11ed-b35c-8c8caada74c3',\n",
       "               'is_public': None,\n",
-      "               'name': 'Airquality 9c04db38-1e1b-11ed-b193-8c8caada74c3'},\n",
-      " 'created': datetime.datetime(2022, 8, 17, 10, 59, 15, 497000, tzinfo=tzutc()),\n",
+      "               'name': 'Airquality 328b5a3a-2378-11ed-b35c-8c8caada74c3'},\n",
+      " 'created': datetime.datetime(2022, 8, 24, 6, 44, 32, 558000, tzinfo=tzutc()),\n",
       " 'creator': {'affiliation': None,\n",
+      "             'email_verified': False,\n",
       "             'firstname': 'Martin',\n",
-      "             'id': 3,\n",
+      "             'id': 5,\n",
       "             'lastname': 'Weise',\n",
       "             'orcid': None,\n",
       "             'theme_dark': False,\n",
@@ -437,9 +450,9 @@
       "                'values of the completed day for the current year are updated '\n",
       "                'every 30 minutes after midnight (UTC+1).',\n",
       " 'engine': 'mariadb:10.5',\n",
-      " 'id': 2,\n",
+      " 'id': 8,\n",
       " 'is_public': False,\n",
-      " 'name': 'Airquality a24d3738-1e1b-11ed-b193-8c8caada74c3'}\n"
+      " 'name': 'Airquality 35dc8a38-2378-11ed-b35c-8c8caada74c3'}\n"
      ]
     }
    ],
@@ -460,7 +473,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 9,
    "metadata": {
     "pycharm": {
      "name": "#%%\n"
@@ -472,17 +485,18 @@
      "output_type": "stream",
      "text": [
       "{'creator': {'affiliation': None,\n",
+      "             'email_verified': False,\n",
       "             'firstname': 'Martin',\n",
-      "             'id': 3,\n",
+      "             'id': 5,\n",
       "             'lastname': 'Weise',\n",
       "             'orcid': None,\n",
       "             'theme_dark': False,\n",
       "             'titles_after': None,\n",
       "             'titles_before': None,\n",
       "             'username': 'test'},\n",
-      " 'id': 2,\n",
-      " 'internal_name': 'airquality_a28ac288-1e1b-11ed-b193-8c8caada74c3',\n",
-      " 'name': 'Airquality a28ac288-1e1b-11ed-b193-8c8caada74c3'}\n"
+      " 'id': 11,\n",
+      " 'internal_name': 'airquality_360185cc-2378-11ed-b35c-8c8caada74c3',\n",
+      " 'name': 'Airquality 360185cc-2378-11ed-b35c-8c8caada74c3'}\n"
      ]
     }
    ],
@@ -541,7 +555,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 10,
    "metadata": {
     "pycharm": {
      "name": "#%%\n"
@@ -561,7 +575,7 @@
       "              'decimal_digits_before': None,\n",
       "              'enum_values': [],\n",
       "              'foreign_key': None,\n",
-      "              'id': 9,\n",
+      "              'id': 53,\n",
       "              'internal_name': 'id',\n",
       "              'is_null_allowed': False,\n",
       "              'is_primary_key': True,\n",
@@ -572,7 +586,7 @@
       "              'check_expression': None,\n",
       "              'column_concept': None,\n",
       "              'column_type': 'date',\n",
-      "              'date_format': {'created_at': datetime.datetime(2022, 8, 17, 10, 21, 43, 614000, tzinfo=tzutc()),\n",
+      "              'date_format': {'created_at': datetime.datetime(2022, 8, 24, 6, 15, 21, 255000, tzinfo=tzutc()),\n",
       "                              'database_format': '%Y-%c-%d',\n",
       "                              'example': '2022-01-30',\n",
       "                              'has_time': False,\n",
@@ -582,7 +596,7 @@
       "              'decimal_digits_before': None,\n",
       "              'enum_values': [],\n",
       "              'foreign_key': None,\n",
-      "              'id': 10,\n",
+      "              'id': 54,\n",
       "              'internal_name': 'date',\n",
       "              'is_null_allowed': True,\n",
       "              'is_primary_key': False,\n",
@@ -598,7 +612,7 @@
       "              'decimal_digits_before': None,\n",
       "              'enum_values': [],\n",
       "              'foreign_key': None,\n",
-      "              'id': 11,\n",
+      "              'id': 55,\n",
       "              'internal_name': 'location',\n",
       "              'is_null_allowed': True,\n",
       "              'is_primary_key': False,\n",
@@ -614,7 +628,7 @@
       "              'decimal_digits_before': None,\n",
       "              'enum_values': [],\n",
       "              'foreign_key': None,\n",
-      "              'id': 12,\n",
+      "              'id': 56,\n",
       "              'internal_name': 'parameter',\n",
       "              'is_null_allowed': True,\n",
       "              'is_primary_key': False,\n",
@@ -630,7 +644,7 @@
       "              'decimal_digits_before': None,\n",
       "              'enum_values': [],\n",
       "              'foreign_key': None,\n",
-      "              'id': 13,\n",
+      "              'id': 57,\n",
       "              'internal_name': 'interval',\n",
       "              'is_null_allowed': True,\n",
       "              'is_primary_key': False,\n",
@@ -646,7 +660,7 @@
       "              'decimal_digits_before': None,\n",
       "              'enum_values': [],\n",
       "              'foreign_key': None,\n",
-      "              'id': 14,\n",
+      "              'id': 58,\n",
       "              'internal_name': 'unit',\n",
       "              'is_null_allowed': True,\n",
       "              'is_primary_key': False,\n",
@@ -662,7 +676,7 @@
       "              'decimal_digits_before': None,\n",
       "              'enum_values': [],\n",
       "              'foreign_key': None,\n",
-      "              'id': 15,\n",
+      "              'id': 59,\n",
       "              'internal_name': 'value',\n",
       "              'is_null_allowed': True,\n",
       "              'is_primary_key': False,\n",
@@ -678,17 +692,18 @@
       "              'decimal_digits_before': None,\n",
       "              'enum_values': [],\n",
       "              'foreign_key': None,\n",
-      "              'id': 16,\n",
+      "              'id': 60,\n",
       "              'internal_name': 'status',\n",
       "              'is_null_allowed': True,\n",
       "              'is_primary_key': False,\n",
       "              'name': 'Status',\n",
       "              'references': None,\n",
       "              'unique': False}],\n",
-      " 'created': datetime.datetime(2022, 8, 17, 10, 59, 15, 923000, tzinfo=tzutc()),\n",
+      " 'created': datetime.datetime(2022, 8, 24, 6, 44, 32, 816000, tzinfo=tzutc()),\n",
       " 'creator': {'affiliation': None,\n",
+      "             'email_verified': False,\n",
       "             'firstname': 'Martin',\n",
-      "             'id': 3,\n",
+      "             'id': 5,\n",
       "             'lastname': 'Weise',\n",
       "             'orcid': None,\n",
       "             'theme_dark': False,\n",
@@ -696,10 +711,10 @@
       "             'titles_before': None,\n",
       "             'username': 'test'},\n",
       " 'description': 'Airquality in Zürich, Switzerland',\n",
-      " 'id': 2,\n",
-      " 'internal_name': 'airquality_a28ac288-1e1b-11ed-b193-8c8caada74c3',\n",
-      " 'name': 'Airquality a28ac288-1e1b-11ed-b193-8c8caada74c3',\n",
-      " 'topic': 'airquality_a28ac288-1e1b-11ed-b193-8c8caada74c3'}\n"
+      " 'id': 11,\n",
+      " 'internal_name': 'airquality_360185cc-2378-11ed-b35c-8c8caada74c3',\n",
+      " 'name': 'Airquality 360185cc-2378-11ed-b35c-8c8caada74c3',\n",
+      " 'topic': 'airquality_360185cc-2378-11ed-b35c-8c8caada74c3'}\n"
      ]
     }
    ],
@@ -711,7 +726,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 11,
    "metadata": {
     "pycharm": {
      "name": "#%%\n"
@@ -722,66 +737,65 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "{'date': 'Date', 'location': 'Location', 'parameter': 'Parameter', 'interval': 'Interval', 'unit': 'Unit', 'value': 'Value', 'status': 'Status'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'CO', 'interval': 'h1', 'unit': 'mg/m3', 'value': '0.44', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'SO2', 'interval': 'h1', 'unit': 'µg/m3', 'value': '4.88', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'NOx', 'interval': 'h1', 'unit': 'ppb', 'value': '29.46', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'NO', 'interval': 'h1', 'unit': 'µg/m3', 'value': '9.85', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'NO2', 'interval': 'h1', 'unit': 'µg/m3', 'value': '41.24', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'O3', 'interval': 'h1', 'unit': 'µg/m3', 'value': '8.51', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'PM10', 'interval': 'h1', 'unit': 'µg/m3', 'value': '88.34', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'PM2.5', 'interval': 'h1', 'unit': 'µg/m3', 'value': '75.72', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Schimmelstrasse', 'parameter': 'NOx', 'interval': 'h1', 'unit': 'ppb', 'value': '41.66', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Schimmelstrasse', 'parameter': 'NO', 'interval': 'h1', 'unit': 'µg/m3', 'value': '21.64', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Schimmelstrasse', 'parameter': 'NO2', 'interval': 'h1', 'unit': 'µg/m3', 'value': '46.49', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Schimmelstrasse', 'parameter': 'O3', 'interval': 'h1', 'unit': 'µg/m3', 'value': '6.32', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Schimmelstrasse', 'parameter': 'PM10', 'interval': 'h1', 'unit': 'µg/m3', 'value': '98.65', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Schimmelstrasse', 'parameter': 'PM2.5', 'interval': 'h1', 'unit': 'µg/m3', 'value': '84.78', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Heubeeribüel', 'parameter': 'NOx', 'interval': 'h1', 'unit': 'ppb', 'value': '9.11', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Heubeeribüel', 'parameter': 'NO', 'interval': 'h1', 'unit': 'µg/m3', 'value': '0.77', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Heubeeribüel', 'parameter': 'NO2', 'interval': 'h1', 'unit': 'µg/m3', 'value': '16.24', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Heubeeribüel', 'parameter': 'O3', 'interval': 'h1', 'unit': 'µg/m3', 'value': '33.11', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Rosengartenstrasse', 'parameter': 'NOx', 'interval': 'h1', 'unit': 'ppb', 'value': '36.55', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Rosengartenstrasse', 'parameter': 'NO', 'interval': 'h1', 'unit': 'µg/m3', 'value': '17.2', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Rosengartenstrasse', 'parameter': 'NO2', 'interval': 'h1', 'unit': 'µg/m3', 'value': '43.51', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Rosengartenstrasse', 'parameter': 'O3', 'interval': 'h1', 'unit': 'µg/m3', 'value': '4.38', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Rosengartenstrasse', 'parameter': 'PM10', 'interval': 'h1', 'unit': 'µg/m3', 'value': '74.05', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Rosengartenstrasse', 'parameter': 'PM2.5', 'interval': 'h1', 'unit': 'µg/m3', 'value': '74.11', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'CO', 'interval': 'h1', 'unit': 'mg/m3', 'value': '0.4', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'SO2', 'interval': 'h1', 'unit': 'µg/m3', 'value': '5.02', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'NOx', 'interval': 'h1', 'unit': 'ppb', 'value': '35.47', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'NO', 'interval': 'h1', 'unit': 'µg/m3', 'value': '16.28', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'NO2', 'interval': 'h1', 'unit': 'µg/m3', 'value': '42.88', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'O3', 'interval': 'h1', 'unit': 'µg/m3', 'value': '5.34', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'PM10', 'interval': 'h1', 'unit': 'µg/m3', 'value': '140.15', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Stampfenbachstrasse', 'parameter': 'PM2.5', 'interval': 'h1', 'unit': 'µg/m3', 'value': '118.87', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Schimmelstrasse', 'parameter': 'NOx', 'interval': 'h1', 'unit': 'ppb', 'value': '39.43', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Schimmelstrasse', 'parameter': 'NO', 'interval': 'h1', 'unit': 'µg/m3', 'value': '20.8', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Schimmelstrasse', 'parameter': 'NO2', 'interval': 'h1', 'unit': 'µg/m3', 'value': '43.51', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Schimmelstrasse', 'parameter': 'O3', 'interval': 'h1', 'unit': 'µg/m3', 'value': '6.93', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Schimmelstrasse', 'parameter': 'PM10', 'interval': 'h1', 'unit': 'µg/m3', 'value': '118.95', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Schimmelstrasse', 'parameter': 'PM2.5', 'interval': 'h1', 'unit': 'µg/m3', 'value': '102.54', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Heubeeribüel', 'parameter': 'NOx', 'interval': 'h1', 'unit': 'ppb', 'value': '5.31', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Heubeeribüel', 'parameter': 'NO', 'interval': 'h1', 'unit': 'µg/m3', 'value': '0.52', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Heubeeribüel', 'parameter': 'NO2', 'interval': 'h1', 'unit': 'µg/m3', 'value': '9.36', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Heubeeribüel', 'parameter': 'O3', 'interval': 'h1', 'unit': 'µg/m3', 'value': '51.36', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Rosengartenstrasse', 'parameter': 'NOx', 'interval': 'h1', 'unit': 'ppb', 'value': '45.83', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Rosengartenstrasse', 'parameter': 'NO', 'interval': 'h1', 'unit': 'µg/m3', 'value': '28.15', 'status': 'tentative'}\n",
-      "{'date': '2021-01-01', 'location': 'Rosengartenstrasse', 'parameter': 'NO2', 'interval': 'h1', 'unit': 'µg/m3', 'value': '44.48', 'status': 'tentative'}\n"
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Stampfenbachstrasse\", \"parameter\": \"CO\", \"interval\": \"h1\", \"unit\": \"mg/m3\", \"value\": 0.44, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Stampfenbachstrasse\", \"parameter\": \"SO2\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 4.88, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Stampfenbachstrasse\", \"parameter\": \"NOx\", \"interval\": \"h1\", \"unit\": \"ppb\", \"value\": 29.46, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Stampfenbachstrasse\", \"parameter\": \"NO\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 9.85, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Stampfenbachstrasse\", \"parameter\": \"NO2\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 41.24, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Stampfenbachstrasse\", \"parameter\": \"O3\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 8.51, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Stampfenbachstrasse\", \"parameter\": \"PM10\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 88.34, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Stampfenbachstrasse\", \"parameter\": \"PM2.5\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 75.72, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Schimmelstrasse\", \"parameter\": \"NOx\", \"interval\": \"h1\", \"unit\": \"ppb\", \"value\": 41.66, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Schimmelstrasse\", \"parameter\": \"NO\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 21.64, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Schimmelstrasse\", \"parameter\": \"NO2\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 46.49, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Schimmelstrasse\", \"parameter\": \"O3\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 6.32, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Schimmelstrasse\", \"parameter\": \"PM10\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 98.65, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Schimmelstrasse\", \"parameter\": \"PM2.5\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 84.78, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Heubeerib\\u00fcel\", \"parameter\": \"NOx\", \"interval\": \"h1\", \"unit\": \"ppb\", \"value\": 9.11, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Heubeerib\\u00fcel\", \"parameter\": \"NO\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 0.77, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Heubeerib\\u00fcel\", \"parameter\": \"NO2\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 16.24, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Heubeerib\\u00fcel\", \"parameter\": \"O3\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 33.11, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Rosengartenstrasse\", \"parameter\": \"NOx\", \"interval\": \"h1\", \"unit\": \"ppb\", \"value\": 36.55, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Rosengartenstrasse\", \"parameter\": \"NO\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 17.2, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Rosengartenstrasse\", \"parameter\": \"NO2\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 43.51, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Rosengartenstrasse\", \"parameter\": \"O3\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 4.38, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Rosengartenstrasse\", \"parameter\": \"PM10\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 74.05, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Rosengartenstrasse\", \"parameter\": \"PM2.5\", \"interval\": \"h1\", \"unit\": \"\\u00b5g/m3\", \"value\": 74.11, \"status\": \"tentative\"}\n",
+      "... sent tuple\n",
+      "... sending tuple {\"date\": \"2021-01-01\", \"location\": \"Stampfenbachstrasse\", \"parameter\": \"CO\", \"interval\": \"h1\", \"unit\": \"mg/m3\", \"value\": 0.4, \"status\": \"tentative\"}\n",
+      "... sent tuple\n"
      ]
     },
     {
-     "ename": "AMQPConnectionError",
-     "evalue": "",
-     "output_type": "error",
-     "traceback": [
-      "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
-      "\u001B[0;31mAMQPConnectionError\u001B[0m                       Traceback (most recent call last)",
-      "Input \u001B[0;32mIn [19]\u001B[0m, in \u001B[0;36m<cell line: 3>\u001B[0;34m()\u001B[0m\n\u001B[1;32m      5\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m row \u001B[38;5;129;01min\u001B[39;00m csv_reader:\n\u001B[1;32m      6\u001B[0m     payload \u001B[38;5;241m=\u001B[39m {\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mdate\u001B[39m\u001B[38;5;124m'\u001B[39m: row[\u001B[38;5;241m0\u001B[39m], \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mlocation\u001B[39m\u001B[38;5;124m'\u001B[39m: row[\u001B[38;5;241m1\u001B[39m], \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mparameter\u001B[39m\u001B[38;5;124m'\u001B[39m: row[\u001B[38;5;241m2\u001B[39m], \u001B[38;5;124m'\u001B[39m\u001B[38;5;124minterval\u001B[39m\u001B[38;5;124m'\u001B[39m: row[\u001B[38;5;241m3\u001B[39m], \u001B[38;5;124m'\u001B[39m\u001B[38;5;124munit\u001B[39m\u001B[38;5;124m'\u001B[39m: row[\u001B[38;5;241m4\u001B[39m],\n\u001B[1;32m      7\u001B[0m                \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mvalue\u001B[39m\u001B[38;5;124m'\u001B[39m: row[\u001B[38;5;241m5\u001B[39m], \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mstatus\u001B[39m\u001B[38;5;124m'\u001B[39m: row[\u001B[38;5;241m6\u001B[39m]}\n\u001B[0;32m----> 8\u001B[0m     response \u001B[38;5;241m=\u001B[39m \u001B[43mbroker\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43msend\u001B[49m\u001B[43m(\u001B[49m\u001B[43mpayload\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m      9\u001B[0m     time\u001B[38;5;241m.\u001B[39msleep(\u001B[38;5;241m1\u001B[39m)\n\u001B[1;32m     10\u001B[0m     \u001B[38;5;28mprint\u001B[39m(payload)\n",
-      "File \u001B[0;32m~/Projects/fda-services/.jupyter/api_broker/BrokerServiceClient.py:17\u001B[0m, in \u001B[0;36mBrokerServiceClient.send\u001B[0;34m(self, data)\u001B[0m\n\u001B[1;32m     15\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21msend\u001B[39m(\u001B[38;5;28mself\u001B[39m, data):\n\u001B[1;32m     16\u001B[0m     creds \u001B[38;5;241m=\u001B[39m pika\u001B[38;5;241m.\u001B[39mcredentials\u001B[38;5;241m.\u001B[39mPlainCredentials(\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39musername, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mpassword)\n\u001B[0;32m---> 17\u001B[0m     connection \u001B[38;5;241m=\u001B[39m \u001B[43mpika\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mBlockingConnection\u001B[49m\u001B[43m(\u001B[49m\u001B[43mpika\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mConnectionParameters\u001B[49m\u001B[43m(\u001B[49m\u001B[43mhost\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mhost\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mcredentials\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mcreds\u001B[49m\u001B[43m)\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m     18\u001B[0m     channel \u001B[38;5;241m=\u001B[39m connection\u001B[38;5;241m.\u001B[39mchannel()\n\u001B[1;32m     19\u001B[0m     dump \u001B[38;5;241m=\u001B[39m json\u001B[38;5;241m.\u001B[39mdumps(data)\n",
-      "File \u001B[0;32m~/Projects/fda-services/.jupyter/venv/lib/python3.9/site-packages/pika/adapters/blocking_connection.py:360\u001B[0m, in \u001B[0;36mBlockingConnection.__init__\u001B[0;34m(self, parameters, _impl_class)\u001B[0m\n\u001B[1;32m    358\u001B[0m \u001B[38;5;66;03m# Perform connection workflow\u001B[39;00m\n\u001B[1;32m    359\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_impl \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m  \u001B[38;5;66;03m# so that attribute is created in case below raises\u001B[39;00m\n\u001B[0;32m--> 360\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_impl \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_create_connection\u001B[49m\u001B[43m(\u001B[49m\u001B[43mparameters\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m_impl_class\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m    361\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_impl\u001B[38;5;241m.\u001B[39madd_on_close_callback(\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_closed_result\u001B[38;5;241m.\u001B[39mset_value_once)\n",
-      "File \u001B[0;32m~/Projects/fda-services/.jupyter/venv/lib/python3.9/site-packages/pika/adapters/blocking_connection.py:451\u001B[0m, in \u001B[0;36mBlockingConnection._create_connection\u001B[0;34m(self, configs, impl_class)\u001B[0m\n\u001B[1;32m    449\u001B[0m     error \u001B[38;5;241m=\u001B[39m on_cw_done_result\u001B[38;5;241m.\u001B[39mvalue\u001B[38;5;241m.\u001B[39mresult\n\u001B[1;32m    450\u001B[0m     LOGGER\u001B[38;5;241m.\u001B[39merror(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mConnection workflow failed: \u001B[39m\u001B[38;5;132;01m%r\u001B[39;00m\u001B[38;5;124m'\u001B[39m, error)\n\u001B[0;32m--> 451\u001B[0m     \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_reap_last_connection_workflow_error(error)\n\u001B[1;32m    452\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m    453\u001B[0m     LOGGER\u001B[38;5;241m.\u001B[39minfo(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mConnection workflow succeeded: \u001B[39m\u001B[38;5;132;01m%r\u001B[39;00m\u001B[38;5;124m'\u001B[39m,\n\u001B[1;32m    454\u001B[0m                 on_cw_done_result\u001B[38;5;241m.\u001B[39mvalue\u001B[38;5;241m.\u001B[39mresult)\n",
-      "\u001B[0;31mAMQPConnectionError\u001B[0m: "
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "\n",
+      "KeyboardInterrupt\n",
+      "\n"
      ]
     }
    ],
@@ -792,10 +806,9 @@
     "    csv_reader = csv.reader(f, delimiter=',', quotechar='\"')\n",
     "    for row in csv_reader:\n",
     "        payload = {'date': row[0], 'location': row[1], 'parameter': row[2], 'interval': row[3], 'unit': row[4],\n",
-    "                   'value': row[5], 'status': row[6]}\n",
+    "                   'value': float(row[5]), 'status': row[6]}\n",
     "        response = broker.send(payload)\n",
-    "        time.sleep(1)\n",
-    "        print(payload)"
+    "        time.sleep(1)"
    ]
   },
   {
@@ -808,6 +821,18 @@
    },
    "outputs": [],
    "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "outputs": [],
+   "source": [],
+   "metadata": {
+    "collapsed": false,
+    "pycharm": {
+     "name": "#%%\n"
+    }
+   }
   }
  ],
  "metadata": {
diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml
index 4c624cc17e1fe28e778b084abfda9223f9e756e8..ed89268c49edc8fe04a042a29929c86af0a0eff4 100644
--- a/docker-compose.prod.yml
+++ b/docker-compose.prod.yml
@@ -117,6 +117,7 @@ services:
       METADATA_PASSWORD: ${METADATA_PASSWORD}
       BROKER_USERNAME: ${BROKER_USERNAME}
       BROKER_PASSWORD: ${BROKER_PASSWORD}
+      SHARED_FILESYSTEM: ${SHARED_FILESYSTEM}
     volumes:
       - /var/run/docker.sock:/var/run/docker.sock
     depends_on:
@@ -176,7 +177,7 @@ services:
       BROKER_USERNAME: ${BROKER_USERNAME}
       BROKER_PASSWORD: ${BROKER_PASSWORD}
     volumes:
-      - /tmp:/tmp
+      - ${SHARED_FILESYSTEM}:/tmp
     depends_on:
       table-service:
         condition: service_healthy
@@ -266,7 +267,7 @@ services:
     ports:
       - "5010:5010"
     volumes:
-      - /tmp:/tmp
+      - ${SHARED_FILESYSTEM}:/tmp
       - /var/run/docker.sock:/var/run/docker.sock
     depends_on:
       discovery-service:
@@ -343,5 +344,6 @@ services:
     environment:
       BROKER_USERNAME: ${BROKER_USERNAME}
       BROKER_PASSWORD: ${BROKER_PASSWORD}
+      SHARED_FILESYSTEM: ${SHARED_FILESYSTEM}
     logging:
       driver: json-file
diff --git a/docker-compose.yml b/docker-compose.yml
index 8374730a1b17699f601f2bcdda4122182890d691..5489f2d4f749069a6b0baee8ba690a794636b2ba 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -79,8 +79,6 @@ services:
       userdb:
       public:
     environment:
-      GATEWAY_ENDPOINT: http://fda-gateway-service:9095
-      SEARCH_ENDPOINT: fda-search-service:9200
       SPRING_PROFILES_ACTIVE: docker
     ports:
       - "9092:9092"
@@ -105,7 +103,6 @@ services:
     networks:
       public:
     environment:
-      GATEWAY_ENDPOINT: http://fda-gateway-service:9095
       SPRING_PROFILES_ACTIVE: docker
     ports:
       - "9091:9091"
@@ -126,13 +123,6 @@ services:
     networks:
       public:
     environment:
-      GATEWAY_ENDPOINT: http://fda-gateway-service:9095
-      WEBSITE: http://localhost:3000
-      MAIL_FROM: Database Repository <noreply@dbrepo.ossdip.at>
-      MAIL_REPLY_TO: Martin Weise <martin.weise@tuwien.ac.at>
-      JWT_ISSUER: fda-dbrepo
-      JWT_SECRET: fda-secret
-      JWT_EXPIRATION: 86400000
       SPRING_PROFILES_ACTIVE: docker
     ports:
       - "9097:9097"
@@ -157,7 +147,6 @@ services:
       userdb:
     environment:
       SPRING_PROFILES_ACTIVE: docker
-      GATEWAY_ENDPOINT: http://fda-gateway-service:9095
     ports:
       - "9093:9093"
     volumes:
@@ -208,7 +197,6 @@ services:
     networks:
       public:
     environment:
-      GATEWAY_ENDPOINT: http://fda-gateway-service:9095
       SPRING_PROFILES_ACTIVE: docker
     ports:
       - "9096:9096"
@@ -231,7 +219,6 @@ services:
       userdb:
     command: sh -c "/wait && flask run" # docker-compose should not test the implementation
     environment:
-      EUREKA_SERVER: http://fda-discovery-service:9090/eureka/
       hostname: analyse-service
     ports:
       - "5000:5000"
@@ -273,7 +260,6 @@ services:
     image: fda-broker-service
     environment:
       SPRING_PROFILES_ACTIVE: docker
-      GATEWAY_ENDPOINT: http://fda-gateway-service:9095
     networks:
       public:
     ports:
diff --git a/fda-authentication-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/fda-authentication-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java
index 235a120647c0968e2452206a2db9dabb9d120f91..6551bd41efbc7d3d58efdcdbc232f96f207a68fb 100644
--- a/fda-authentication-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java
+++ b/fda-authentication-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java
@@ -32,7 +32,6 @@ public class AuthTokenFilter extends OncePerRequestFilter {
         final String jwt = parseJwt(request);
         if (jwt != null && jwtUtils.validateJwtToken(jwt)) {
             final String username = jwtUtils.getUserNameFromJwtToken(jwt);
-
             final UserDetails userDetails = userDetailsService.loadUserByUsername(username);
             final UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
                     userDetails, null, userDetails.getAuthorities());
diff --git a/fda-authentication-service/services/src/main/java/at/tuwien/service/impl/UserDetailsServiceImpl.java b/fda-authentication-service/services/src/main/java/at/tuwien/service/impl/UserDetailsServiceImpl.java
index d8f1ecdb09c022b3798b80d9061c8cebc649dc53..1fd36453a32f4baccc57e3adb089529173f29ef0 100644
--- a/fda-authentication-service/services/src/main/java/at/tuwien/service/impl/UserDetailsServiceImpl.java
+++ b/fda-authentication-service/services/src/main/java/at/tuwien/service/impl/UserDetailsServiceImpl.java
@@ -35,7 +35,7 @@ public class UserDetailsServiceImpl implements UserDetailsService {
         try {
             user = userService.findByUsername(username);
         } catch (UserNotFoundException e) {
-            log.error("Failed to find user");
+            log.error("Failed to find user with username {}", username);
             throw new UsernameNotFoundException("Failed to find user", e);
         }
         log.trace("loaded user {}", user);
diff --git a/fda-container-service/Dockerfile b/fda-container-service/Dockerfile
index 91bb62cdd4ff7cb2b5029eaf0078cc1649eaa42f..f0433e17409eaedf2c5cc2ade52151dfdbe52856 100644
--- a/fda-container-service/Dockerfile
+++ b/fda-container-service/Dockerfile
@@ -26,6 +26,7 @@ ENV METADATA_USERNAME=postgres
 ENV METADATA_PASSWORD=postgres
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
+ENV SHARED_FILESYSTEM=/tmp
 
 COPY ./service_ready /usr/bin
 RUN chmod +x /usr/bin/service_ready
diff --git a/fda-container-service/pom.xml b/fda-container-service/pom.xml
index f39df32995df3e6caca78071e584307a069ca59d..17dc8db0fbd1fa25f1965ed1fd454fe116e7d03e 100644
--- a/fda-container-service/pom.xml
+++ b/fda-container-service/pom.xml
@@ -27,7 +27,7 @@
         <mapstruct.version>1.4.2.Final</mapstruct.version>
         <docker.version>3.2.7</docker.version>
         <testcontainers.version>1.15.2</testcontainers.version>
-        <swagger.version>2.1.7</swagger.version>
+        <swagger.version>2.2.2</swagger.version>
         <jacoco.version>0.8.7</jacoco.version>
         <sqlserver.version>9.2.1.jre11</sqlserver.version>
     </properties>
@@ -59,6 +59,12 @@
             <artifactId>spring-security-test</artifactId>
             <scope>test</scope>
         </dependency>
+        <!-- Swagger -->
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-core</artifactId>
+            <version>2.2.2</version>
+        </dependency>
         <!-- Data Source -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
diff --git a/fda-container-service/rest-service/src/main/resources/application-docker.yml b/fda-container-service/rest-service/src/main/resources/application-docker.yml
index 8cadde6a05233e148e0bb2d7bffa65482b3e3a61..510c4099b1dd2ea51676aed0266cd47055db62fb 100644
--- a/fda-container-service/rest-service/src/main/resources/application-docker.yml
+++ b/fda-container-service/rest-service/src/main/resources/application-docker.yml
@@ -34,4 +34,4 @@ eureka:
 fda:
   mount.path: /tmp
   ready.path: /ready
-  gateway.endpoint: "${GATEWAY_ENDPOINT}"
\ No newline at end of file
+  gateway.endpoint: http://gateway-service:9095
\ No newline at end of file
diff --git a/fda-container-service/rest-service/src/main/resources/application-local.yml b/fda-container-service/rest-service/src/main/resources/application-local.yml
new file mode 100644
index 0000000000000000000000000000000000000000..38b31bcd56a0d22c262c5ba118fe93d79bba10a8
--- /dev/null
+++ b/fda-container-service/rest-service/src/main/resources/application-local.yml
@@ -0,0 +1,37 @@
+app.version: '@project.version@'
+spring:
+  main.banner-mode: off
+  datasource:
+    url: jdbc:postgresql://localhost:5432/fda
+    driver-class-name: org.postgresql.Driver
+    username: postgres
+    password: postgres
+  jpa:
+    show-sql: false
+    database-platform: org.hibernate.dialect.PostgreSQLDialect
+    hibernate:
+      ddl-auto: validate
+    open-in-view: false
+    properties:
+      hibernate:
+        jdbc:
+          time_zone: UTC
+  application:
+    name: container-service
+  cloud:
+    loadbalancer.ribbon.enabled: false
+springdoc.swagger-ui.enabled: true
+server.port: 9091
+logging:
+  pattern.console: "%d %highlight(%-5level) %msg%n"
+  level:
+    root: warn
+    at.tuwien.: debug
+    org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug
+eureka:
+  instance.hostname: container-service
+  client.serviceUrl.defaultZone: http://localhost:9090/eureka/
+fda:
+  mount.path: /tmp
+  ready.path: ./ready
+  gateway.endpoint: http://localhost:9095
\ No newline at end of file
diff --git a/fda-container-service/rest-service/src/main/resources/application.yml b/fda-container-service/rest-service/src/main/resources/application.yml
index d38936b08a03d0932f0a8a15e2fead0abf5ad7a9..afb2e5e103c889e10f89aa1f39ff5accbf1883ba 100644
--- a/fda-container-service/rest-service/src/main/resources/application.yml
+++ b/fda-container-service/rest-service/src/main/resources/application.yml
@@ -32,6 +32,6 @@ eureka:
   instance.hostname: container-service
   client.serviceUrl.defaultZone: http://discovery-service:9090/eureka/
 fda:
-  mount.path: /tmp
+  mount.path: "${SHARED_FILESYSTEM}"
   ready.path: /ready
   gateway.endpoint: http://gateway-service:9095
\ No newline at end of file
diff --git a/fda-container-service/services/src/main/java/at/tuwien/config/DockerConfig.java b/fda-container-service/services/src/main/java/at/tuwien/config/DockerConfig.java
index e9ed1d6dff32eac0393892bbbd4177ed64fd81cb..4915aba7937ce916d1c93d39c04ce0d5eb635b81 100644
--- a/fda-container-service/services/src/main/java/at/tuwien/config/DockerConfig.java
+++ b/fda-container-service/services/src/main/java/at/tuwien/config/DockerConfig.java
@@ -10,12 +10,18 @@ import com.github.dockerjava.httpclient5.ApacheDockerHttpClient;
 import com.github.dockerjava.transport.DockerHttpClient;
 import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
 import io.swagger.v3.oas.annotations.security.SecurityScheme;
+import lombok.Getter;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+@Getter
 @Configuration
 public class DockerConfig {
 
+    @Value("${fda.mount.path}")
+    private String mountPath;
+
     @Bean
     public HostConfig hostConfig() {
         return HostConfig.newHostConfig()
diff --git a/fda-container-service/services/src/main/java/at/tuwien/config/ReadyConfig.java b/fda-container-service/services/src/main/java/at/tuwien/config/ReadyConfig.java
index 6463b1eb05d797b466f245276796706613715d9f..2250fa50884df3f47b0b063975aea74f06203f80 100644
--- a/fda-container-service/services/src/main/java/at/tuwien/config/ReadyConfig.java
+++ b/fda-container-service/services/src/main/java/at/tuwien/config/ReadyConfig.java
@@ -1,9 +1,7 @@
 package at.tuwien.config;
 
-import at.tuwien.seeder.Seeder;
 import com.google.common.io.Files;
 import lombok.extern.log4j.Log4j2;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
 import org.springframework.context.annotation.Configuration;
@@ -19,16 +17,8 @@ public class ReadyConfig {
     @Value("${fda.ready.path}")
     private String readyPath;
 
-    private final Seeder seederImpl;
-
-    @Autowired
-    public ReadyConfig(Seeder seederImpl) {
-        this.seederImpl = seederImpl;
-    }
-
     @EventListener(ApplicationReadyEvent.class)
     public void init() throws IOException {
-        seederImpl.seed();
         Files.touch(new File(readyPath));
     }
 
diff --git a/fda-container-service/services/src/main/java/at/tuwien/seeder/Seeder.java b/fda-container-service/services/src/main/java/at/tuwien/seeder/Seeder.java
deleted file mode 100644
index 544ccc3054cfa9b48228c2cae37470c4e74f2084..0000000000000000000000000000000000000000
--- a/fda-container-service/services/src/main/java/at/tuwien/seeder/Seeder.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package at.tuwien.seeder;
-
-public interface Seeder {
-
-    void seed();
-}
diff --git a/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/AbstractSeeder.java b/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/AbstractSeeder.java
deleted file mode 100644
index 290f14835668aa346f9c8531696671d62b37b18f..0000000000000000000000000000000000000000
--- a/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/AbstractSeeder.java
+++ /dev/null
@@ -1,216 +0,0 @@
-package at.tuwien.seeder.impl;
-
-import at.tuwien.api.container.ContainerCreateRequestDto;
-import at.tuwien.entities.container.image.ContainerImage;
-import at.tuwien.entities.container.image.ContainerImageDate;
-import at.tuwien.entities.container.image.ContainerImageEnvironmentItem;
-import at.tuwien.entities.container.image.ContainerImageEnvironmentItemType;
-import org.apache.http.auth.BasicUserPrincipal;
-
-import java.security.Principal;
-import java.util.List;
-
-public abstract class AbstractSeeder {
-
-    public final static Long USER_1_ID = 1L;
-    public final static String USER_1_USERNAME = "system";
-
-    public final static Principal PRINCIPAL_1 = new BasicUserPrincipal(USER_1_USERNAME);
-
-    public final static Long IMAGE_1_ID = 1L;
-    public final static String IMAGE_1_REPOSITORY = "mariadb";
-    public final static String IMAGE_1_TAG = "10.5";
-    public final static String IMAGE_1_DIALECT = "org.hibernate.dialect.MariaDBDialect";
-    public final static String IMAGE_1_DRIVER = "org.mariadb.jdbc.Driver";
-    public final static String IMAGE_1_JDBC = "mariadb";
-    public final static String IMAGE_1_LOGO = "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";
-    public final static Integer IMAGE_1_PORT = 3306;
-
-    public final static List<ContainerImageEnvironmentItem> IMAGE_1_ENVIRONMENT = List.of(
-            ContainerImageEnvironmentItem.builder()
-                    .iid(IMAGE_1_ID)
-                    .key("ROOT")
-                    .value("root")
-                    .type(ContainerImageEnvironmentItemType.PRIVILEGED_USERNAME)
-                    .build(),
-            ContainerImageEnvironmentItem.builder()
-                    .iid(IMAGE_1_ID)
-                    .key("MARIADB_ROOT_PASSWORD")
-                    .value("mariadb")
-                    .type(ContainerImageEnvironmentItemType.PRIVILEGED_PASSWORD)
-                    .build(),
-            ContainerImageEnvironmentItem.builder()
-                    .iid(IMAGE_1_ID)
-                    .key("MARIADB_USER")
-                    .value("mariadb")
-                    .type(ContainerImageEnvironmentItemType.USERNAME)
-                    .build(),
-            ContainerImageEnvironmentItem.builder()
-                    .iid(IMAGE_1_ID)
-                    .key("MARIADB_PASSWORD")
-                    .value("mariadb")
-                    .type(ContainerImageEnvironmentItemType.PASSWORD)
-                    .build());
-
-    public final static Long IMAGE_DATE_1_ID = 1L;
-    public final static Long IMAGE_DATE_1_IMAGE_ID = IMAGE_1_ID;
-    public final static String IMAGE_DATE_1_DATABASE_FORMAT = "%Y-%c-%d";
-    public final static String IMAGE_DATE_1_UNIX_FORMAT = "yyyy-MM-dd";
-    public final static String IMAGE_DATE_1_EXAMPLE = "2022-01-30";
-    public final static Boolean IMAGE_DATE_1_HAS_TIME = false;
-
-    public final static Long IMAGE_DATE_2_ID = 2L;
-    public final static Long IMAGE_DATE_2_IMAGE_ID = IMAGE_1_ID;
-    public final static String IMAGE_DATE_2_DATABASE_FORMAT = "%d.%c.%Y";
-    public final static String IMAGE_DATE_2_UNIX_FORMAT = "yyyy-MM-dd";
-    public final static String IMAGE_DATE_2_EXAMPLE = "30.01.2022";
-    public final static Boolean IMAGE_DATE_2_HAS_TIME = false;
-
-    public final static Long IMAGE_DATE_3_ID = 3L;
-    public final static Long IMAGE_DATE_3_IMAGE_ID = IMAGE_1_ID;
-    public final static String IMAGE_DATE_3_DATABASE_FORMAT = "%d.%c.%y";
-    public final static String IMAGE_DATE_3_UNIX_FORMAT = "yyyy-MM-dd";
-    public final static String IMAGE_DATE_3_EXAMPLE = "30.01.22";
-    public final static Boolean IMAGE_DATE_3_HAS_TIME = false;
-
-    public final static Long IMAGE_DATE_4_ID = 4L;
-    public final static Long IMAGE_DATE_4_IMAGE_ID = IMAGE_1_ID;
-    public final static String IMAGE_DATE_4_DATABASE_FORMAT = "%c/%d/%Y";
-    public final static String IMAGE_DATE_4_UNIX_FORMAT = "yyyy-MM-dd";
-    public final static String IMAGE_DATE_4_EXAMPLE = "01/30/2022";
-    public final static Boolean IMAGE_DATE_4_HAS_TIME = false;
-
-    public final static Long IMAGE_DATE_5_ID = 5L;
-    public final static Long IMAGE_DATE_5_IMAGE_ID = IMAGE_1_ID;
-    public final static String IMAGE_DATE_5_DATABASE_FORMAT = "%c/%d/%y";
-    public final static String IMAGE_DATE_5_UNIX_FORMAT = "yyyy-MM-dd";
-    public final static String IMAGE_DATE_5_EXAMPLE = "01/30/22";
-    public final static Boolean IMAGE_DATE_5_HAS_TIME = false;
-
-    public final static Long IMAGE_DATE_6_ID = 6L;
-    public final static Long IMAGE_DATE_6_IMAGE_ID = IMAGE_1_ID;
-    public final static String IMAGE_DATE_6_DATABASE_FORMAT = "%Y-%c-%d %H:%i:%S.%f";
-    public final static String IMAGE_DATE_6_UNIX_FORMAT = "yyyy-MM-dd HH:mm:ss.SSSSSS";
-    public final static String IMAGE_DATE_6_EXAMPLE = "2022-01-30 13:44:25.0";
-    public final static Boolean IMAGE_DATE_6_HAS_TIME = true;
-
-    public final static Long IMAGE_DATE_7_ID = 7L;
-    public final static Long IMAGE_DATE_7_IMAGE_ID = IMAGE_1_ID;
-    public final static String IMAGE_DATE_7_DATABASE_FORMAT = "%Y-%c-%d %H:%i:%S";
-    public final static String IMAGE_DATE_7_UNIX_FORMAT = "yyyy-MM-dd HH:mm:ss";
-    public final static String IMAGE_DATE_7_EXAMPLE = "2022-01-30 13:44:25";
-    public final static Boolean IMAGE_DATE_7_HAS_TIME = true;
-
-    public final static Long IMAGE_DATE_8_ID = 8L;
-    public final static Long IMAGE_DATE_8_IMAGE_ID = IMAGE_1_ID;
-    public final static String IMAGE_DATE_8_DATABASE_FORMAT = "%d.%c.%Y %H:%i:%S";
-    public final static String IMAGE_DATE_8_UNIX_FORMAT = "dd.MM.yyyy HH:mm:ss";
-    public final static String IMAGE_DATE_8_EXAMPLE = "30.01.2022 13:44:25";
-    public final static Boolean IMAGE_DATE_8_HAS_TIME = true;
-
-    public final static ContainerImageDate IMAGE_DATE_1 = ContainerImageDate.builder()
-            .id(IMAGE_DATE_1_ID)
-            .iid(IMAGE_DATE_1_IMAGE_ID)
-            .databaseFormat(IMAGE_DATE_1_DATABASE_FORMAT)
-            .unixFormat(IMAGE_DATE_1_UNIX_FORMAT)
-            .example(IMAGE_DATE_1_EXAMPLE)
-            .hasTime(IMAGE_DATE_1_HAS_TIME)
-            .build();
-
-    public final static ContainerImageDate IMAGE_DATE_2 = ContainerImageDate.builder()
-            .id(IMAGE_DATE_2_ID)
-            .iid(IMAGE_DATE_2_IMAGE_ID)
-            .databaseFormat(IMAGE_DATE_2_DATABASE_FORMAT)
-            .unixFormat(IMAGE_DATE_2_UNIX_FORMAT)
-            .example(IMAGE_DATE_2_EXAMPLE)
-            .hasTime(IMAGE_DATE_2_HAS_TIME)
-            .build();
-
-    public final static ContainerImageDate IMAGE_DATE_3 = ContainerImageDate.builder()
-            .id(IMAGE_DATE_3_ID)
-            .iid(IMAGE_DATE_3_IMAGE_ID)
-            .databaseFormat(IMAGE_DATE_3_DATABASE_FORMAT)
-            .unixFormat(IMAGE_DATE_3_UNIX_FORMAT)
-            .example(IMAGE_DATE_3_EXAMPLE)
-            .hasTime(IMAGE_DATE_3_HAS_TIME)
-            .build();
-
-    public final static ContainerImageDate IMAGE_DATE_4 = ContainerImageDate.builder()
-            .id(IMAGE_DATE_4_ID)
-            .iid(IMAGE_DATE_4_IMAGE_ID)
-            .databaseFormat(IMAGE_DATE_4_DATABASE_FORMAT)
-            .unixFormat(IMAGE_DATE_4_UNIX_FORMAT)
-            .example(IMAGE_DATE_4_EXAMPLE)
-            .hasTime(IMAGE_DATE_4_HAS_TIME)
-            .build();
-
-    public final static ContainerImageDate IMAGE_DATE_5 = ContainerImageDate.builder()
-            .id(IMAGE_DATE_5_ID)
-            .iid(IMAGE_DATE_5_IMAGE_ID)
-            .databaseFormat(IMAGE_DATE_5_DATABASE_FORMAT)
-            .unixFormat(IMAGE_DATE_5_UNIX_FORMAT)
-            .example(IMAGE_DATE_5_EXAMPLE)
-            .hasTime(IMAGE_DATE_5_HAS_TIME)
-            .build();
-
-    public final static ContainerImageDate IMAGE_DATE_6 = ContainerImageDate.builder()
-            .id(IMAGE_DATE_6_ID)
-            .iid(IMAGE_DATE_6_IMAGE_ID)
-            .databaseFormat(IMAGE_DATE_6_DATABASE_FORMAT)
-            .unixFormat(IMAGE_DATE_6_UNIX_FORMAT)
-            .example(IMAGE_DATE_6_EXAMPLE)
-            .hasTime(IMAGE_DATE_6_HAS_TIME)
-            .build();
-
-    public final static ContainerImageDate IMAGE_DATE_7 = ContainerImageDate.builder()
-            .id(IMAGE_DATE_7_ID)
-            .iid(IMAGE_DATE_7_IMAGE_ID)
-            .databaseFormat(IMAGE_DATE_7_DATABASE_FORMAT)
-            .unixFormat(IMAGE_DATE_7_UNIX_FORMAT)
-            .example(IMAGE_DATE_7_EXAMPLE)
-            .hasTime(IMAGE_DATE_7_HAS_TIME)
-            .build();
-
-    public final static ContainerImageDate IMAGE_DATE_8 = ContainerImageDate.builder()
-            .id(IMAGE_DATE_8_ID)
-            .iid(IMAGE_DATE_8_IMAGE_ID)
-            .databaseFormat(IMAGE_DATE_8_DATABASE_FORMAT)
-            .unixFormat(IMAGE_DATE_8_UNIX_FORMAT)
-            .example(IMAGE_DATE_8_EXAMPLE)
-            .hasTime(IMAGE_DATE_8_HAS_TIME)
-            .build();
-
-    public final static ContainerImage IMAGE_1 = ContainerImage.builder()
-            .dialect(IMAGE_1_DIALECT)
-            .driverClass(IMAGE_1_DRIVER)
-            .jdbcMethod(IMAGE_1_JDBC)
-            .logo(IMAGE_1_LOGO)
-            .repository(IMAGE_1_REPOSITORY)
-            .tag(IMAGE_1_TAG)
-            .environment(IMAGE_1_ENVIRONMENT)
-            .defaultPort(IMAGE_1_PORT)
-            .build();
-
-    public final static Long CONTAINER_1_ID = 1L;
-    public final static String CONTAINER_1_NAME = "Traffic";
-    public final static String CONTAINER_1_REPOSITORY = "mariadb";
-    public final static String CONTAINER_1_TAG = "10.5";
-
-    public final static Long CONTAINER_2_ID = 2L;
-    public final static String CONTAINER_2_NAME = "Sensor";
-    public final static String CONTAINER_2_REPOSITORY = "mariadb";
-    public final static String CONTAINER_2_TAG = "10.5";
-
-    public final static ContainerCreateRequestDto CONTAINER_1_CREATE_DTO = ContainerCreateRequestDto.builder()
-            .name(CONTAINER_1_NAME)
-            .repository(CONTAINER_1_REPOSITORY)
-            .tag(CONTAINER_1_TAG)
-            .build();
-
-    public final static ContainerCreateRequestDto CONTAINER_2_CREATE_DTO = ContainerCreateRequestDto.builder()
-            .name(CONTAINER_2_NAME)
-            .repository(CONTAINER_2_REPOSITORY)
-            .tag(CONTAINER_2_TAG)
-            .build();
-
-}
diff --git a/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/ContainerSeederImpl.java b/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/ContainerSeederImpl.java
deleted file mode 100644
index 4fa4283d2098942c73e4fd4383e809eda5dfde12..0000000000000000000000000000000000000000
--- a/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/ContainerSeederImpl.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package at.tuwien.seeder.impl;
-
-import at.tuwien.entities.container.Container;
-import at.tuwien.repository.jpa.ContainerRepository;
-import at.tuwien.seeder.Seeder;
-import at.tuwien.service.ContainerService;
-import lombok.SneakyThrows;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Slf4j
-@Service
-public class ContainerSeederImpl extends AbstractSeeder implements Seeder {
-
-    private final ContainerRepository containerRepository;
-    private final ContainerService containerService;
-
-    @Autowired
-    public ContainerSeederImpl(ContainerRepository containerRepository, ContainerService containerService) {
-        this.containerRepository = containerRepository;
-        this.containerService = containerService;
-    }
-
-    @SneakyThrows
-    @Override
-    public void seed() {
-        if (containerRepository.existsById(CONTAINER_1_ID)) {
-            log.warn("Already seeded. Skip.");
-            return;
-        }
-        final Container container1 = containerService.create(CONTAINER_1_CREATE_DTO, PRINCIPAL_1);
-        log.info("Created container id {}", container1.getId());
-        final Container container1start = containerService.start(CONTAINER_1_ID);
-        log.info("Started container id {}", container1start.getId());
-        final Container container2 = containerService.create(CONTAINER_2_CREATE_DTO, PRINCIPAL_1);
-        log.info("Created container id {}", container2.getId());
-        final Container container2start = containerService.start(CONTAINER_2_ID);
-        log.info("Started container id {}", container2start.getId());
-    }
-
-}
diff --git a/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/ImageSeederImpl.java b/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/ImageSeederImpl.java
deleted file mode 100644
index f9c878cf61407cb44133e9402885639d972f3b18..0000000000000000000000000000000000000000
--- a/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/ImageSeederImpl.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package at.tuwien.seeder.impl;
-
-import at.tuwien.entities.container.image.ContainerImage;
-import at.tuwien.entities.container.image.ContainerImageDate;
-import at.tuwien.repository.jpa.ImageDateRepository;
-import at.tuwien.repository.jpa.ImageRepository;
-import at.tuwien.seeder.Seeder;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-@Slf4j
-@Service
-public class ImageSeederImpl extends AbstractSeeder implements Seeder {
-
-    private final ImageRepository imageRepository;
-    private final ImageDateRepository imageDateRepository;
-
-    @Autowired
-    public ImageSeederImpl(ImageRepository imageRepository, ImageDateRepository imageDateRepository) {
-        this.imageRepository = imageRepository;
-        this.imageDateRepository = imageDateRepository;
-    }
-
-    @Override
-    @Transactional
-    public void seed() {
-        if (imageRepository.existsById(IMAGE_1_ID)) {
-            log.warn("Already seeded. Skip.");
-            return;
-        }
-        final ContainerImage imageMariaDb = imageRepository.save(IMAGE_1);
-        log.info("Seeded image id {}", imageMariaDb.getId());
-        final ContainerImageDate date1 = imageDateRepository.save(IMAGE_DATE_1);
-        log.info("Seeded image date id {}", date1.getId());
-        final ContainerImageDate date2 = imageDateRepository.save(IMAGE_DATE_2);
-        log.info("Seeded image date id {}", date2.getId());
-        final ContainerImageDate date3 = imageDateRepository.save(IMAGE_DATE_3);
-        log.info("Seeded image date id {}", date3.getId());
-        final ContainerImageDate date4 = imageDateRepository.save(IMAGE_DATE_4);
-        log.info("Seeded image date id {}", date4.getId());
-        final ContainerImageDate date5 = imageDateRepository.save(IMAGE_DATE_5);
-        log.info("Seeded image date id {}", date5.getId());
-        final ContainerImageDate date6 = imageDateRepository.save(IMAGE_DATE_6);
-        log.info("Seeded image date id {}", date6.getId());
-        final ContainerImageDate date7 = imageDateRepository.save(IMAGE_DATE_7);
-        log.info("Seeded image date id {}", date7.getId());
-        final ContainerImageDate date8 = imageDateRepository.save(IMAGE_DATE_8);
-        log.info("Seeded image date id {}", date8.getId());
-    }
-
-}
diff --git a/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/SeederImpl.java b/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/SeederImpl.java
deleted file mode 100644
index 6d61535417dd8e6f77a5d74ddf4b307a61f310ca..0000000000000000000000000000000000000000
--- a/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/SeederImpl.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package at.tuwien.seeder.impl;
-
-import at.tuwien.seeder.Seeder;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Service;
-
-import java.util.Arrays;
-
-@Slf4j
-@Service
-public class SeederImpl implements Seeder {
-
-    private final Seeder imageSeederImpl;
-    private final Environment environment;
-    private final Seeder containerSeederImpl;
-
-    public SeederImpl(Seeder imageSeederImpl, Environment environment, Seeder containerSeederImpl) {
-        this.imageSeederImpl = imageSeederImpl;
-        this.environment = environment;
-        this.containerSeederImpl = containerSeederImpl;
-    }
-
-    @Override
-    public void seed() {
-        imageSeederImpl.seed();
-        if (Arrays.asList(environment.getActiveProfiles()).contains("seeder")) {
-            containerSeederImpl.seed();
-        }
-    }
-}
diff --git a/fda-container-service/services/src/main/java/at/tuwien/service/ImageService.java b/fda-container-service/services/src/main/java/at/tuwien/service/ImageService.java
index c68e667c5181429b89c035d72a91d222eab67477..9bcee5e55be2ecf9176a2fe5e276d9a9419b4219 100644
--- a/fda-container-service/services/src/main/java/at/tuwien/service/ImageService.java
+++ b/fda-container-service/services/src/main/java/at/tuwien/service/ImageService.java
@@ -59,4 +59,13 @@ public interface ImageService {
      * @throws PersistenceException   The database returned an error.
      */
     void delete(Long id) throws ImageNotFoundException, PersistenceException;
+
+    /**
+     * Pulls a container image by given repository and tag.
+     *
+     * @param repository The repository.
+     * @param tag        The tag.
+     * @throws ImageNotFoundException The image was not found.
+     */
+    void pull(String repository, String tag) throws ImageNotFoundException;
 }
diff --git a/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
index 99c335de1c3ae5d32962b6e4b4be617f6fd05696..618de10640c8a6a195d1027c70c5409e3edc7851 100644
--- a/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
+++ b/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
@@ -1,6 +1,7 @@
 package at.tuwien.service.impl;
 
 import at.tuwien.api.container.ContainerCreateRequestDto;
+import at.tuwien.config.DockerConfig;
 import at.tuwien.entities.container.Container;
 import at.tuwien.entities.container.image.ContainerImage;
 import at.tuwien.entities.user.User;
@@ -38,6 +39,7 @@ public class ContainerServiceImpl implements ContainerService {
     private final ImageMapper imageMapper;
     private final UserService userService;
     private final DockerClient dockerClient;
+    private final DockerConfig dockerConfig;
     private final ContainerMapper containerMapper;
     private final ImageRepository imageRepository;
     private final ContainerRepository containerRepository;
@@ -45,7 +47,7 @@ public class ContainerServiceImpl implements ContainerService {
     @Autowired
     public ContainerServiceImpl(DockerClient dockerClient, ContainerRepository containerRepository,
                                 ImageRepository imageRepository, HostConfig hostConfig, ContainerMapper containerMapper,
-                                ImageMapper imageMapper, UserService userService) {
+                                ImageMapper imageMapper, UserService userService, DockerConfig dockerConfig) {
         this.hostConfig = hostConfig;
         this.dockerClient = dockerClient;
         this.imageRepository = imageRepository;
@@ -53,6 +55,7 @@ public class ContainerServiceImpl implements ContainerService {
         this.containerMapper = containerMapper;
         this.imageMapper = imageMapper;
         this.userService = userService;
+        this.dockerConfig = dockerConfig;
     }
 
     @Override
@@ -65,27 +68,30 @@ public class ContainerServiceImpl implements ContainerService {
             log.error("failed to get image with name {}:{}", createDto.getRepository(), createDto.getTag());
             throw new ImageNotFoundException("image was not found in metadata database.");
         }
-        final Integer availableTcpPort = SocketUtils.findAvailableTcpPort(10000);
-        final HostConfig hostConfig = this.hostConfig
-                .withNetworkMode("userdb")
-                .withBinds(Bind.parse("/tmp:/tmp"))
-                .withPortBindings(PortBinding.parse(availableTcpPort + ":" + image.get().getDefaultPort()));
         /* save to metadata database */
+        final Integer availableTcpPort = SocketUtils.findAvailableTcpPort(10000);
         Container container = new Container();
         container.setImage(image.get());
         container.setPort(availableTcpPort);
         container.setName(createDto.getName());
         container.setInternalName(containerMapper.containerToInternalContainerName(container));
-        final User user = userService.findByUsername(principal.getName());
-        container.setCreator(user);
-        log.trace("will create host config {} and container {}", hostConfig, container);
         /* create the volume */
         final CreateVolumeResponse response = dockerClient.createVolumeCmd()
                 .withName(container.getInternalName())
                 .exec();
         log.info("Created volume {}", response.getName());
         log.debug("created volume {} with mapping /var/lib/mysql", response.getName());
-//        final Volume volume = new Volume("/var/lib/mysql");
+        /* create host mapping */
+        log.info("Configured container binds");
+        log.debug("configured container binds as {} and {}", dockerConfig.getMountPath() + ":/tmp", response.getName() + ":/var/lib/mysql");
+        final HostConfig hostConfig = this.hostConfig
+                .withNetworkMode("userdb")
+                .withBinds(Bind.parse(dockerConfig.getMountPath() + ":/tmp"), Bind.parse(response.getName() + ":/var/lib/mysql"))
+                .withPortBindings(PortBinding.parse(availableTcpPort + ":" + image.get().getDefaultPort()));
+        log.debug("host config {}", hostConfig);
+        final User user = userService.findByUsername(principal.getName());
+        container.setCreator(user);
+        log.trace("will create host config {} and container {}", hostConfig, container);
         /* create the container */
         final CreateContainerResponse response1;
         try {
diff --git a/fda-container-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java b/fda-container-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java
index 3b4c7678c8c086310f36fa85551eef9a7632fd3a..b538e34bd8044feb887c14a9e2e6ec00f6cd95a3 100644
--- a/fda-container-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java
+++ b/fda-container-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java
@@ -150,13 +150,7 @@ public class ImageServiceImpl implements ImageService {
         return imageMapper.inspectImageResponseToContainerImage(response);
     }
 
-    /**
-     * Pulls a container image by given repository and tag.
-     *
-     * @param repository The repository.
-     * @param tag        The tag.
-     * @throws ImageNotFoundException The image was not found.
-     */
+    @Override
     public void pull(String repository, String tag) throws ImageNotFoundException {
         final ResultCallback.Adapter<PullResponseItem> response;
         try {
@@ -165,7 +159,8 @@ public class ImageServiceImpl implements ImageService {
                     .start();
             final Instant now = Instant.now();
             response.awaitCompletion();
-            log.debug("pulled image in {} seconds", Duration.between(now, Instant.now()).getSeconds());
+            log.info("Pulled image {}:{}", repository, tag);
+            log.debug("pulled image {}:{} in {} seconds", repository, tag, Duration.between(now, Instant.now()).getSeconds());
         } catch (NotFoundException | InterruptedException | InternalServerErrorException e) {
             log.warn("image {}:{} not found in library", repository, tag);
             throw new ImageNotFoundException("image not found in library", e);
diff --git a/fda-database-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java b/fda-database-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java
index be6bc90490978e615039348bea02389becf02fa1..a2efcc3704a1851a60e9beabf588eff489628161 100644
--- a/fda-database-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java
+++ b/fda-database-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java
@@ -28,11 +28,6 @@ public interface DatabaseMapper {
 
     org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(DatabaseMapper.class);
 
-    @Mappings({
-            @Mapping(target = "name", source = "internalName")
-    })
-    CreateVirtualHostDto databaseToCreateVirtualHostDto(Database data);
-
     @Named("internalMapping")
     default String nameToInternalName(String data) {
         if (data == null || data.length() == 0) {
diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..421e23ff38249da9a406c3650ad4202b7504aee5
--- /dev/null
+++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java
@@ -0,0 +1,77 @@
+package at.tuwien.api.database.query;
+
+import at.tuwien.api.user.UserDto;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.v3.oas.annotations.Parameter;
+import lombok.*;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.time.Instant;
+
+
+@Getter
+@Setter
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode
+@ToString
+public class QueryBriefDto {
+
+    @NotNull(message = "id is required")
+    @Parameter(name = "query id", example = "1")
+    private Long id;
+
+    @NotNull(message = "container id is required")
+    @Parameter(name = "container id", example = "1")
+    private Long cid;
+
+    @NotNull(message = "database id is required")
+    @Parameter(name = "database id", example = "1")
+    private Long dbid;
+
+    @JsonIgnore
+    @NotNull(message = "created by is required")
+    @Parameter(name = "creator id", example = "1")
+    private Long createdBy;
+
+    @NotNull(message = "creator is required")
+    @Parameter(name = "creator")
+    private UserDto creator;
+
+    @Parameter(name = "execution time", example = "2022-01-01 08:00:00.000")
+    private Instant execution;
+
+    @NotBlank(message = "statement is required")
+    @Parameter(name = "query raw", example = "select * from table")
+    private String query;
+
+    @JsonProperty("query_normalized")
+    @Parameter(name = "query normalized", example = "select id, name from table")
+    private String queryNormalized;
+
+    @NotBlank(message = "query hash is required")
+    @JsonProperty("query_hash")
+    @Parameter(name = "query hash sha256", example = "17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76")
+    private String queryHash;
+
+    @JsonProperty("result_hash")
+    @Parameter(name = "result hash sha256", example = "17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76")
+    private String resultHash;
+
+    @JsonProperty("result_number")
+    @Parameter(name = "result number of records", example = "1")
+    private Long resultNumber;
+
+    @NotNull(message = "created timestamp is required")
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
+    private Instant created;
+
+    @JsonProperty("last_modified")
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
+    private Instant lastModified;
+
+}
diff --git a/fda-metadata-db/setup-schema.sql b/fda-metadata-db/setup-schema.sql
index f5dd40b1369e28b12f1d14a399f0a6d4c6eea14b..ab0739b3794d029f2cafa2671d66e870139fcd0a 100644
--- a/fda-metadata-db/setup-schema.sql
+++ b/fda-metadata-db/setup-schema.sql
@@ -580,4 +580,24 @@ VALUES ('MIT', 'https://opensource.org/licenses/MIT'),
        ('CC0-1.0', 'https://creativecommons.org/publicdomain/zero/1.0/legalcode'),
        ('CC-BY-4.0', 'https://creativecommons.org/licenses/by/4.0/legalcode');
 
+INSERT INTO mdb_images (repository, tag, default_port, dialect, driver_class, jdbc_method)
+VALUES ('mariadb', '10.5', 3306, 'org.hibernate.dialect.MariaDBDialect', 'org.mariadb.jdbc.Driver', 'mariadb');
+
+INSERT INTO mdb_images_environment_item (key, value, etype, iid)
+VALUES ('ROOT', 'root', 'PRIVILEGED_USERNAME', 1),
+       ('MARIADB_ROOT_PASSWORD', 'mariadb', 'PRIVILEGED_PASSWORD', 1),
+       ('MARIADB_USER', 'mariadb', 'USERNAME', 1),
+       ('MARIADB_PASSWORD', 'mariadb', 'PASSWORD', 1);
+
+INSERT INTO mdb_images_date (iid, database_format, unix_format, example, has_time)
+VALUES (1, '%Y-%c-%d', 'yyyy-MM-dd', '2022-01-30', false),
+       (1, '%d.%c.%Y', 'yyyy-MM-dd', '30.01.2022', false),
+       (1, '%d.%c.%y', 'yyyy-MM-dd', '30.01.22', false),
+       (1, '%c/%d/%Y', 'yyyy-MM-dd', '01/30/2022', false),
+       (1, '%c/%d/%y', 'yyyy-MM-dd', '01/30/22', false),
+       (1, '%Y-%c-%d''T''%H:%i:%S.%f', 'yyyy-MM-dd''T''HH:mm:ss.SSSSSS', '2022-01-30T13:44:25.499', true),
+       (1, '%Y-%c-%d %H:%i:%S.%f', 'yyyy-MM-dd HH:mm:ss.SSSSSS', '2022-01-30 13:44:25.499', true),
+       (1, '%Y-%c-%d''T''%H:%i:%S', 'yyyy-MM-dd''T''HH:mm:ss', '2022-01-30T13:44:25', true),
+       (1, '%Y-%c-%d %H:%i:%S', 'yyyy-MM-dd HH:mm:ss', '2022-01-30 13:44:25', true);
+
 COMMIT;
diff --git a/fda-query-service/rest-service/src/main/java/at/tuwien/endpoint/StoreEndpoint.java b/fda-query-service/rest-service/src/main/java/at/tuwien/endpoint/StoreEndpoint.java
index ebaa5999256fc2b92d79fe41527e4bb8bc157426..229f2328a878ba19722dfffb737388a273ea14bb 100644
--- a/fda-query-service/rest-service/src/main/java/at/tuwien/endpoint/StoreEndpoint.java
+++ b/fda-query-service/rest-service/src/main/java/at/tuwien/endpoint/StoreEndpoint.java
@@ -1,5 +1,6 @@
 package at.tuwien.endpoint;
 
+import at.tuwien.api.database.query.QueryBriefDto;
 import at.tuwien.api.database.query.QueryDto;
 import at.tuwien.entities.user.User;
 import at.tuwien.mapper.UserMapper;
@@ -18,6 +19,8 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.constraints.NotNull;
 import java.security.Principal;
 import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Log4j2
 @RestController
@@ -43,9 +46,9 @@ public class StoreEndpoint extends AbstractEndpoint {
     @GetMapping
     @Transactional(readOnly = true)
     @Operation(summary = "Find queries", security = @SecurityRequirement(name = "bearerAuth"))
-    public ResponseEntity<List<QueryDto>> findAll(@NotNull @PathVariable("id") Long containerId,
-                                                  @NotNull @PathVariable("databaseId") Long databaseId,
-                                                  Principal principal)
+    public ResponseEntity<List<QueryBriefDto>> findAll(@NotNull @PathVariable("id") Long containerId,
+                                                       @NotNull @PathVariable("databaseId") Long databaseId,
+                                                       Principal principal)
             throws QueryStoreException,
             DatabaseNotFoundException, ImageNotSupportedException, ContainerNotFoundException, NotAllowedException,
             DatabaseConnectionException, TableMalformedException {
@@ -54,7 +57,16 @@ public class StoreEndpoint extends AbstractEndpoint {
             throw new NotAllowedException("Missing view all queries permission");
         }
         final List<Query> queries = storeService.findAll(containerId, databaseId);
-        return ResponseEntity.ok(queryMapper.queryListToQueryDtoList(queries));
+        final List<User> users = userService.findAll();
+        final List<QueryBriefDto> out = queries.stream()
+                .map(q -> {
+                    final QueryBriefDto dto = queryMapper.queryToQueryBriefDto(q);
+                    final Optional<User> optional = users.stream().filter(u -> u.getId().equals(q.getCreatedBy())).findFirst();
+                    optional.ifPresent(user -> dto.setCreator(userMapper.userToUserDto(user)));
+                    return dto;
+                })
+                .collect(Collectors.toList());
+        return ResponseEntity.ok(out);
     }
 
     @GetMapping("/{queryId}")
diff --git a/fda-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableDataEndpoint.java b/fda-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableDataEndpoint.java
index 197da01129319058194c4f138bf4ccefa645344f..ed7ab9fa26a2731b45b4d0d2476e2d4c67cdf02e 100644
--- a/fda-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableDataEndpoint.java
+++ b/fda-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableDataEndpoint.java
@@ -109,7 +109,8 @@ public class TableDataEndpoint extends AbstractEndpoint {
             log.error("Missing data insert permission");
             throw new NotAllowedException("Missing data insert permission");
         }
-        log.info("Insert data from location {} into database id {}", data, databaseId);
+        log.info("Insert data into database with id {}", databaseId);
+        log.debug("insert data from location {} into database with id {}", data, databaseId);
         queryService.insert(containerId, databaseId, tableId, data);
         return ResponseEntity.accepted()
                 .build();
diff --git a/fda-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableHistoryEndpoint.java b/fda-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableHistoryEndpoint.java
index 7c23a49c1b51ed0c8a7a60dc9d1c224e8642a082..f7b4033dfc11bea245f3ff2b7246adb06e888749 100644
--- a/fda-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableHistoryEndpoint.java
+++ b/fda-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableHistoryEndpoint.java
@@ -4,6 +4,7 @@ import at.tuwien.api.database.table.TableHistoryDto;
 import at.tuwien.exception.*;
 import at.tuwien.service.*;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
@@ -31,7 +32,7 @@ public class TableHistoryEndpoint extends AbstractEndpoint {
 
     @RequestMapping(method = {RequestMethod.GET, RequestMethod.HEAD})
     @Transactional(readOnly = true)
-    @Operation(summary = "Find all history")
+    @Operation(summary = "Find all history", security = @SecurityRequirement(name = "bearerAuth"))
     public ResponseEntity<List<TableHistoryDto>> getAll(@NotNull @PathVariable("id") Long containerId,
                                                         @NotNull @PathVariable("databaseId") Long databaseId,
                                                         @NotNull @PathVariable("tableId") Long tableId,
diff --git a/fda-query-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/fda-query-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java
index 690a4510b87828e175e270866b7a842f1ab8ba1e..067474b9c9f63d981e12850a5d27359054093ada 100644
--- a/fda-query-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java
+++ b/fda-query-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java
@@ -114,11 +114,11 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler {
         return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
     }
 
-    @ResponseStatus(HttpStatus.BAD_REQUEST)
+    @ResponseStatus(HttpStatus.LOCKED)
     @ExceptionHandler(TableMalformedException.class)
     public ResponseEntity<ApiErrorDto> handle(TableMalformedException e, WebRequest request) {
         final ApiErrorDto response = ApiErrorDto.builder()
-                .status(HttpStatus.BAD_REQUEST)
+                .status(HttpStatus.LOCKED)
                 .message(e.getLocalizedMessage())
                 .code("error.table.malformed")
                 .build();
diff --git a/fda-query-service/rest-service/src/main/resources/application-docker.yml b/fda-query-service/rest-service/src/main/resources/application-docker.yml
index 77c04460c15034f08b0d091a37f0da076f4420f3..031d6cc3bf29d9b90311b237cb8b761e504b95c5 100644
--- a/fda-query-service/rest-service/src/main/resources/application-docker.yml
+++ b/fda-query-service/rest-service/src/main/resources/application-docker.yml
@@ -30,7 +30,7 @@ logging:
   level:
     root: warn
     at.tuwien.: debug
-    at.tuwien.mapper.: debug
+    at.tuwien.mapper.: trace
     at.tuwien.service.: debug
     at.tuwien.config.: debug
     at.tuwien.auth.UserPermissionEvaluator: trace
diff --git a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java
index 6631d0b6c1f52aa7374efa006a2587dde7c15f77..3a95fba9311367d9f55b8ab2561f2f0626e66e91 100644
--- a/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java
+++ b/fda-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java
@@ -1,6 +1,7 @@
 package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
+import at.tuwien.api.database.query.QueryBriefDto;
 import at.tuwien.api.database.query.QueryDto;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.*;
@@ -50,7 +51,7 @@ public class StoreEndpointUnitTest extends BaseUnitTest {
                 .thenReturn(List.of(QUERY_1));
 
         /* test */
-        final ResponseEntity<List<QueryDto>> response = storeEndpoint.findAll(CONTAINER_1_ID, DATABASE_1_ID, principal);
+        final ResponseEntity<List<QueryBriefDto>> response = storeEndpoint.findAll(CONTAINER_1_ID, DATABASE_1_ID, principal);
         assertEquals(HttpStatus.OK, response.getStatusCode());
         assertNotNull(response.getBody());
         assertEquals(1, response.getBody().size());
diff --git a/fda-query-service/services/src/main/java/at/tuwien/exception/TableMalformedException.java b/fda-query-service/services/src/main/java/at/tuwien/exception/TableMalformedException.java
index fb232e7155d519be931d0aaa1641a576480ca183..542c789ad548084b1a98720630246514b431efcb 100644
--- a/fda-query-service/services/src/main/java/at/tuwien/exception/TableMalformedException.java
+++ b/fda-query-service/services/src/main/java/at/tuwien/exception/TableMalformedException.java
@@ -3,7 +3,7 @@ package at.tuwien.exception;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
-@ResponseStatus(code = HttpStatus.BAD_REQUEST)
+@ResponseStatus(code = HttpStatus.LOCKED)
 public class TableMalformedException extends Exception {
 
     public TableMalformedException(String msg) {
diff --git a/fda-query-service/services/src/main/java/at/tuwien/mapper/QueryMapper.java b/fda-query-service/services/src/main/java/at/tuwien/mapper/QueryMapper.java
index 6d2f3df272c4e6fe3b3917234a9b96f2923d4ffc..af76e96b7a67daa53df330e0ff308f0bf8e61d4d 100644
--- a/fda-query-service/services/src/main/java/at/tuwien/mapper/QueryMapper.java
+++ b/fda-query-service/services/src/main/java/at/tuwien/mapper/QueryMapper.java
@@ -1,6 +1,5 @@
 package at.tuwien.mapper;
 
-import at.tuwien.InsertTableRawQuery;
 import at.tuwien.api.database.query.*;
 import at.tuwien.api.database.table.TableCsvDeleteDto;
 import at.tuwien.api.database.table.TableCsvDto;
@@ -21,7 +20,6 @@ import org.mapstruct.Mapping;
 import org.mapstruct.Mappings;
 import org.mapstruct.Named;
 import org.mariadb.jdbc.MariaDbBlob;
-import org.mariadb.jdbc.internal.ColumnType;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigInteger;
@@ -53,12 +51,9 @@ public interface QueryMapper {
 
     ExecuteStatementDto saveStatementDtoToExecuteStatementDto(SaveStatementDto data);
 
-    @Mappings({
-            @Mapping(target = "creator", ignore = true)
-    })
     QueryDto queryToQueryDto(Query data);
 
-    List<QueryDto> queryListToQueryDtoList(List<Query> data);
+    QueryBriefDto queryToQueryBriefDto(Query data);
 
     @Named("internalMapping")
     default String nameToInternalName(String data) {
@@ -286,7 +281,8 @@ public interface QueryMapper {
                     .append(column.getInternalName())
                     .append(", NULL), '")
                     .append(column.getDateFormat()
-                            .getDatabaseFormat())
+                            .getDatabaseFormat()
+                            .replace('\'', '\\'))
                     .append("')");
             return;
         }
@@ -294,7 +290,8 @@ public interface QueryMapper {
                 .append(column.getInternalName())
                 .append(", '")
                 .append(column.getDateFormat()
-                        .getDatabaseFormat())
+                        .getDatabaseFormat()
+                        .replace('\'', '\\'))
                 .append("')");
     }
 
diff --git a/fda-query-service/services/src/main/java/at/tuwien/service/UserService.java b/fda-query-service/services/src/main/java/at/tuwien/service/UserService.java
index 5bbe7d4e98a633c23b5bd7e0bc39f439ae887916..36724771666d181ed030fae84cfe0fd5e11978ea 100644
--- a/fda-query-service/services/src/main/java/at/tuwien/service/UserService.java
+++ b/fda-query-service/services/src/main/java/at/tuwien/service/UserService.java
@@ -3,8 +3,17 @@ package at.tuwien.service;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.UserNotFoundException;
 
+import java.util.List;
+
 public interface UserService {
 
+    /**
+     * Finds all users
+     *
+     * @return The list of users.
+     */
+    List<User> findAll();
+
     /**
      * Finds a user by username.
      *
diff --git a/fda-query-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java b/fda-query-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java
index 04c51ace0ce2d06cbf77facbb994ac83c8cf3e11..16601ad35d7131d19a491fb231ba0fc3f2173e48 100644
--- a/fda-query-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java
+++ b/fda-query-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java
@@ -327,15 +327,32 @@ public class QueryServiceImpl extends HibernateConnector implements QueryService
             final Connection connection = dataSource.getConnection();
             queryMapper.generateTemporaryTableSQL(connection, table)
                     .executeUpdate();
+        } catch (SQLException e) {
+            log.error("Failed to create temporary table: {}", e.getMessage());
+            log.debug("failed to create temporary table {}", table);
+            dataSource.close();
+            throw new TableMalformedException("Failed to create temporary table", e);
+        }
+        try {
+            final Connection connection = dataSource.getConnection();
             queryMapper.pathToRawInsertQuery(connection, table, data)
                     .executeUpdate();
             queryMapper.generateInsertFromTemporaryTableSQL(connection, table)
                     .executeUpdate();
+        } catch (SQLException e) {
+            log.error("Failed to insert temporary table: {}", e.getMessage());
+            log.debug("failed to insert temporary table {}", table);
+            dataSource.close();
+            throw new TableMalformedException("Failed to insert temporary table", e);
+        }
+        try {
+            final Connection connection = dataSource.getConnection();
             queryMapper.dropTemporaryTableSQL(connection, table)
                     .executeUpdate();
         } catch (SQLException e) {
-            log.error("Failed to create/insert/drop temporary table");
-            throw new TableMalformedException("Failed to create/insert/drop temporary table");
+            log.error("Failed to drop temporary table: {}", e.getMessage());
+            log.debug("failed to drop temporary table {}", table);
+            throw new TableMalformedException("Failed to drop temporary table", e);
         } finally {
             dataSource.close();
         }
diff --git a/fda-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/fda-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
index d0c7fdb2d0ee3f95584d98f885685fbbb9584aab..da0c472016f151f30f209e89f21580dd21a08b46 100644
--- a/fda-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
+++ b/fda-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
@@ -8,6 +8,7 @@ import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
 import java.util.Optional;
 
 @Log4j2
@@ -21,6 +22,11 @@ public class UserServiceImpl implements UserService {
         this.userRepository = userRepository;
     }
 
+    @Override
+    public List<User> findAll() {
+        return userRepository.findAll();
+    }
+
     @Override
     public User findByUsername(String username) throws UserNotFoundException {
         final Optional<User> optional = userRepository.findByUsername(username);
diff --git a/fda-ui/.env.example b/fda-ui/.env.example
index cd48b1313b3980c68931458edbc219ec2d80b37a..6d67c5eca979378377bc21dd27644ba038a41d86 100644
--- a/fda-ui/.env.example
+++ b/fda-ui/.env.example
@@ -5,3 +5,4 @@ API="http://localhost:9095"
 BROKER_USERNAME=fda
 BROKER_PASSWORD=fda
 SANDBOX=false
+SHARED_FILESYSTEM=/tmp
diff --git a/fda-ui/Dockerfile b/fda-ui/Dockerfile
index e94b6866a56d0116a949dd8a2620449f7ab34179..d9b406ac01d86dee115874144fa3f98ae23c34bb 100644
--- a/fda-ui/Dockerfile
+++ b/fda-ui/Dockerfile
@@ -34,5 +34,7 @@ ENV API=http://gateway-service:9095
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
 ENV SANDBOX=false
+ENV SHARED_FILESYSTEM=/tmp
+ENV VERSION=1.1.1
 
 ENTRYPOINT ["yarn", "start"]
diff --git a/fda-ui/components/TableList.vue b/fda-ui/components/TableList.vue
index 68b2442e5debfc75f059cfcf4fa5ce2d2962c726..0fb5ddc2ffcf07601e6d56d8e4b7dbcc1c60d7e4 100644
--- a/fda-ui/components/TableList.vue
+++ b/fda-ui/components/TableList.vue
@@ -61,16 +61,10 @@
                       AMQP Consumer(s)
                     </v-list-item-title>
                     <v-list-item-content class="amqp-consumer">
-                      {{ tableDetails.consumers.length }} <v-badge
-                        v-if="!tableDetails.consumersUp"
-                        class="ml-1"
-                        color="error"
-                        content="down" />
                       <v-badge
-                        v-if="tableDetails.consumersUp"
                         class="ml-1"
-                        color="success"
-                        content="up" />
+                        :color="consumersState"
+                        :content="`${consumersUp}/${consumersTotal} up`" />
                     </v-list-item-content>
                   </v-list-item-content>
                 </v-list-item>
@@ -188,11 +182,13 @@ export default {
     return {
       loading: false,
       loadingDetails: false,
+      loadingConsumers: false,
       error: false,
       tables: [],
       panel: null,
       column: null,
       unitDialog: false,
+      consumers: [],
       database: {
         exchange: null,
         tables: []
@@ -203,9 +199,7 @@ export default {
         description: null,
         topic: null,
         columns: [],
-        created: null,
-        consumers: [],
-        consumersUp: false
+        created: null
       },
       dialogDelete: false,
       headers: [
@@ -252,6 +246,21 @@ export default {
     },
     createdUTC () {
       return formatTimestampUTCLabel(this.tableDetails.created)
+    },
+    consumersState () {
+      if (this.consumersTotal === 0) {
+        return 'error'
+      }
+      if (this.consumersTotal - this.consumersUp > 0) {
+        return 'warning'
+      }
+      return 'success'
+    },
+    consumersTotal () {
+      return this.consumers.length
+    },
+    consumersUp () {
+      return this.consumers.filter(c => c.active).length
     }
   },
   mounted () {
@@ -286,6 +295,10 @@ export default {
       return column.column_type
     },
     async details (tableId) {
+      if (tableId === this.tableDetails.id) {
+        /* prevent weird glitch of opening and collapsing simultaneously */
+        return
+      }
       try {
         this.loadingDetails = true
         const res = await this.$axios.get(`/api/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table/${tableId}`, this.config)
@@ -334,18 +347,16 @@ export default {
     },
     async consumerDetails (topic) {
       try {
-        this.loading = true
+        this.loadingConsumers = true
         const res = await this.$axios.get('/api/broker/consumers/%2F', this.brokerConfig)
         const consumers = res.data.filter(c => c.queue.name === topic)
         console.debug('consumers', consumers)
-        const state = res.data.filter(c => c.queue.name === topic && c.active)
-        this.tableDetails.consumers = consumers
-        this.tableDetails.consumersUp = consumers.length === state.length
-        this.loading = false
+        this.consumers = consumers
       } catch (err) {
+        console.error('Could not find consumers')
         this.$toast.error('Could not find consumers.')
       }
-      this.dialogDelete = false
+      this.loadingConsumers = false
     },
     showDeleteTableDialog (id) {
       this.deleteTableId = id
diff --git a/fda-ui/components/TableSchema.vue b/fda-ui/components/TableSchema.vue
index 93a96e92cba16e55bf8da6bae790820d86820e43..f010738d8523d1109afd3e545d7b275c8aeaa06e 100644
--- a/fda-ui/components/TableSchema.vue
+++ b/fda-ui/components/TableSchema.vue
@@ -89,7 +89,7 @@
         <v-btn v-if="back" class="mt-10 mr-2 mb-1" @click="stepBack()">
           Back
         </v-btn>
-        <v-btn color="primary" :loading="finished" :disabled="!valid" class="mt-10 mb-1" @click="submit()">
+        <v-btn color="primary" :loading="finished && !error" :disabled="!valid" class="mt-10 mb-1" @click="submit()">
           Continue
         </v-btn>
       </div>
@@ -111,6 +111,12 @@ export default {
       default () {
         return false
       }
+    },
+    error: {
+      type: Boolean,
+      default () {
+        return false
+      }
     }
   },
   data () {
@@ -118,7 +124,6 @@ export default {
       loading: false,
       dateFormats: [],
       valid: true,
-      error: false,
       finished: false,
       tableColumns: [],
       container: {
diff --git a/fda-ui/components/dialogs/CreateDB.vue b/fda-ui/components/dialogs/CreateDB.vue
index d97ee9e875b525c683c673da9f27a99344d8de85..686d0cede1c092a40ff272fa1062e4c7cbba77f9 100644
--- a/fda-ui/components/dialogs/CreateDB.vue
+++ b/fda-ui/components/dialogs/CreateDB.vue
@@ -38,11 +38,13 @@
             :rules="[v => !!v || $t('Required')]"
             return-object
             required />
-          <v-checkbox
+          <v-switch
             id="public"
             v-model="createDatabase.is_public"
-            name="public"
-            label="Public" />
+            color="primary"
+            :label="publicLabel"
+            name="public" />
+          <p>{{ summary }}</p>
         </v-card-text>
         <v-card-actions>
           <v-spacer />
@@ -76,7 +78,10 @@ export default {
       valid: false,
       loading: false,
       error: false,
-      engine: null,
+      engine: {
+        repository: null,
+        tag: null
+      },
       engines: [],
       progress: 0,
       createContainer: {
@@ -107,6 +112,15 @@ export default {
       return {
         headers: { Authorization: `Bearer ${this.token}` }
       }
+    },
+    publicLabel () {
+      return this.createDatabase.is_public ? 'Public' : 'Private'
+    },
+    summary () {
+      return 'Your database will be ' +
+        (this.createDatabase.is_public ? 'publicly visible to the world' : 'visible only to you') +
+        ' and run ' +
+        (this.engine.repository === 'mariadb' ? 'MariaDB Engine (' + this.engine.tag + ')' : 'other')
     }
   },
   mounted () {
diff --git a/fda-ui/layouts/default.vue b/fda-ui/layouts/default.vue
index 91a78486ffde5eb3214568cd98cf91e0660b2b67..52f6400b9553127beb93309e80ee9a817434c7b5 100644
--- a/fda-ui/layouts/default.vue
+++ b/fda-ui/layouts/default.vue
@@ -1,32 +1,51 @@
 <template>
   <v-app>
     <v-navigation-drawer v-model="drawer" fixed app>
-      <v-img
-        contain
-        class="tu-logo"
-        src="/tu_logo_512.png" />
-      <v-img
-        contain
-        class="univie-logo"
-        src="/univie_logo_512.png" />
-      <v-list>
+      <v-list-item>
+        <v-list-item-content>
+          <v-list-item-subtitle>
+            {{ version }}
+          </v-list-item-subtitle>
+          <v-list-item-title class="text-h6">
+            Database Repository
+          </v-list-item-title>
+        </v-list-item-content>
+      </v-list-item>
+      <v-list nav>
         <v-list-item
-          v-for="(item, i) in filteredItems"
-          :key="i"
-          :to="item.to"
+          to="/"
           router>
           <v-list-item-action>
-            <v-icon>{{ item.icon }}</v-icon>
+            <v-icon>mdi-information-outline</v-icon>
           </v-list-item-action>
           <v-list-item-content>
-            <v-list-item-title v-text="item.title" />
+            <v-list-item-title>Information</v-list-item-title>
+          </v-list-item-content>
+        </v-list-item>
+        <v-list-item
+          to="/container"
+          router>
+          <v-list-item-action>
+            <v-icon>mdi-database</v-icon>
+          </v-list-item-action>
+          <v-list-item-content>
+            <v-list-item-title>Databases</v-list-item-title>
           </v-list-item-content>
         </v-list-item>
       </v-list>
+      <div>
+        <v-img
+          contain
+          class="tu-logo"
+          src="/tu_logo_512.png" />
+        <v-img
+          contain
+          class="univie-logo"
+          src="/univie_logo_512.png" />
+      </div>
     </v-navigation-drawer>
     <v-app-bar fixed app>
       <v-app-bar-nav-icon @click.stop="drawer = !drawer" />
-      <v-toolbar-title v-text="title" />
       <v-spacer />
       <v-btn
         v-if="!token"
@@ -93,15 +112,6 @@
 </template>
 
 <script>
-import {
-  mdiDatabase,
-  mdiTable,
-  mdiFileDelimited,
-  mdiDatabaseSearch,
-  mdiHome,
-  mdiCog
-} from '@mdi/js'
-
 export default {
   name: 'DefaultLayout',
   data () {
@@ -110,43 +120,7 @@ export default {
       user: {
         theme_dark: null
       },
-      loadingUser: true,
-      items: [
-        {
-          icon: mdiHome,
-          title: 'Home',
-          to: '/'
-        },
-        {
-          icon: mdiDatabase,
-          title: 'Databases',
-          to: '/container'
-        },
-        {
-          icon: mdiCog,
-          title: 'Privacy',
-          to: '/privacy'
-        },
-        {
-          icon: mdiTable,
-          title: 'Tables',
-          to: '/tables',
-          needsContainer: true
-        },
-        {
-          icon: mdiFileDelimited,
-          title: 'Import CSV',
-          to: '/import_csv',
-          needsContainer: true
-        },
-        {
-          icon: mdiDatabaseSearch,
-          title: 'SQL Query',
-          to: '/queries',
-          needsContainer: true
-        }
-      ],
-      title: 'FAIR Data Austria — Database Repository'
+      loadingUser: true
     }
   },
   computed: {
@@ -171,6 +145,9 @@ export default {
     db () {
       return this.$store.state.db
     },
+    version () {
+      return this.$config.version
+    },
     config () {
       if (this.token === null) {
         return {}
@@ -255,4 +232,7 @@ export default {
 .univie-logo {
   margin: 1em 1em .5em;
 }
+.sl {
+  padding-left: 36px;
+}
 </style>
diff --git a/fda-ui/nuxt.config.js b/fda-ui/nuxt.config.js
index a03852d240ab0d8e6fd47a803be780e72e2dd70f..512644de56cfcdd0d2d0dddf8d3fcdf146c64f7c 100644
--- a/fda-ui/nuxt.config.js
+++ b/fda-ui/nuxt.config.js
@@ -4,12 +4,6 @@ import colors from 'vuetify/es5/util/colors'
 // pick env vars from .env file or get them passed through docker-compose
 require('dotenv').config()
 
-if (!process.env.API) {
-  throw new Error(`Environment variable API not defined.
-
-Have you passed env vars from docker-compose or defined them in your .env file?`)
-}
-
 if (process.env.SANDBOX) {
   console.info('[FDA] Running in sandbox environment')
 }
@@ -87,13 +81,15 @@ export default {
   },
 
   publicRuntimeConfig: {
-    brokerUsername: process.env.BROKER_USERNAME,
-    brokerPassword: process.env.BROKER_PASSWORD,
-    sandbox: process.env.SANDBOX
+    brokerUsername: process.env.BROKER_USERNAME || 'fda',
+    brokerPassword: process.env.BROKER_PASSWORD || 'fda',
+    sandbox: process.env.SANDBOX || false,
+    shared_filesystem: process.env.SHARED_FILESYSTEM || '/tmp',
+    version: process.env.VERSION || 'latest'
   },
 
   proxy: {
-    '/api': process.env.API
+    '/api': process.env.API || 'http://localhost:9095'
   },
 
   serverMiddleware: [
diff --git a/fda-ui/pages/container/_container_id/database/_database_id/table/_table_id/import.vue b/fda-ui/pages/container/_container_id/database/_database_id/table/_table_id/import.vue
index ccc79ac9df1a6a08cd00065cb8987ec2ea73531b..e9426fa1bbada0d8006905c868b7789a4d902039 100644
--- a/fda-ui/pages/container/_container_id/database/_database_id/table/_table_id/import.vue
+++ b/fda-ui/pages/container/_container_id/database/_database_id/table/_table_id/import.vue
@@ -154,6 +154,9 @@ export default {
     },
     token () {
       return this.$store.state.token
+    },
+    shared_filesystem () {
+      return this.$config.shared_filesystem
     }
   },
   mounted () {
@@ -190,7 +193,7 @@ export default {
         })
         if (res.data.success) {
           this.fileLocation = res.data.file.filename
-          this.tableImport.location = `/tmp/${this.fileLocation}`
+          this.tableImport.location = `${this.shared_filesystem()}/${this.fileLocation}`
           console.debug('upload csv', res.data)
         } else {
           console.error('Could not upload CSV data', res.data)
diff --git a/fda-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue b/fda-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue
index 88752b42f40335a00f2076a40c9164891e0f34e1..d00ccf387e9675940242917706d4da34ed988cf7 100644
--- a/fda-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue
+++ b/fda-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue
@@ -27,18 +27,6 @@
         <v-btn v-if="token" class="mb-1" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/${$route.params.table_id}/import`">
           <v-icon left>mdi-cloud-upload</v-icon> Import csv
         </v-btn>
-        <v-btn class="ml-2 mb-1" :loading="downloadLoading" @click.stop="download">
-          <v-icon left>mdi-download</v-icon> Download csv
-        </v-btn>
-        <v-btn
-          v-if="false"
-          color="primary"
-          class="mb-1"
-          :disabled="!token"
-          :href="`/api/container/${$route.params.container_id}/database/${$route.params.database_id}/table/${$route.params.table_id}/data/export`"
-          target="_blank">
-          <v-icon left>mdi-download</v-icon> Download
-        </v-btn>
       </v-toolbar-title>
     </v-toolbar>
     <v-toolbar :color="versionColor" flat>
@@ -48,6 +36,9 @@
       </v-toolbar-title>
       <v-spacer />
       <v-toolbar-title>
+        <v-btn class="mr-2" :loading="downloadLoading" @click.stop="download">
+          <v-icon left>mdi-download</v-icon> Download csv
+        </v-btn>
         <v-btn @click="pick()">
           <v-icon left>mdi-update</v-icon> Pick
         </v-btn>
@@ -196,9 +187,16 @@ export default {
   },
   methods: {
     async download () {
+      if (!this.token) {
+        return
+      }
       this.downloadLoading = true
       try {
-        const res = await this.$axios.get(`/api/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}/export`, {
+        let exportUrl = `/api/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}/export`
+        if (this.version) {
+          exportUrl += `?timestamp=${this.versionISO}`
+        }
+        const res = await this.$axios.get(exportUrl, {
           headers: { Authorization: `Bearer ${this.token}` },
           responseType: 'text'
         })
diff --git a/fda-ui/pages/container/_container_id/database/_database_id/table/import.vue b/fda-ui/pages/container/_container_id/database/_database_id/table/import.vue
index 7c8e38a4b553dc9f94377eb9d6577788052775ad..2669a69d18a5e5f565b5a87b66f9cbc7f5497809 100644
--- a/fda-ui/pages/container/_container_id/database/_database_id/table/import.vue
+++ b/fda-ui/pages/container/_container_id/database/_database_id/table/import.vue
@@ -171,7 +171,7 @@
       </v-stepper-step>
 
       <v-stepper-content step="4">
-        <TableSchema :back="true" :columns="tableCreate.columns" @close="schemaClose" />
+        <TableSchema :back="true" :error="error" :columns="tableCreate.columns" @close="schemaClose" />
       </v-stepper-content>
 
       <v-stepper-step
@@ -206,6 +206,7 @@ export default {
       validStep2: false,
       validStep3: false,
       validStep4: false,
+      error: false,
       separators: [
         { key: ',', value: ',' },
         { key: ';', value: ';' },
@@ -276,6 +277,9 @@ export default {
         .replace(/\s+/g, '-')
         .replace(/[^\w-]+/g, '')
         .replace(/--+/g, '_'))
+    },
+    shared_filesystem () {
+      return this.$config.shared_filesystem
     }
   },
   mounted () {
@@ -391,6 +395,7 @@ export default {
         console.debug('created table', createResult.data)
       } catch (err) {
         this.loading = false
+        this.error = true
         if (err.response.status === 409) {
           this.$toast.error('Table name already exists.')
         } else {
@@ -406,6 +411,7 @@ export default {
         console.debug('inserted table', insertResult.data)
       } catch (err) {
         this.loading = false
+        this.error = true
         console.error('insert table failed', err)
         this.$toast.error('Could not insert csv into table.')
         return
diff --git a/fda-ui/pages/privacy.vue b/fda-ui/pages/privacy.vue
deleted file mode 100644
index 9b14579d0b2e3298667b568cf006810b72e21332..0000000000000000000000000000000000000000
--- a/fda-ui/pages/privacy.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-  <div>
-    <v-card flat>
-      <v-card-title>
-        General Data Protection Regulation Statement
-      </v-card-title>
-      <v-card-subtitle>
-        Data processing name: FAIR Data Austria Database Repository
-      </v-card-subtitle>
-      <v-card-text>
-        <h3>Legal basis</h3>
-        <p>
-          You have voluntarily provided us with personal data which we process with your consent for the following
-          purposes:
-        </p>
-        <ul>
-          <li>Provide virtual database environment</li>
-          <li>View database records</li>
-          <li>Routine statistics</li>
-        </ul>
-        <p class="mt-2">
-          You can withdraw this consent at any time. Withdrawal will result in your data no longer being processed for
-          the above purposes from that time on. To withdraw your consent, please contact:
-          <a href="mailto:privacy@ossdip.at">privacy@ossdip.at</a>
-        </p>
-        <h3>Storage duration</h3>
-        <p>
-          We store your personal data for [please enter the period and the criteria for erasure. If available, the legal
-          regulations can be quoted - see leaflet in German “Storage and retention periods”.
-          Your data will not be disclosed to third parties.
-        </p>
-        <h3>Contact</h3>
-        <p>
-          You can reach us at: <a href="mailto:privacy@ossdip.at">privacy@ossdip.at</a>
-        </p>
-        <h3>Help</h3>
-        <p>
-          Basically, you have the right to access, rectification, erasure, restriction, data portability and to object.
-          Contact us about this.
-          If you believe that the processing of your data contravenes data-protection law or your legal claim to
-          protection of your data has been violated in some other way, you can complain to the supervisory authorities.
-          The Data Protection Authority is responsible for this in Austria.
-        </p>
-      </v-card-text>
-    </v-card>
-  </div>
-</template>
-
-<script>
-export default {
-  components: {}
-}
-</script>
diff --git a/fda-ui/server-middleware/index.js b/fda-ui/server-middleware/index.js
index a22bed855dc15a99fef3d1ee5561bb63ee31c3de..dfde4c0eb168e77de6d5b9456368ec76a55a6c85 100644
--- a/fda-ui/server-middleware/index.js
+++ b/fda-ui/server-middleware/index.js
@@ -22,8 +22,7 @@ const colTypeMap = {
 
 app.post('/table_from_csv', upload.single('file'), async (req, res) => {
   const { file } = req
-  const { path } = file
-
+  const { filename } = file
   // send path to analyse service
   let analysis
   let json
@@ -31,10 +30,10 @@ app.post('/table_from_csv', upload.single('file'), async (req, res) => {
     const analyseUrl = `${process.env.API}/api/analyse/determinedt`
     analysis = await fetch(analyseUrl, {
       method: 'post',
-      body: JSON.stringify({ filepath: path }),
+      body: JSON.stringify({ filepath: `/tmp/${filename}` }),
       headers: { 'Content-Type': 'application/json' }
     }).catch((error) => {
-      console.error('data type determination failed', error)
+      console.error('data type determination failed:', error)
       throw error
     })
     json = await analysis.json()
@@ -42,7 +41,7 @@ app.post('/table_from_csv', upload.single('file'), async (req, res) => {
       return res.json({ success: false, message: 'Columns array missing' })
     }
   } catch (error) {
-    console.error('failed to analyze', error)
+    console.error('failed to analyze:', error)
     return res.json({ success: false, error })
   }
 
diff --git a/fda-ui/yarn.lock b/fda-ui/yarn.lock
index 9dc3884b81746712aa1f8bd9327bcb8a892ff75b..dfe7752b33ca0b2dcefc804be2ad6d9dd63a6a70 100644
--- a/fda-ui/yarn.lock
+++ b/fda-ui/yarn.lock
@@ -2830,6 +2830,13 @@ base@^0.11.1:
     mixin-deep "^1.2.0"
     pascalcase "^0.1.1"
 
+basic-auth@~2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a"
+  integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==
+  dependencies:
+    safe-buffer "5.1.2"
+
 big.js@^3.1.3:
   version "3.2.0"
   resolved "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz"
@@ -4450,6 +4457,11 @@ depd@~1.1.2:
   resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"
   integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
 
+depd@~2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+  integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
 des.js@^1.0.0:
   version "1.0.1"
   resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz"
@@ -8115,6 +8127,17 @@ moment@^2.29.1:
   resolved "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz"
   integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
 
+morgan@^1.10.0:
+  version "1.10.0"
+  resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7"
+  integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==
+  dependencies:
+    basic-auth "~2.0.1"
+    debug "2.6.9"
+    depd "~2.0.0"
+    on-finished "~2.3.0"
+    on-headers "~1.0.2"
+
 move-concurrently@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz"