diff --git a/dbrepo-analyse-service/Pipfile.lock b/dbrepo-analyse-service/Pipfile.lock
index 04e43bc573ecbdd0e6734d12ecab71042530b06a..1ed1c862bed2c5f27d9b2cdc48d3c08259f2fa66 100644
--- a/dbrepo-analyse-service/Pipfile.lock
+++ b/dbrepo-analyse-service/Pipfile.lock
@@ -1,7 +1,7 @@
 {
     "_meta": {
         "hash": {
-            "sha256": "5fbd87c094d93565d64444fc1734d9183e7095d47447d30d6493dfc6bb7e8201"
+            "sha256": "9cc4c161729b642069bbf4ab379c0f4a9122035afcb3ac7b5b1bfc13281f76aa"
         },
         "pipfile-spec": 6,
         "requires": {
@@ -412,7 +412,7 @@
         },
         "dbrepo": {
             "hashes": [
-                "sha256:181e3da705d8f61ef26a743e0a445c5363b68c671c63f655791d340efdd7aac0"
+                "sha256:844ff70a81f0c3f2514f76a2d34b7661ea86b153b8f766e6aa6992e1990c7f36"
             ],
             "path": "./lib/dbrepo-1.6.3.tar.gz"
         },
@@ -1612,7 +1612,7 @@
                 "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df",
                 "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"
             ],
-            "markers": "python_version >= '3.9'",
+            "markers": "python_version >= '3.10'",
             "version": "==2.3.0"
         },
         "werkzeug": {
@@ -2236,7 +2236,7 @@
                 "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df",
                 "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"
             ],
-            "markers": "python_version >= '3.9'",
+            "markers": "python_version >= '3.10'",
             "version": "==2.3.0"
         },
         "wrapt": {
diff --git a/dbrepo-analyse-service/lib/dbrepo-1.6.3-py3-none-any.whl b/dbrepo-analyse-service/lib/dbrepo-1.6.3-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..cb9912e0a0ede152ac0b272f981f1cb88a35916b
Binary files /dev/null and b/dbrepo-analyse-service/lib/dbrepo-1.6.3-py3-none-any.whl differ
diff --git a/dbrepo-analyse-service/lib/dbrepo-1.6.3.tar.gz b/dbrepo-analyse-service/lib/dbrepo-1.6.3.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..c11c350b23c65818060a5529e324d2bdec574ac2
Binary files /dev/null and b/dbrepo-analyse-service/lib/dbrepo-1.6.3.tar.gz differ
diff --git a/dbrepo-auth-service/listeners/target/create-event-listener.jar b/dbrepo-auth-service/listeners/target/create-event-listener.jar
new file mode 100644
index 0000000000000000000000000000000000000000..221bdd325f056ff953e0a44a46773470eb08e91e
Binary files /dev/null and b/dbrepo-auth-service/listeners/target/create-event-listener.jar differ
diff --git a/dbrepo-data-service/Dockerfile b/dbrepo-data-service/Dockerfile
index 4b45e9429050c08bcf4c3fd42b3d0ab259801657..d7ab1558c244f795313f5bebbbd46bfbf636aa26 100644
--- a/dbrepo-data-service/Dockerfile
+++ b/dbrepo-data-service/Dockerfile
@@ -16,12 +16,13 @@ COPY ./querystore ./querystore
 COPY ./report ./report
 COPY ./rest-service ./rest-service
 COPY ./services ./services
+COPY ./pom.xml ./
 
 # Make sure it compiles
 RUN mvn -fn -B -q clean package -DskipTests
 
 ###### THIRD STAGE ######
-FROM amazoncorretto:17-alpine3.19 AS runtime
+FROM amazoncorretto:17-alpine3.21 AS runtime
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
 RUN apk add --no-cache curl bash jq
@@ -32,7 +33,7 @@ RUN adduser -S -u 1001 data-service
 
 USER 1001
 
-COPY --from=build --chown=1001 ./rest-service/target/rest-service-*.jar ./data-service.jar
+COPY --from=build --chown=1001 ./rest-service/target/data-service.jar ./data-service.jar
 
 # non-root port
 EXPOSE 8080
diff --git a/dbrepo-data-service/pom.xml b/dbrepo-data-service/pom.xml
index e2bfa739618b3a518aeabd623ea49718b9a06d5b..9a062dea02cbbde7e69895cf76b228d29ffc2c2d 100644
--- a/dbrepo-data-service/pom.xml
+++ b/dbrepo-data-service/pom.xml
@@ -292,6 +292,7 @@
     </dependencies>
 
     <build>
+        <finalName>data-service</finalName>
         <resources>
             <resource>
                 <directory>${basedir}/src/main/resources</directory>
diff --git a/dbrepo-metadata-service/Dockerfile b/dbrepo-metadata-service/Dockerfile
index ddc20cb420764196c3a4b423294200e26eaa5bce..d3e7dc815566d9c24fabdb168c482ebf4b65c141 100644
--- a/dbrepo-metadata-service/Dockerfile
+++ b/dbrepo-metadata-service/Dockerfile
@@ -2,18 +2,6 @@
 FROM maven:3-amazoncorretto-17 AS build
 LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
 
-COPY ./pom.xml ./
-COPY ./api/pom.xml ./api/
-COPY ./entities/pom.xml ./entities/
-COPY ./oai/pom.xml ./oai/
-COPY ./report/pom.xml ./report/
-COPY ./repositories/pom.xml ./repositories/
-COPY ./rest-service/pom.xml ./rest-service/
-COPY ./services/pom.xml ./services/
-COPY ./test/pom.xml ./test/
-
-RUN mvn -fn -B dependency:go-offline
-
 COPY ./api ./api
 COPY ./entities ./entities
 COPY ./oai ./oai
@@ -22,9 +10,10 @@ COPY ./repositories ./repositories
 COPY ./rest-service ./rest-service
 COPY ./services ./services
 COPY ./test ./test
+COPY ./pom.xml ./pom.xml
 
 # Make sure it compiles
-RUN mvn -fn -B clean install -DskipTests
+RUN mvn clean install -DskipTests
 
 ###### SECOND STAGE ######
 FROM amazoncorretto:17-alpine3.19 AS runtime
@@ -36,7 +25,7 @@ WORKDIR /app
 
 USER 1001
 
-COPY --from=build --chown=1001 ./rest-service/target/dbrepo-metadata-service-rest-service-*.jar ./metadata-service.jar
+COPY --from=build --chown=1001 ./rest-service/target/metadata-service.jar ./metadata-service.jar
 
 # non-root port
 EXPOSE 8080
diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java
index 913ab26d9d4469fb3335d5dc1da8463c9afc0bd6..25361de6a5bb8f5ff92e651514dc2ce4b53e609f 100644
--- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java
+++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java
@@ -1,6 +1,5 @@
 package at.tuwien.api.container;
 
-import at.tuwien.api.CacheableDto;
 import at.tuwien.api.container.image.ImageDto;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -14,12 +13,12 @@ import java.time.Instant;
 @Getter
 @Setter
 @Builder
-@EqualsAndHashCode(callSuper = true)
+@EqualsAndHashCode
 @NoArgsConstructor
 @AllArgsConstructor
 @Jacksonized
 @ToString
-public class ContainerDto extends CacheableDto {
+public class ContainerDto {
 
     @NotNull
     @Schema(example = "4")
@@ -31,7 +30,7 @@ public class ContainerDto extends CacheableDto {
 
     @NotBlank
     @JsonProperty("internal_name")
-    @Schema(example = "air_quality")
+    @Schema(example = "data-db")
     private String internalName;
 
     @Schema(example = "data-db")
diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java
index d6ea2bff9e2203439891e3a1a6aec6f17afc86a6..3057166539a007e664b2a3f4cec72a6b38eb4e12 100644
--- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java
+++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/DatabaseDto.java
@@ -1,6 +1,5 @@
 package at.tuwien.api.database;
 
-import at.tuwien.api.CacheableDto;
 import at.tuwien.api.container.ContainerDto;
 import at.tuwien.api.database.table.TableDto;
 import at.tuwien.api.identifier.IdentifierDto;
@@ -18,12 +17,12 @@ import java.util.List;
 @Getter
 @Setter
 @Builder
-@EqualsAndHashCode(callSuper = true)
+@EqualsAndHashCode
 @NoArgsConstructor
 @AllArgsConstructor
 @Jacksonized
 @ToString
-public class DatabaseDto extends CacheableDto {
+public class DatabaseDto {
 
     @NotNull
     @Schema(example = "3")
diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java
index 82a7081e16f08a2cc2c3a7c02a28760adc7ef9d1..f7ad98514a09a0a3fc788a09f5a6192f6b92b8fb 100644
--- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java
+++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewDto.java
@@ -16,12 +16,12 @@ import java.util.List;
 @Getter
 @Setter
 @Builder
-@EqualsAndHashCode(callSuper = true)
+@EqualsAndHashCode
 @NoArgsConstructor
 @AllArgsConstructor
 @Jacksonized
 @ToString
-public class ViewDto extends CacheableDto {
+public class ViewDto {
 
     @NotNull
     @Schema(example = "4")
@@ -66,7 +66,6 @@ public class ViewDto extends CacheableDto {
     private String queryHash;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     private DatabaseDto database;
 
     @NotNull
diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java
index 1021d167ca1364eb63b06d321040e708c4f7d6e2..57b161309fcb480a0ca3aeaf720d4a07a763c3a8 100644
--- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java
+++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/table/TableDto.java
@@ -22,12 +22,12 @@ import java.util.List;
 @Getter
 @Setter
 @Builder
-@EqualsAndHashCode(callSuper = true)
+@EqualsAndHashCode
 @NoArgsConstructor
 @AllArgsConstructor
 @Jacksonized
 @ToString
-public class TableDto extends CacheableDto {
+public class TableDto {
 
     @NotNull
     @Schema(example = "3")
@@ -108,7 +108,6 @@ public class TableDto extends CacheableDto {
     private List<ColumnDto> columns;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     private DatabaseDto database;
 
     @NotNull
diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java
index e7367e2fb4e513a9681783dfdec89b55e57519e0..5931b07a730de886356e2d49ca5cdf5fdd135c9f 100644
--- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java
+++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java
@@ -13,12 +13,12 @@ import java.util.UUID;
 @Getter
 @Setter
 @Builder
-@EqualsAndHashCode(callSuper = true)
+@EqualsAndHashCode
 @NoArgsConstructor
 @AllArgsConstructor
 @Jacksonized
 @ToString
-public class UserDto extends CacheableDto {
+public class UserDto {
 
     @NotNull
     @Schema(example = "1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4")
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java
index a2fb1264cc360f0de0d5502306b215d79a442a70..85391d31d420922af21b899f9deefae981886c00 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java
@@ -54,7 +54,6 @@ public class Container {
     @Column
     private String uiAdditionalFlags;
 
-    @EqualsAndHashCode.Exclude
     @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
     @JoinColumns({
             @JoinColumn(name = "cid", referencedColumnName = "id", insertable = false, updatable = false)
@@ -67,13 +66,11 @@ public class Container {
     })
     private ContainerImage image;
 
-    @EqualsAndHashCode.Exclude
     @CreatedDate
     @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
     private Instant created;
 
-    @EqualsAndHashCode.Exclude
     @LastModifiedDate
     @Column(columnDefinition = "TIMESTAMP")
     private Instant lastModified;
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
index 7e04ce2086c3b4e9e677548b106cc28ddc9756ee..2bbd65be6c87bd19fbd3af449e04f1b7a08f412a 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
@@ -60,13 +60,11 @@ public class ContainerImage {
     @OneToMany(fetch = FetchType.LAZY, mappedBy = "image")
     private List<Container> containers;
 
-    @EqualsAndHashCode.Exclude
     @CreatedDate
     @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
     private Instant created;
 
-    @EqualsAndHashCode.Exclude
     @LastModifiedDate
     @Column(columnDefinition = "TIMESTAMP")
     private Instant lastModified;
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/DataType.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/DataType.java
index 5f4ddbfb8c6dd8a657a88432d4606fa6f9c56f7e..d94b39ec259a5c04ff44f5f4477b3aa482121e6e 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/DataType.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/DataType.java
@@ -68,7 +68,6 @@ public class DataType {
     private Boolean buildable;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE})
     @JoinColumns({
             @JoinColumn(name = "image_id", referencedColumnName = "id")
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/Operator.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/Operator.java
index 1ecedc5e16cef533008a28db7d022acab336c8d7..8ec4763ba292db50af6d10aa5adf8b9fe073782f 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/Operator.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/Operator.java
@@ -32,7 +32,6 @@ public class Operator {
     private String documentation;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE})
     @JoinColumns({
             @JoinColumn(name = "image_id", referencedColumnName = "id")
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java
index d90a702db33c759a511480fa0e89c37efc2773fc..699f50b79ba16def84366f73e117cce1948168b2 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java
@@ -120,13 +120,11 @@ public class Database implements Serializable {
     @Column(columnDefinition = "LONGBLOB")
     private byte[] image;
 
-    @EqualsAndHashCode.Exclude
     @CreatedDate
     @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
     private Instant created;
 
-    @EqualsAndHashCode.Exclude
     @LastModifiedDate
     @Column(columnDefinition = "TIMESTAMP")
     private Instant lastModified;
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java
index 6a2622be3e7137c97b68ab9ad91e24edd4fae293..6df3aa5129eb51cc66ea32341ae8bcfc924ee3f1 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java
@@ -33,7 +33,6 @@ public class DatabaseAccess {
     private UUID huserid;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @org.springframework.data.annotation.Transient
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumns({
@@ -46,7 +45,6 @@ public class DatabaseAccess {
     private Long hdbid;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @org.springframework.data.annotation.Transient
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumns({
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java
index 67e6d6d18ac26a1cb2641ed45ae9e969c7393164..3835c0188bb03682becd113a6df4ce6bd5dcd615 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/View.java
@@ -89,7 +89,6 @@ public class View {
     private List<Identifier> identifiers;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @org.springframework.data.annotation.Transient
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumns({
@@ -103,13 +102,11 @@ public class View {
     @OrderBy("ordinalPosition")
     private List<ViewColumn> columns;
 
-    @EqualsAndHashCode.Exclude
     @CreatedDate
     @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
     private Instant created;
 
-    @EqualsAndHashCode.Exclude
     @LastModifiedDate
     @Column(columnDefinition = "TIMESTAMP")
     private Instant lastModified;
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java
index 7ef6e8b9d63c30e05313514c78ad562306318185..752f784e9031492951b1e732e2302b76fa017208 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java
@@ -26,7 +26,6 @@ public class ViewColumn implements Comparable<ViewColumn> {
     private Long id;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE})
     @JoinColumns({
             @JoinColumn(name = "view_id", referencedColumnName = "id", nullable = false)
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java
index 3cdb01d7d38477cc8a77b4e12ed9af61d04ecfba..088f0b7a8c47e1b44faa67c425eaa5e093d4a312 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/Table.java
@@ -25,7 +25,7 @@ import static jakarta.persistence.GenerationType.IDENTITY;
 
 @Data
 @Entity
-@Builder
+@Builder(toBuilder = true)
 @Log4j2
 @ToString
 @AllArgsConstructor
@@ -69,7 +69,6 @@ public class Table {
     private String description;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @org.springframework.data.annotation.Transient
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumns({
@@ -117,13 +116,11 @@ public class Table {
     @OrderBy("ordinalPosition")
     private List<TableColumn> columns;
 
-    @EqualsAndHashCode.Exclude
     @CreatedDate
     @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
     private Instant created;
 
-    @EqualsAndHashCode.Exclude
     @LastModifiedDate
     @Column(columnDefinition = "TIMESTAMP")
     private Instant lastModified;
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java
index 9f4c4e0606802a475e5873e3d0ebc57455a6a0e2..459cb69f4bc5c00d04e021301a460b6ba25d6dc4 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java
@@ -36,7 +36,6 @@ public class TableColumn implements Comparable<TableColumn> {
     private Long id;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE})
     @JoinColumns({
             @JoinColumn(name = "tID", referencedColumnName = "id", nullable = false)
@@ -114,13 +113,11 @@ public class TableColumn implements Comparable<TableColumn> {
     @Column(name = "std_dev")
     private BigDecimal stdDev;
 
-    @EqualsAndHashCode.Exclude
     @CreatedDate
     @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
     private Instant created;
 
-    @EqualsAndHashCode.Exclude
     @LastModifiedDate
     @Column(columnDefinition = "TIMESTAMP")
     private Instant lastModified;
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java
index 5a9e8292be0af3e99050bc87be1ba7b8b9756bf7..2bea4c61129a2dfde120539c6647632931ea7ff3 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java
@@ -42,7 +42,6 @@ public class TableColumnConcept {
     @Column(columnDefinition = "TEXT")
     private String description;
 
-    @EqualsAndHashCode.Exclude
     @CreatedDate
     @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java
index 7e8fe915b3b9de49e53eb0806da1f5ed03608a1d..e58cbed6599e5c7b8e74fa13097446ce40195766 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java
@@ -42,7 +42,6 @@ public class TableColumnUnit {
     @Column(columnDefinition = "TEXT")
     private String description;
 
-    @EqualsAndHashCode.Exclude
     @CreatedDate
     @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java
index 76de9463cfa37048fb45d2b091b472190124ff1b..a24cffcd2aed92ec71d1a1ea7b1bcb559806ad95 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java
@@ -29,7 +29,6 @@ public class ForeignKey {
     private String name;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
     @JoinColumns({
             @JoinColumn(name = "tid", referencedColumnName = "id", nullable = false)
@@ -37,7 +36,6 @@ public class ForeignKey {
     private Table table;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
     @JoinColumns({
             @JoinColumn(name = "rtid", referencedColumnName = "id", nullable = false)
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java
index ed2691fc524a3de33788ed977b1ba213b18b5bfe..5d6c2043aebf7836aced4a16a429ab55e88bb0d4 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java
@@ -26,7 +26,6 @@ public class ForeignKeyReference {
     private Long id;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE})
     @JoinColumn(name = "fkid", referencedColumnName = "fkid", nullable = false)
     private ForeignKey foreignKey;
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/primaryKey/PrimaryKey.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/primaryKey/PrimaryKey.java
index 407e2fb7f3f98b6a8b65d28636c92afaceb3e69c..40452ce0205802880c96fb3d7689ed1e40c59012 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/primaryKey/PrimaryKey.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/primaryKey/PrimaryKey.java
@@ -25,7 +25,6 @@ public class PrimaryKey {
     private Long id;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @org.springframework.data.annotation.Transient
     @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE})
     @JoinColumns({
@@ -34,7 +33,6 @@ public class PrimaryKey {
     private Table table;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @org.springframework.data.annotation.Transient
     @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE})
     @JoinColumns({
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java
index c0dfc467109cf794dda89925393b442286254da5..fb10dad8ad8ba71584d015d7e8e09990f2d6f5aa 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java
@@ -30,7 +30,6 @@ public class Unique {
     private String name;
 
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @org.springframework.data.annotation.Transient
     @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE})
     @JoinColumns({
@@ -38,7 +37,6 @@ public class Unique {
     })
     private Table table;
 
-    @EqualsAndHashCode.Exclude
     @org.springframework.data.annotation.Transient
     @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE})
     @JoinTable(
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java
index b98a1b8c6b7509ef0772f69e2af343b1b63d386e..49d4df1b35b6d7b7f937121e57c6e9e278630467 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java
@@ -138,7 +138,6 @@ public class Identifier implements Serializable {
      * Databases are never created/updated/deleted by the Identifier entity.
      */
     @ToString.Exclude
-    @EqualsAndHashCode.Exclude
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumns({
             @JoinColumn(name = "dbid", referencedColumnName = "id", nullable = false, updatable = false)
@@ -166,12 +165,10 @@ public class Identifier implements Serializable {
     })
     private User owner;
 
-    @EqualsAndHashCode.Exclude
     @CreatedDate
     @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP default NOW()")
     private Instant created;
 
-    @EqualsAndHashCode.Exclude
     @LastModifiedDate
     @Column(columnDefinition = "TIMESTAMP")
     private Instant lastModified;
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java
index 576aab1e375028a9a776ae96cb0ea983f84e7274..2e796c859a1fba23d605f55f81ecf0e9be991f26 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/semantics/Ontology.java
@@ -46,12 +46,10 @@ public class Ontology {
     @Column
     private String rdfPath;
 
-    @EqualsAndHashCode.Exclude
     @CreatedDate
     @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP")
     private Instant created;
 
-    @EqualsAndHashCode.Exclude
     @LastModifiedDate
     @Column(columnDefinition = "TIMESTAMP")
     private Instant lastModified;
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java
index de3111e5c833204cdba781345ffb1e9c3790b8a7..4577658ed88d03a934fdf46d5e56c9987e4e4d28 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/user/User.java
@@ -49,7 +49,6 @@ public class User {
     private String language;
 
     @OneToMany(fetch = FetchType.LAZY)
-    @EqualsAndHashCode.Exclude
     @JoinColumns({
             @JoinColumn(name = "user_id", referencedColumnName = "ID", insertable = false, updatable = false)
     })
diff --git a/dbrepo-metadata-service/pom.xml b/dbrepo-metadata-service/pom.xml
index c165efdc3de50b9fe01f3e4715809bfe2dee852d..1e22b69fa998e8d642a5a16a22b03c362f05ad9f 100644
--- a/dbrepo-metadata-service/pom.xml
+++ b/dbrepo-metadata-service/pom.xml
@@ -99,6 +99,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-webflux</artifactId>
+        </dependency>
         <!-- Open API -->
         <dependency>
             <groupId>org.springdoc</groupId>
@@ -271,6 +275,7 @@
     </dependencies>
 
     <build>
+        <finalName>metadata-service</finalName>
         <resources>
             <resource>
                 <directory>${basedir}/src/main/resources</directory>
diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceConnectionException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceConnectionException.java
index d68185102a00e33419ae8cf2c4250c0775082a23..2cf18262d3069f6369026e64508a687f3d2e419a 100644
--- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceConnectionException.java
+++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceConnectionException.java
@@ -4,7 +4,7 @@ import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
 @ResponseStatus(code = HttpStatus.BAD_GATEWAY, reason = "error.search.connection")
-public class SearchServiceConnectionException extends Exception {
+public class SearchServiceConnectionException extends RuntimeException {
 
     public SearchServiceConnectionException(String msg) {
         super(msg);
diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceException.java
index aef3ae7f7cd75db6ec7ed59f95980f2c8e021c2b..528b3aadd1e0cdd0ea9ef6c19374f29b8d62ab15 100644
--- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceException.java
+++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/SearchServiceException.java
@@ -4,7 +4,7 @@ import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
 @ResponseStatus(code = HttpStatus.SERVICE_UNAVAILABLE, reason = "error.search.invalid")
-public class SearchServiceException extends Exception {
+public class SearchServiceException extends RuntimeException {
 
     public SearchServiceException(String message) {
         super(message);
diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/MetadataMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/MetadataMapper.java
index 36caa7e9f6163913d5dd7fb5fb18ec31114bcf48..f66121c0edf4358f189f3f94507c7b3184ece51c 100644
--- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/MetadataMapper.java
+++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/MetadataMapper.java
@@ -534,8 +534,6 @@ public interface MetadataMapper {
     }
 
     default TableDto tableToTableDto(Table data) {
-        data.getDatabase()
-                .setTables(null);
         final TableDto table = TableDto.builder()
                 .id(data.getId())
                 .name(data.getName())
diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java
index 08535fde69a20f162ea3d4478110d9360db55f99..b680e874683e46736417978d1467823a6d50aa45 100644
--- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java
+++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java
@@ -1,7 +1,7 @@
 package at.tuwien.endpoints;
 
-import at.tuwien.api.database.table.TableBriefDto;
 import at.tuwien.api.database.table.CreateTableDto;
+import at.tuwien.api.database.table.TableBriefDto;
 import at.tuwien.api.database.table.TableDto;
 import at.tuwien.api.database.table.TableUpdateDto;
 import at.tuwien.api.database.table.columns.ColumnDto;
@@ -369,9 +369,9 @@ public class TableEndpoint extends AbstractEndpoint {
         final Database database = databaseService.findById(databaseId);
         endpointValidator.validateOnlyAccess(database, principal, true);
         endpointValidator.validateColumnCreateConstraints(data);
+        final Table table = tableService.createTable(database, data, principal);
         return ResponseEntity.status(HttpStatus.CREATED)
-                .body(metadataMapper.tableToTableBriefDto(
-                        tableService.createTable(database, data, principal)));
+                .body(metadataMapper.tableToTableBriefDto(table));
     }
 
     @PutMapping("/{tableId}")
@@ -495,18 +495,15 @@ public class TableEndpoint extends AbstractEndpoint {
             table.setColumns(List.of());
             table.setConstraints(null);
         }
-        final TableDto dto = metadataMapper.tableToTableDto(table);
         final HttpHeaders headers = new HttpHeaders();
         if (isSystem(principal)) {
             headers.set("X-Username", table.getDatabase().getContainer().getPrivilegedUsername());
             headers.set("X-Password", table.getDatabase().getContainer().getPrivilegedPassword());
             headers.set("Access-Control-Expose-Headers", "X-Username X-Password");
-        } else {
-            removeInternalData(dto.getDatabase().getContainer());
         }
         return ResponseEntity.ok()
                 .headers(headers)
-                .body(dto);
+                .body(metadataMapper.tableToTableDto(table));
     }
 
     @DeleteMapping("/{tableId}")
diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/datatypes.json b/dbrepo-metadata-service/rest-service/src/main/resources/datatypes.json
deleted file mode 100644
index 3779d12cbe32b67fa163cf6b0285b9e01f7dc681..0000000000000000000000000000000000000000
--- a/dbrepo-metadata-service/rest-service/src/main/resources/datatypes.json
+++ /dev/null
@@ -1,15 +0,0 @@
-[
-  {
-    "name": "",
-    "size": {
-      "min": 0,
-      "required": true
-    },
-    "d": {
-      "required": false
-    },
-    "documentation": "https://mariadb.com/kb/en/bigint/",
-    "quoted": false,
-    "buildable": true
-  }
-]
\ No newline at end of file
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java
index b77bc30d3811ed30c7994129ae2110e12903d0f9..8cf56879d0a6ed2a3f51c898c294a1e4ca4349ec 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java
@@ -141,7 +141,7 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest {
         when(restTemplate.exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(dataCiteBodyParameterizedTypeReference)))
                 .thenReturn(mock);
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+                .thenReturn(DATABASE_1_DTO);
 
         /* test */
         dataCiteIdentifierService.save(DATABASE_1, USER_1, IDENTIFIER_1_SAVE_DTO);
@@ -156,7 +156,7 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest {
                 .when(restTemplate)
                 .exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(dataCiteBodyParameterizedTypeReference));
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+                .thenReturn(DATABASE_1_DTO);
 
         /* test */
         assertThrows(MalformedException.class, () -> {
@@ -173,7 +173,7 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest {
                 .when(restTemplate)
                 .exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(dataCiteBodyParameterizedTypeReference));
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+                .thenReturn(DATABASE_1_DTO);
 
         /* test */
         assertThrows(DataServiceConnectionException.class, () -> {
@@ -332,7 +332,7 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest {
 
         /* mock */
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+                .thenReturn(DATABASE_1_DTO);
 
         /* test */
         dataCiteIdentifierService.delete(IDENTIFIER_1);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java
index 9c91084f77cdac6c554cb11ea847bbb447185283..172385d4a0d5309f014e1d0bba2007da5a964dfa 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java
@@ -1,6 +1,5 @@
 package at.tuwien.service;
 
-import at.tuwien.entities.container.Container;
 import at.tuwien.entities.database.Database;
 import at.tuwien.exception.DatabaseNotFoundException;
 import at.tuwien.repository.ContainerRepository;
@@ -21,7 +20,6 @@ import org.springframework.transaction.annotation.Transactional;
 import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 @Log4j2
 @SpringBootTest
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java
index 18d037fe452cb6cdab5b4d0f0fe68b5ed6142cf0..1b6570abd821337fe032bead021cf9d5a4b9fc8c 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java
@@ -110,7 +110,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+                .thenReturn(DATABASE_1_DTO);
 
         /* test */
         final Database response = databaseService.modifyImage(DATABASE_1, image);
@@ -164,7 +164,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+                .thenReturn(DATABASE_1_DTO);
 
         /* test */
         final Database response = databaseService.updateViewMetadata(DATABASE_1);
@@ -222,7 +222,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+                .thenReturn(DATABASE_1_DTO);
 
         /* test */
         final Database response = databaseService.updateViewMetadata(DATABASE_1);
@@ -240,7 +240,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+                .thenReturn(DATABASE_1_DTO);
 
         /* test */
         final Database response = databaseService.updateViewMetadata(DATABASE_1);
@@ -258,7 +258,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+                .thenReturn(DATABASE_1_DTO);
 
         /* test */
         final Database response = databaseService.updateTableMetadata(DATABASE_1);
@@ -276,7 +276,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+                .thenReturn(DATABASE_1_DTO);
 
         /* test */
         final Database response = databaseService.updateTableMetadata(DATABASE_1);
@@ -294,7 +294,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+                .thenReturn(DATABASE_1_DTO);
 
         /* test */
         final Database response = databaseService.updateTableMetadata(DATABASE_1);
@@ -517,7 +517,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
 
         /* mock */
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+                .thenReturn(DATABASE_1_DTO);
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
 
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java
index 40fc28fe4d89524a928d474e0d3328853bee5df7..aa465aa61ab086697541b78d19cb87a5eb5f9f3e 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java
@@ -35,6 +35,7 @@ import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.when;
 
 @Log4j2
@@ -176,7 +177,7 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest {
         when(dataServiceGateway.findQuery(IDENTIFIER_5_DATABASE_ID, IDENTIFIER_5_QUERY_ID))
                 .thenReturn(QUERY_2_DTO);
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_2_BRIEF_DTO);
+                .thenReturn(DATABASE_2_DTO);
 
         /* test */
         identifierService.save(DATABASE_2, USER_2, IDENTIFIER_5_SAVE_DTO);
@@ -286,7 +287,7 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest {
 
         /* mock */
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+                .thenReturn(DATABASE_1_DTO);
 
         /* test */
         identifierService.delete(IDENTIFIER_1);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java
index b0efccab9ac856f727ee3377554e7cf8a01bb2c7..18e2c3090acdda33dcd246e6aee1ee2623dac263 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java
@@ -112,7 +112,10 @@ public class TableServicePersistenceTest extends AbstractUnitTest {
                 .when(dataServiceGateway)
                 .createTable(DATABASE_1_ID, request);
         when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+                .thenReturn(DATABASE_1_DTO);
+        doNothing()
+                .when(searchServiceGateway)
+                .update(any(Database.class));
 
         /* test */
         final Table response = tableService.createTable(DATABASE_1, request, USER_1_PRINCIPAL);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java
index 8cb5081f6d98b68971f71f2da5538ab72bd772a8..8533ce390db6f376b1ed1273c2ba3cae5129738a 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java
@@ -134,8 +134,9 @@ public class TableServiceUnitTest extends AbstractUnitTest {
                 .thenReturn(TABLE_8_STATISTIC_DTO);
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
-        when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+        doNothing()
+                .when(searchServiceGateway)
+                .update(any(Database.class));
 
         /* test */
         tableService.updateStatistics(TABLE_8);
@@ -223,8 +224,9 @@ public class TableServiceUnitTest extends AbstractUnitTest {
                 .thenReturn(CONCEPT_1);
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
-        when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+        doNothing()
+                .when(searchServiceGateway)
+                .update(any(Database.class));
 
         /* test */
         final TableColumn response = tableService.update(TABLE_1_COLUMNS.get(0), request);
@@ -255,8 +257,9 @@ public class TableServiceUnitTest extends AbstractUnitTest {
                 .thenReturn(CONCEPT_1_ENTITY_DTO);
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
-        when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+        doNothing()
+                .when(searchServiceGateway)
+                .update(any(Database.class));
 
         /* test */
         final TableColumn response = tableService.update(TABLE_1_COLUMNS.get(0), request);
@@ -278,8 +281,9 @@ public class TableServiceUnitTest extends AbstractUnitTest {
                 .createTable(eq(DATABASE_1_ID), any(CreateTableDto.class));
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
-        when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+        doNothing()
+                .when(searchServiceGateway)
+                .update(any(Database.class));
 
         /* test */
         final Table response = tableService.createTable(DATABASE_1, TABLE_3_CREATE_DTO, USER_1_PRINCIPAL);
@@ -315,8 +319,9 @@ public class TableServiceUnitTest extends AbstractUnitTest {
                 .createTable(eq(DATABASE_1_ID), any(CreateTableDto.class));
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
-        when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+        doNothing()
+                .when(searchServiceGateway)
+                .update(any(Database.class));
 
         /* test */
         final Table response = tableService.createTable(DATABASE_1, request, USER_1_PRINCIPAL);
@@ -368,8 +373,9 @@ public class TableServiceUnitTest extends AbstractUnitTest {
                 .createTable(eq(DATABASE_1_ID), any(CreateTableDto.class));
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
-        when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+        doNothing()
+                .when(searchServiceGateway)
+                .update(any(Database.class));
 
         /* test */
         assertThrows(MalformedException.class, () -> {
@@ -391,8 +397,9 @@ public class TableServiceUnitTest extends AbstractUnitTest {
         doNothing()
                 .when(dataServiceGateway)
                 .createTable(DATABASE_1_ID, TABLE_3_CREATE_DTO);
-        when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+        doNothing()
+                .when(searchServiceGateway)
+                .update(any(Database.class));
 
         /* test */
         final Table response = tableService.createTable(DATABASE_1, TABLE_3_CREATE_DTO, USER_1_PRINCIPAL);
@@ -412,8 +419,9 @@ public class TableServiceUnitTest extends AbstractUnitTest {
         doThrow(DataServiceException.class)
                 .when(dataServiceGateway)
                 .createTable(DATABASE_1_ID, TABLE_5_CREATE_DTO);
-        when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+        doNothing()
+                .when(searchServiceGateway)
+                .update(any(Database.class));
 
         /* test */
         assertThrows(DataServiceException.class, () -> {
@@ -510,8 +518,9 @@ public class TableServiceUnitTest extends AbstractUnitTest {
         doNothing()
                 .when(dataServiceGateway)
                 .deleteTable(DATABASE_1_ID, TABLE_1_ID);
-        when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+        doNothing()
+                .when(searchServiceGateway)
+                .update(any(Database.class));
 
         /* test */
         tableService.deleteTable(TABLE_1);
@@ -526,8 +535,9 @@ public class TableServiceUnitTest extends AbstractUnitTest {
         doNothing()
                 .when(dataServiceGateway)
                 .deleteTable(DATABASE_1_ID, TABLE_4_ID);
-        when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+        doNothing()
+                .when(searchServiceGateway)
+                .update(any(Database.class));
 
         /* test */
         tableService.deleteTable(TABLE_4);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java
index 57a84965dc81615613f201e6aee4e771582ac090..22be514d267323f39d2b86dcc920d762da27f5dd 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java
@@ -88,8 +88,9 @@ public class ViewServicePersistenceTest extends AbstractUnitTest {
         doNothing()
                 .when(dataServiceGateway)
                 .deleteView(DATABASE_1_ID, VIEW_1_ID);
-        when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+        doNothing()
+                .when(searchServiceGateway)
+                .update(any(Database.class));
 
         /* test */
         viewService.delete(VIEW_1);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceUnitTest.java
index 4ba217a60c0b5a520e7fcd1c59a610769530760e..cbea0004d9ac838dee8db540af8d26119a35fb57 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServiceUnitTest.java
@@ -61,8 +61,9 @@ public class ViewServiceUnitTest extends AbstractUnitTest {
                 .thenReturn(VIEW_1_DTO);
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
-        when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+        doNothing()
+                .when(searchServiceGateway)
+                .update(any(Database.class));
 
         /* test */
         final View response = viewService.create(DATABASE_1, USER_1, request);
@@ -116,8 +117,9 @@ public class ViewServiceUnitTest extends AbstractUnitTest {
                 .deleteView(DATABASE_1_ID, VIEW_1_ID);
         when(databaseRepository.save(any(Database.class)))
                 .thenReturn(DATABASE_1);
-        when(searchServiceGateway.update(any(Database.class)))
-                .thenReturn(DATABASE_1_BRIEF_DTO);
+        doNothing()
+                .when(searchServiceGateway)
+                .update(any(Database.class));
 
         /* test */
         viewService.delete(VIEW_1);
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java
index 0bcace730e7753b1dd21d2e1d4a91f47bda6b9f3..1559281af3462181248e492b5facb2bc89429388 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/GatewayConfig.java
@@ -1,15 +1,27 @@
 package at.tuwien.config;
 
+import at.tuwien.api.keycloak.TokenDto;
 import at.tuwien.auth.InternalRequestInterceptor;
+import at.tuwien.exception.AccountNotSetupException;
+import at.tuwien.exception.AuthServiceConnectionException;
+import at.tuwien.exception.CredentialsInvalidException;
 import at.tuwien.gateway.KeycloakGateway;
 import lombok.Getter;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.*;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
 import org.springframework.web.client.RestTemplate;
+import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
+import org.springframework.web.reactive.function.client.WebClient;
 import org.springframework.web.util.DefaultUriBuilderFactory;
 
+import java.util.List;
+
 @Log4j2
 @Getter
 @Configuration
@@ -89,4 +101,27 @@ public class GatewayConfig {
         return restTemplate;
     }
 
+    @Bean
+    public WebClient webClient() {
+        return WebClient.builder()
+                .baseUrl(searchEndpoint)
+                .filter(internalFilter())
+                .build();
+    }
+
+    private ExchangeFilterFunction internalFilter() {
+        return (request, next) -> {
+            final HttpHeaders headers = request.headers();
+            headers.setAccept(List.of(MediaType.APPLICATION_JSON));
+            try {
+                final TokenDto token = keycloakGateway.obtainUserToken(getSystemUsername(), getSystemPassword());
+                headers.setBearerAuth(token.getAccessToken());
+                return next.exchange(request);
+            } catch (AuthServiceConnectionException | CredentialsInvalidException | AccountNotSetupException e) {
+                log.error("Failed to obtain token for internal user: {}", e.getMessage());
+            }
+            return next.exchange(request);
+        };
+    }
+
 }
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/SearchServiceGateway.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/SearchServiceGateway.java
index 6632a08194411f74d5b4d22d4f1e0de6eda91a47..f739f7cd17e27909eec7a3f529389fada8669c7d 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/SearchServiceGateway.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/SearchServiceGateway.java
@@ -1,12 +1,14 @@
 package at.tuwien.gateway;
 
-import at.tuwien.api.database.DatabaseBriefDto;
+import at.tuwien.api.database.DatabaseDto;
 import at.tuwien.entities.database.Database;
-import at.tuwien.exception.*;
+import at.tuwien.exception.DatabaseNotFoundException;
+import at.tuwien.exception.SearchServiceConnectionException;
+import at.tuwien.exception.SearchServiceException;
 
 public interface SearchServiceGateway {
 
-    DatabaseBriefDto update(Database database) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException;
+    DatabaseDto update(Database database) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException;
 
     void delete(Long databaseId) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException;
 }
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/SearchServiceGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/SearchServiceGatewayImpl.java
index 503cad47ec5d2a8abd7ec4e76757b2f8ddb48ecd..541de4aa7ec87583921de6635bc49505ae5b4cea 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/SearchServiceGatewayImpl.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/SearchServiceGatewayImpl.java
@@ -1,6 +1,6 @@
 package at.tuwien.gateway.impl;
 
-import at.tuwien.api.database.DatabaseBriefDto;
+import at.tuwien.api.database.DatabaseDto;
 import at.tuwien.config.GatewayConfig;
 import at.tuwien.entities.database.Database;
 import at.tuwien.exception.DatabaseNotFoundException;
@@ -35,8 +35,8 @@ public class SearchServiceGatewayImpl implements SearchServiceGateway {
     }
 
     @Override
-    public DatabaseBriefDto update(Database database) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException {
-        final ResponseEntity<DatabaseBriefDto> response;
+    public DatabaseDto update(Database database) throws SearchServiceConnectionException, SearchServiceException, DatabaseNotFoundException {
+        final ResponseEntity<DatabaseDto> response;
         final HttpHeaders headers = new HttpHeaders();
         headers.set("Accept", "application/json");
         headers.set("Content-Type", "application/json");
@@ -44,7 +44,7 @@ public class SearchServiceGatewayImpl implements SearchServiceGateway {
         log.trace("update database at endpoint {} with path {}", gatewayConfig.getSearchEndpoint(), path);
         try {
             response = restTemplate.exchange(path, HttpMethod.PUT, new HttpEntity<>(
-                    metadataMapper.databaseToDatabaseDto(database), headers), DatabaseBriefDto.class);
+                    metadataMapper.databaseToDatabaseDto(database), headers), DatabaseDto.class);
         } catch (ResourceAccessException | HttpServerErrorException.ServiceUnavailable |
                  HttpServerErrorException.InternalServerError e) {
             log.error("Failed to update database: {}", e.getMessage());
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
index da92fb7ef59eac9af0df3cf1f779da150c2d437f..81a6d5ace7358c0380464668fa76573ebaa4fb2b 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
@@ -22,6 +22,7 @@ import at.tuwien.service.*;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.security.Principal;
@@ -92,8 +93,7 @@ public class TableServiceImpl implements TableService {
     @Transactional
     public Table createTable(Database database, CreateTableDto data, Principal principal) throws DataServiceException,
             DataServiceConnectionException, UserNotFoundException, TableNotFoundException, DatabaseNotFoundException,
-            TableExistsException, SearchServiceException, SearchServiceConnectionException, MalformedException,
-            OntologyNotFoundException, SemanticEntityNotFoundException {
+            TableExistsException, MalformedException, OntologyNotFoundException, SemanticEntityNotFoundException {
         final User owner = userService.findByUsername(principal.getName());
         /* map table */
         final Table table = Table.builder()
@@ -279,9 +279,8 @@ public class TableServiceImpl implements TableService {
 
     @Override
     @Transactional
-    public void updateStatistics(Table table) throws SearchServiceException,
-            DatabaseNotFoundException, SearchServiceConnectionException, MalformedException, TableNotFoundException,
-            DataServiceException, DataServiceConnectionException {
+    public void updateStatistics(Table table) throws MalformedException, TableNotFoundException, DataServiceException,
+            DataServiceConnectionException, DatabaseNotFoundException {
         final TableStatisticDto statistic = dataServiceGateway.getTableStatistics(table.getTdbid(), table.getId());
         if (statistic == null) {
             return;
@@ -312,7 +311,6 @@ public class TableServiceImpl implements TableService {
         /* update in open search service */
         searchServiceGateway.update(database);
         log.info("Updated statistics for the table and {} column(s)", table.getColumns().size());
-        log.trace("updated statistics: {}", table);
     }
 
 }
diff --git a/dbrepo-search-service/Pipfile.lock b/dbrepo-search-service/Pipfile.lock
index ded9023e433ea6654c4630c37e17ff5077b267b6..25b924f36453ac9e55fd120b98480f16ec0a00cc 100644
--- a/dbrepo-search-service/Pipfile.lock
+++ b/dbrepo-search-service/Pipfile.lock
@@ -1,7 +1,7 @@
 {
     "_meta": {
         "hash": {
-            "sha256": "729017f537f9f8fb6dcc15703392c7fd79aec494feba4c107e7a1888e8ea955d"
+            "sha256": "2ff9fc673f1fb1e5dc272aa711f4e730088fa0188b44449db042abf99b6c4db7"
         },
         "pipfile-spec": 6,
         "requires": {
@@ -360,9 +360,9 @@
         },
         "dbrepo": {
             "hashes": [
-                "sha256:181e3da705d8f61ef26a743e0a445c5363b68c671c63f655791d340efdd7aac0"
+                "sha256:844ff70a81f0c3f2514f76a2d34b7661ea86b153b8f766e6aa6992e1990c7f36"
             ],
-            "path": "./lib/dbrepo-1.6.2.tar.gz"
+            "path": "./lib/dbrepo-1.6.3.tar.gz"
         },
         "docker": {
             "hashes": [
diff --git a/dbrepo-search-service/init/lib/dbrepo-1.6.1.tar.gz b/dbrepo-search-service/init/lib/dbrepo-1.6.1.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..acc051ca3d2c3ef4efe7a04e405a6f49aca151d8
Binary files /dev/null and b/dbrepo-search-service/init/lib/dbrepo-1.6.1.tar.gz differ
diff --git a/dbrepo-search-service/init/lib/dbrepo-1.6.3-py3-none-any.whl b/dbrepo-search-service/init/lib/dbrepo-1.6.3-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..cb9912e0a0ede152ac0b272f981f1cb88a35916b
Binary files /dev/null and b/dbrepo-search-service/init/lib/dbrepo-1.6.3-py3-none-any.whl differ
diff --git a/dbrepo-search-service/init/lib/dbrepo-1.6.3.tar.gz b/dbrepo-search-service/init/lib/dbrepo-1.6.3.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..c11c350b23c65818060a5529e324d2bdec574ac2
Binary files /dev/null and b/dbrepo-search-service/init/lib/dbrepo-1.6.3.tar.gz differ
diff --git a/dbrepo-search-service/lib/dbrepo-1.6.1.tar.gz b/dbrepo-search-service/lib/dbrepo-1.6.1.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..acc051ca3d2c3ef4efe7a04e405a6f49aca151d8
Binary files /dev/null and b/dbrepo-search-service/lib/dbrepo-1.6.1.tar.gz differ
diff --git a/dbrepo-search-service/lib/dbrepo-1.6.3-py3-none-any.whl b/dbrepo-search-service/lib/dbrepo-1.6.3-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..cb9912e0a0ede152ac0b272f981f1cb88a35916b
Binary files /dev/null and b/dbrepo-search-service/lib/dbrepo-1.6.3-py3-none-any.whl differ
diff --git a/dbrepo-search-service/lib/dbrepo-1.6.3.tar.gz b/dbrepo-search-service/lib/dbrepo-1.6.3.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..c11c350b23c65818060a5529e324d2bdec574ac2
Binary files /dev/null and b/dbrepo-search-service/lib/dbrepo-1.6.3.tar.gz differ
diff --git a/dbrepo-ui/composables/table-service.ts b/dbrepo-ui/composables/table-service.ts
index 45268d6295fc0ba55fdf268936a1614b350033e3..2597dc251a676f8f9d63da018d0e14ffad0f9869 100644
--- a/dbrepo-ui/composables/table-service.ts
+++ b/dbrepo-ui/composables/table-service.ts
@@ -251,13 +251,6 @@ export const useTableService = (): any => {
     }
   }
 
-  function isOwner(table: TableDto, user: UserDto) {
-    if (!table || !user) {
-      return false
-    }
-    return table.owner.id === user.id
-  }
-
   function tableNameToInternalName(name: string) {
     return name.normalize('NFKD')
       .toLowerCase()
@@ -293,7 +286,6 @@ export const useTableService = (): any => {
     suggest,
     prepareColumns,
     prepareConstraints,
-    isOwner,
     tableNameToInternalName
   }
 }
diff --git a/dbrepo-ui/pages/database/[database_id]/info.vue b/dbrepo-ui/pages/database/[database_id]/info.vue
index 8340dfe955f4dc21f19f1af70c23d19d1ed9b1ef..7789d74298c88a55fcdcea18cd1e20542322ec63 100644
--- a/dbrepo-ui/pages/database/[database_id]/info.vue
+++ b/dbrepo-ui/pages/database/[database_id]/info.vue
@@ -94,7 +94,7 @@
                 <div>
                   <UserBadge
                     :user="database.owner"
-                    :other-user="user" />
+                    :other-user="cacheUser" />
                 </div>
               </v-list-item>
               <v-list-item
@@ -104,7 +104,7 @@
                 <div>
                   <UserBadge
                     :user="database.contact"
-                    :other-user="user" />
+                    :other-user="cacheUser" />
                 </div>
               </v-list-item>
             </v-list>
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 f4007569a21e134abb26f4f5176776ab09da82ce..50eb6305d77b39ff8e0e60ea32dda2ef6bf3e5b9 100644
--- a/dbrepo-ui/pages/database/[database_id]/table/create/dataset.vue
+++ b/dbrepo-ui/pages/database/[database_id]/table/create/dataset.vue
@@ -219,12 +219,6 @@
   </div>
 </template>
 
-<script setup>
-const { refresh, user } = useOidcAuth()
-if (user.value?.canRefresh) {
-  await refresh()
-}
-</script>
 <script>
 import TableSchema from '@/components/table/TableSchema.vue'
 import { notEmpty } from '@/utils'
diff --git a/dbrepo-ui/pages/user/index.vue b/dbrepo-ui/pages/user/index.vue
index be3fe8cf673afb38ba7beffc22b5ca8a28d9388d..f0e9e2083beae166a9702f10dec1f5e4a0f370da 100644
--- a/dbrepo-ui/pages/user/index.vue
+++ b/dbrepo-ui/pages/user/index.vue
@@ -2,6 +2,9 @@
   <div />
 </template>
 
+<script setup>
+const { loggedIn } = useOidcAuth()
+</script>
 <script>
 export default {
   mounted () {
diff --git a/helm/dbrepo/files/create-event-listener.jar b/helm/dbrepo/files/create-event-listener.jar
new file mode 100644
index 0000000000000000000000000000000000000000..221bdd325f056ff953e0a44a46773470eb08e91e
Binary files /dev/null and b/helm/dbrepo/files/create-event-listener.jar differ
diff --git a/helm/dbrepo/templates/auth-configmap.yaml b/helm/dbrepo/templates/auth-configmap.yaml
index ffd14c4b1765cab2f20af5888c746fbf47a71a45..208971bfa23933cc3b8156514dde25ff37a6d944 100644
--- a/helm/dbrepo/templates/auth-configmap.yaml
+++ b/helm/dbrepo/templates/auth-configmap.yaml
@@ -4,6 +4,9 @@ kind: ConfigMap
 metadata:
   name: auth-service-config
   namespace: {{ include "common.names.namespace" . | quote }}
+binaryData:
+  create-event-listener.jar: |
+    {{ .Files.Get "files/create-event-listener.jar" | b64enc | nindent 4 }}
 data:
   dbrepo-realm.json: |
     {
diff --git a/helm/dbrepo/values.yaml b/helm/dbrepo/values.yaml
index 626aea471be61721f0106f0e3595829a936e6dde..9bc35763ae7fb574f943791d212136d4738d0a94 100644
--- a/helm/dbrepo/values.yaml
+++ b/helm/dbrepo/values.yaml
@@ -140,7 +140,14 @@ authservice:
   ## @skip authservice.extraVolumeMounts
   extraVolumeMounts:
     - name: config-map
-      mountPath: /opt/keycloak/data/import
+      mountPath: /opt/keycloak/data/import/dbrepo-realm.json
+      subPath: dbrepo-realm.json
+    - name: config-map
+      mountPath: /opt/keycloak/data/import/master-realm.json
+      subPath: master-realm.json
+    - name: config-map
+      mountPath: /opt/bitnami/keycloak/providers/create-event-listener.jar
+      subPath: create-event-listener.jar
     - name: cache
       mountPath: /bitnami/keycloak/
   ## @skip authservice.replicaCount The number of replicas.
@@ -176,6 +183,16 @@ datadb:
     enabled: true
   ## @param datadb.replicaCount The number of cluster nodes, should be uneven i.e. 2n+1
   replicaCount: 3
+  resources:
+    resources:
+      limits:
+        cpu: 750m
+        ephemeral-storage: 2Gi
+        memory: 1536Mi
+      requests:
+        cpu: 500m
+        ephemeral-storage: 50Mi
+        memory: 1000Mi
   persistence:
     ## @param datadb.persistence.enabled Enable persistent storage.
     enabled: true
diff --git a/make/dev.mk b/make/dev.mk
index 0282dbbce287356e207822fdc9dbf1be7e26e0b8..c20b4dd22910b76e02979fb9be710ea4e67cd565 100644
--- a/make/dev.mk
+++ b/make/dev.mk
@@ -31,6 +31,7 @@ package-config: ## Package the config files
 	cp ./dbrepo-metric-db/prometheus.yml ./.docker/config
 	cp ./dbrepo-storage-service/s3_config.json ./.docker/config
 	cp ./dbrepo-upload-service/pre-create.sh ./.docker/config
+	cp ./dbrepo-auth-service/listeners/target/create-event-listener.jar ./.docker/config
 	cd ./.docker && tar czf ./dist.tar.gz ./docker-compose.yml ./.env ./config
 
 .PHONY: install-staging