diff --git a/nextcloud-onlyoffice/templates/_nextcloud-specs.tpl b/nextcloud-onlyoffice/templates/_nextcloud-specs.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..f77fb433da6b582f045e0f9a17dbc8695abb138a
--- /dev/null
+++ b/nextcloud-onlyoffice/templates/_nextcloud-specs.tpl
@@ -0,0 +1,89 @@
+{{/* Change the user and group to www-data as required by occ */}}
+{{- define "nextcloud-onlyoffice.securityContext" }}
+fsGroup: 33
+runAsUser: 33
+runAsGroup: 33
+{{- end}}
+{{/* Add volume mounts that are also used by the nextcloud container */}}
+{{/* and the configMap that contains job specific content */}}
+{{- define "nextcloud-onlyoffice.volumeMounts" }}
+- name: nextcloud-data
+  mountPath: /var/www/html/
+  subPath: root
+- name: nextcloud-data
+  mountPath: /var/www/html/data
+  subPath: data
+- name: nextcloud-data
+  mountPath: /var/www/html/config
+  subPath: config
+- name: nextcloud-data
+  mountPath: /var/www/html/custom_apps
+  subPath: custom_apps
+- name: nextcloud-data
+  mountPath: /var/www/html/themes
+  subPath: themes
+- name: onlyoffice-config
+  mountPath: /var/local
+{{- end }}
+{{/* Set environment variables that are needed for the nextcloud setup */}}
+{{- define "nextcloud-onlyoffice.env" }}
+{{- if .Values.nextcloud.internalDatabase.enabled }}
+- name: SQLITE_DATABASE
+  value: {{ .Values.nextcloud.internalDatabase.name | quote }}
+{{- else if .Values.nextcloud.mariadb.enabled }}
+- name: MYSQL_HOST
+  value: {{ template "nextcloud.mariadb.fullname" . }}
+- name: MYSQL_DATABASE
+  value: {{ .Values.nextcloud.mariadb.db.name | quote }}
+- name: MYSQL_USER
+  valueFrom:
+    secretKeyRef:
+      name: {{ printf "%s-%s" .Release.Name "db" }}
+      key: db-username
+- name: MYSQL_PASSWORD
+  valueFrom:
+    secretKeyRef:
+      name: {{ printf "%s-%s" .Release.Name "db" }}
+      key: db-password
+{{- else }}
+- name: MYSQL_HOST
+  value: {{ .Values.nextcloud.externalDatabase.host | quote }}
+- name: MYSQL_DATABASE
+  value: {{ .Values.nextcloud.externalDatabase.database | quote }}
+- name: MYSQL_USER
+  valueFrom:
+    secretKeyRef:
+      name: {{ printf "%s-%s" .Release.Name "db" }}
+      key: db-username
+- name: MYSQL_PASSWORD
+  valueFrom:
+    secretKeyRef:
+      name: {{ printf "%s-%s" .Release.Name "db" }}
+      key: db-password
+{{- end }}
+- name: NEXTCLOUD_ADMIN_USER
+  valueFrom:
+    secretKeyRef:
+      name: {{ printf "%s-%s" .Release.Name "nextcloud" }}
+      key: nextcloud-username
+- name: NEXTCLOUD_ADMIN_PASSWORD
+  valueFrom:
+    secretKeyRef:
+      name: {{ printf "%s-%s" .Release.Name "nextcloud" }}
+      key: nextcloud-password
+- name: NEXTCLOUD_TRUSTED_DOMAINS
+  value: {{ .Values.nextcloud.nextcloud.host }}
+{{- end }}
+{{/* Add volumes that correspond to the volume mounts used in this tpl */}}
+{{- define "nextcloud-onlyoffice.volumes" }}
+- name: nextcloud-data
+{{- if .Values.nextcloud.persistence.enabled }}
+  persistentVolumeClaim:
+    claimName: {{ if .Values.nextcloud.persistence.existingClaim }}{{ .Values.nextcloud.persistence.existingClaim }}{{- else }}{{ printf "%s-%s" .Release.Name "nextcloud-nextcloud" }}{{- end }}
+{{- else }}
+  emptyDir: {}
+{{- end }}
+- name: onlyoffice-config
+  configMap:
+    name: {{ .Release.Name }}-onlyoffice-config
+{{- end}}
diff --git a/nextcloud-onlyoffice/templates/job-configure-nextcloud.yaml b/nextcloud-onlyoffice/templates/job-configure-nextcloud.yaml
index c0f00069fd893afe2a19e44faacd9ea0777d8a80..c8856f1a2a5adb23d347641b77ae08c267603522 100644
--- a/nextcloud-onlyoffice/templates/job-configure-nextcloud.yaml
+++ b/nextcloud-onlyoffice/templates/job-configure-nextcloud.yaml
@@ -20,10 +20,7 @@ spec:
         helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     spec:
       restartPolicy: Never
-      securityContext:
-        fsGroup: 33
-        runAsUser: 33
-        runAsGroup: 33
+      securityContext: {{- include "nextcloud-onlyoffice.securityContext" . | indent 8 }}
       containers:
       - name: {{ .Release.Name }}-configure-nextcloud-job
         image: {{ .Values.nextcloud.image.repository }}:{{ .Values.nextcloud.image.tag }}
@@ -32,79 +29,6 @@ spec:
           - "/var/www/html/occ"
           - "config:import"
           - "/var/local/config.json"
-        volumeMounts:
-        - name: nextcloud-data
-          mountPath: /var/www/html/
-          subPath: root
-        - name: nextcloud-data
-          mountPath: /var/www/html/data
-          subPath: data
-        - name: nextcloud-data
-          mountPath: /var/www/html/config
-          subPath: config
-        - name: nextcloud-data
-          mountPath: /var/www/html/custom_apps
-          subPath: custom_apps
-        - name: nextcloud-data
-          mountPath: /var/www/html/themes
-          subPath: themes
-        - name: onlyoffice-config
-          mountPath: /var/local
-        env:
-        {{- if .Values.nextcloud.internalDatabase.enabled }}
-        - name: SQLITE_DATABASE
-          value: {{ .Values.nextcloud.internalDatabase.name | quote }}
-        {{- else if .Values.nextcloud.mariadb.enabled }}
-        - name: MYSQL_HOST
-          value: {{ template "nextcloud.mariadb.fullname" . }}
-        - name: MYSQL_DATABASE
-          value: {{ .Values.nextcloud.mariadb.db.name | quote }}
-        - name: MYSQL_USER
-          valueFrom:
-            secretKeyRef:
-              name: {{ printf "%s-%s" .Release.Name "db" }}
-              key: db-username
-        - name: MYSQL_PASSWORD
-          valueFrom:
-            secretKeyRef:
-              name: {{ printf "%s-%s" .Release.Name "db" }}
-              key: db-password
-        {{- else }}
-        - name: MYSQL_HOST
-          value: {{ .Values.nextcloud.externalDatabase.host | quote }}
-        - name: MYSQL_DATABASE
-          value: {{ .Values.nextcloud.externalDatabase.database | quote }}
-        - name: MYSQL_USER
-          valueFrom:
-            secretKeyRef:
-              name: {{ printf "%s-%s" .Release.Name "db" }}
-              key: db-username
-        - name: MYSQL_PASSWORD
-          valueFrom:
-            secretKeyRef:
-              name: {{ printf "%s-%s" .Release.Name "db" }}
-              key: db-password
-        {{- end }}
-        - name: NEXTCLOUD_ADMIN_USER
-          valueFrom:
-            secretKeyRef:
-              name: {{ printf "%s-%s" .Release.Name "nextcloud" }}
-              key: nextcloud-username
-        - name: NEXTCLOUD_ADMIN_PASSWORD
-          valueFrom:
-            secretKeyRef:
-              name: {{ printf "%s-%s" .Release.Name "nextcloud" }}
-              key: nextcloud-password
-        - name: NEXTCLOUD_TRUSTED_DOMAINS
-          value: {{ .Values.nextcloud.nextcloud.host }}
-      volumes:
-      - name: nextcloud-data
-      {{- if .Values.nextcloud.persistence.enabled }}
-        persistentVolumeClaim:
-          claimName: {{ if .Values.nextcloud.persistence.existingClaim }}{{ .Values.nextcloud.persistence.existingClaim }}{{- else }}{{ printf "%s-%s" .Release.Name "nextcloud-nextcloud" }}{{- end }}
-      {{- else }}
-        emptyDir: {}
-      {{- end }}
-      - name: onlyoffice-config
-        configMap:
-          name: {{ .Release.Name }}-onlyoffice-config
+        volumeMounts: {{- include "nextcloud-onlyoffice.volumeMounts" . | indent 8 }}
+        env: {{- include "nextcloud-onlyoffice.env" . | indent 8 }}
+      volumes: {{- include "nextcloud-onlyoffice.volumes" . | indent 6 }}
diff --git a/nextcloud-onlyoffice/templates/job-register-onlyoffice.yaml b/nextcloud-onlyoffice/templates/job-register-onlyoffice.yaml
index ce0372503a62e61639df807fbb35c9140655a4dc..0f51b16a4b340cef647a2c1ece8aae0e5d2dcd44 100644
--- a/nextcloud-onlyoffice/templates/job-register-onlyoffice.yaml
+++ b/nextcloud-onlyoffice/templates/job-register-onlyoffice.yaml
@@ -22,91 +22,13 @@ spec:
         helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
     spec:
       restartPolicy: Never
-      securityContext:
-        fsGroup: 33
-        runAsUser: 33
-        runAsGroup: 33
+      securityContext: {{- include "nextcloud-onlyoffice.securityContext" . | indent 8 }}
       containers:
       - name: {{ .Release.Name }}-register-onlyoffice-job
         image: {{ .Values.nextcloud.image.repository }}:{{ .Values.nextcloud.image.tag }}
         command:
           - "/bin/bash"
           - "/var/local/onlyoffice-setup.sh"
-        volumeMounts:
-        - name: nextcloud-data
-          mountPath: /var/www/html/
-          subPath: root
-        - name: nextcloud-data
-          mountPath: /var/www/html/data
-          subPath: data
-        - name: nextcloud-data
-          mountPath: /var/www/html/config
-          subPath: config
-        - name: nextcloud-data
-          mountPath: /var/www/html/custom_apps
-          subPath: custom_apps
-        - name: nextcloud-data
-          mountPath: /var/www/html/themes
-          subPath: themes
-        - name: onlyoffice-config
-          mountPath: /var/local
-        env:
-        {{- if .Values.nextcloud.internalDatabase.enabled }}
-        - name: SQLITE_DATABASE
-          value: {{ .Values.nextcloud.internalDatabase.name | quote }}
-        {{- else if .Values.nextcloud.mariadb.enabled }}
-        - name: MYSQL_HOST
-          value: {{ template "nextcloud.mariadb.fullname" . }}
-        - name: MYSQL_DATABASE
-          value: {{ .Values.nextcloud.mariadb.db.name | quote }}
-        - name: MYSQL_USER
-          valueFrom:
-            secretKeyRef:
-              name: {{ printf "%s-%s" .Release.Name "db" }}
-              key: db-username
-        - name: MYSQL_PASSWORD
-          valueFrom:
-            secretKeyRef:
-              name: {{ printf "%s-%s" .Release.Name "db" }}
-              key: db-password
-        {{- else }}
-        - name: MYSQL_HOST
-          value: {{ .Values.nextcloud.externalDatabase.host | quote }}
-        - name: MYSQL_DATABASE
-          value: {{ .Values.nextcloud.externalDatabase.database | quote }}
-        - name: MYSQL_USER
-          valueFrom:
-            secretKeyRef:
-              name: {{ printf "%s-%s" .Release.Name "db" }}
-              key: db-username
-        - name: MYSQL_PASSWORD
-          valueFrom:
-            secretKeyRef:
-              name: {{ printf "%s-%s" .Release.Name "db" }}
-              key: db-password
-        {{- end }}
-        - name: NEXTCLOUD_ADMIN_USER
-          valueFrom:
-            secretKeyRef:
-              name: {{ printf "%s-%s" .Release.Name "nextcloud" }}
-              key: nextcloud-username
-        - name: NEXTCLOUD_ADMIN_PASSWORD
-          valueFrom:
-            secretKeyRef:
-              name: {{ printf "%s-%s" .Release.Name "nextcloud" }}
-              key: nextcloud-password
-        - name: NEXTCLOUD_TRUSTED_DOMAINS
-          value: {{ .Values.nextcloud.nextcloud.host }}
-      volumes:
-      - name: nextcloud-data
-      {{- if .Values.nextcloud.persistence.enabled }}
-        persistentVolumeClaim:
-          claimName: {{ if .Values.nextcloud.persistence.existingClaim }}{{ .Values.nextcloud.persistence.existingClaim }}{{- else }}{{ printf "%s-%s" .Release.Name "nextcloud-nextcloud" }}{{- end }}
-      {{- else }}
-        emptyDir: {}
-      {{- end }}
-      - name: onlyoffice-config
-        configMap:
-          name: {{ .Release.Name }}-onlyoffice-config
-
-
+        volumeMounts: {{- include "nextcloud-onlyoffice.volumeMounts" . | indent 8 }}
+        env: {{- include "nextcloud-onlyoffice.env" . | indent 8 }}
+      volumes: {{- include "nextcloud-onlyoffice.volumes" . | indent 6 }}