diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1588d18f96528f1e4be991b55bcf5d8d77d1f939..3f797b1041943461a5974f0bd339fbe6480e951c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,7 +3,7 @@ include:
   - remote: https://open.greenhost.net/stackspin/stackspin/-/raw/main/.gitlab/ci_templates/dummy_job.yml
   - template: 'Workflows/MergeRequest-Pipelines.gitlab-ci.yml'
 
-.use-kubernetes:
+.use_kubernetes:
   image:
     name: alpine/k8s:1.22.6
     entrypoint: ["/bin/sh", "-c"]
@@ -20,6 +20,16 @@ include:
       - values.yaml
       - Chart.yaml
 
+.delete_helmrelease:
+  stage: install-helm-chart
+  script:
+    - cd ${CHART_DIR:-"."}
+    - ./fully-delete-helmrelease.sh "nc$CI_MERGE_REQUEST_IID" "nc$CI_MERGE_REQUEST_IID"
+    - kubectl delete namespace "nc$CI_MERGE_REQUEST_IID"
+  extends:
+    - .use_kubernetes
+    - .chart_changes_rules
+
 stages:
   - lint-helm-chart
   - install-helm-chart
@@ -30,23 +40,24 @@ stages:
 
 variables:
   CHART_NAME: nextcloud-onlyoffice
-  RELEASE_NAME: "nc$CI_MERGE_REQUEST_IID"
 
-delete-helmrelease:
-  stage: install-helm-chart
-  script:
-    - cd ${CHART_DIR:-"."}
-    - ./fully-delete-helmrelease.sh "$RELEASE_NAME"
-  environment:
-    name: helmrelease/$RELEASE_NAME
-    action: stop
+pre-install-delete-helmrelease:
   extends:
-    - .use-kubernetes
-    - .chart_changes_rules
+    - .delete_helmrelease
   # This job will fail if a helmrelease didn't exist (yet). For example in a
   # first pipeline for an MR.
   allow_failure: true
 
+# This will clean up helmreleases after MRs have been merged, or after some time
+post-install-delete-helmrelease:
+  extends:
+    - .delete_helmrelease
+  # Gets triggered by on_stop of install-helmrelease, or manually
+  when: manual
+  environment:
+    name: helmrelease/nc$CI_MERGE_REQUEST_IID
+    action: stop
+
 install-helmrelease:
   stage: install-helm-chart
   needs:
@@ -54,31 +65,32 @@ install-helmrelease:
     - job: lint-helm
     # We can't install if there's still an installation from a previous run
     # present.
-    - job: delete-helmrelease
+    - job: pre-install-delete-helmrelease
   script:
     - cd ${CHART_DIR:-"."}
     - cp values-local.yaml.example values-ci.yaml
     # This sets the domains to files-MR_ID.gitlab.stackspin.net and
     # office-MR_ID.gitlab.stackspin.net
-    - sed -i "s/\.your\.domain/-$RELEASE_NAME.gitlab.stackspin.net/" values-ci.yaml
+    - sed -i "s/\.your\.domain/-nc$CI_MERGE_REQUEST_IID.gitlab.stackspin.net/" values-ci.yaml
     # Make sure TLS certificate secrets for different MRs do not clash
-    - sed -i "s/files-cert/files-cert-$RELEASE_NAME/" values-ci.yaml
-    - sed -i "s/office-cert/office-cert-$RELEASE_NAME/" values-ci.yaml
-    - helm install --wait "$RELEASE_NAME" . -f values-ci.yaml
+    - sed -i "s/files-cert/files-cert-nc$CI_MERGE_REQUEST_IID/" values-ci.yaml
+    - sed -i "s/office-cert/office-cert-nc$CI_MERGE_REQUEST_IID/" values-ci.yaml
+    - kubectl create namespace "nc$CI_MERGE_REQUEST_IID"
+    - helm install -n nc$CI_MERGE_REQUEST_IID --wait "nc$CI_MERGE_REQUEST_IID" . -f values-ci.yaml
   environment:
-    name: helmrelease/$RELEASE_NAME
-    url: https://files-$RELEASE_NAME.gitlab.stackspin.net
+    name: helmrelease/nc$CI_MERGE_REQUEST_IID
+    url: https://files-nc$CI_MERGE_REQUEST_IID.gitlab.stackspin.net
     auto_stop_in: 1 week
-    on_stop: delete-helmrelease
+    on_stop: post-install-delete-helmrelease
   extends:
-    - .use-kubernetes
+    - .use_kubernetes
     - .chart_changes_rules
 
 test-helm-chart:
   stage: test-helm-chart
   script:
     - cd ${CHART_DIR:-"."}
-    - helm test --logs "$RELEASE_NAME"
+    - helm test -n nc$CI_MERGE_REQUEST_IID --logs "nc$CI_MERGE_REQUEST_IID"
   extends:
-    - .use-kubernetes
+    - .use_kubernetes
     - .chart_changes_rules
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d31e7c426532dd378048fc320a60a6c3b6a20d50..84f5f49e297f7f12c0ac39e98c8e76830bc7a128 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+## [0.8.0] - 2022-05-04
+
+* Made sure the chart can be installed twice into the same namespace
+  * **BREAKING**: You need to now specify the ONLYOFFICE database password under 
+    `global.onlyofficeDb.password`. If you have overriden other values from
+    `onlyoffice.database`, they should also move to `global.onlyofficeDb`.
+
 ## [0.7.39] - 2022-04-29
 
 * Rename configMap to prevent helmRelease to fail when nextcloud.configs
diff --git a/Chart.yaml b/Chart.yaml
index 88c5b3807f53a6a2fa14fa64fc2129c19e7aed9f..dcb7c010b848908ed3e9b79029bee34af9473e9c 100644
--- a/Chart.yaml
+++ b/Chart.yaml
@@ -3,7 +3,7 @@ apiVersion: v2
 description: |
   A helm chart for installing NextCloud and setting up ONLYOFFICE integration
 name: nextcloud-onlyoffice
-version: 0.7.40
+version: 0.8.0
 appVersion: NC-23.0.3-OO-7.0.1.37
 icon: https://cdn.rawgit.com/docker-library/docs/defa5ffc7123177acd60ddef6e16bddf694cc35f/nextcloud/logo.svg
 dependencies:
diff --git a/fully-delete-helmrelease.sh b/fully-delete-helmrelease.sh
index 59010db490fc25f79c4ab9146cbab6a4e76dbf8c..9fd36c2449db5becda0d3f0c85b25d72d0138301 100755
--- a/fully-delete-helmrelease.sh
+++ b/fully-delete-helmrelease.sh
@@ -1,18 +1,19 @@
 #! /usr/bin/env bash
 
-if [ -z "$1" ]; then
-    echo "Usage: ./fully-delete-chart RELEASE_NAME"
+if [ -z "$2" ]; then
+    echo "Usage: ./fully-delete-chart NAMESPACE RELEASE_NAME"
     exit 1
 else
-    release="$1"
+    namespace="$1"
+    release="$2"
 fi
 
-kubectl delete pod "$release-onlyoffice-documentserver-taiko-test"
+kubectl delete pod -n "$namespace" "$release-onlyoffice-documentserver-taiko-test"
 
-kubectl delete job "$release-setup-apps"
+kubectl delete job -n "$namespace" "$release-setup-apps"
 
 # This command can fail, but that is not a problem
-kubectl delete pvc \
+kubectl delete pvc -n "$namespace" \
     "$release-nextcloud-nextcloud" \
     "data-$release-rabbitmq-0" \
     "redis-data-$release-redis-master-0" \
@@ -20,13 +21,13 @@ kubectl delete pvc \
     "redis-data-$release-redis-slave-1" \
     "data-$release-mariadb-0"
 
-helm delete --wait "$release"
+helm delete -n "$namespace" --wait "$release"
 
-output=$(kubectl get pod -l "app.kubernetes.io/instance=$release")
+output=$(kubectl get pod -n "$namespace" -l "app.kubernetes.io/instance=$release")
 until [ "$output" == "" ]
 do
     echo "waiting for pods to be deleted, pods still running:"
     echo "$output"
     sleep 5
-    output=$(kubectl get pod -l "app.kubernetes.io/instance=$release")
+    output=$(kubectl get pod -n "$namespace" -l "app.kubernetes.io/instance=$release")
 done
diff --git a/templates/nextcloud-mariadb-initdbscripts.yaml b/templates/nextcloud-mariadb-initdbscripts.yaml
deleted file mode 100644
index 8045598ed2e5fe4778be94441cc4053ad9ff08df..0000000000000000000000000000000000000000
--- a/templates/nextcloud-mariadb-initdbscripts.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-apiVersion: v1
-kind: ConfigMap
-metadata:
-  name: "nextcloud-mariadb-initdbscripts"
-data:
-  setup.sql: |
-    CREATE USER {{ .Values.onlyoffice.database.user }} IDENTIFIED BY '{{ .Values.onlyoffice.database.password }}';
-    CREATE DATABASE {{ .Values.onlyoffice.database.name }};
-    GRANT ALL PRIVILEGES ON {{ .Values.onlyoffice.database.name }}.* TO '{{ .Values.onlyoffice.database.user }}'@'%';
diff --git a/templates/onlyoffice-database-secret.yaml b/templates/onlyoffice-database-secret.yaml
index e78edcbb4e6fc102d6957a668195ca9e40ec3e6f..eb2f9222f003d0247fc30c7c93c35ae9f55a06d8 100644
--- a/templates/onlyoffice-database-secret.yaml
+++ b/templates/onlyoffice-database-secret.yaml
@@ -4,4 +4,4 @@ type: Opaque
 metadata:
   name: "{{ .Release.Name }}-onlyoffice-database"
 stringData:
-  database-password: "{{ .Values.onlyoffice.database.password }}"
+  database-password: "{{ .Values.global.onlyofficeDb.password }}"
diff --git a/templates/onlyoffice-deployment.yaml b/templates/onlyoffice-deployment.yaml
index cf1413d724d371f36bcf48f4e967f24e186fa1f6..ab6e3e3723cb8cd3e74dbb7edb3f752d5906512e 100644
--- a/templates/onlyoffice-deployment.yaml
+++ b/templates/onlyoffice-deployment.yaml
@@ -85,18 +85,18 @@ spec:
             - name: DB_TYPE
               value: "mariadb"
             - name: DB_USER
-              value: "{{ .Values.onlyoffice.database.user }}"
+              value: "{{ .Values.global.onlyofficeDb.user }}"
             - name: DB_PWD
               valueFrom:
                 secretKeyRef:
                   name: "{{ .Release.Name }}-onlyoffice-database"
                   key: "database-password"
             - name: DB_HOST
-              value: {{ .Values.onlyoffice.database.host | default (printf "%s-mariadb" .Release.Name) }}
+              value: {{ .Values.global.onlyofficeDb.host | default (printf "%s-mariadb" .Release.Name) }}
             - name: DB_PORT
-              value: "{{ .Values.onlyoffice.database.port }}"
+              value: "{{ .Values.global.onlyofficeDb.port }}"
             - name: DB_NAME
-              value: "{{ .Values.onlyoffice.database.name }}"
+              value: "{{ .Values.global.onlyofficeDb.name }}"
             - name: REDIS_SERVER_HOST
               value: "{{ .Release.Name }}-redis-master"
             - name: REDIS_SERVER_PORT
diff --git a/values-local.yaml.example b/values-local.yaml.example
index e2814d79d70f66eeb580053881e15a90b75ec784..070062e667ecb7464a8ea4683edf1fd4b2e04733 100644
--- a/values-local.yaml.example
+++ b/values-local.yaml.example
@@ -38,6 +38,10 @@ nextcloud:
   #   enabled: true
   #   size: 2Gi
 
+global:
+  onlyofficeDb:
+    password: CHANGE_ME
+
 onlyoffice:
   server_name: "office.your.domain"
   jwtSecret: CHANGE_ME
@@ -49,8 +53,6 @@ onlyoffice:
       - hosts:
           - "office.your.domain"
         secretName: office-cert
-  database:
-    password: CHANGE_ME
 
 rabbitmq:
   auth:
diff --git a/values.yaml b/values.yaml
index da811d2e4d0d3895e4b95107452ab2f1923c36a3..bf6e26e40f164e5ea15033801cc53efaf3323e41 100644
--- a/values.yaml
+++ b/values.yaml
@@ -13,7 +13,12 @@ nextcloud:
     volumePermissions:
       image:
         pullSecrets: []
-    initdbScriptsConfigMap: "nextcloud-mariadb-initdbscripts"
+    # initdbScriptsConfigMap: "nextcloud-mariadb-initdbscripts"
+    initdbScripts:
+      setup.sql: |
+        CREATE USER {{ .Values.global.onlyofficeDb.user }} IDENTIFIED BY '{{ .Values.global.onlyofficeDb.password }}';
+        CREATE DATABASE {{ .Values.global.onlyofficeDb.name }};
+        GRANT ALL PRIVILEGES ON {{ .Values.global.onlyofficeDb.name }}.* TO '{{ .Values.global.onlyofficeDb.user }}'@'%';
 
   # Use 2 GB of storage for NC storage (maybe make configurable later?)
   persistence:
@@ -43,6 +48,15 @@ setupApps:
 mariadb:
   enabled: true
 
+global:
+  onlyofficeDb:
+    # `host` defaults to "{{ .Release.Name }}-mariadb"
+    name: onlyoffice
+    port: 3306
+    user: onlyoffice
+    # password:
+
+
 onlyoffice:
   # Default values for onlyoffice.
 
@@ -102,12 +116,6 @@ onlyoffice:
     accessMode: ReadWriteOnce
     size: 2Gi
 
-  database:
-    # `host` defaults to "{{ .Release.Name }}-mariadb"
-    name: onlyoffice
-    port: 3306
-    user: onlyoffice
-    # password:
 
   nameOverride: ''
   fullnameOverride: ''