diff --git a/.docs/api/ui.md b/.docs/api/ui.md
index d187772ce0d0e4c79e20565dd2e9732d051d0382..e8d409b92330774560b1d712730557048fb823b7 100644
--- a/.docs/api/ui.md
+++ b/.docs/api/ui.md
@@ -17,7 +17,7 @@ image as well, in this example we want to mount a custom logo `my_logo.png` into
 
 <figure markdown>
 ![Architecture of the UI microservice](../images/screenshots/ui-config-step-1.png){ .img-border }
-<figcaption>Figure 2: Architecture of the UI microservice</figcaption>
+<figcaption>Figure 1: Architecture of the UI microservice</figcaption>
 </figure>
 
 Text values like the version :material-numeric-2-circle-outline: and title :material-numeric-3-circle-outline: can be
@@ -48,7 +48,7 @@ User Interface on development.
 
 <figure id="fig3" markdown>
 ![Architecture of the UI microservice](../images/architecture-ui.svg)
-<figcaption>Figure 3: Architecture of the User Interface</figcaption>
+<figcaption>Figure 2: Architecture of the User Interface</figcaption>
 </figure>
 
 * Runtime: [Bun 1+](https://bun.sh/) (preferred), *alternatively* Node.js 18+
diff --git a/.docs/examples/hazard.md b/.docs/examples/hazard.md
index 56c56d99c5c9fcdc9b594fe673b2293b8d276d73..32e39c1691bf338e050bec9902e1099259276bbd 100644
--- a/.docs/examples/hazard.md
+++ b/.docs/examples/hazard.md
@@ -43,4 +43,10 @@ simple query to the `information_schema` that is maintained by the database engi
 - [x] Complex database schema
 - [x] Complex views
 - [x] System versioning
-- [x] Subset exploration
\ No newline at end of file
+- [x] Subset exploration
+
+## Acknowledgement
+
+This work was part of a cooperation with the [Institute of Water Quality and Resource Management](https://www.tuwien.at/cee/iwr).
+
+<img src="../../images/logos/iwr.png" width=100 />
\ No newline at end of file
diff --git a/.docs/examples/power.md b/.docs/examples/power.md
index ea16727536bd48046e09d1a0fcdba5e5eaf95359..4e86f6c30a2a313e34b6b9616c5968db62b30ea5 100644
--- a/.docs/examples/power.md
+++ b/.docs/examples/power.md
@@ -4,18 +4,33 @@ author: Martin Weise
 
 ## tl;dr
 
-tbd
+[:fontawesome-solid-database: &nbsp;Dataset](https://dbrepo1.ec.tuwien.ac.at/database/18/info){ .md-button .md-button--primary target="_blank" }
 
 ## Description
 
-TBD
+The [Pilotfabrik]() of TU Wien is monitored for energy-efficiency and productivity of machinery. In principle, certain
+conditions/parameters are observed such as: electric rate of energy transfer, transmission of cooling liquid,
+transmission of compressed air, acceleration, forces at work and temperatures to research on preventive/predictive
+maintenance, quality of products and ultimately process efficiency and -productivity.
+
+<figure markdown>
+![](../../images/screenshots/power.png)
+<figcaption>Figure 1: aaaa from <a href="https://publik.tuwien.ac.at/files/PubDat_252294.pdf">Hacksteiner (2016)</a>.</figcaption>
+</figure>
 
 ## Solution
 
-TBD
+We connected our [Broker Service](../../api/broker-service) with the MQTT broker of the Pilotfabrik using a self-written
+connector service, bridging the two different protocols. The tuples are ingested into DBRepo at a rate of about 10/s.
 
 ## DBRepo Features
 
 - [x] High-throughput real-time data import (MQTT)
 - [x] Private database
 - [x] Public embargoed data view
+
+## Acknowledgement
+
+This work was part of a cooperation with the [Institute of Production Engineering and Photonic Technologies](http://ift.at/).
+
+<img src="../../images/logos/ift.jpeg" width=100 />
diff --git a/.docs/examples/transportation.md b/.docs/examples/transportation.md
index aeb8ab94ae57898cd261102e8f0adb750375ef89..a99f78941355bd9d1d19d65fb33b1c8aa01a5b20 100644
--- a/.docs/examples/transportation.md
+++ b/.docs/examples/transportation.md
@@ -18,7 +18,10 @@ and tram schedules, subway routes, ticketing details, and real-time updates on v
 We wrote an algorithm that parses open data (available) information from Wiener Linien, Vienna's public transportation
 agency directly and feeds it, after some cleaning, into DBRepo on a 5-minute interval.
 
-![Subway Transportation Data Dashboard](images/screenshots/transportation-dashboard.png)
+<figure markdown>
+![Subway Transportation Data Dashboard](../../images/screenshots/transportation-dashboard.png)
+<caption>Figure 1: Dashboard visualizing the live data of the current interruptions.</caption>
+</figure>
 
 ## DBRepo Features
 
diff --git a/.docs/examples/xps.md b/.docs/examples/xps.md
new file mode 100644
index 0000000000000000000000000000000000000000..08abcd35bcf0eb4bf6aeb77dd8b859b002494fb3
--- /dev/null
+++ b/.docs/examples/xps.md
@@ -0,0 +1,47 @@
+---
+author: Martin Weise
+---
+
+## tl;dr
+
+[:fontawesome-solid-database: &nbsp;Dataset](https://dbrepo1.ec.tuwien.ac.at/database/27/info){ .md-button .md-button--primary target="_blank" }
+[:simple-jupyter: &nbsp;Notebook](https://binder.science.datalab.tuwien.ac.at/v2/git/https%3A%2F%2Fgitlab.tuwien.ac.at%2Ffairdata%2Fxps/HEAD){ .md-button .md-button--secondary target="_blank" }
+
+## Description
+
+X-ray Photoelectron Spectroscopy (XPS) is one of the most used methods in material sciences. Irradiation of solid
+materials with X-ray radiation kicks out electrons from atoms that are near the atomic nucleus. With XPS data being
+highly reproducible once machine parameters are known and understood, the demand for creating a comprehensive database
+connecting material properties to compositions via XPS spectra becomes evident.
+
+## Solution
+
+We read XPS data from the VAMAS-encoded format and inserted it into a 
+[database schema](https://gitlab.tuwien.ac.at/fairdata/xps/-/blob/e17860399b1b109c72b01888766f37193dde5870/sql/create_schema.sql) 
+that captures the VAMAS-schema. It can then be read using the [Python Library](../../api/python).
+
+<figure markdown>
+![Jupyter Notebook](../../images/screenshots/xps-jupyter.png){ .img-border }
+<figcaption>Figure 1: Jupyter Notebook accessing data on DBRepo using the Python Library.</figcaption>
+</figure>
+
+Using the DataFrame representation of the Python Library and the [`plotly`](https://pypi.org/project/plotly/) library,
+we can visualize the ordinate values directly in the Jupyter Notebook.
+
+<figure markdown>
+![Three charts displaying surface analysis data of C, O and Su](../../images/screenshots/xps-chart.png){ .img-border }
+<figcaption>Figure 2: Plot of ordinate values encoded within the experiment block.</figcaption>
+</figure>
+
+## DBRepo Features
+
+- [x] Data preservation of VAMAS-encoded XPS data
+- [x] Subset exploration
+- [x] External visualization of the database
+- [x] Replication of experiments using only open-source software
+
+## Acknowledgement
+
+This work was part of a cooperation with the [Institute of Applied Physics](http://www.iap.tuwien.ac.at/).
+
+<img src="../../images/logos/iap.jpeg" width=100 />
\ No newline at end of file
diff --git a/.docs/images/logos/iap.jpeg b/.docs/images/logos/iap.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..a2ed3957ff03ad1e1a2a7a8cae8c4186fb83fe60
Binary files /dev/null and b/.docs/images/logos/iap.jpeg differ
diff --git a/.docs/images/logos/ift.jpeg b/.docs/images/logos/ift.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..dc4f6f23202f35f54099d90a0d32e9101312cfbc
Binary files /dev/null and b/.docs/images/logos/ift.jpeg differ
diff --git a/.docs/images/logos/iwr.png b/.docs/images/logos/iwr.png
new file mode 100644
index 0000000000000000000000000000000000000000..ae01d54ef26141294409dc68d3d37f54d9030fee
Binary files /dev/null and b/.docs/images/logos/iwr.png differ
diff --git a/.docs/images/screenshots/power.png b/.docs/images/screenshots/power.png
new file mode 100644
index 0000000000000000000000000000000000000000..31fbb6483c93d4a5ed0042b35bb894fcaf6e3867
Binary files /dev/null and b/.docs/images/screenshots/power.png differ
diff --git a/.docs/images/screenshots/xps-chart.png b/.docs/images/screenshots/xps-chart.png
new file mode 100644
index 0000000000000000000000000000000000000000..91768d7f7babe3c20a57fde415872ae268d45c73
Binary files /dev/null and b/.docs/images/screenshots/xps-chart.png differ
diff --git a/.docs/images/screenshots/xps-jupyter.png b/.docs/images/screenshots/xps-jupyter.png
new file mode 100644
index 0000000000000000000000000000000000000000..42fca0f1aefee23cf5cec257d593dd8c97df8ea0
Binary files /dev/null and b/.docs/images/screenshots/xps-jupyter.png differ
diff --git a/dbrepo-data-service/rest-service/src/main/resources/application.yml b/dbrepo-data-service/rest-service/src/main/resources/application.yml
index 771f95d8d75fe38cc4832bedeeb6a74132d0440e..7c91d6a5c822692136ceafe6b8700150d2d8ba58 100644
--- a/dbrepo-data-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-data-service/rest-service/src/main/resources/application.yml
@@ -52,7 +52,7 @@ dbrepo:
   endpoints:
     metadataService: "${METADATA_SERVICE_ENDPOINT:http://gateway-service}"
     storageService: "${S3_ENDPOINT:http://gateway-service/api/storage}"
-    authService: "${AUTH_SERVICE_HOST:http://gateway-service/api/auth}"
+    authService: "${AUTH_SERVICE_ENDPOINT:http://gateway-service/api/auth}"
   s3:
     accessKeyId: "${S3_ACCESS_KEY_ID:seaweedfsadmin}"
     secretAccessKey: "${S3_SECRET_ACCESS_KEY:seaweedfsadmin}"
diff --git a/dbrepo-ui/components/database/DatabaseCreate.vue b/dbrepo-ui/components/database/DatabaseCreate.vue
index f7e2b005974e15afe7aeab285fd006ca5410baf3..275b7198311f6edc62aeefb07311e2d01fea771c 100644
--- a/dbrepo-ui/components/database/DatabaseCreate.vue
+++ b/dbrepo-ui/components/database/DatabaseCreate.vue
@@ -113,9 +113,12 @@ export default {
           this.loadingContainers = false
         })
         .catch(({code}) => {
+          this.loadingContainers = false
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
-          this.loadingContainers = false
         })
     },
     create () {
@@ -128,9 +131,12 @@ export default {
           this.loading = false
         })
         .catch(({code}) => {
+          this.loading = false
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
-          this.loading = false
         })
     },
     notEmpty
diff --git a/dbrepo-ui/components/identifier/Persist.vue b/dbrepo-ui/components/identifier/Persist.vue
index 3b9321ad3644bcbf9fb55d24cf6725b0dedeb21d..0de61931265d5359c07637d935aa9101a1ebca6a 100644
--- a/dbrepo-ui/components/identifier/Persist.vue
+++ b/dbrepo-ui/components/identifier/Persist.vue
@@ -1362,9 +1362,12 @@ export default {
           this.loadingSave = false
         })
         .catch(({code}) => {
+          this.loadingSave = false
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
-          this.loadingSave = false
         })
         .finally(() => {
           this.loadingSave = false
@@ -1384,9 +1387,12 @@ export default {
           this.loadingSave = false
         })
         .catch(({code}) => {
+          this.loadingSave = false
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
-          this.loadingSave = false
         })
         .finally(() => {
           this.loadingSave = false
diff --git a/dbrepo-ui/components/subset/Builder.vue b/dbrepo-ui/components/subset/Builder.vue
index e8e60d6559de7a401ac53e9aa769733045145ea7..a70c32f6505fb3f5fddbb67eba046fed033e4ab6 100644
--- a/dbrepo-ui/components/subset/Builder.vue
+++ b/dbrepo-ui/components/subset/Builder.vue
@@ -509,9 +509,12 @@ export default {
           this.loadingQuery = false
         })
         .catch(({code}) => {
+          this.loadingQuery = false
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
-          this.loadingQuery = false
         })
     },
     createView () {
@@ -528,9 +531,12 @@ export default {
           this.loadingQuery = false
         })
         .catch(({code}) => {
+          this.loadingQuery = false
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
-          this.loadingQuery = false
         })
     },
     buildQuery () {
diff --git a/dbrepo-ui/components/subset/Results.vue b/dbrepo-ui/components/subset/Results.vue
index ed6f7448334ae631d400e354832947e9d095c0fa..95becef12c4f0e5116345f1ade444fb36f350fb3 100644
--- a/dbrepo-ui/components/subset/Results.vue
+++ b/dbrepo-ui/components/subset/Results.vue
@@ -95,9 +95,12 @@ export default {
             this.loadingExecute = false
           })
           .catch(({code}) => {
+            this.loadingExecute = false
             const toast = useToastInstance()
+            if (typeof code !== 'string') {
+              return
+            }
             toast.error(this.$t(code))
-            this.loadingExecute = false
           })
           .finally(() => {
             this.loadingExecute = false
@@ -111,9 +114,12 @@ export default {
             this.loadingExecute = false
           })
           .catch(({code}) => {
+            this.loadingExecute = false
             const toast = useToastInstance()
+            if (typeof code !== 'string') {
+              return
+            }
             toast.error(this.$t(code))
-            this.loadingExecute = false
           })
           .finally(() => {
             this.loadingExecute = false
@@ -133,9 +139,12 @@ export default {
             this.loadingCount = false
           })
           .catch(({code}) => {
+            this.loadingCount = false
             const toast = useToastInstance()
+            if (typeof code !== 'string') {
+              return
+            }
             toast.error(this.$t(code))
-            this.loadingCount = false
           })
           .finally(() => {
             this.loadingCount = false
@@ -148,9 +157,12 @@ export default {
             this.loadingCount = false
           })
           .catch(({code}) => {
+            this.loadingCount = false
             const toast = useToastInstance()
+            if (typeof code !== 'string') {
+              return
+            }
             toast.error(this.$t(code))
-            this.loadingCount = false
           })
           .finally(() => {
             this.loadingCount = false
diff --git a/dbrepo-ui/components/subset/SubsetList.vue b/dbrepo-ui/components/subset/SubsetList.vue
index 94c1bff1e82f0932f86e0aff7ebd3bac9d74a539..21d4e7263eedd942f8abfec1470dd3a13af9d53e 100644
--- a/dbrepo-ui/components/subset/SubsetList.vue
+++ b/dbrepo-ui/components/subset/SubsetList.vue
@@ -81,9 +81,12 @@ export default {
           this.queries = queries
         })
         .catch(({code}) => {
+          this.loadingSubsets = false
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
-          this.loadingSubsets = false
         })
         .finally(() => {
           this.loadingSubsets = false
diff --git a/dbrepo-ui/components/table/BlobUpload.vue b/dbrepo-ui/components/table/BlobUpload.vue
index d0b1ceb49713e01a19c7b6b80f42bf92bbf47467..9f31278951a0df955bf553b488f577b0d1e180ae 100644
--- a/dbrepo-ui/components/table/BlobUpload.vue
+++ b/dbrepo-ui/components/table/BlobUpload.vue
@@ -41,6 +41,9 @@ export default {
         })
         .catch(({code}) => {
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
         })
     }
diff --git a/dbrepo-ui/components/table/TableImport.vue b/dbrepo-ui/components/table/TableImport.vue
index 3688c4d9e3b4603b3be6929c86ec28b115b31af5..b9162dd4d93377508e956968211518de1f6945cf 100644
--- a/dbrepo-ui/components/table/TableImport.vue
+++ b/dbrepo-ui/components/table/TableImport.vue
@@ -471,9 +471,12 @@ export default {
           this.loading = false
         })
         .catch(({code}) => {
+          this.loading = false
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
-          this.loading = false
         })
     }
   }
diff --git a/dbrepo-ui/components/view/ViewToolbar.vue b/dbrepo-ui/components/view/ViewToolbar.vue
index 21125764983e9f7f79bf8dd6ec5f522a3bff7d49..c107c3c0ef006c2d5456f6db187908e092664c5a 100644
--- a/dbrepo-ui/components/view/ViewToolbar.vue
+++ b/dbrepo-ui/components/view/ViewToolbar.vue
@@ -129,6 +129,9 @@ export default {
         })
         .catch(({code, message}) => {
           const toast = useToastInstance()
+          if (typeof code !== 'string' || typeof message !== 'string') {
+            return
+          }
           toast.error(this.$t(code) + ": " + message)
         })
         .finally(() => {
diff --git a/dbrepo-ui/composables/table-service.ts b/dbrepo-ui/composables/table-service.ts
index 96be0537d07b3990ab638acafc724442ae5f7735..88ab27b39ee93d632d4492ed4a2d2d776cc08e8c 100644
--- a/dbrepo-ui/composables/table-service.ts
+++ b/dbrepo-ui/composables/table-service.ts
@@ -69,7 +69,6 @@ export const useTableService = (): any => {
 
   async function getData(databaseId: number, tableId: number, page: number, size: number, timestamp: Date): Promise<QueryResultDto> {
     const axios = useAxiosInstance()
-    console.debug('====>', mapFilter(timestamp, page, size))
     console.debug('get data for table with id', tableId, 'in database with id', databaseId);
     return new Promise<QueryResultDto>((resolve, reject) => {
       axios.get<QueryResultDto>(`/api/database/${databaseId}/table/${tableId}/data`, { params: mapFilter(timestamp, page, size), timeout: 30_000 })
diff --git a/dbrepo-ui/pages/database/[database_id]/settings.vue b/dbrepo-ui/pages/database/[database_id]/settings.vue
index 558f152fef73cdb22eda4c505eb3d7cb3f6ae153..063f9a5339c56d561f32f91f75facfe64ecbeecd 100644
--- a/dbrepo-ui/pages/database/[database_id]/settings.vue
+++ b/dbrepo-ui/pages/database/[database_id]/settings.vue
@@ -475,9 +475,12 @@ export default {
           this.loadingDeleteImage = false
         })
         .catch(({code}) => {
+          this.loadingDeleteImage = false
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
-          this.loadingDeleteImage = false
         })
         .finally(() => {
           this.loadingDeleteImage = false
@@ -514,15 +517,21 @@ export default {
               this.loadingSchema = false
             })
             .catch(({code}) => {
+              this.loadingSchema = false
               const toast = useToastInstance()
+              if (typeof code !== 'string') {
+                return
+              }
               toast.error(this.$t(code))
-              this.loadingSchema = false
             })
         })
         .catch(({code}) => {
+          this.loadingSchema = false
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
-          this.loadingSchema = false
         })
     },
     giveAccess () {
diff --git a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/data.vue b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/data.vue
index 27191e2a606f838a78956854b18352f93c503e9c..2d7195fbcdebf9645fc2362f867c4a946e81c2d1 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/data.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/data.vue
@@ -356,9 +356,12 @@ export default {
             link.click()
           })
           .catch(({code}) => {
+            this.downloadLoading = false
             const toast = useToastInstance()
+            if (typeof code !== 'string') {
+              return
+            }
             toast.error(this.$t(code))
-            this.downloadLoading = false
           })
           .finally(() => {
             this.downloadLoading = false
@@ -416,6 +419,9 @@ export default {
         console.debug('date columns are', this.dateColumns)
       } catch ({code}) {
         const toast = useToastInstance()
+        if (typeof code !== 'string') {
+          return
+        }
         toast.error(this.$t(code))
       }
       this.loading = false
@@ -449,10 +455,13 @@ export default {
           this.loadingData = false
         })
         .catch(({code, message}) => {
-          const toast = useToastInstance()
-          toast.error(this.$t(code) + ": " + message)
           this.error = true
           this.loadingData = false
+          const toast = useToastInstance()
+          if (typeof code !== 'string' || typeof message !== 'string') {
+            return
+          }
+          toast.error(this.$t(code) + ": " + message)
         })
     },
     loadCount () {
@@ -464,9 +473,12 @@ export default {
           this.loadingCount = false
         })
         .catch(({code, message}) => {
+          this.loadingCount = false
           const toast = useToastInstance()
+          if (typeof code !== 'string' || typeof message !== 'string') {
+            return
+          }
           toast.error(this.$t(code) + ": " + message)
-          this.loadingCount = false
         })
     },
     isFileField (column) {
diff --git a/dbrepo-ui/pages/database/[database_id]/table/create.vue b/dbrepo-ui/pages/database/[database_id]/table/create.vue
index 52af4ad304db37b7884c746447a1f0629fd0fa8e..55c9599f8d0bcac9922c0fff77dce370bc8d8b89 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/create.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/create.vue
@@ -261,9 +261,12 @@ export default {
           this.table = table
         })
         .catch(({code}) => {
+          this.loading = false
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
-          this.loading = false
         })
         .finally(() => {
           this.loading = false
diff --git a/dbrepo-ui/pages/database/[database_id]/table/import.vue b/dbrepo-ui/pages/database/[database_id]/table/import.vue
index 07e56afea3ea7ca2a031eece14976ffc488aa431..ed86afe09eed451a853ac72e2224d45a7154303e 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/import.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/import.vue
@@ -325,10 +325,13 @@ export default {
           this.table = table
           resolve(table)
         })
-        .catch(({code, message}) => {
-          const toast = useToastInstance()
-          toast.error(`${this.$t(code)}: ${message}`)
+        .catch((error) => {
           this.loading = false
+          const toast = useToastInstance()
+          if (typeof error.code !== 'string' || typeof error.message !== 'string') {
+            reject(error)
+          }
+          toast.error(`${this.$t(error.code)}: ${error.message}`)
           reject(error)
         })
         .finally(() => {
@@ -347,10 +350,12 @@ export default {
           this.cacheStore.reloadDatabase()
         })
         .catch(({code, message}) => {
-          console.error('Failed to import csv')
+          this.loading = false
           const toast = useToastInstance()
+          if (typeof code !== 'string' || typeof message !== 'string') {
+            return
+          }
           toast.error(`${this.$t(code)}: ${message}`)
-          this.loading = false
         })
         .finally(() => {
           this.loading = false
diff --git a/dbrepo-ui/pages/login.vue b/dbrepo-ui/pages/login.vue
index 38c2ce139e10816a89555d7b25fdf658073f5ded..9a412a0b47c4de9bf642f4a8820f41593ef0f960 100644
--- a/dbrepo-ui/pages/login.vue
+++ b/dbrepo-ui/pages/login.vue
@@ -137,13 +137,19 @@ export default {
             })
             .catch(({code}) => {
               const toast = useToastInstance()
+              if (typeof code !== 'string') {
+                return
+              }
               toast.error(this.$t(code))
             })
         })
         .catch(({code}) => {
+          this.loading = false
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
-          this.loading = false
         })
         .finally(() => {
           this.loading = false
diff --git a/dbrepo-ui/pages/signup.vue b/dbrepo-ui/pages/signup.vue
index 9d84f5c0df8a36b3b56590e42903058895bccb0e..5c95e0c0f06a3f7877eb87f113e5991875fe80d9 100644
--- a/dbrepo-ui/pages/signup.vue
+++ b/dbrepo-ui/pages/signup.vue
@@ -123,9 +123,12 @@ export default {
           this.loading = false
         })
         .catch(({code}) => {
+          this.loading = false
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
-          this.loading = false
         })
         .finally(() => {
           this.loading = false
@@ -139,9 +142,12 @@ export default {
           this.usernames = users.map(u => u.username)
         })
         .catch(({code}) => {
+          this.loadingUsers = false
           const toast = useToastInstance()
+          if (typeof code !== 'string') {
+            return
+          }
           toast.error(this.$t(code))
-          this.loadingUsers = false
         })
         .finally(() => {
           this.loadingUsers = false
diff --git a/dbrepo-ui/utils/index.ts b/dbrepo-ui/utils/index.ts
index 66dbe9448329faab2b2c18b4801bb59d878d06bb..0cea2f14070f87dd62c9aeb872b3eadb8961c5db 100644
--- a/dbrepo-ui/utils/index.ts
+++ b/dbrepo-ui/utils/index.ts
@@ -1048,6 +1048,15 @@ export function isActiveMessage(message: any) {
   return false
 }
 
+export function translate(t: any, code: string): string {
+  if (t === null) {
+    console.error('$t is null')
+    return ''
+  }
+  console.debug('$t argument', code)
+  return t(code)
+}
+
 export function axiosErrorToApiError(error: AxiosError): ApiErrorDto {
   if (error.code === 'ECONNABORTED') {
     /* timeout */
diff --git a/helm/dbrepo/values.yaml b/helm/dbrepo/values.yaml
index 39d8517cfb4be46707f021274c3dfbdb12c45842..b45f832b3a56b3f72a533ef221dfa1a755da8ddd 100644
--- a/helm/dbrepo/values.yaml
+++ b/helm/dbrepo/values.yaml
@@ -125,6 +125,8 @@ authservice:
 ## @section Data Database
 
 datadb:
+  global:
+    storageClass: test
   ## @param datadb.enabled Enable the Data Database.
   enabled: true
   ## @skip datadb.fullnameOverride
@@ -199,7 +201,7 @@ datadb:
       - name: s3
         emptyDir: { }
     persistence:
-      enabled: false
+      enabled: true
   ## @skip datadb.secondary
   secondary:
     replicaCount: 2
@@ -208,7 +210,7 @@ datadb:
 
 searchdb:
   ## @param searchdb.enabled Enable the Data Database.
-  enabled: true.
+  enabled: true
   ## @skip searchdb.fullnameOverride
   fullnameOverride: search-db
   ## @skip searchdb.servicenameOverride
diff --git a/mkdocs.yml b/mkdocs.yml
index e2627e6b0d2368bd47dbb1511f8b7fc8a72a68d4..0c9c1d2a878b47e304fbcde67a78fcf89d98d900 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -35,6 +35,7 @@ nav:
     - Services:
       - Analyse Service: api/analyse-service.md
       - Auth Service: api/auth-service.md
+      - Broker Service: api/broker-service.md
       - Data Service: api/data-service.md
       - Gateway Service: api/gateway-service.md
       - Metadata Service: api/metadata-service.md
@@ -45,7 +46,9 @@ nav:
       - Customization: api/ui.md
   - Examples:
     - Hazardous Materials: examples/hazard.md
+    - Power in Industry 4.0: examples/power.md
     - Transportation Monitoring: examples/transportation.md
+    - XPS: examples/xps.md
   - publications.md
   - contact.md
 extra_css: