diff --git a/Makefile b/Makefile
index 382782dcf162f89cd8c09f1b7778f4fd22556c91..a9c6b7d970c94dd4b65d329741751034bab947a6 100644
--- a/Makefile
+++ b/Makefile
@@ -43,7 +43,7 @@ build-frontend:
 build-clients:
 	bash ./.gitlab/swagger/generate.sh
 
-tag: tag-analyse-service tag-authentication-service tag-metadata-db tag-ui tag-metadata-service tag-data-service tag-mirror-service tag-log-service tag-search-db tag-search-db-init tag-search-service
+tag: tag-analyse-service tag-authentication-service tag-metadata-db tag-ui tag-metadata-service tag-data-service tag-mirror-service tag-log-service tag-search-db tag-search-db-init tag-search-service tag-data-db-sidecar
 
 tag-analyse-service:
 	docker tag dbrepo-analyse-service:latest "dbrepo/analyse-service:${TAG}"
@@ -77,6 +77,10 @@ tag-search-db:
 	docker tag dbrepo-search-db:latest "dbrepo/search-db:${TAG}"
 	docker tag dbrepo-search-db:latest "${AZURE_REPO}/dbrepo/search-db:${TAG}"
 
+tag-data-db-sidecar:
+	docker tag dbrepo-data-db-sidecar:latest "dbrepo/data-db-sidecar:${TAG}"
+	docker tag dbrepo-data-db-sidecar:latest "${AZURE_REPO}/dbrepo/data-db-sidecar:${TAG}"
+
 tag-search-db-init:
 	docker tag dbrepo-search-db-init:latest "dbrepo/search-db-init:${TAG}"
 	docker tag dbrepo-search-db-init:latest "${AZURE_REPO}/dbrepo/search-db-init:${TAG}"
@@ -89,7 +93,7 @@ tag-search-service:
 	docker tag dbrepo-search-service:latest "dbrepo/search-service:${TAG}"
 	docker tag dbrepo-search-service:latest "${AZURE_REPO}/dbrepo/search-service:${TAG}"
 
-release: build-docker tag release-analyse-service release-authentication-service release-metadata-db release-ui release-metadata-service release-data-service release-log-service release-search-db release-mirror-service release-search-db-init release-search-service
+release: build-docker tag release-analyse-service release-authentication-service release-metadata-db release-ui release-metadata-service release-data-service release-log-service release-search-db release-mirror-service release-search-db-init release-search-service release-data-db-sidecar
 
 release-analyse-service: tag-analyse-service
 	docker push "dbrepo/analyse-service:${TAG}"
@@ -123,6 +127,10 @@ release-search-db-init: tag-search-db-init
 	docker push "dbrepo/search-db-init:${TAG}"
 	docker push "${AZURE_REPO}/dbrepo/search-db-init:${TAG}"
 
+release-data-db-sidecar: tag-data-db-sidecar
+	docker push "dbrepo/data-db-sidecar:${TAG}"
+	docker push "${AZURE_REPO}/dbrepo/data-db-sidecar:${TAG}"
+
 release-metadata-service: tag-metadata-service
 	docker push "dbrepo/metadata-service:${TAG}"
 	docker push "${AZURE_REPO}/dbrepo/metadata-service:${TAG}"
diff --git a/docker-compose.yml b/docker-compose.yml
index 623b0b24d92f20cfbbc1d7b150a1b513cf178a4d..76f5f529e4de97adfb46c5dc648519d7fd110ed5 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -11,9 +11,9 @@ volumes:
   broker-service-data:
   upload-service-data:
   search-db-data:
+  storage-service-data:
 
 services:
-
   dbrepo-metadata-db:
     restart: "no"
     container_name: dbrepo-metadata-db
@@ -75,21 +75,6 @@ services:
     logging:
       driver: json-file
 
-  dbrepo-upload-service:
-    restart: "no"
-    container_name: dbrepo-upload-service
-    hostname: upload-service
-    image: docker.io/tusproject/tusd:v1.12
-    ports:
-      - "1080:1080"
-    command:
-      - "--base-path=/api/upload/files/"
-    volumes:
-      - upload-service-data:/data
-      - "${SHARED_FILESYSTEM:-/tmp}:/srv/tusd-data/data"
-    logging:
-      driver: json-file
-
   dbrepo-authentication-service:
     restart: "no"
     container_name: dbrepo-authentication-service
@@ -192,7 +177,9 @@ services:
     ports:
       - "5000:5000"
     environment:
-      SHARED_FILESYSTEM: "${SHARED_FILESYSTEM:-/tmp}"
+      S3_STORAGE_ENDPOINT: "${STORAGE_ENDPOINT:-http://storage-service:9000}"
+      S3_ACCESS_KEY_ID: "${STORAGE_USERNAME:-minioadmin}"
+      S3_SECRET_ACCESS_KEY: ${STORAGE_PASSWORD:-minioadmin}
     volumes:
       - "${SHARED_FILESYSTEM:-/tmp}:/tmp"
     healthcheck:
@@ -261,6 +248,26 @@ services:
       FLASK_DEBUG: ${SEARCH_DEBUG_MODE:-true}
       OPENSEARCH_HOST: ${OPENSEARCH_HOST:-dbrepo-search-db}
 
+  dbrepo-data-db-sidecar:
+    restart: "no"
+    container_name: dbrepo-data-db-sidecar
+    hostname: data-db-sidecar
+    image: docker.io/dbrepo/data-db-sidecar:latest
+    ports:
+      - "3305:3305"
+    environment:
+      FLASK_DEBUG: ${SEARCH_DEBUG_MODE:-true}
+      S3_STORAGE_ENDPOINT: "${STORAGE_ENDPOINT:-http://storage-service:9000}"
+      S3_ACCESS_KEY_ID: "${STORAGE_USERNAME:-minioadmin}"
+      S3_SECRET_ACCESS_KEY: ${STORAGE_PASSWORD:-minioadmin}
+    volumes:
+      - "${SHARED_FILESYSTEM:-/tmp}:/tmp"
+    healthcheck:
+      test: curl -sSL 127.0.0.1:5000/health | jq .status | grep "UP" || exit 1
+      interval: 10s
+      timeout: 5s
+      retries: 12
+
   dbrepo-ui:
     restart: "no"
     container_name: dbrepo-ui
@@ -281,14 +288,17 @@ services:
       ICON: "${ICON:-/favicon.ico}"
       DBREPO_CLIENT_ID: "${DBREPO_CLIENT_ID:-dbrepo-client}"
       DBREPO_CLIENT_SECRET: "${DBREPO_CLIENT_SECRET:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG}"
-      UPLOAD_PATH: "${UPLOAD_PATH:-/tmp/}"
+      S3_STORAGE_HOSTNAME: "${STORAGE_HOSTNAME:-storage-service}"
+      S3_STORAGE_PORT: "${STORAGE_PORT:-9000}"
+      S3_ACCESS_KEY_ID: "${STORAGE_USERNAME:-minioadmin}"
+      S3_SECRET_ACCESS_KEY: ${STORAGE_PASSWORD:-minioadmin}
       FORCE_SSL: "${FORCE_SSL:-false}"
       DOI_URL: "${DOI_URL:-https://doi.org}"
     depends_on:
       dbrepo-search-service:
         condition: service_started
-      dbrepo-upload-service:
-        condition: service_started
+      dbrepo-storage-service:
+        condition: service_healthy
     logging:
       driver: json-file
 
@@ -333,6 +343,43 @@ services:
     logging:
       driver: json-file
 
+  dbrepo-search-db-init:
+    restart: "no"
+    container_name: dbrepo-search-db-init
+    hostname: search-db-init
+    image: docker.io/dbrepo/search-db-init:latest
+    environment:
+      OPENSEARCH_HOST: ${SEARCH_DB_HOST:-http://search-db:9200}
+      CURL_EXTRA_ARGS: ${SEARCH_DB_EXTRA_ARGS:-}
+    depends_on:
+      dbrepo-search-db:
+        condition: service_healthy
+    logging:
+      driver: json-file
+
+  dbrepo-storage-service:
+    restart: "no"
+    container_name: dbrepo-storage-service
+    hostname: storage-service
+    image: docker.io/bitnami/minio:2023-debian-11
+    environment:
+      MINIO_ROOT_USER: "${STORAGE_USERNAME:-minioadmin}"
+      MINIO_ROOT_PASSWORD: "${STORAGE_PASSWORD:-minioadmin}"
+      MINIO_DEFAULT_BUCKETS: "${STORAGE_DBREPO_BUCKET:-dbrepo-upload:upload,dbrepo-download:download}"
+      MINIO_REGION_NAME: "${STORAGE_REGION_NAME:-eu-west-1}"
+      MINIO_BROWSER_REDIRECT_URL: "${STORAGE_BASE_URL:-http://localhost/admin/storage/}"
+    ports:
+      - 9000:9000
+    healthcheck:
+      test: [ "CMD", "mc", "ready", "local" ]
+      interval: 5s
+      timeout: 5s
+      retries: 5
+    volumes:
+      - storage-service-data:/bitnami/minio/data
+    logging:
+      driver: json-file
+
   dbrepo-mirror-service:
     restart: "no"
     container_name: dbrepo-mirror-service