diff --git a/Makefile b/Makefile
index 2b252e8475fd22fc8f889c69f69a5013b7a99416..a06cdf6069c690de34ea30e87c4213cebd59da68 100644
--- a/Makefile
+++ b/Makefile
@@ -46,25 +46,6 @@ build-docker:
 	docker compose build dbrepo-metadata-db
 	docker compose build --parallel
 
-build-docker-slow:
-	docker compose build dbrepo-analyse-service
-	docker compose build dbrepo-authentication-service
-	docker compose build dbrepo-broker-service
-	docker compose build dbrepo-metadata-db
-	docker compose build dbrepo-container-service
-	docker compose build dbrepo-database-service
-	docker compose build dbrepo-discovery-service
-	docker compose build dbrepo-gateway-service
-	docker compose build dbrepo-identifier-service
-	docker compose build dbrepo-metadata-service
-	docker compose build dbrepo-proxy
-	docker compose build dbrepo-query-service
-	docker compose build dbrepo-search-service
-	docker compose build dbrepo-semantics-service
-	docker compose build dbrepo-table-service
-	docker compose build dbrepo-ui
-	docker compose build dbrepo-user-service
-
 build-frontend:
 	yarn --cwd ./dbrepo-ui install --legacy-peer-deps
 	yarn --cwd ./dbrepo-ui run build
@@ -72,7 +53,7 @@ build-frontend:
 build-clients:
 	bash ./.gitlab/swagger/generate.sh
 
-tag: tag-identifier tag-search tag-container tag-database tag-discovery tag-gateway tag-query tag-table tag-analyse tag-authentication tag-metadata-db tag-ui tag-units tag-broker tag-metadata
+tag: tag-identifier tag-search tag-container tag-database tag-discovery tag-gateway tag-query tag-table tag-analyse tag-authentication tag-metadata-db tag-ui tag-units tag-broker tag-metadata tag-user
 
 tag-analyse:
 	docker tag dbrepo-analyse-service:latest "dbrepo/analyse-service:${TAG}"
@@ -122,54 +103,57 @@ tag-broker:
 tag-search:
 	docker tag dbrepo-search-service:latest "dbrepo/search-service:${TAG}"
 
-release: build-docker tag release-identifier release-search release-container release-database release-discovery release-gateway release-query release-table release-analyse release-authentication release-metadata-db release-ui release-units release-broker release-metadata
+tag-user:
+	docker tag dbrepo-user-service:latest "dbrepo/user-service:${TAG}"
+
+release: build-docker tag release-identifier release-search release-container release-database release-discovery release-gateway release-query release-table release-analyse release-authentication release-metadata-db release-ui release-units release-broker release-metadata release-user
 
-release-analyse:
+release-analyse: tag-analyse
 	docker push "dbrepo/analyse-service:${TAG}"
 
-release-authentication:
+release-authentication: tag-authentication
 	docker push "dbrepo/authentication-service:${TAG}"
 
-release-metadata-db: build-docker tag-metadata-db
+release-metadata-db: tag-metadata-db
 	docker push "dbrepo/metadata-db:${TAG}"
 
-release-ui:
+release-ui: tag-ui
 	docker push "dbrepo/ui:${TAG}"
 
-release-identifier:
+release-identifier: tag-identifier
 	docker push "dbrepo/identifier-service:${TAG}"
 
-release-container:
+release-container: tag-container
 	docker push "dbrepo/container-service:${TAG}"
 
-release-database:
+release-database: tag-database
 	docker push "dbrepo/database-service:${TAG}"
 
-release-discovery:
+release-discovery: tag-discovery
 	docker push "dbrepo/discovery-service:${TAG}"
 
-release-gateway:
+release-gateway: tag-gateway
 	docker push "dbrepo/gateway-service:${TAG}"
 
-release-query:
+release-query: tag-query
 	docker push "dbrepo/query-service:${TAG}"
 
-release-user:
+release-user: tag-user
 	docker push "dbrepo/user-service:${TAG}"
 
-release-table:
+release-table: tag-table
 	docker push "dbrepo/table-service:${TAG}"
 
-release-units:
+release-units: tag-units
 	docker push "dbrepo/semantics-service:${TAG}"
 
-release-broker:
+release-broker: tag-broker
 	docker push "dbrepo/broker-service:${TAG}"
 
-release-search:
+release-search: tag-search
 	docker push "dbrepo/search-service:${TAG}"
 
-release-metadata:
+release-metadata: tag-metadata
 	docker push "dbrepo/metadata-service:${TAG}"
 
 test-backend: test-container-service test-database-service test-discovery-service test-gateway-service test-query-service test-table-service test-identifier-service test-metadata-service test-semantics-service test-analyse-service test-user-service
diff --git a/dbrepo-identifier-service/rest-service/src/main/resources/templates/cite_ieee.txt b/dbrepo-identifier-service/rest-service/src/main/resources/templates/cite_ieee.txt
index 602b73deed44278af106e3a946a1b1aa55996c36..9bf56d5765c660c83853cb0ea82e8f2febcfad19 100644
--- a/dbrepo-identifier-service/rest-service/src/main/resources/templates/cite_ieee.txt
+++ b/dbrepo-identifier-service/rest-service/src/main/resources/templates/cite_ieee.txt
@@ -1 +1 @@
-[1] [# th:each="creator,idx: ${creators}"][# th:if="${idx.index} > 0"] and [/][[${creator.firstname.substring(0,1)}]]. [[${creator.lastname}]][/][# th:if="${creators.size()} > 0"], [/]“[[${title}]]“, [[${publisher}]], [[${publicationYear}]], [[${identifierType} == 'url' ? 'Available: ' : '']][[${identifier}]].
\ No newline at end of file
+[1] [# th:each="creator,idx: ${creators}"][# th:if="${idx.index} > 0"] and [/][[${creator.firstname.substring(0,1)}]]. [[${creator.lastname}]][/][# th:if="${creators.size()} > 0"], [/]“[[${title}]]“, [[${publisher}]], [[${publicationYear}]], [[${identifierType} == 'url' ? 'Available: ' : 'doi: ']][[${identifier}]].
\ No newline at end of file
diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_ieee3.txt b/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_ieee3.txt
index 2576174cf69acc6f7f545b8b6ccfd415d1efd083..286d4b8027ff9783728312bed95b6fcfebdacf21 100644
--- a/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_ieee3.txt
+++ b/dbrepo-identifier-service/rest-service/src/test/resources/bibliography/style_ieee3.txt
@@ -1 +1 @@
-[1] M. Mustermann, “Austrian weather data“, Austrian Government, 2022, 10.1000/183.
\ No newline at end of file
+[1] M. Mustermann, “Austrian weather data“, Austrian Government, 2022, doi: 10.1000/183.
\ No newline at end of file
diff --git a/dbrepo-ui/components/DBToolbar.vue b/dbrepo-ui/components/DBToolbar.vue
index e544e3f3570548e986dd5ba07516c28681f49fd5..ecbc4fe11eb68ae156c440c4ba0dc64ec4343886 100644
--- a/dbrepo-ui/components/DBToolbar.vue
+++ b/dbrepo-ui/components/DBToolbar.vue
@@ -97,26 +97,38 @@ export default {
     roles () {
       return this.$store.state.roles
     },
+    hasWriteAccess () {
+      if (!this.access) {
+        return false
+      }
+      return this.access.type === 'write_all' || this.access.type === 'write_own'
+    },
+    hasReadAccess () {
+      if (!this.access) {
+        return false
+      }
+      return this.access.type === 'read' || this.access.type === 'write_all' || this.access.type === 'write_own'
+    },
     canImportCsv () {
-      if (!this.user) {
+      if (!this.user || !this.hasWriteAccess) {
         return false
       }
       return this.roles.includes('insert-table-data')
     },
     canCreateSubset () {
-      if (!this.user) {
+      if (!this.user || !this.hasReadAccess) {
         return false
       }
       return this.roles.includes('execute-query')
     },
     canCreateView () {
-      if (!this.user) {
+      if (!this.user || !this.isOwner) {
         return false
       }
       return this.roles.includes('create-database-view')
     },
     canCreateTable () {
-      if (!this.user) {
+      if (!this.user || !this.hasWriteAccess) {
         return false
       }
       return this.roles.includes('create-table')
diff --git a/dbrepo-ui/components/identifier/Citation.vue b/dbrepo-ui/components/identifier/Citation.vue
index 479243cc458e930387e90cbacb37287607136248..741328e086b86907aac0d78cd7231cfb9bc04b5e 100644
--- a/dbrepo-ui/components/identifier/Citation.vue
+++ b/dbrepo-ui/components/identifier/Citation.vue
@@ -72,7 +72,7 @@ export default {
   },
   methods: {
     loadCitation (accept) {
-      if (!this.pid) {
+      if (!this.pid || !accept) {
         return
       }
       this.loading = true
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/info.vue b/dbrepo-ui/pages/container/_container_id/database/_database_id/info.vue
index 1940e0bc089adb839b35e5e0355dfdadb5916d6e..36e9bcea2483b8cc10c8a5456b6be0242c8d154c 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/info.vue
+++ b/dbrepo-ui/pages/container/_container_id/database/_database_id/info.vue
@@ -340,19 +340,16 @@ export default {
       return this.canCreateIdentifier || this.hasIdentifier
     },
     canCreateIdentifier () {
-      if (!this.roles) {
+      if (!this.roles || this.hasIdentifier) {
         return false
       }
-      if (this.hasIdentifier) {
-        return false
+      if (this.roles.includes('create-foreign-identifier')) {
+        return true
       }
-      return this.roles.includes('create-identifier') || this.roles.includes('create-foreign-identifier')
+      return this.roles.includes('create-identifier') && this.isOwner
     },
     canEditIdentifier () {
-      if (!this.roles) {
-        return false
-      }
-      if (!this.hasIdentifier) {
+      if (!this.roles || !this.hasIdentifier) {
         return false
       }
       return this.roles.includes('modify-identifier-metadata')
@@ -407,6 +404,12 @@ export default {
         default:
           return { text: null, class: null }
       }
+    },
+    isOwner () {
+      if (!this.database || !this.user) {
+        return false
+      }
+      return this.database.owner.username === this.user.username
     }
   },
   methods: {
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/import.vue b/dbrepo-ui/pages/container/_container_id/database/_database_id/table/import.vue
index a5c4f5949cf3c74e22d965af6499b85bfaa3c5ef..a915657c3c5484e1cb150f35a200a0fdae6511cf 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/import.vue
+++ b/dbrepo-ui/pages/container/_container_id/database/_database_id/table/import.vue
@@ -120,7 +120,6 @@
               <v-btn
                 class="mb-1"
                 :disabled="!validStep2"
-                :loading="loading"
                 color="primary"
                 type="submit"
                 @click="step = 3">
diff --git a/docker-compose.dbrepo2.yml b/docker-compose.dbrepo2.yml
index b459e3a4efbf39241f10a857c624c05e12442870..b45bc9514c464e92ce05c38bfe5d21007951c78c 100644
--- a/docker-compose.dbrepo2.yml
+++ b/docker-compose.dbrepo2.yml
@@ -68,8 +68,7 @@ services:
     image: dbrepo/gateway-service:latest
     networks:
       core:
-    ports:
-      - "9095:9095"
+      public:
     env_file:
       - .env
     depends_on:
@@ -124,6 +123,8 @@ services:
     image: dbrepo/authentication-service:latest
     networks:
       core:
+    ports:
+      - "8443:8443"
     env_file:
       - .env
     volumes:
diff --git a/docker-compose.yml b/docker-compose.yml
index f4364d1bb4c3212510867011ef3f6a753608fb4f..5a3cd4022d0dd2c4d0796d11e04c8009a4c5f3b7 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -72,6 +72,7 @@ services:
     image: dbrepo-gateway-service
     networks:
       core:
+      public:
     ports:
       - "9095:9095"
     env_file: