diff --git a/dbrepo-storage-service/init/Dockerfile b/dbrepo-storage-service/init/Dockerfile
index 4f4f0c797434901d27311cadbbe250bb0e96c480..be95322ff4721d63a62dc4cf8e18c0f768db8eaa 100644
--- a/dbrepo-storage-service/init/Dockerfile
+++ b/dbrepo-storage-service/init/Dockerfile
@@ -8,6 +8,6 @@ USER 1001
 
 WORKDIR /app
 
-COPY --chown=1001 --chmod=0744 ./init.sh /app/init.sh
+COPY --chown=1001 --chmod=0777 ./init.sh /app/init.sh
 
 ENTRYPOINT [ "bash", "-c", "/app/init.sh" ]
diff --git a/dbrepo-ui/layouts/default.vue b/dbrepo-ui/layouts/default.vue
index d59966925ee105b6adf13bd00cbc51131e64a4e4..b7baeb7043f333d6e9f6b53bfa6aec20228ef67c 100644
--- a/dbrepo-ui/layouts/default.vue
+++ b/dbrepo-ui/layouts/default.vue
@@ -243,7 +243,7 @@ export default {
   watch: {
     '$route.params': {
       handler (newObj, oldObj) {
-        if (!newObj.database_id) {
+        if (!newObj.database_id || import.meta.server) {
           return
         }
         /* load database and optional access */
diff --git a/dbrepo-ui/nuxt.config.ts b/dbrepo-ui/nuxt.config.ts
index cc68f1bd909e30f56b9081c4b869ada488e38e86..b5758d06f5efdf5585e1ff1fc12695ac12c86592 100644
--- a/dbrepo-ui/nuxt.config.ts
+++ b/dbrepo-ui/nuxt.config.ts
@@ -4,24 +4,22 @@ import vuetify from 'vite-plugin-vuetify'
 const proxy: any = {}
 
 /* proxies the backend calls, >>NOT<< the frontend calls (clicking) */
-if (process.env.NODE_ENV === 'development') {
-  const api = 'http://localhost'
-  proxy['/api'] = api
-  proxy['/pid'] = {
-    target: api + '/api',
-    changeOrigin: true,
-    pathRewrite: {
-      '^/pid': '/pid'
-    }
-  }
-  process.env.NUXT_PUBLIC_API_SERVER = api
-}
+// if (process.env.NODE_ENV === 'development') {
+//   const api = 'http://localhost'
+//   proxy['/api'] = api
+//   proxy['/pid'] = {
+//     target: api + '/api',
+//     changeOrigin: true,
+//     pathRewrite: {
+//       '^/pid': '/pid'
+//     }
+//   }
+//   process.env.NUXT_PUBLIC_API_SERVER = api
+// }
 
 /**
  * https://nuxt.com/docs/guide/concepts/rendering#hybrid-rendering
  */
-const routeRules = {}
-
 export default defineNuxtConfig({
   app: {
     head: {
@@ -77,8 +75,8 @@ export default defineNuxtConfig({
         }
       },
       api: {
-        client: 'http://localhost',
-        server: 'http://gateway-service',
+        client: 'https://dbrepo.arisnet.ac.at',
+        server: 'https://dbrepo.arisnet.ac.at',
       },
       upload: {
         client: 'http://localhost/api/upload/files',
@@ -105,8 +103,6 @@ export default defineNuxtConfig({
     }
   },
 
-  routeRules,
-
   devServer: {
     port: 3001
   },
diff --git a/dbrepo-ui/pages/database/[database_id]/info.vue b/dbrepo-ui/pages/database/[database_id]/info.vue
index 0cb01e8d4c481d088bd330d1865840841c0d84ee..eee94047bc3aaeb922f70f65faaabf3a28b1244d 100644
--- a/dbrepo-ui/pages/database/[database_id]/info.vue
+++ b/dbrepo-ui/pages/database/[database_id]/info.vue
@@ -169,6 +169,12 @@
   <pre v-if="error">{{ error }}</pre>
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
 import DatabaseToolbar from '@/components/database/DatabaseToolbar.vue'
 import Summary from '@/components/identifier/Summary.vue'
@@ -188,15 +194,15 @@ export default {
     JumboBox
   },
   setup () {
-    const config = useRuntimeConfig()
     const userStore = useUserStore()
     const { database_id } = useRoute().params
-    const { error, data } = useFetch(`${config.public.api.server}/api/database/${database_id}`, {
+    const { error, data } = useFetch(`${this.config.public.api.server}/api/database/${database_id}`, {
       immediate: true,
+      method: 'GET',
       timeout: 90_000,
       headers: {
         Accept: 'application/json',
-        Authorization: userStore.getToken ? `Bearer ${userStore.getToken}` : null
+        Authorization: userStore.getToken ? `Bearer ${this.userStore.getToken}` : null
       }
     })
     if (data.value) {
diff --git a/dbrepo-ui/pages/database/[database_id]/settings.vue b/dbrepo-ui/pages/database/[database_id]/settings.vue
index 5e52a9081603653da7847b7029f077761219870a..984df4e635e0d010a451fcf2efb11019ffc74433 100644
--- a/dbrepo-ui/pages/database/[database_id]/settings.vue
+++ b/dbrepo-ui/pages/database/[database_id]/settings.vue
@@ -252,6 +252,7 @@
 <script>
 import DatabaseToolbar from '@/components/database/DatabaseToolbar.vue'
 import EditAccess from '@/components/dialogs/EditAccess.vue'
+import JumboBox from '@/components/JumboBox.vue'
 import { useUserStore } from '@/stores/user'
 import { useCacheStore } from '@/stores/cache'
 import { errorCodeKey } from '@/utils'
@@ -259,7 +260,8 @@ import { errorCodeKey } from '@/utils'
 export default {
   components: {
     DatabaseToolbar,
-    EditAccess
+    EditAccess,
+    JumboBox
   },
   setup () {
     const config = useRuntimeConfig()
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 6d84d8a6d63049aa2c5e6ef07edf7771800a01df..10c1bc8ccfe9b236b80308c1355b23e2e3213a31 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
@@ -109,6 +109,12 @@
     :text="$t(errorCodeKey(error).text, { resource: 'table' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
 import TableHistory from '@/components/table/TableHistory.vue'
 import TimeDrift from '@/components/TimeDrift.vue'
@@ -132,22 +138,17 @@ export default {
     JumboBox
   },
   setup () {
-    const config = useRuntimeConfig()
     const userStore = useUserStore()
     const { database_id, table_id } = useRoute().params
-    const { error, data } = useFetch(`${config.public.api.server}/api/database/${database_id}/table/${table_id}`, {
+    const { error } = useFetch(`${this.config.public.api.server}/api/database/${database_id}/table/${table_id}`, {
       immediate: true,
+      method: 'HEAD',
       timeout: 90_000,
       headers: {
         Accept: 'application/json',
         Authorization: userStore.getToken ? `Bearer ${userStore.getToken}` : null
       }
     })
-    if (data.value) {
-      const identifierService = useIdentifierService()
-      useServerHead(identifierService.databaseToServerHead(data.value))
-      useServerSeoMeta(identifierService.databaseToServerSeoMeta(data.value))
-    }
     return {
       error
     }
diff --git a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/import.vue b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/import.vue
index 9da3e1c9fd9774ca61be0be90af9a7050d6fba3c..0e5185470080940abf12d202849e61071768ecf6 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/import.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/import.vue
@@ -26,16 +26,46 @@
     </v-card>
     <v-breadcrumbs :items="items" class="pa-0 mt-2" />
   </div>
+  <JumboBox
+    v-if="error"
+    :title="$t(errorCodeKey(error).title, { resource: 'table' })"
+    :subtitle="$t(errorCodeKey(error).subtitle)"
+    :text="$t(errorCodeKey(error).text, { resource: 'table' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
 import TableImport from '@/components/table/TableImport.vue'
+import JumboBox from '@/components/JumboBox.vue'
 import { useUserStore } from '@/stores/user'
 import { useCacheStore } from '@/stores/cache'
+import { errorCodeKey } from '@/utils'
 
 export default {
   components: {
-    TableImport
+    TableImport,
+    JumboBox
+  },
+  setup () {
+    const userStore = useUserStore()
+    const { database_id, table_id } = useRoute().params
+    const { error } = useFetch(`${this.config.public.api.server}/api/database/${database_id}/table/${table_id}`, {
+      immediate: true,
+      method: 'HEAD',
+      timeout: 90_000,
+      headers: {
+        Accept: 'application/json',
+        Authorization: userStore.getToken ? `Bearer ${userStore.getToken}` : null
+      }
+    })
+    return {
+      error
+    }
   },
   data () {
     return {
@@ -95,6 +125,9 @@ export default {
       }
       return this.roles.includes('insert-table-data')
     }
+  },
+  methods: {
+    errorCodeKey
   }
 }
 </script>
diff --git a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/info.vue b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/info.vue
index 93c16d67925ed584e0427a14f5fd53ede7c0826d..5171d1861a2b19330b7122ac4fab6c207d41c6f3 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/info.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/info.vue
@@ -123,8 +123,15 @@
     :text="$t(errorCodeKey(error).text, { resource: 'table' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
 import TableToolbar from '@/components/table/TableToolbar.vue'
+import JumboBox from '@/components/JumboBox.vue'
 import Select from '@/components/identifier/Select.vue'
 import Summary from '@/components/identifier/Summary.vue'
 import UserBadge from '@/components/user/UserBadge.vue'
@@ -137,14 +144,15 @@ export default {
     Summary,
     Select,
     TableToolbar,
-    UserBadge
+    UserBadge,
+    JumboBox
   },
   setup () {
-    const config = useRuntimeConfig()
     const userStore = useUserStore()
     const { database_id, table_id } = useRoute().params
-    const { error, data } = useFetch(`${config.public.api.server}/api/database/${database_id}/table/${table_id}`, {
+    const { error, data } = useFetch(`${this.config.public.api.server}/api/database/${database_id}/table/${table_id}`, {
       immediate: true,
+      method: 'GET',
       timeout: 90_000,
       headers: {
         Accept: 'application/json',
diff --git a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/persist/[identifier_id]/index.vue b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/persist/[identifier_id]/index.vue
index 076b46217d4f280e5ded0e1cb94ca8c6c4110881..d0b72a436e72ce3e59330d0ffd0ec3bc87bcfa29 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/persist/[identifier_id]/index.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/persist/[identifier_id]/index.vue
@@ -1,18 +1,49 @@
 <template>
-  <div v-if="canCreateIdentifier || canUpdateIdentifier">
+  <div
+    v-if="canCreateIdentifier || canUpdateIdentifier">
     <Persist type="table" :database="database" />
     <v-breadcrumbs :items="items" class="pa-0 mt-2" />
   </div>
+  <JumboBox
+    v-if="error"
+    :title="$t(errorCodeKey(error).title, { resource: 'identifier' })"
+    :subtitle="$t(errorCodeKey(error).subtitle)"
+    :text="$t(errorCodeKey(error).text, { resource: 'identifier' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
-import Persist from '~/components/identifier/Persist.vue'
-import { useUserStore } from '~/stores/user.js'
-import { useCacheStore } from '~/stores/cache.js'
+import Persist from '@/components/identifier/Persist.vue'
+import JumboBox from '@/components/JumboBox.vue'
+import { useUserStore } from '@/stores/user'
+import { useCacheStore } from '@/stores/cache'
+import { errorCodeKey } from '@/utils'
 
 export default {
   components: {
-    Persist
+    Persist,
+    JumboBox
+  },
+  setup () {
+    const userStore = useUserStore()
+    const { database_id, table_id } = useRoute().params
+    const { error } = useFetch(`${this.config.public.api.server}/api/database/${database_id}/table/${table_id}`, {
+      immediate: true,
+      method: 'HEAD',
+      timeout: 90_000,
+      headers: {
+        Accept: 'application/json',
+        Authorization: userStore.getToken ? `Bearer ${userStore.getToken}` : null
+      }
+    })
+    return {
+      error
+    }
   },
   data () {
     return {
@@ -73,6 +104,9 @@ export default {
       }
       return this.roles.includes('modify-identifier-metadata')
     }
+  },
+  methods: {
+    errorCodeKey
   }
 }
 </script>
diff --git a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/persist/index.vue b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/persist/index.vue
index 8ab4f83a25293ee0d9338f87c0c35b378a123a6f..f807001353b72e3591facf67743ff678c8405c07 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/persist/index.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/persist/index.vue
@@ -9,16 +9,46 @@
       :items="items"
       class="pa-0 mt-2" />
   </div>
+  <JumboBox
+    v-if="error"
+    :title="$t(errorCodeKey(error).title, { resource: 'identifier' })"
+    :subtitle="$t(errorCodeKey(error).subtitle)"
+    :text="$t(errorCodeKey(error).text, { resource: 'identifier' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
-import Persist from '~/components/identifier/Persist.vue'
-import { useUserStore } from '~/stores/user.js'
-import { useCacheStore } from '~/stores/cache.js'
+import Persist from '@/components/identifier/Persist.vue'
+import JumboBox from '@/components/JumboBox.vue'
+import { useUserStore } from '@/stores/user'
+import { useCacheStore } from '@/stores/cache'
+import { errorCodeKey } from '@/utils'
 
 export default {
   components: {
-    Persist
+    Persist,
+    JumboBox
+  },
+  setup () {
+    const userStore = useUserStore()
+    const { database_id, table_id } = useRoute().params
+    const { error, data } = useFetch(`${this.config.public.api.server}/api/database/${database_id}/table/${table_id}`, {
+      immediate: true,
+      method: 'HEAD',
+      timeout: 90_000,
+      headers: {
+        Accept: 'application/json',
+        Authorization: userStore.getToken ? `Bearer ${userStore.getToken}` : null
+      }
+    })
+    return {
+      error
+    }
   },
   data () {
     return {
@@ -72,8 +102,9 @@ export default {
       const userService = useUserService()
       return userService.hasReadAccess(this.access)
     }
+  },
+  methods: {
+    errorCodeKey
   }
 }
 </script>
-<style>
-</style>
diff --git a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/schema.vue b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/schema.vue
index e0d4f9555fc780b7bfcad2275b71261861eb1b3e..320ebe3d7564e285c2ee86f872af42d1ab0ae1b7 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/schema.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/schema.vue
@@ -125,33 +125,36 @@
     :text="$t(errorCodeKey(error).text, { resource: 'table' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
 import TableToolbar from '@/components/table/TableToolbar.vue'
+import JumboBox from '@/components/JumboBox.vue'
 import { useUserStore } from '@/stores/user'
 import { useCacheStore } from '@/stores/cache'
 import { errorCodeKey } from '@/utils'
 
 export default {
   components: {
-    TableToolbar
+    TableToolbar,
+    JumboBox
   },
   setup () {
-    const config = useRuntimeConfig()
     const userStore = useUserStore()
     const { database_id, table_id } = useRoute().params
-    const { error, data } = useFetch(`${config.public.api.server}/api/database/${database_id}/table/${table_id}`, {
+    const { error } = useFetch(`${this.config.public.api.server}/api/database/${database_id}/table/${table_id}`, {
       immediate: true,
+      method: 'HEAD',
       timeout: 90_000,
       headers: {
         Accept: 'application/json',
         Authorization: userStore.getToken ? `Bearer ${userStore.getToken}` : null
       }
     })
-    if (data.value) {
-      const identifierService = useIdentifierService()
-      useServerHead(identifierService.databaseToServerHead(data.value))
-      useServerSeoMeta(identifierService.databaseToServerSeoMeta(data.value))
-    }
     return {
       error
     }
diff --git a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/settings.vue b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/settings.vue
index 45a8a3a5f2d701801f9ca1fb6f6f7e2055a04e1e..f51851b220bc5a6b92f0963d4b06e87285cd3ced 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/[table_id]/settings.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/[table_id]/settings.vue
@@ -112,22 +112,51 @@
       :items="items"
       class="pa-0 mt-2" />
   </div>
+  <JumboBox
+    v-if="error"
+    :title="$t(errorCodeKey(error).title, { resource: 'table' })"
+    :subtitle="$t(errorCodeKey(error).subtitle)"
+    :text="$t(errorCodeKey(error).text, { resource: 'table' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
-import { max } from '@/utils'
+import JumboBox from '@/components/JumboBox.vue'
 import TableToolbar from '@/components/table/TableToolbar.vue'
 import { useUserStore } from '@/stores/user'
 import { useCacheStore } from '@/stores/cache'
+import { errorCodeKey, max } from '@/utils'
 
 export default {
   components: {
-    TableToolbar
+    TableToolbar,
+    JumboBox
+  },
+  setup () {
+    const userStore = useUserStore()
+    const { database_id, table_id } = useRoute().params
+    const { error } = useFetch(`${this.config.public.api.server}/api/database/${database_id}/table/${table_id}`, {
+      immediate: true,
+      method: 'HEAD',
+      timeout: 90_000,
+      headers: {
+        Accept: 'application/json',
+        Authorization: userStore.getToken ? `Bearer ${userStore.getToken}` : null
+      }
+    })
+    return {
+      error
+    }
   },
   data () {
     return {
       tab: 0,
-      valid: null,
+      valid: false,
       loading: false,
       modify: {
         description: null,
@@ -254,6 +283,7 @@ export default {
   },
   methods: {
     max,
+    errorCodeKey,
     submit () {
       this.$refs.form.validate()
     },
diff --git a/dbrepo-ui/pages/database/[database_id]/table/create/dataset.vue b/dbrepo-ui/pages/database/[database_id]/table/create/dataset.vue
index 21b17f4fb59fdde33d24ab2bedf7ca90bc21402b..2d1729d7cdb2802c8426aa613848b5a9d84d53ce 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/create/dataset.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/create/dataset.vue
@@ -1,5 +1,6 @@
 <template>
-  <div v-if="canInsertTableData">
+  <div
+    v-if="canInsertTableData">
     <v-toolbar flat>
       <v-btn
         class="mr-2"
@@ -10,222 +11,255 @@
       <v-toolbar-title
         :text="$t('pages.table.subpages.import.title')"/>
     </v-toolbar>
-    <v-card
-      variant="flat"
-      rounded="0">
-      <v-card-text>
-        <v-row>
-          <v-col
-            md="8">
-            <v-alert
-              border="start"
-              color="info">
-              {{ $t('pages.table.subpages.import.dataset.text') }}
-              <NuxtLink
-                :href="`/database/${$route.params.database_id}/table/create/schema`">
-                {{ $t('pages.table.subpages.import.schema.text') }}
-              </NuxtLink>
-            </v-alert>
-          </v-col>
-        </v-row>
-      </v-card-text>
-      <v-card-text>
-        <v-stepper
-          vertical
-          variant="flat">
-          <v-stepper-header>
-            <v-stepper-item
-              :title="$t('pages.table.subpages.import.metadata.title')"
-              :complete="validStep1"
-              :value="1"/>
-          </v-stepper-header>
-          <v-stepper-window
-            direction="vertical">
-            <v-form
-              ref="form"
-              v-model="validStep1"
-              :disabled="step > 4"
-              @submit.prevent="submit">
+    <v-form
+      ref="form"
+      v-model="valid"
+      @submit.prevent="submit">
+      <v-card
+        variant="flat"
+        rounded="0">
+        <v-card-text>
+          <v-row>
+            <v-col
+              md="8">
+              <v-alert
+                border="start"
+                color="info">
+                {{ $t('pages.table.subpages.import.dataset.text') }}
+                <NuxtLink
+                  :href="`/database/${$route.params.database_id}/table/create/schema`">
+                  {{ $t('pages.table.subpages.import.schema.text') }}
+                </NuxtLink>
+              </v-alert>
+            </v-col>
+          </v-row>
+        </v-card-text>
+        <v-card-text>
+          <v-stepper
+            vertical
+            variant="flat">
+            <v-stepper-header>
+              <v-stepper-item
+                :title="$t('pages.table.subpages.import.metadata.title')"
+                :complete="validStep1"
+                :value="1"/>
+            </v-stepper-header>
+            <v-stepper-window
+              direction="vertical">
+              <v-form
+                ref="form"
+                v-model="validStep1"
+                :disabled="step > 4"
+                @submit.prevent="submit">
+                <v-container>
+                  <v-row
+                    dense>
+                    <v-col md="4">
+                      <v-text-field
+                        v-model="tableCreate.name"
+                        :rules="[
+                          v => notEmpty(v) || $t('validation.required'),
+                          v => generatedTableName.length <= 64 || ($t('validation.max-length') + 64),
+                        ]"
+                        required
+                        clearable
+                        :error-messages="!validTableName ? [$t('validation.table.exists')] : []"
+                        persistent-hint
+                        :variant="inputVariant"
+                        :hint="$t('pages.table.subpages.import.name.hint')"
+                        :label="$t('pages.table.subpages.import.name.label')"/>
+                    </v-col>
+                    <v-col md="4">
+                      <v-text-field
+                        v-model="generatedTableName"
+                        :rules="[
+                          v => notEmpty(v) || $t('validation.required'),
+                          v => generatedTableName.length <= 64 || ($t('validation.max-length') + 64),
+                        ]"
+                        disabled
+                        clearable
+                        counter="64"
+                        persistent-counter
+                        persistent-hint
+                        :variant="inputVariant"
+                        :hint="$t('pages.table.subpages.import.generated.hint')"
+                        :label="$t('pages.table.subpages.import.generated.label')"/>
+                    </v-col>
+                  </v-row>
+                  <v-row
+                    dense>
+                    <v-col md="8">
+                      <v-textarea
+                        v-model="tableCreate.description"
+                        rows="2"
+                        :rules="[
+                          v => (!!v || v.length <= 180) || ($t('validation.max-length') + 180),
+                        ]"
+                        clearable
+                        counter="180"
+                        persistent-counter
+                        persistent-hint
+                        :variant="inputVariant"
+                        :hint="$t('pages.table.subpages.import.description.hint')"
+                        :label="$t('pages.table.subpages.import.description.label')"/>
+                    </v-col>
+                  </v-row>
+                  <v-row
+                    dense>
+                    <v-col
+                      md="4">
+                      <v-select
+                        v-model="tableCreate.is_public"
+                        name="public"
+                        :label="$t('pages.database.resource.data.label')"
+                        :hint="$t('pages.database.resource.data.hint', { resource: 'table' })"
+                        persistent-hint
+                        :variant="inputVariant"
+                        :items="dataOptions"
+                        item-title="title"
+                        item-value="value"
+                        :rules="[v => v !== null || $t('validation.required')]"
+                        required>
+                      </v-select>
+                    </v-col>
+                    <v-col
+                      md="4">
+                      <v-select
+                        v-model="tableCreate.is_schema_public"
+                        name="schema-public"
+                        :label="$t('pages.database.resource.schema.label')"
+                        :hint="$t('pages.database.resource.schema.hint', { resource: 'table', schema: 'columns' })"
+                        persistent-hint
+                        :variant="inputVariant"
+                        :items="schemaOptions"
+                        item-title="title"
+                        item-value="value"
+                        :rules="[v => v !== null || $t('validation.required')]"
+                        required>
+                      </v-select>
+                    </v-col>
+                  </v-row>
+                </v-container>
+              </v-form>
+            </v-stepper-window>
+            <TableImport
+              :create="true"
+              :disabled="!validStep1 || step > 4"
+              :table="table"
+              @analyse="onAnalyse"/>
+            <v-stepper-header>
+              <v-stepper-item
+                :title="$t('pages.table.subpages.import.preview.title')"
+                :complete="validStep4"
+                :value="4"/>
+            </v-stepper-header>
+            <v-stepper-window
+              direction="vertical">
+              <v-container
+                v-if="step >= 4">
+                <TableSchema
+                  ref="schema"
+                  :back="false"
+                  :disabled="step > 4"
+                  :loading="loading"
+                  :submit-text="$t('navigation.continue')"
+                  :columns="tableCreate.columns"
+                  @close="createEmptyTableAndImport"/>
+              </v-container>
+            </v-stepper-window>
+            <v-stepper-header>
+              <v-stepper-item
+                :title="$t('pages.table.subpages.import.summary.title')"
+                :value="5"/>
+            </v-stepper-header>
+            <v-stepper-window
+              v-if="step >= 5"
+              direction="vertical">
               <v-container>
-                <v-row
-                  dense>
-                  <v-col md="4">
-                    <v-text-field
-                      v-model="tableCreate.name"
-                      :rules="[
-                        v => notEmpty(v) || $t('validation.required'),
-                        v => generatedTableName.length <= 64 || ($t('validation.max-length') + 64),
-                      ]"
-                      required
-                      clearable
-                      :error-messages="!validTableName ? [$t('validation.table.exists')] : []"
-                      persistent-hint
-                      :variant="inputVariant"
-                      :hint="$t('pages.table.subpages.import.name.hint')"
-                      :label="$t('pages.table.subpages.import.name.label')"/>
-                  </v-col>
-                  <v-col md="4">
-                    <v-text-field
-                      v-model="generatedTableName"
-                      :rules="[
-                        v => notEmpty(v) || $t('validation.required'),
-                        v => generatedTableName.length <= 64 || ($t('validation.max-length') + 64),
-                      ]"
-                      disabled
-                      clearable
-                      counter="64"
-                      persistent-counter
-                      persistent-hint
-                      :variant="inputVariant"
-                      :hint="$t('pages.table.subpages.import.generated.hint')"
-                      :label="$t('pages.table.subpages.import.generated.label')"/>
-                  </v-col>
-                </v-row>
-                <v-row
-                  dense>
-                  <v-col md="8">
-                    <v-textarea
-                      v-model="tableCreate.description"
-                      rows="2"
-                      :rules="[
-                        v => (!!v || v.length <= 180) || ($t('validation.max-length') + 180),
-                      ]"
-                      clearable
-                      counter="180"
-                      persistent-counter
-                      persistent-hint
-                      :variant="inputVariant"
-                      :hint="$t('pages.table.subpages.import.description.hint')"
-                      :label="$t('pages.table.subpages.import.description.label')"/>
-                  </v-col>
-                </v-row>
-                <v-row
-                  dense>
+                <v-row dense>
                   <v-col
-                    md="4">
-                    <v-select
-                      v-model="tableCreate.is_public"
-                      name="public"
-                      :label="$t('pages.database.resource.data.label')"
-                      :hint="$t('pages.database.resource.data.hint', { resource: 'table' })"
-                      persistent-hint
-                      :variant="inputVariant"
-                      :items="dataOptions"
-                      item-title="title"
-                      item-value="value"
-                      :rules="[v => v !== null || $t('validation.required')]"
-                      required>
-                    </v-select>
+                    md="8">
+                    <v-alert
+                      border="start"
+                      color="success">
+                      {{ $t('pages.table.subpages.create.summary.text') }}
+                      <strong>
+                        {{ table.internal_name }}
+                      </strong>
+                    </v-alert>
                   </v-col>
-                  <v-col
-                    md="4">
-                    <v-select
-                      v-model="tableCreate.is_schema_public"
-                      name="schema-public"
-                      :label="$t('pages.database.resource.schema.label')"
-                      :hint="$t('pages.database.resource.schema.hint', { resource: 'table', schema: 'columns' })"
-                      persistent-hint
-                      :variant="inputVariant"
-                      :items="schemaOptions"
-                      item-title="title"
-                      item-value="value"
-                      :rules="[v => v !== null || $t('validation.required')]"
-                      required>
-                    </v-select>
+                </v-row>
+                <v-row>
+                  <v-col>
+                    <v-btn
+                      class="mb-1 mr-2"
+                      color="tertiary"
+                      size="small"
+                      variant="flat"
+                      :loading="loadingImport"
+                      :text="$t('navigation.import')"
+                      @click="onImport"/>
+                    <v-btn
+                      class="mb-1"
+                      color="secondary"
+                      size="small"
+                      variant="flat"
+                      :loading="loadingContinue"
+                      :text="$t('navigation.view')"
+                      @click="onContinue"/>
                   </v-col>
                 </v-row>
               </v-container>
-            </v-form>
-          </v-stepper-window>
-          <TableImport
-            :create="true"
-            :disabled="!validStep1 || step > 4"
-            :table="table"
-            @analyse="onAnalyse"/>
-          <v-stepper-header>
-            <v-stepper-item
-              :title="$t('pages.table.subpages.import.preview.title')"
-              :complete="validStep4"
-              :value="4"/>
-          </v-stepper-header>
-          <v-stepper-window
-            direction="vertical">
-            <v-container
-              v-if="step >= 4">
-              <TableSchema
-                ref="schema"
-                :back="false"
-                :disabled="step > 4"
-                :loading="loading"
-                :submit-text="$t('navigation.continue')"
-                :columns="tableCreate.columns"
-                @close="createEmptyTableAndImport"/>
-            </v-container>
-          </v-stepper-window>
-          <v-stepper-header>
-            <v-stepper-item
-              :title="$t('pages.table.subpages.import.summary.title')"
-              :value="5"/>
-          </v-stepper-header>
-          <v-stepper-window
-            v-if="step >= 5"
-            direction="vertical">
-            <v-container>
-              <v-row dense>
-                <v-col
-                  md="8">
-                  <v-alert
-                    border="start"
-                    color="success">
-                    {{ $t('pages.table.subpages.create.summary.text') }}
-                    <strong>
-                      {{ table.internal_name }}
-                    </strong>
-                  </v-alert>
-                </v-col>
-              </v-row>
-              <v-row>
-                <v-col>
-                  <v-btn
-                    class="mb-1 mr-2"
-                    color="tertiary"
-                    size="small"
-                    variant="flat"
-                    :loading="loadingImport"
-                    :text="$t('navigation.import')"
-                    @click="onImport"/>
-                  <v-btn
-                    class="mb-1"
-                    color="secondary"
-                    size="small"
-                    variant="flat"
-                    :loading="loadingContinue"
-                    :text="$t('navigation.view')"
-                    @click="onContinue"/>
-                </v-col>
-              </v-row>
-            </v-container>
-          </v-stepper-window>
-        </v-stepper>
-      </v-card-text>
-    </v-card>
+            </v-stepper-window>
+          </v-stepper>
+        </v-card-text>
+      </v-card>
+    </v-form>
     <v-breadcrumbs :items="items" class="pa-0 mt-2"/>
   </div>
+  <JumboBox
+    v-if="error"
+    :title="$t(errorCodeKey(error).title, { resource: 'table' })"
+    :subtitle="$t(errorCodeKey(error).subtitle)"
+    :text="$t(errorCodeKey(error).text, { resource: 'table' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
 import TableSchema from '@/components/table/TableSchema.vue'
-import {notEmpty} from '@/utils'
-import {useUserStore} from '@/stores/user'
-import {useCacheStore} from '@/stores/cache'
+import { notEmpty, errorCodeKey } from '@/utils'
+import { useUserStore } from '@/stores/user'
+import { useCacheStore } from '@/stores/cache'
 
 export default {
   components: {
     TableSchema
   },
+  setup () {
+    const userStore = useUserStore()
+    const { database_id } = useRoute().params
+    const { error } = useFetch(`${this.config.public.api.server}/api/database/${database_id}`, {
+      immediate: true,
+      method: 'HEAD',
+      timeout: 90_000,
+      headers: {
+        Accept: 'application/json',
+        Authorization: userStore.getToken ? `Bearer ${userStore.getToken}` : null
+      }
+    })
+    return {
+      error
+    }
+  },
   data() {
     return {
       step: 1,
+      valid: false,
       validStep1: false,
       validStep2: false,
       validStep3: false,
@@ -358,6 +392,7 @@ export default {
   },
   methods: {
     notEmpty,
+    errorCodeKey,
     submit() {
       this.$refs.form.validate()
     },
diff --git a/dbrepo-ui/pages/database/[database_id]/table/create/schema.vue b/dbrepo-ui/pages/database/[database_id]/table/create/schema.vue
index 6b62ba7a2739f40c9c4145f7bcff547a9b09fef4..946b084ba87a1440abfe7fc58b592d9067733688 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/create/schema.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/create/schema.vue
@@ -1,5 +1,6 @@
 <template>
-  <div v-if="canCreateTable">
+  <div
+    v-if="canCreateTable">
     <v-toolbar
       flat>
       <v-btn
@@ -182,17 +183,30 @@
     </v-card>
     <v-breadcrumbs :items="items" class="pa-0 mt-2" />
   </div>
+  <JumboBox
+    v-if="error"
+    :title="$t(errorCodeKey(error).title, { resource: 'table' })"
+    :subtitle="$t(errorCodeKey(error).subtitle)"
+    :text="$t(errorCodeKey(error).text, { resource: 'table' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
 import TableSchema from '@/components/table/TableSchema.vue'
-import { notEmpty } from '@/utils'
+import JumboBox from '@/components/JumboBox.vue'
+import { notEmpty, errorCodeKey } from '@/utils'
 import { useUserStore } from '@/stores/user'
 import { useCacheStore } from '@/stores/cache'
 
 export default {
   components: {
-    TableSchema
+    TableSchema,
+    JumboBox
   },
   data () {
     return {
@@ -306,6 +320,7 @@ export default {
   },
   methods: {
     notEmpty,
+    errorCodeKey,
     submit () {
       this.$refs.form.validate()
     },
diff --git a/dbrepo-ui/pages/database/[database_id]/table/index.vue b/dbrepo-ui/pages/database/[database_id]/table/index.vue
index 9616074fddd6fa61e7033ad8de5dd9fd387e5691..6511f963c6dcdeb50f67f7ee5b96f7e620f6a1a3 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/index.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/index.vue
@@ -17,6 +17,12 @@
     :text="$t(errorCodeKey(error).text, { resource: 'table' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
 import TableList from '@/components/table/TableList.vue'
 import DatabaseToolbar from '@/components/database/DatabaseToolbar.vue'
@@ -30,10 +36,9 @@ export default {
     DatabaseToolbar
   },
   setup () {
-    const config = useRuntimeConfig()
     const userStore = useUserStore()
     const { database_id } = useRoute().params
-    const { error } = useFetch(`${config.public.api.server}/api/database/${database_id}`, {
+    const { error } = useFetch(`${this.config.public.api.server}/api/database/${database_id}`, {
       immediate: true,
       method: 'HEAD',
       timeout: 90_000,
diff --git a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/data.vue b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/data.vue
index 20ee33ea61a1dce58e74c0592a36fc46906af1fc..3f0ebc184451afac8b513dd594ab3526b854cdff 100644
--- a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/data.vue
+++ b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/data.vue
@@ -32,16 +32,47 @@
     </v-card>
     <v-breadcrumbs :items="items" class="pa-0 mt-2" />
   </div>
+  <JumboBox
+    v-if="error"
+    :title="$t(errorCodeKey(error).title, { resource: 'view' })"
+    :subtitle="$t(errorCodeKey(error).subtitle)"
+    :text="$t(errorCodeKey(error).text, { resource: 'view' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
 import TimeDrift from '@/components/TimeDrift.vue'
+import JumboBox from '@/components/JumboBox.vue'
 import QueryResults from '@/components/subset/Results.vue'
+import { useUserStore } from '@/stores/user'
+import { errorCodeKey } from '@/utils'
 
 export default {
   components: {
     QueryResults,
-    TimeDrift
+    TimeDrift,
+    JumboBox
+  },
+  setup () {
+    const userStore = useUserStore()
+    const { database_id, view_id } = useRoute().params
+    const { error } = useFetch(`${this.config.public.api.server}/api/database/${database_id}/view/${view_id}`, {
+      immediate: true,
+      method: 'HEAD',
+      timeout: 90_000,
+      headers: {
+        Accept: 'application/json',
+        Authorization: userStore.getToken ? `Bearer ${userStore.getToken}` : null
+      }
+    })
+    return {
+      error
+    }
   },
   data () {
     return {
@@ -112,6 +143,7 @@ export default {
     this.reload()
   },
   methods: {
+    errorCodeKey,
     reload () {
       this.$refs.queryResults.reExecute(Number(this.$route.params.view_id))
       this.$refs.queryResults.reExecuteCount(Number(this.$route.params.view_id))
diff --git a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/info.vue b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/info.vue
index 5fc351216dbf90ec71843bc65c11889a4c883f9c..61bdb4c3796df94cbdf40245dc3fa887ebe67cad 100644
--- a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/info.vue
+++ b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/info.vue
@@ -1,5 +1,6 @@
 <template>
-  <div>
+  <div
+    v-if="canViewView">
     <ViewToolbar />
     <v-window
       v-model="tab">
@@ -56,14 +57,26 @@
     </v-window>
     <v-breadcrumbs :items="items" class="pa-0 mt-2" />
   </div>
+  <JumboBox
+    v-if="error"
+    :title="$t(errorCodeKey(error).title, { resource: 'view' })"
+    :subtitle="$t(errorCodeKey(error).subtitle)"
+    :text="$t(errorCodeKey(error).text, { resource: 'view' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
 import ViewToolbar from '@/components/view/ViewToolbar.vue'
 import Summary from '@/components/identifier/Summary.vue'
 import Select from '@/components/identifier/Select.vue'
 import UserBadge from '@/components/user/UserBadge.vue'
-import { formatTimestampUTCLabel } from '@/utils'
+import JumboBox from '@/components/JumboBox.vue'
+import { formatTimestampUTCLabel, errorCodeKey } from '@/utils'
 import { useUserStore } from '@/stores/user'
 import { useCacheStore } from '@/stores/cache'
 
@@ -72,14 +85,15 @@ export default {
     Select,
     Summary,
     ViewToolbar,
-    UserBadge
+    UserBadge,
+    JumboBox
   },
   setup () {
-    const config = useRuntimeConfig()
     const userStore = useUserStore()
     const { database_id, view_id } = useRoute().params
-    const { error, data } = useFetch(`${config.public.api.server}/api/database/${database_id}/view/${view_id}`, {
+    const { error, data } = useFetch(`${this.config.public.api.server}/api/database/${database_id}/view/${view_id}`, {
       immediate: true,
+      method: 'GET',
       timeout: 90_000,
       headers: {
         Accept: 'application/json',
@@ -144,6 +158,12 @@ export default {
     view () {
       return this.cacheStore.getView
     },
+    hasReadAccess () {
+      if (!this.access) {
+        return false
+      }
+      return this.access.type === 'read' || this.access.type === 'write_all' || this.access.type === 'write_own'
+    },
     identifiers () {
       if (!this.view) {
         return []
@@ -186,9 +206,22 @@ export default {
       }
       const userService = useUserService()
       return userService.userToFullName(this.view.creator)
+    },
+    canViewView () {
+      if (!this.view) {
+        return false
+      }
+      if (this.view.is_public) {
+        return true
+      }
+      if (!this.user) {
+        return false
+      }
+      return this.hasReadAccess || this.view.owner.id === this.user.id || this.database.owner.id === this.user.id
     }
   },
   methods: {
+    errorCodeKey,
     formatUTC (timestamp) {
       return formatTimestampUTCLabel(timestamp)
     }
diff --git a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/persist/[identifier_id]/index.vue b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/persist/[identifier_id]/index.vue
index 772910ec0953281912a615bc397790b96fd113e9..11b0f60c00bd0e19e9a89d2acaf3d5bae78da3a2 100644
--- a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/persist/[identifier_id]/index.vue
+++ b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/persist/[identifier_id]/index.vue
@@ -1,18 +1,51 @@
 <template>
-  <div v-if="canCreateIdentifier || canUpdateIdentifier">
-    <Persist type="view" :database="database" />
+  <div
+    v-if="canCreateIdentifier || canUpdateIdentifier">
+    <Persist
+      type="view"
+      :database="database" />
     <v-breadcrumbs :items="items" class="pa-0 mt-2" />
   </div>
+  <JumboBox
+    v-if="error"
+    :title="$t(errorCodeKey(error).title, { resource: 'view' })"
+    :subtitle="$t(errorCodeKey(error).subtitle)"
+    :text="$t(errorCodeKey(error).text, { resource: 'view' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
-import Persist from '~/components/identifier/Persist.vue'
-import { useUserStore } from '~/stores/user.js'
-import { useCacheStore } from '~/stores/cache.js'
+import Persist from '@/components/identifier/Persist.vue'
+import JumboBox from '@/components/JumboBox.vue'
+import { useUserStore } from '@/stores/user'
+import { useCacheStore } from '@/stores/cache'
+import { errorCodeKey } from '@/utils'
 
 export default {
   components: {
-    Persist
+    Persist,
+    JumboBox
+  },
+  setup () {
+    const userStore = useUserStore()
+    const { database_id, view_id } = useRoute().params
+    const { error } = useFetch(`${this.config.public.api.server}/api/database/${database_id}/view/${view_id}`, {
+      immediate: true,
+      method: 'HEAD',
+      timeout: 90_000,
+      headers: {
+        Accept: 'application/json',
+        Authorization: userStore.getToken ? `Bearer ${userStore.getToken}` : null
+      }
+    })
+    return {
+      error
+    }
   },
   data () {
     return {
@@ -73,6 +106,9 @@ export default {
       }
       return this.roles.includes('modify-identifier-metadata')
     }
+  },
+  methods: {
+    errorCodeKey
   }
 }
 </script>
diff --git a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/persist/index.vue b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/persist/index.vue
index a0c91a1a4e04802b699c83c1d6b5de9794997efe..3a2f0f793fe85ccbbd1473b3c513b5060449327a 100644
--- a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/persist/index.vue
+++ b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/persist/index.vue
@@ -1,18 +1,52 @@
 <template>
-  <div v-if="canPersistView">
-    <Persist type="view" :database="database" :view="view" />
+  <div
+    v-if="canPersistView">
+    <Persist
+      type="view"
+      :database="database"
+      :view="view" />
     <v-breadcrumbs :items="items" class="pa-0 mt-2" />
   </div>
+  <JumboBox
+    v-if="error"
+    :title="$t(errorCodeKey(error).title, { resource: 'view' })"
+    :subtitle="$t(errorCodeKey(error).subtitle)"
+    :text="$t(errorCodeKey(error).text, { resource: 'view' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
-import Persist from '~/components/identifier/Persist.vue'
-import { useUserStore } from '~/stores/user.js'
-import { useCacheStore } from '~/stores/cache.js'
+import Persist from '@/components/identifier/Persist.vue'
+import JumboBox from '@/components/JumboBox.vue'
+import { useUserStore } from '@/stores/user'
+import { useCacheStore } from '@/stores/cache'
+import { errorCodeKey } from '@/utils'
 
 export default {
   components: {
-    Persist
+    Persist,
+    JumboBox
+  },
+  setup () {
+    const userStore = useUserStore()
+    const { database_id, view_id } = useRoute().params
+    const { error } = useFetch(`${this.config.public.api.server}/api/database/${database_id}/view/${view_id}`, {
+      immediate: true,
+      method: 'HEAD',
+      timeout: 90_000,
+      headers: {
+        Accept: 'application/json',
+        Authorization: userStore.getToken ? `Bearer ${userStore.getToken}` : null
+      }
+    })
+    return {
+      error
+    }
   },
   data () {
     return {
@@ -68,8 +102,9 @@ export default {
       const userService = useUserService()
       return userService.hasReadAccess(this.access)
     }
+  },
+  methods: {
+    errorCodeKey
   }
 }
 </script>
-<style>
-</style>
diff --git a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/schema.vue b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/schema.vue
index e126e19d9050c23b4299f9799b2895490813f33f..e8a8435d88f18b741705d34430a8c3a365925ec0 100644
--- a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/schema.vue
+++ b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/schema.vue
@@ -49,16 +49,46 @@
       :items="items"
       class="pa-0 mt-2" />
   </div>
+  <JumboBox
+    v-if="error"
+    :title="$t(errorCodeKey(error).title, { resource: 'view' })"
+    :subtitle="$t(errorCodeKey(error).subtitle)"
+    :text="$t(errorCodeKey(error).text, { resource: 'view' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
 import TableToolbar from '@/components/table/TableToolbar.vue'
+import JumboBox from '@/components/JumboBox.vue'
 import { useUserStore } from '@/stores/user'
 import { useCacheStore } from '@/stores/cache'
+import { errorCodeKey } from '@/utils'
 
 export default {
   components: {
-    TableToolbar
+    TableToolbar,
+    JumboBox
+  },
+  setup () {
+    const userStore = useUserStore()
+    const { database_id, view_id } = useRoute().params
+    const { error } = useFetch(`${this.config.public.api.server}/api/database/${database_id}/view/${view_id}`, {
+      immediate: true,
+      method: 'HEAD',
+      timeout: 90_000,
+      headers: {
+        Accept: 'application/json',
+        Authorization: userStore.getToken ? `Bearer ${userStore.getToken}` : null
+      }
+    })
+    return {
+      error
+    }
   },
   data () {
     return {
@@ -143,6 +173,7 @@ export default {
     }
   },
   methods: {
+    errorCodeKey,
     extra (column) {
       if (column.type === 'float') {
         return `precision=${column.size}`
diff --git a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/settings.vue b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/settings.vue
index f9c905ffd4de036c8ccd1157d14bcda1504a10a0..8a65a34f274081cf289099354edc142392492ae2 100644
--- a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/settings.vue
+++ b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/settings.vue
@@ -88,20 +88,50 @@
       :items="items"
       class="pa-0 mt-2" />
   </div>
+  <JumboBox
+    v-if="error"
+    :title="$t(errorCodeKey(error).title, { resource: 'view' })"
+    :subtitle="$t(errorCodeKey(error).subtitle)"
+    :text="$t(errorCodeKey(error).text, { resource: 'view' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
 import ViewToolbar from '@/components/view/ViewToolbar.vue'
+import JumboBox from '@/components/JumboBox.vue'
 import { useUserStore } from '@/stores/user'
 import { useCacheStore } from '@/stores/cache'
+import { errorCodeKey } from '@/utils'
 
 export default {
   components: {
-    ViewToolbar
+    ViewToolbar,
+    JumboBox
+  },
+  setup () {
+    const userStore = useUserStore()
+    const { database_id } = useRoute().params
+    const { error } = useFetch(`${this.config.public.api.server}/api/database/${database_id}`, {
+      immediate: true,
+      method: 'HEAD',
+      timeout: 90_000,
+      headers: {
+        Accept: 'application/json',
+        Authorization: userStore.getToken ? `Bearer ${userStore.getToken}` : null
+      }
+    })
+    return {
+      error
+    }
   },
   data () {
     return {
-      valid: null,
+      valid: false,
       loading: false,
       modify: {
         is_public: null,
@@ -222,6 +252,7 @@ export default {
     this.modify.description = this.view.description
   },
   methods: {
+    errorCodeKey,
     submit () {
       this.$refs.form.validate()
     },
diff --git a/dbrepo-ui/pages/database/[database_id]/view/create.vue b/dbrepo-ui/pages/database/[database_id]/view/create.vue
index 839b79e243d4ceb7903e8a81ee9da0306d29697a..d1202980ecb542ee89a940da11d3fa159f28b106 100644
--- a/dbrepo-ui/pages/database/[database_id]/view/create.vue
+++ b/dbrepo-ui/pages/database/[database_id]/view/create.vue
@@ -1,16 +1,48 @@
 <template>
-  <div v-if="canCreateView">
+  <div
+    v-if="canCreateView">
     <Builder mode="view" />
     <v-breadcrumbs :items="items" class="pa-0 mt-2" />
   </div>
+  <JumboBox
+    v-if="error"
+    :title="$t(errorCodeKey(error).title, { resource: 'view' })"
+    :subtitle="$t(errorCodeKey(error).subtitle)"
+    :text="$t(errorCodeKey(error).text, { resource: 'view' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
 import Builder from '@/components/subset/Builder.vue'
+import JumboBox from '@/components/JumboBox.vue'
+import { useUserStore } from '@/stores/user'
+import { errorCodeKey } from '@/utils'
 
 export default {
   components: {
-    Builder
+    Builder,
+    JumboBox
+  },
+  setup () {
+    const userStore = useUserStore()
+    const { database_id } = useRoute().params
+    const { error } = useFetch(`${this.config.public.api.server}/api/database/${database_id}`, {
+      immediate: true,
+      method: 'HEAD',
+      timeout: 90_000,
+      headers: {
+        Accept: 'application/json',
+        Authorization: userStore.getToken ? `Bearer ${userStore.getToken}` : null
+      }
+    })
+    return {
+      error
+    }
   },
   data () {
     return {
@@ -49,6 +81,9 @@ export default {
       }
       return this.roles.includes('create-database-view')
     }
+  },
+  methods: {
+    errorCodeKey
   }
 }
 </script>
diff --git a/dbrepo-ui/pages/database/[database_id]/view/index.vue b/dbrepo-ui/pages/database/[database_id]/view/index.vue
index 5d8cee483626d54afb8dbb082d489313a30f3aad..ab244bbe8a11453d2fc8bdb61de5e9773d4af80b 100644
--- a/dbrepo-ui/pages/database/[database_id]/view/index.vue
+++ b/dbrepo-ui/pages/database/[database_id]/view/index.vue
@@ -17,22 +17,31 @@
     :text="$t(errorCodeKey(error).text, { resource: 'view' })" />
 </template>
 
+<script setup>
+import { ref } from 'vue'
+
+const runtimeConfig = useRuntimeConfig()
+const config = ref(runtimeConfig)
+</script>
 <script>
 import DatabaseToolbar from '@/components/database/DatabaseToolbar.vue'
+import JumboBox from '@/components/JumboBox.vue'
 import ViewList from '@/components/view/ViewList.vue'
 import { useCacheStore } from '@/stores/cache'
+import { errorCodeKey } from '@/utils'
 
 export default {
   name: 'Views',
   components: {
     ViewList,
-    DatabaseToolbar
+    DatabaseToolbar,
+    JumboBox
   },
   setup () {
     const config = useRuntimeConfig()
     const userStore = useUserStore()
     const { database_id } = useRoute().params
-    const { error } = useFetch(`${config.public.api.server}/api/database/${database_id}`, {
+    const { error } = useFetch(`${this.config.public.api.server}/api/database/${database_id}`, {
       immediate: true,
       method: 'HEAD',
       timeout: 90_000,
diff --git a/helm/dbrepo/Chart.lock b/helm/dbrepo/Chart.lock
index f452f870386be707d92e9f19498b4c24f004e6c1..0ae700f9d6f0a4674036ae4fb26c4aafc6ee1a5f 100644
--- a/helm/dbrepo/Chart.lock
+++ b/helm/dbrepo/Chart.lock
@@ -6,25 +6,25 @@ dependencies:
   repository: https://charts.bitnami.com/bitnami
   version: 21.6.1
 - name: mariadb-galera
-  repository: https://charts.bitnami.com/bitnami
+  repository: oci://registry-1.docker.io/bitnamicharts
   version: 13.2.7
 - name: mariadb-galera
-  repository: https://charts.bitnami.com/bitnami
+  repository: oci://registry-1.docker.io/bitnamicharts
   version: 13.2.7
 - name: rabbitmq
-  repository: https://charts.bitnami.com/bitnami
+  repository: oci://registry-1.docker.io/bitnamicharts
   version: 14.0.0
 - name: seaweedfs
   repository: file://../seaweedfs
   version: 4.2.1
 - name: grafana
-  repository: https://charts.bitnami.com/bitnami
+  repository: oci://registry-1.docker.io/bitnamicharts
   version: 11.4.2
 - name: prometheus
-  repository: https://charts.bitnami.com/bitnami
+  repository: oci://registry-1.docker.io/bitnamicharts
   version: 1.3.22
 - name: nginx
-  repository: https://charts.bitnami.com/bitnami
+  repository: oci://registry-1.docker.io/bitnamicharts
   version: 18.3.1
-digest: sha256:414c043a3751945d7bd5b02fa00ee0464bee7f08efb469e00a5f059cdbff03b5
-generated: "2025-01-01T15:06:18.720941571+01:00"
+digest: sha256:f244730fab10d52050634ce3286413d378b92e4dc97b0ad2951295c0d2971146
+generated: "2025-01-14T16:48:00.637443736+01:00"
diff --git a/helm/dbrepo/Chart.yaml b/helm/dbrepo/Chart.yaml
index 22d1865df5866213c931df8b2b522af33137c1e6..d2ff855534c9bbea91e408d2fee96a566994647d 100644
--- a/helm/dbrepo/Chart.yaml
+++ b/helm/dbrepo/Chart.yaml
@@ -30,17 +30,17 @@ dependencies:
   - name: mariadb-galera
     alias: datadb
     version: 13.2.7
-    repository: https://charts.bitnami.com/bitnami
+    repository: oci://registry-1.docker.io/bitnamicharts
     condition: datadb.enabled
   - name: mariadb-galera
     alias: metadatadb
     version: 13.2.7
-    repository: https://charts.bitnami.com/bitnami
+    repository: oci://registry-1.docker.io/bitnamicharts
     condition: metadatadb.enabled
   - name: rabbitmq
     alias: brokerservice
     version: 14.0.0
-    repository: https://charts.bitnami.com/bitnami
+    repository: oci://registry-1.docker.io/bitnamicharts
     condition: brokerservice.enabled
   - name: seaweedfs
     alias: storageservice
@@ -50,15 +50,15 @@ dependencies:
   - name: grafana
     alias: dashboardservice
     version: 11.4.2
-    repository: https://charts.bitnami.com/bitnami
+    repository: oci://registry-1.docker.io/bitnamicharts
     condition: dashboardservice.enabled
   - name: prometheus
     alias: metricdb
     version: 1.3.22
-    repository: https://charts.bitnami.com/bitnami
+    repository: oci://registry-1.docker.io/bitnamicharts
     condition: metricdb.enabled
   - name: nginx
     alias: gatewayservice
     version: 18.3.1
-    repository: https://charts.bitnami.com/bitnami
+    repository: oci://registry-1.docker.io/bitnamicharts
     condition: gatewayservice.enabled
\ No newline at end of file
diff --git a/helm/dbrepo/charts/mariadb-galera-13.2.7.tgz b/helm/dbrepo/charts/mariadb-galera-13.2.7.tgz
index 377afe25d2435c5788c26592b39797aa1378e966..92bfce78d9c52d62ca9d7e4816c51dccece8af2b 100644
Binary files a/helm/dbrepo/charts/mariadb-galera-13.2.7.tgz and b/helm/dbrepo/charts/mariadb-galera-13.2.7.tgz differ
diff --git a/helm/dbrepo/charts/prometheus-1.3.22.tgz b/helm/dbrepo/charts/prometheus-1.3.22.tgz
index 3d81a5e625af76257c1a7bc032e889005bc66607..5c26eda5dfb6ec24a8e3cf1b22e1b3aee10d838e 100644
Binary files a/helm/dbrepo/charts/prometheus-1.3.22.tgz and b/helm/dbrepo/charts/prometheus-1.3.22.tgz differ
diff --git a/helm/dbrepo/charts/rabbitmq-14.0.0.tgz b/helm/dbrepo/charts/rabbitmq-14.0.0.tgz
index 39ea3aaef2a94fe507a08242bbfe37209eb9fa53..e858784faeff04c04a34ebad05885197f565c1e0 100644
Binary files a/helm/dbrepo/charts/rabbitmq-14.0.0.tgz and b/helm/dbrepo/charts/rabbitmq-14.0.0.tgz differ
diff --git a/helm/dbrepo/charts/seaweedfs-4.2.1.tgz b/helm/dbrepo/charts/seaweedfs-4.2.1.tgz
index ae1b3048a25888df8dade2d0d3b86cd6404dcc0d..fece394e7c53ae6f207c913485155b278314ad1c 100644
Binary files a/helm/dbrepo/charts/seaweedfs-4.2.1.tgz and b/helm/dbrepo/charts/seaweedfs-4.2.1.tgz differ
diff --git a/helm/dbrepo/files/01-setup-schema.sql b/helm/dbrepo/files/01-setup-schema.sql
index 0a43ef604460e8deb4e4fee4f457c0ca833fc6a2..c9ce89d1be71f4791c5e55dbb7c24f46e979355a 100644
--- a/helm/dbrepo/files/01-setup-schema.sql
+++ b/helm/dbrepo/files/01-setup-schema.sql
@@ -9,6 +9,7 @@ CREATE TABLE IF NOT EXISTS `mdb_users`
     email            character varying(255) NOT NULL,
     orcid            character varying(255),
     affiliation      character varying(255),
+    is_internal      BOOLEAN                NOT NULL DEFAULT FALSE,
     mariadb_password character varying(255) NOT NULL,
     theme            character varying(255) NOT NULL default ('light'),
     language         character varying(3)   NOT NULL default ('en'),
@@ -95,7 +96,6 @@ CREATE TABLE IF NOT EXISTS `mdb_databases`
     PRIMARY KEY (id),
     FOREIGN KEY (cid) REFERENCES mdb_containers (id),
     FOREIGN KEY (owned_by) REFERENCES mdb_users (id),
-    FOREIGN KEY (owned_by) REFERENCES mdb_users (id),
     FOREIGN KEY (contact_person) REFERENCES mdb_users (id)
 ) WITH SYSTEM VERSIONING;
 
@@ -135,7 +135,6 @@ CREATE TABLE IF NOT EXISTS `mdb_tables`
     PRIMARY KEY (ID),
     UNIQUE (tDBID, internal_name),
     FOREIGN KEY (tDBID) REFERENCES mdb_databases (id),
-    FOREIGN KEY (owned_by) REFERENCES mdb_users (id),
     FOREIGN KEY (owned_by) REFERENCES mdb_users (id)
 ) WITH SYSTEM VERSIONING;
 
diff --git a/helm/dbrepo/templates/auth-configmap.yaml b/helm/dbrepo/templates/auth-configmap.yaml
index 9a237767cce39c2b3ad2cdb9c307f858ae158224..83530ee108bd0c444dbf04d071454f6c3d04aab1 100644
--- a/helm/dbrepo/templates/auth-configmap.yaml
+++ b/helm/dbrepo/templates/auth-configmap.yaml
@@ -83,7 +83,7 @@ data:
           "description" : "${default-system-roles}",
           "composite" : true,
           "composites" : {
-            "realm" : [ "delete-database-view", "update-semantic-unit", "export-query-data", "check-foreign-database-access", "default-data-steward-roles", "execute-query", "default-user-handling", "delete-table-data", "find-query", "list-database-views", "persist-query", "update-search-index", "delete-database-access", "view-table-history", "create-ontology", "update-ontology", "modify-user-theme", "default-system-roles", "create-semantic-concept", "default-container-handling", "create-container", "create-table", "default-broker-handling", "default-maintenance-handling", "execute-semantic-query", "uma_authorization", "table-semantic-analyse", "list-containers", "check-database-access", "escalated-query-handling", "delete-identifier", "modify-database-owner", "list-tables", "export-table-data", "create-database-access", "delete-container", "re-execute-query", "create-semantic-unit", "escalated-identifier-handling", "system", "update-table-statistic", "escalated-semantics-handling", "default-database-handling", "delete-ontology", "find-database", "find-database-view", "update-semantic-concept", "find-user", "import-database-data", "publish-identifier", "default-roles-dbrepo", "find-foreign-user", "create-database", "create-maintenance-message", "find-maintenance-message", "escalated-container-handling", "default-researcher-roles", "default-identifier-handling", "escalated-user-handling", "modify-user-information", "create-database-view", "update-maintenance-message", "delete-foreign-table", "offline_access", "modify-foreign-table-column-semantics", "delete-maintenance-message", "find-container", "insert-table-data", "modify-identifier-metadata", "modify-database-image", "escalated-broker-handling", "modify-table-column-semantics", "escalated-database-handling", "default-semantics-handling", "update-database-access", "default-query-handling", "find-table", "list-queries", "default-developer-roles", "create-identifier", "escalated-table-handling", "find-identifier", "view-database-view-data", "view-table-data", "list-licenses", "default-table-handling", "list-identifiers", "create-foreign-identifier", "list-databases", "list-ontologies", "modify-database-visibility", "list-maintenance-messages", "delete-table" ]
+            "realm" : [ "delete-database-view", "update-semantic-unit", "export-query-data", "check-foreign-database-access", "default-data-steward-roles", "execute-query", "default-user-handling", "delete-table-data", "find-query", "list-database-views", "persist-query", "update-search-index", "delete-database-access", "view-table-history", "create-ontology", "update-ontology", "modify-user-theme", "default-system-roles", "create-semantic-concept", "default-container-handling", "create-container", "create-table", "default-broker-handling", "default-maintenance-handling", "execute-semantic-query", "uma_authorization", "table-semantic-analyse", "list-containers", "check-database-access", "escalated-query-handling", "delete-identifier", "modify-database-owner", "list-tables", "export-table-data", "create-database-access", "delete-container", "re-execute-query", "create-semantic-unit", "escalated-identifier-handling", "system", "update-table-statistic", "escalated-semantics-handling", "default-database-handling", "delete-ontology", "find-database", "find-database-view", "update-semantic-concept", "find-user", "import-database-data", "publish-identifier", "default-roles-dbrepo", "find-foreign-user", "create-database", "create-maintenance-message", "find-maintenance-message", "escalated-container-handling", "default-researcher-roles", "default-identifier-handling", "escalated-user-handling", "modify-user-information", "create-database-view", "update-maintenance-message", "delete-foreign-table", "offline_access", "modify-foreign-table-column-semantics", "delete-maintenance-message", "find-container", "insert-table-data", "modify-identifier-metadata", "modify-database-image", "escalated-broker-handling", "modify-table-column-semantics", "escalated-database-handling", "default-semantics-handling", "update-database-access", "default-query-handling", "find-table", "list-queries", "default-developer-roles", "create-identifier", "escalated-table-handling", "find-identifier", "view-table-data", "list-licenses", "default-table-handling", "list-identifiers", "create-foreign-identifier", "list-databases", "list-ontologies", "modify-database-visibility", "list-maintenance-messages", "delete-table" ]
           },
           "clientRole" : false,
           "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0",
@@ -156,19 +156,11 @@ data:
           "description" : "${default-table-handling}",
           "composite" : true,
           "composites" : {
-            "realm" : [ "modify-table-column-semantics", "list-tables", "update-table-statistic", "find-table", "create-table", "delete-table" ]
+            "realm" : [ "modify-table-column-semantics", "list-tables", "update-table-statistic", "find-table", "create-table", "delete-table", "update-table" ]
           },
           "clientRole" : false,
           "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0",
           "attributes" : { }
-        }, {
-          "id" : "b0d66d3d-59b4-4aae-aa66-e3d5a49f28e3",
-          "name" : "view-database-view-data",
-          "description" : "${view-database-view-data}",
-          "composite" : false,
-          "clientRole" : false,
-          "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0",
-          "attributes" : { }
         }, {
           "id" : "f5ea431a-9b2c-4195-bcb4-9511f38e4b44",
           "name" : "create-database-view",
@@ -229,7 +221,7 @@ data:
           "description" : "${default-researcher-roles}",
           "composite" : true,
           "composites" : {
-            "realm" : [ "default-table-handling", "default-semantics-handling", "default-container-handling", "default-query-handling", "default-user-handling", "default-database-handling", "default-broker-handling", "default-identifier-handling" ]
+            "realm" : [ "default-table-handling", "default-semantics-handling", "default-container-handling", "default-query-handling", "default-user-handling", "default-database-handling", "default-broker-handling", "default-identifier-handling", "default-view-handling" ]
           },
           "clientRole" : false,
           "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0",
@@ -274,6 +266,14 @@ data:
           "clientRole" : false,
           "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0",
           "attributes" : { }
+        }, {
+          "id" : "22449528-00c9-4e86-9400-4b8ae6fd8f4d",
+          "name" : "modify-view-visibility",
+          "description" : "${modify-view-visibility}",
+          "composite" : false,
+          "clientRole" : false,
+          "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0",
+          "attributes" : { }
         }, {
           "id" : "c12c1f4e-186f-4153-a795-26e79fb623d6",
           "name" : "create-ontology",
@@ -306,6 +306,17 @@ data:
           "clientRole" : false,
           "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0",
           "attributes" : { }
+        }, {
+          "id" : "d75e7938-9d5e-4cb3-8c57-18a446867d3a",
+          "name" : "default-view-handling",
+          "description" : "${default-view-handling}",
+          "composite" : true,
+          "composites" : {
+            "realm" : [ "delete-database-view", "update-database-view", "create-database-view", "modify-view-visibility", "find-database-view", "list-database-views" ]
+          },
+          "clientRole" : false,
+          "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0",
+          "attributes" : { }
         }, {
           "id" : "535f1484-4514-4d24-8d97-e3f6c11a426b",
           "name" : "create-container",
@@ -400,13 +411,21 @@ data:
           "clientRole" : false,
           "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0",
           "attributes" : { }
+        }, {
+          "id" : "6ae766b0-b8b4-4067-a95d-c8576bc4ac77",
+          "name" : "update-table",
+          "description" : "${update-table}",
+          "composite" : false,
+          "clientRole" : false,
+          "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0",
+          "attributes" : { }
         }, {
           "id" : "64c16bfb-2015-48ad-a23f-637ff24419cb",
           "name" : "default-query-handling",
           "description" : "${default-query-handling}",
           "composite" : true,
           "composites" : {
-            "realm" : [ "delete-database-view", "export-query-data", "execute-query", "delete-table-data", "export-table-data", "list-queries", "find-query", "list-database-views", "persist-query", "view-database-view-data", "view-table-data", "re-execute-query", "view-table-history", "create-database-view", "find-database-view", "insert-table-data" ]
+            "realm" : [ "delete-database-view", "export-query-data", "execute-query", "delete-table-data", "export-table-data", "list-queries", "find-query", "list-database-views", "persist-query", "view-table-data", "re-execute-query", "view-table-history", "create-database-view", "find-database-view", "insert-table-data" ]
           },
           "clientRole" : false,
           "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0",
@@ -427,6 +446,14 @@ data:
           "clientRole" : false,
           "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0",
           "attributes" : { }
+        }, {
+          "id" : "df20b7d1-8d30-4a99-80eb-e8195fab0e76",
+          "name" : "update-database-view",
+          "description" : "${update-database-view}",
+          "composite" : false,
+          "clientRole" : false,
+          "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0",
+          "attributes" : { }
         }, {
           "id" : "88f82262-be80-4d18-9fb4-5529da031f33",
           "name" : "system",
@@ -1221,12 +1248,13 @@ data:
         "frontchannelLogout" : false,
         "protocol" : "openid-connect",
         "attributes" : {
+          "realm_client" : "false",
           "post.logout.redirect.uris" : "+"
         },
         "authenticationFlowBindingOverrides" : { },
         "fullScopeAllowed" : false,
         "nodeReRegistrationTimeout" : 0,
-        "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "email" ],
+        "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "basic", "email" ],
         "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
       }, {
         "id" : "d3c4a04e-39ce-4549-a34a-11e25774cd96",
@@ -1251,6 +1279,7 @@ data:
         "frontchannelLogout" : false,
         "protocol" : "openid-connect",
         "attributes" : {
+          "realm_client" : "false",
           "post.logout.redirect.uris" : "+",
           "pkce.code.challenge.method" : "S256"
         },
@@ -1265,7 +1294,7 @@ data:
           "consentRequired" : false,
           "config" : { }
         } ],
-        "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "email" ],
+        "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "basic", "email" ],
         "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
       }, {
         "id" : "81ef0f59-a5ca-4be4-a1d1-0c32edf1cfd6",
@@ -1288,12 +1317,14 @@ data:
         "frontchannelLogout" : false,
         "protocol" : "openid-connect",
         "attributes" : {
+          "realm_client" : "false",
+          "client.use.lightweight.access.token.enabled" : "true",
           "post.logout.redirect.uris" : "+"
         },
         "authenticationFlowBindingOverrides" : { },
-        "fullScopeAllowed" : false,
+        "fullScopeAllowed" : true,
         "nodeReRegistrationTimeout" : 0,
-        "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "email" ],
+        "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "basic", "email" ],
         "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
       }, {
         "id" : "88694c91-753d-4c44-9740-ec9ac06bba45",
@@ -1316,6 +1347,7 @@ data:
         "frontchannelLogout" : false,
         "protocol" : "openid-connect",
         "attributes" : {
+          "realm_client" : "true",
           "post.logout.redirect.uris" : "+"
         },
         "authenticationFlowBindingOverrides" : { },
@@ -1349,6 +1381,7 @@ data:
         "frontchannelLogout" : true,
         "protocol" : "openid-connect",
         "attributes" : {
+          "realm_client" : "false",
           "oidc.ciba.grant.enabled" : "false",
           "client.secret.creation.time" : "1680085365",
           "backchannel.logout.session.required" : "true",
@@ -1379,11 +1412,11 @@ data:
           "protocolMapper" : "oidc-hardcoded-claim-mapper",
           "consentRequired" : false,
           "config" : {
-            "claim.value" : "dbrepo",
-            "userinfo.token.claim" : "true",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "aud",
+            "claim.value" : "dbrepo",
+            "userinfo.token.claim" : "true",
             "access.tokenResponse.claim" : "false"
           }
         }, {
@@ -1402,7 +1435,7 @@ data:
             "claim.name" : "uid"
           }
         } ],
-        "defaultClientScopes" : [ "roles", "attributes" ],
+        "defaultClientScopes" : [ "roles", "attributes", "basic" ],
         "optionalClientScopes" : [ "rabbitmq.read:*/*", "web-origins", "acr", "rabbitmq.write:*/*", "address", "phone", "offline_access", "profile", "microprofile-jwt", "email", "rabbitmq.configure:*/*" ]
       }, {
         "id" : "25741f6b-4867-4138-8238-6345c6ba8702",
@@ -1430,6 +1463,7 @@ data:
         "frontchannelLogout" : true,
         "protocol" : "openid-connect",
         "attributes" : {
+          "realm_client" : "false",
           "oidc.ciba.grant.enabled" : "false",
           "client.secret.creation.time" : "1680000860",
           "backchannel.logout.session.required" : "true",
@@ -1447,12 +1481,12 @@ data:
           "protocolMapper" : "oidc-usermodel-property-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "false",
             "user.attribute" : "username",
             "id.token.claim" : "false",
             "access.token.claim" : "true",
             "claim.name" : "client_id",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "false"
           }
         }, {
           "id" : "f1afc22d-f595-403b-ba2e-6ab19d98205e",
@@ -1461,15 +1495,15 @@ data:
           "protocolMapper" : "oidc-hardcoded-claim-mapper",
           "consentRequired" : false,
           "config" : {
-            "claim.value" : "rabbitmq",
-            "userinfo.token.claim" : "false",
             "id.token.claim" : "false",
             "access.token.claim" : "true",
             "claim.name" : "aud",
+            "claim.value" : "rabbitmq",
+            "userinfo.token.claim" : "false",
             "access.tokenResponse.claim" : "false"
           }
         } ],
-        "defaultClientScopes" : [ "web-origins", "acr", "rabbitmq.tag:management" ],
+        "defaultClientScopes" : [ "web-origins", "acr", "rabbitmq.tag:management", "basic" ],
         "optionalClientScopes" : [ "rabbitmq.read:*/*", "rabbitmq.write:*/*", "address", "phone", "offline_access", "profile", "roles", "microprofile-jwt", "email", "rabbitmq.configure:*/*" ]
       }, {
         "id" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930",
@@ -1492,6 +1526,7 @@ data:
         "frontchannelLogout" : false,
         "protocol" : "openid-connect",
         "attributes" : {
+          "realm_client" : "true",
           "post.logout.redirect.uris" : "+"
         },
         "authenticationFlowBindingOverrides" : { },
@@ -1522,11 +1557,13 @@ data:
         "frontchannelLogout" : false,
         "protocol" : "openid-connect",
         "attributes" : {
+          "realm_client" : "false",
+          "client.use.lightweight.access.token.enabled" : "true",
           "post.logout.redirect.uris" : "+",
           "pkce.code.challenge.method" : "S256"
         },
         "authenticationFlowBindingOverrides" : { },
-        "fullScopeAllowed" : false,
+        "fullScopeAllowed" : true,
         "nodeReRegistrationTimeout" : 0,
         "protocolMappers" : [ {
           "id" : "c4d54410-3f22-4259-9571-94da2c43b752",
@@ -1535,15 +1572,15 @@ data:
           "protocolMapper" : "oidc-usermodel-attribute-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "locale",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "locale",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         } ],
-        "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "email" ],
+        "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "basic", "email" ],
         "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ]
       } ],
       "clientScopes" : [ {
@@ -1564,8 +1601,8 @@ data:
         "protocol" : "openid-connect",
         "attributes" : {
           "include.in.token.scope" : "true",
-          "display.on.consent.screen" : "true",
-          "consent.screen.text" : "${emailScopeConsentText}"
+          "consent.screen.text" : "${emailScopeConsentText}",
+          "display.on.consent.screen" : "true"
         },
         "protocolMappers" : [ {
           "id" : "782819fe-ba5d-4ddb-9f95-cabb69d79c8d",
@@ -1574,12 +1611,12 @@ data:
           "protocolMapper" : "oidc-usermodel-property-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "emailVerified",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "email_verified",
-            "jsonType.label" : "boolean"
+            "jsonType.label" : "boolean",
+            "userinfo.token.claim" : "true"
           }
         }, {
           "id" : "ca613fc8-bbf2-4240-8b33-a1874f1559f3",
@@ -1588,12 +1625,12 @@ data:
           "protocolMapper" : "oidc-usermodel-property-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "email",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "email",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         } ]
       }, {
@@ -1603,8 +1640,8 @@ data:
         "protocol" : "openid-connect",
         "attributes" : {
           "include.in.token.scope" : "true",
-          "display.on.consent.screen" : "true",
-          "consent.screen.text" : "${profileScopeConsentText}"
+          "consent.screen.text" : "${profileScopeConsentText}",
+          "display.on.consent.screen" : "true"
         },
         "protocolMappers" : [ {
           "id" : "84f0487a-1d7d-470c-9b8e-5835294ae235",
@@ -1613,12 +1650,12 @@ data:
           "protocolMapper" : "oidc-usermodel-property-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "username",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "preferred_username",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         }, {
           "id" : "bbdcdb36-3ec0-443d-b1af-9993d40f0567",
@@ -1627,12 +1664,12 @@ data:
           "protocolMapper" : "oidc-usermodel-attribute-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "gender",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "gender",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         }, {
           "id" : "9faa870b-5491-4ce9-b27d-c9ce07d6a95e",
@@ -1641,12 +1678,12 @@ data:
           "protocolMapper" : "oidc-usermodel-attribute-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "birthdate",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "birthdate",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         }, {
           "id" : "f0e3c012-9523-4076-83ae-e466e2d08220",
@@ -1666,12 +1703,12 @@ data:
           "protocolMapper" : "oidc-usermodel-attribute-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "profile",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "profile",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         }, {
           "id" : "18cfbf4b-0a8e-45c7-a832-c0f72c92f3f3",
@@ -1680,12 +1717,12 @@ data:
           "protocolMapper" : "oidc-usermodel-attribute-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "updatedAt",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "updated_at",
-            "jsonType.label" : "long"
+            "jsonType.label" : "long",
+            "userinfo.token.claim" : "true"
           }
         }, {
           "id" : "841ea785-26ab-429a-a420-09ce3948924d",
@@ -1694,12 +1731,12 @@ data:
           "protocolMapper" : "oidc-usermodel-property-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "lastName",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "family_name",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         }, {
           "id" : "bfba13ff-f952-4e89-bbb1-a693fdebfae8",
@@ -1708,12 +1745,12 @@ data:
           "protocolMapper" : "oidc-usermodel-attribute-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "website",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "website",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         }, {
           "id" : "475f071d-5149-4379-b928-76482f5f519c",
@@ -1722,12 +1759,12 @@ data:
           "protocolMapper" : "oidc-usermodel-attribute-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "zoneinfo",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "zoneinfo",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         }, {
           "id" : "b8bebfed-b5e9-4604-a0ee-9817f7d439ac",
@@ -1736,12 +1773,12 @@ data:
           "protocolMapper" : "oidc-usermodel-attribute-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "middleName",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "middle_name",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         }, {
           "id" : "445232c8-6830-476c-a6f1-8bbef167595a",
@@ -1750,12 +1787,12 @@ data:
           "protocolMapper" : "oidc-usermodel-attribute-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "picture",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "picture",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         }, {
           "id" : "65f2e474-6ede-4872-86e4-e49504dd0f2a",
@@ -1764,12 +1801,12 @@ data:
           "protocolMapper" : "oidc-usermodel-attribute-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "locale",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "locale",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         }, {
           "id" : "16cd5a27-ccf3-453c-ae1e-8621813ab73c",
@@ -1778,12 +1815,12 @@ data:
           "protocolMapper" : "oidc-usermodel-property-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "firstName",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "given_name",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         }, {
           "id" : "f9efedfc-3388-457c-b10a-1dff4525ff9b",
@@ -1792,12 +1829,12 @@ data:
           "protocolMapper" : "oidc-usermodel-attribute-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "nickname",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "nickname",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         } ]
       }, {
@@ -1831,12 +1868,12 @@ data:
           "protocolMapper" : "oidc-usermodel-property-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "username",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "upn",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         } ]
       }, {
@@ -1878,8 +1915,8 @@ data:
         "protocol" : "openid-connect",
         "attributes" : {
           "include.in.token.scope" : "true",
-          "display.on.consent.screen" : "true",
-          "consent.screen.text" : "${phoneScopeConsentText}"
+          "consent.screen.text" : "${phoneScopeConsentText}",
+          "display.on.consent.screen" : "true"
         },
         "protocolMappers" : [ {
           "id" : "dae802fb-9138-408a-b80e-a40eb0f56814",
@@ -1888,12 +1925,12 @@ data:
           "protocolMapper" : "oidc-usermodel-attribute-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "phoneNumber",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "phone_number",
-            "jsonType.label" : "String"
+            "jsonType.label" : "String",
+            "userinfo.token.claim" : "true"
           }
         }, {
           "id" : "feb06a8d-b0eb-4911-8464-368d93f566fa",
@@ -1902,12 +1939,12 @@ data:
           "protocolMapper" : "oidc-usermodel-attribute-mapper",
           "consentRequired" : false,
           "config" : {
-            "userinfo.token.claim" : "true",
             "user.attribute" : "phoneNumberVerified",
             "id.token.claim" : "true",
             "access.token.claim" : "true",
             "claim.name" : "phone_number_verified",
-            "jsonType.label" : "boolean"
+            "jsonType.label" : "boolean",
+            "userinfo.token.claim" : "true"
           }
         } ]
       }, {
@@ -1917,8 +1954,8 @@ data:
         "protocol" : "openid-connect",
         "attributes" : {
           "include.in.token.scope" : "false",
-          "display.on.consent.screen" : "false",
-          "consent.screen.text" : ""
+          "consent.screen.text" : "",
+          "display.on.consent.screen" : "false"
         },
         "protocolMappers" : [ {
           "id" : "c6411e3b-6478-453d-b530-5fe175a4d786",
@@ -2014,8 +2051,8 @@ data:
         "protocol" : "openid-connect",
         "attributes" : {
           "include.in.token.scope" : "true",
-          "display.on.consent.screen" : "true",
-          "consent.screen.text" : "${addressScopeConsentText}"
+          "consent.screen.text" : "${addressScopeConsentText}",
+          "display.on.consent.screen" : "true"
         },
         "protocolMappers" : [ {
           "id" : "8d4ffe4d-1d01-4ca1-8ff4-44eacca61b30",
@@ -2046,6 +2083,41 @@ data:
           "gui.order" : "",
           "consent.screen.text" : ""
         }
+      }, {
+        "id" : "ba11267a-478b-4b32-872f-4eb2d125d116",
+        "name" : "basic",
+        "description" : "OpenID Connect scope for add all basic claims to the token",
+        "protocol" : "openid-connect",
+        "attributes" : {
+          "include.in.token.scope" : "false",
+          "display.on.consent.screen" : "false"
+        },
+        "protocolMappers" : [ {
+          "id" : "1445e14f-49b0-4666-8ddc-691493c24ad9",
+          "name" : "sub",
+          "protocol" : "openid-connect",
+          "protocolMapper" : "oidc-sub-mapper",
+          "consentRequired" : false,
+          "config" : {
+            "introspection.token.claim" : "true",
+            "access.token.claim" : "true"
+          }
+        }, {
+          "id" : "846f1ef0-2b86-4e07-9d25-691d25af5fce",
+          "name" : "auth_time",
+          "protocol" : "openid-connect",
+          "protocolMapper" : "oidc-usersessionmodel-note-mapper",
+          "consentRequired" : false,
+          "config" : {
+            "user.session.note" : "AUTH_TIME",
+            "introspection.token.claim" : "true",
+            "userinfo.token.claim" : "true",
+            "id.token.claim" : "true",
+            "access.token.claim" : "true",
+            "claim.name" : "auth_time",
+            "jsonType.label" : "long"
+          }
+        } ]
       }, {
         "id" : "37f61543-dad7-4a82-8e10-77acdd1eefdc",
         "name" : "roles",
@@ -2053,8 +2125,8 @@ data:
         "protocol" : "openid-connect",
         "attributes" : {
           "include.in.token.scope" : "false",
-          "display.on.consent.screen" : "true",
-          "consent.screen.text" : "${rolesScopeConsentText}"
+          "consent.screen.text" : "${rolesScopeConsentText}",
+          "display.on.consent.screen" : "true"
         },
         "protocolMappers" : [ {
           "id" : "3b6b6914-8ad1-4a71-88ec-444f754aaacb",
@@ -2091,7 +2163,7 @@ data:
           }
         } ]
       } ],
-      "defaultDefaultClientScopes" : [ "rabbitmq.tag:administrator", "rabbitmq.tag:management" ],
+      "defaultDefaultClientScopes" : [ "rabbitmq.tag:administrator", "rabbitmq.tag:management", "basic" ],
       "defaultOptionalClientScopes" : [ "rabbitmq.write:*/*", "offline_access", "rabbitmq.configure:*/*", "roles", "role_list", "address", "phone", "acr", "microprofile-jwt", "email", "attributes", "profile", "rabbitmq.read:*/*", "web-origins" ],
       "browserSecurityHeaders" : {
         "contentSecurityPolicyReportOnly" : "",
@@ -2153,7 +2225,7 @@ data:
           "subType" : "anonymous",
           "subComponents" : { },
           "config" : {
-            "allowed-protocol-mapper-types" : [ "saml-user-attribute-mapper", "oidc-full-name-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-address-mapper", "saml-user-property-mapper", "oidc-usermodel-property-mapper", "oidc-usermodel-attribute-mapper", "saml-role-list-mapper" ]
+            "allowed-protocol-mapper-types" : [ "oidc-full-name-mapper", "saml-role-list-mapper", "saml-user-property-mapper", "oidc-address-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-usermodel-property-mapper", "saml-user-attribute-mapper", "oidc-usermodel-attribute-mapper" ]
           }
         }, {
           "id" : "1849e52a-b8c9-44a8-af3d-ee19376a1ed1",
@@ -2179,7 +2251,15 @@ data:
           "subType" : "authenticated",
           "subComponents" : { },
           "config" : {
-            "allowed-protocol-mapper-types" : [ "saml-role-list-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-full-name-mapper", "oidc-usermodel-property-mapper", "oidc-usermodel-attribute-mapper", "saml-user-property-mapper", "saml-user-attribute-mapper", "oidc-address-mapper" ]
+            "allowed-protocol-mapper-types" : [ "saml-user-property-mapper", "oidc-full-name-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-usermodel-property-mapper", "oidc-address-mapper", "saml-role-list-mapper", "oidc-usermodel-attribute-mapper", "saml-user-attribute-mapper" ]
+          }
+        } ],
+        "org.keycloak.userprofile.UserProfileProvider" : [ {
+          "id" : "a407a1d6-a7f6-4a72-ba3a-149de03d5a43",
+          "providerId" : "declarative-user-profile",
+          "subComponents" : { },
+          "config" : {
+            "kc.user.profile.config" : [ "{\"attributes\":[{\"name\":\"username\",\"displayName\":\"${username}\",\"validations\":{\"length\":{\"min\":3,\"max\":255},\"username-prohibited-characters\":{},\"up-username-not-idn-homograph\":{}},\"permissions\":{\"view\":[\"admin\",\"user\"],\"edit\":[\"admin\",\"user\"]},\"multivalued\":false},{\"name\":\"email\",\"displayName\":\"${email}\",\"validations\":{\"email\":{},\"length\":{\"max\":255}},\"required\":{\"roles\":[\"user\"]},\"permissions\":{\"view\":[\"admin\",\"user\"],\"edit\":[\"admin\",\"user\"]},\"multivalued\":false},{\"name\":\"firstName\",\"displayName\":\"${firstName}\",\"validations\":{\"length\":{\"max\":255},\"person-name-prohibited-characters\":{}},\"required\":{\"roles\":[\"user\"]},\"permissions\":{\"view\":[\"admin\",\"user\"],\"edit\":[\"admin\",\"user\"]},\"multivalued\":false},{\"name\":\"lastName\",\"displayName\":\"${lastName}\",\"validations\":{\"length\":{\"max\":255},\"person-name-prohibited-characters\":{}},\"required\":{\"roles\":[\"user\"]},\"permissions\":{\"view\":[\"admin\",\"user\"],\"edit\":[\"admin\",\"user\"]},\"multivalued\":false}],\"groups\":[{\"name\":\"user-metadata\",\"displayHeader\":\"User metadata\",\"displayDescription\":\"Attributes, which refer to user metadata\"}],\"unmanagedAttributePolicy\":\"ENABLED\"}" ]
           }
         } ],
         "org.keycloak.storage.UserStorageProvider" : [ {
@@ -2241,19 +2321,19 @@ data:
               "providerId" : "group-ldap-mapper",
               "subComponents" : { },
               "config" : {
+                "mode" : [ "LDAP_ONLY" ],
                 "membership.attribute.type" : [ "DN" ],
+                "user.roles.retrieve.strategy" : [ "LOAD_GROUPS_BY_MEMBER_ATTRIBUTE" ],
                 "group.name.ldap.attribute" : [ "cn" ],
                 "preserve.group.inheritance" : [ "false" ],
-                "membership.user.ldap.attribute" : [ "uid" ],
-                "groups.dn" : [ "ou=users,dc=dbrepo,dc=at" ],
-                "mode" : [ "LDAP_ONLY" ],
-                "user.roles.retrieve.strategy" : [ "LOAD_GROUPS_BY_MEMBER_ATTRIBUTE" ],
                 "ignore.missing.groups" : [ "false" ],
                 "membership.ldap.attribute" : [ "member" ],
+                "membership.user.ldap.attribute" : [ "uid" ],
                 "memberof.ldap.attribute" : [ "memberOf" ],
+                "groups.dn" : [ "ou=users,dc=dbrepo,dc=at" ],
                 "group.object.classes" : [ "groupOfNames" ],
-                "groups.path" : [ "/" ],
-                "drop.non.existing.groups.during.sync" : [ "false" ]
+                "drop.non.existing.groups.during.sync" : [ "false" ],
+                "groups.path" : [ "/" ]
               }
             }, {
               "id" : "b6ff3285-35af-4e86-8bb4-d94b8e0d70bb",
@@ -2263,8 +2343,8 @@ data:
               "config" : {
                 "ldap.attribute" : [ "modifyTimestamp" ],
                 "is.mandatory.in.ldap" : [ "false" ],
-                "read.only" : [ "true" ],
                 "always.read.value.from.ldap" : [ "true" ],
+                "read.only" : [ "true" ],
                 "user.model.attribute" : [ "modifyTimestamp" ]
               }
             }, {
@@ -2277,15 +2357,15 @@ data:
                 "is.mandatory.in.ldap" : [ "true" ],
                 "attribute.force.default" : [ "false" ],
                 "is.binary.attribute" : [ "false" ],
-                "read.only" : [ "false" ],
                 "always.read.value.from.ldap" : [ "false" ],
+                "read.only" : [ "false" ],
                 "user.model.attribute" : [ "username" ]
               }
             } ]
           },
           "config" : {
-            "fullSyncPeriod" : [ "-1" ],
             "pagination" : [ "false" ],
+            "fullSyncPeriod" : [ "-1" ],
             "startTls" : [ "false" ],
             "usersDn" : [ "ou=users,{{ .Values.identityservice.global.ldapDomain }}" ],
             "connectionPooling" : [ "true" ],
@@ -2313,14 +2393,6 @@ data:
             "validatePasswordPolicy" : [ "false" ]
           }
         } ],
-        "org.keycloak.userprofile.UserProfileProvider" : [ {
-          "id" : "a407a1d6-a7f6-4a72-ba3a-149de03d5a43",
-          "providerId" : "declarative-user-profile",
-          "subComponents" : { },
-          "config" : {
-            "kc.user.profile.config" : [ "{\"attributes\":[{\"name\":\"username\",\"displayName\":\"${username}\",\"validations\":{\"length\":{\"min\":3,\"max\":255},\"username-prohibited-characters\":{},\"up-username-not-idn-homograph\":{}},\"permissions\":{\"view\":[\"admin\",\"user\"],\"edit\":[\"admin\",\"user\"]},\"multivalued\":false},{\"name\":\"email\",\"displayName\":\"${email}\",\"validations\":{\"email\":{},\"length\":{\"max\":255}},\"required\":{\"roles\":[\"user\"]},\"permissions\":{\"view\":[\"admin\",\"user\"],\"edit\":[\"admin\",\"user\"]},\"multivalued\":false},{\"name\":\"firstName\",\"displayName\":\"${firstName}\",\"validations\":{\"length\":{\"max\":255},\"person-name-prohibited-characters\":{}},\"required\":{\"roles\":[\"user\"]},\"permissions\":{\"view\":[\"admin\",\"user\"],\"edit\":[\"admin\",\"user\"]},\"multivalued\":false},{\"name\":\"lastName\",\"displayName\":\"${lastName}\",\"validations\":{\"length\":{\"max\":255},\"person-name-prohibited-characters\":{}},\"required\":{\"roles\":[\"user\"]},\"permissions\":{\"view\":[\"admin\",\"user\"],\"edit\":[\"admin\",\"user\"]},\"multivalued\":false}],\"groups\":[{\"name\":\"user-metadata\",\"displayHeader\":\"User metadata\",\"displayDescription\":\"Attributes, which refer to user metadata\"}],\"unmanagedAttributePolicy\":\"ENABLED\"}" ]
-          }
-        } ],
         "org.keycloak.keys.KeyProvider" : [ {
           "id" : "2f53ccf3-37b0-4d34-83e7-ed497499ee51",
           "name" : "rsa-enc-generated",
@@ -2935,7 +3007,7 @@ data:
         "clientSessionMaxLifespan" : "0",
         "shortVerificationUri" : ""
       },
-      "keycloakVersion" : "24.0.5",
+      "keycloakVersion" : "26.0.0",
       "userManagedAccessAllowed" : false,
       "clientProfiles" : {
         "profiles" : [ ]
@@ -2944,4 +3016,4 @@ data:
         "policies" : [ ]
       }
     }
-{{- end }}
+{{- end }}
\ No newline at end of file
diff --git a/helm/dbrepo/values.yaml b/helm/dbrepo/values.yaml
index dfdda4e566981cf2777d2c6682f59598bc324606..84a4375a615f216a5da121d0f0c27589698fa926 100644
--- a/helm/dbrepo/values.yaml
+++ b/helm/dbrepo/values.yaml
@@ -735,7 +735,7 @@ storageservice:
   init:
     image:
       ## @skip storageservice.init.image.name
-      name: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.6.1
+      name: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.6.1rc0
     s3:
       ## @param storageservice.init.s3.endpoint The S3-capable endpoint the microservice connects to.
       endpoint: http://storage-service-s3:8333
@@ -844,7 +844,7 @@ ui:
   enabled: true
   image:
     ## @skip ui.image.name
-    name: registry.datalab.tuwien.ac.at/dbrepo/ui:1.6.1
+    name: registry.datalab.tuwien.ac.at/dbrepo/ui:1.6.1rc1
   ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
   podSecurityContext:
     ## @param ui.podSecurityContext.enabled Enable pods' Security Context
diff --git a/helm/seaweedfs/Chart.lock b/helm/seaweedfs/Chart.lock
index 4486b86cbbe7335389e547f4f0e74c7e0d6d6fd0..1195241a0686ef99b5cde492d2191b3417193279 100644
--- a/helm/seaweedfs/Chart.lock
+++ b/helm/seaweedfs/Chart.lock
@@ -4,9 +4,9 @@ dependencies:
   version: 20.2.1
 - name: postgresql
   repository: oci://registry-1.docker.io/bitnamicharts
-  version: 16.3.5
+  version: 16.4.2
 - name: common
   repository: oci://registry-1.docker.io/bitnamicharts
   version: 2.29.0
-digest: sha256:a536e19612db24ddcd6f55031b2a2bfcb10d5c328edac09876a106dc471482fc
-generated: "2025-01-08T08:47:53.829182441+01:00"
+digest: sha256:b9f5516ae118fdca61c19cfe79cee8bd77ad96978dd8c06ad003646d5691aca5
+generated: "2025-01-14T10:19:53.265063382+01:00"
diff --git a/helm/seaweedfs/charts/mariadb-20.2.1.tgz b/helm/seaweedfs/charts/mariadb-20.2.1.tgz
index 2f55cc750ba3907eebca3545636e8f9c8afd19d2..9bba8eed49e866977396c0076b1a9c5946ec88b1 100644
Binary files a/helm/seaweedfs/charts/mariadb-20.2.1.tgz and b/helm/seaweedfs/charts/mariadb-20.2.1.tgz differ
diff --git a/helm/seaweedfs/charts/postgresql-16.3.5.tgz b/helm/seaweedfs/charts/postgresql-16.3.5.tgz
deleted file mode 100644
index d3ea1aacaeb921586dfeec85031a629bc95f6730..0000000000000000000000000000000000000000
Binary files a/helm/seaweedfs/charts/postgresql-16.3.5.tgz and /dev/null differ
diff --git a/helm/seaweedfs/charts/postgresql-16.4.2.tgz b/helm/seaweedfs/charts/postgresql-16.4.2.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..aaa8899b4dad449edbaa98aefefbce4fa4de756d
Binary files /dev/null and b/helm/seaweedfs/charts/postgresql-16.4.2.tgz differ
diff --git a/make/rel.mk b/make/rel.mk
index 6a24d75a90a3abe6a887262b285262135c1688ce..0c4b2bb193f3618e3098d13fd283882701e29a20 100644
--- a/make/rel.mk
+++ b/make/rel.mk
@@ -6,6 +6,7 @@ tag-images: build-images ## Tag the docker images.
 	docker tag dbrepo-dashboard-service:latest "${REPOSITORY_URL}/dashboard-service:${APP_VERSION}"
 	docker tag dbrepo-ui:latest "${REPOSITORY_URL}/ui:${APP_VERSION}"
 	docker tag dbrepo-data-service:latest "${REPOSITORY_URL}/data-service:${APP_VERSION}"
+	docker tag dbrepo-auth-service-init:latest "${REPOSITORY_URL}/auth-service-init:${APP_VERSION}"
 	docker tag dbrepo-metadata-service:latest "${REPOSITORY_URL}/metadata-service:${APP_VERSION}"
 	docker tag dbrepo-search-db:latest "${REPOSITORY_URL}/search-db:${APP_VERSION}"
 	docker tag dbrepo-search-service:latest "${REPOSITORY_URL}/search-service:${APP_VERSION}"
@@ -18,6 +19,7 @@ release-images: tag-images ## Release the docker images.
 	docker push "${REPOSITORY_URL}/dashboard-service:${APP_VERSION}"
 	docker push "${REPOSITORY_URL}/ui:${APP_VERSION}"
 	docker push "${REPOSITORY_URL}/data-service:${APP_VERSION}"
+	docker push "${REPOSITORY_URL}/auth-service-init:${APP_VERSION}"
 	docker push "${REPOSITORY_URL}/search-db:${APP_VERSION}"
 	docker push "${REPOSITORY_URL}/metadata-service:${APP_VERSION}"
 	docker push "${REPOSITORY_URL}/search-service:${APP_VERSION}"