diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cc5419fd2c8a4b493d82dac8546a95a3d379be6f..0b2cd9408b1ae547fe1a4623c92bc388a3493a36 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -13,10 +13,20 @@ variables:
 
 snapshot:
   stage: deploy
-  image: harbor.contezza.nl/tooling/docker-npm-maven:1.1.0
+  image: harbor.contezza.nl/tooling/docker-npm-maven:1.0.8
+  before_script:
+    - mkdir -p $HOME/.docker
+    - echo $DOCKER_AUTH_CONFIG > $HOME/.docker/config.json
   script:
+    - docker login -u $CNTZ_DOCKER_QUAY_USER -p $CNTZ_DOCKER_QUAY_PASSWD quay.io
+    - docker login -u $CNTZ_DOCKER_HARBOR_USER -p $CNTZ_DOCKER_HARBOR_PASSWD harbor.contezza.nl
+    - git config --global advice.detachedHead false
     - git checkout -B $CI_COMMIT_REF_NAME
-    - mvn -f backend deploy -Pexclude-resources,package-projects,docker-build-release -Dimage.version=latest -DskipTests=true $MAVEN_CLI_OPTS
+    - npm config set @contezza:registry https://nexus.contezza.nl/repository/npm-releases/
+    - npm config set //nexus.contezza.nl/repository/npm-releases/:_authToken ${NPM_TOKEN}
+    - npm config set legacy-peer-deps true
+    - node -v
+    - mvn deploy -Pexclude-resources,package-projects,set-version,docker-build-release -DskipTests=true $MAVEN_CLI_OPTS
   only:
     variables:
       - $CI_COMMIT_MESSAGE =~ /deploy-snapshot/
@@ -34,13 +44,10 @@ build_release:
     - docker login -u $CNTZ_DOCKER_HARBOR_USER -p $CNTZ_DOCKER_HARBOR_PASSWD harbor.contezza.nl
     - git config --global advice.detachedHead false
     - git checkout -B $CI_COMMIT_REF_NAME
-    - cd frontend
     - npm config set @contezza:registry https://nexus.contezza.nl/repository/npm-releases/
     - npm config set //nexus.contezza.nl/repository/npm-releases/:_authToken ${NPM_TOKEN}
     - npm config set legacy-peer-deps true
     - node -v
-    - npm i -g nx && npm ci
-    - cd ..
     - mvn release:prepare release:perform release:clean deploy -Darguments="-DskipTests=true" -Pexclude-resources,package-projects,set-version,docker-build-release $MAVEN_CLI_OPTS
   only:
     variables:
diff --git a/README.md b/README.md
index 3c01f19dee7c9dcfdf7a0fba0f3849dbc5d1ca2f..3db54d17c8a06a7a7eb160507ad75c5b86c70f3b 100644
--- a/README.md
+++ b/README.md
@@ -80,7 +80,7 @@ Binnen deze plugin zijn de volgende Java beans gedefineerd voor gebruik in proce
 - SimpleDestructionBean: Dit geeft de mogelijkheid om vanuit het vernietigingsproces een notificatie van een nieuwe taak te sturen, en commentaar vauit een taak te beheren.
 - TezzaProcessBean: Dit geeft de mogelijkheid om vanuit de standaard Tezza processen een notificatie van een nieuwe taak te sturen, en commentaar vauit een taak te beheren.
 
-## Listner
+## Listener
 
 De Tezza plugin bevat de camunda TaskListner FormFieldToLocalListner, die kan worden gebruikt om form fields van een taak over te zetten naar lokale variabelen van de taak.
 
@@ -106,7 +106,7 @@ Er worden binnen dit project enkele gzac dossiers beheerd. Deze zijn te vinden o
 
 _Voor lokale build_
 Voeg het project toe aan het profile 'copy-projects' in backend/pom.xml.
-Dit kan door aan de excecution van de plugin een element in de resources als onderstaand toe te voegen:
+Dit kan door aan de execution van de plugin een element in de resources als onderstaand toe te voegen:
 
 ```xml
 <execution>
@@ -131,7 +131,7 @@ Dit kan door aan de excecution van de plugin een element in de resources als ond
 </execution>
 ```
 
-hierbij is de directory in 'execution/configuration/resources/resource' de directory in 'backend/projects'
+Hierbij is de directory in 'execution/configuration/resources/resource' de directory in 'backend/projects'
 Elk project moet bestaan uit de volgende structuur:
 
 - project
@@ -145,6 +145,69 @@ Elk project moet bestaan uit de volgende structuur:
   -- process-document-link
   -- processlink
 
+_Voor release naar nexus_
+Om te zorgen dat het eerder gemaakte project naar nexus gepushed wordt. moet het eerst als een assembly aangemaakt worden. Dit gebeurd in twee stappen, met een assembly file in de projects folder, en met een verwijzing in de POM van de backend.
+
+Het assembly bestand wordt in backend/projects geplaats, en krijgt de naam van het dossier. Dus voor tezzaAlgemeen is dat 'projects/tezzaAlgemeen.xml' De XML hiervan is dan als volgt:
+
+```xml
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.2.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.2.0 http://maven.apache.org/xsd/assembly-2.2.0.xsd">
+    <id>tezzaAlgemeen</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+    <includeBaseDirectory>false</includeBaseDirectory>
+    <fileSets>
+        <fileSet>
+            <directory>projects/tezzaAlgemeen</directory>
+            <outputDirectory>/</outputDirectory>
+            <useDefaultExcludes>false</useDefaultExcludes>
+            <includes>
+                <include>**/*</include>
+            </includes>
+        </fileSet>
+    </fileSets>
+</assembly>
+```
+
+Hierbij is de directory de verwijzing naar de folder die als zip naar nexus moet, en id wordt de naam die in de POM wordt gebruikt voor het aanmaken van de zip.
+Via de include tag kan je ook nog verder specificeren wat wel en niet mee moet worden gepackaged, standaard is dat de volledige inhoud.
+
+In de POM van backend, moet het profile 'package-projects' worden gevonden. Hier worden de referenties naar de assembly files geplaatst, en zal de plugin de packages aanmaken. In het voorbeeld hieronder, moeten de referenties in een descriptor worden geplaatst.
+Het bestand wat wordt aangemaakt, zal er dan als volgt uit zien: tezza-gzac-backend-<version>-<assemblyId>.zip
+
+```xml
+<profile>
+    <id>package-projects</id>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>3.7.1</version>
+                <configuration>
+                    <descriptors>
+                        <descriptor>projects/tezzaAlgemeen.xml</descriptor>
+                        <descriptor>projects/destructionProcessDossier.xml</descriptor>
+                        <descriptor>projects/aanvraagEvenementenvergunning.xml</descriptor>
+                    </descriptors>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</profile>
+```
+
 # Versies
 
 Voor een overzicht van versiehistorie, bekijk de [Release notes](docs/src/docs/asciidoc/includes/_release_notes.adoc)
diff --git a/backend/pom.xml b/backend/pom.xml
index 176be4764a9419e1e7ce543bd7f9aefd0fa2419e..73167ab2fb8bac6aeaf841c5afe23888cbb4910b 100644
--- a/backend/pom.xml
+++ b/backend/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>nl.contezza.tezza.gzac</groupId>
         <artifactId>tezza-gzac</artifactId>
-        <version>0.5.1-SNAPSHOT</version>
+        <version>0.5.6-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -34,7 +34,7 @@
         <!-- Valitimo images -->
         <docker.gzac.backend.image.name>${image.registry}/base/rockylinux/8/openjdk/17</docker.gzac.backend.image.name>
         <docker.gzac.backend.image.version>latest</docker.gzac.backend.image.version>
-        <docker.gzac.frontend.image.version>0.4.1</docker.gzac.frontend.image.version>
+        <docker.gzac.frontend.image.version>0.5.1</docker.gzac.frontend.image.version>
 
         <docker.gzac.frontend.image>${image.registry}/contezza/tezza-gzac-frontend</docker.gzac.frontend.image>
         <docker.gzac.backend.image>openjdk</docker.gzac.backend.image>
@@ -552,7 +552,7 @@
                         </configuration>
                         <executions>
                             <execution>
-                                <id>copy-resources</id>
+                                <id>copy-resources-projects</id>
                                 <phase>validate</phase>
                                 <goals>
                                     <goal>copy-resources</goal>
diff --git a/backend/projects/tezzaAlgemeen/bpmn/documentGoedkeuring.bpmn b/backend/projects/tezzaAlgemeen/bpmn/documentGoedkeuring.bpmn
index 4dc7636552b6239bbcdfe5bb197979db4e27a983..adf011c1e63fab1df5d6b5c548075f21b79dc499 100644
--- a/backend/projects/tezzaAlgemeen/bpmn/documentGoedkeuring.bpmn
+++ b/backend/projects/tezzaAlgemeen/bpmn/documentGoedkeuring.bpmn
@@ -37,7 +37,7 @@
             targetRef="Activity_reviewDocument" />
         <bpmn:userTask id="Activity_reviewDocument" name="Review document"
             implementation="##unspecified" camunda:assignee="${bpm_assignee}"
-            camunda:candidateGroups="ROLE_USERS">
+            camunda:candidateGroups="GROUP_TEZZA_BEHEER">
             <bpmn:incoming>Flow_1d84dup</bpmn:incoming>
             <bpmn:incoming>Flow_0zncjt0</bpmn:incoming>
             <bpmn:outgoing>Flow_0uij1kv</bpmn:outgoing>
@@ -50,7 +50,7 @@
         </bpmn:serviceTask>
         <bpmn:userTask id="Activity_documentAfgekeurd" name="Document afgekeurd"
             implementation="##unspecified" camunda:assignee="${initiatorUser}"
-            camunda:candidateGroups="ROLE_USERS">
+            camunda:candidateGroups="GROUP_TEZZA_GEMEENTE">
             <bpmn:incoming>Flow_038n5p0</bpmn:incoming>
             <bpmn:outgoing>Flow_0zncjt0</bpmn:outgoing>
         </bpmn:userTask>
diff --git a/backend/projects/tezzaAlgemeen/form/documentGoedkeuring-start-form.json b/backend/projects/tezzaAlgemeen/form/documentGoedkeuring-start-form.json
index b7620b11fee1d097ac6163df35f3a634e11edc25..5944f3458dadf1431fb1ff8a170fdd6e731972b1 100644
--- a/backend/projects/tezzaAlgemeen/form/documentGoedkeuring-start-form.json
+++ b/backend/projects/tezzaAlgemeen/form/documentGoedkeuring-start-form.json
@@ -69,7 +69,7 @@
     {
       "key": "pv.bpm_assignee",
       "data": {
-        "url": "/api/v1/tezza/users",
+        "url": "/api/v1/tezza/group/GROUP_TEZZA_BEHEER/users",
         "headers": [{ "key": "", "value": "" }],
         "values": [{ "label": "", "value": "" }],
         "json": "",
diff --git a/backend/projects/tezzaAlgemeen/form/documentToevoegen-aanvullen-form.json b/backend/projects/tezzaAlgemeen/form/documentToevoegen-aanvullen-form.json
index 41e12db4799aa238e748eee385804b67ed462d7a..9a2198cea637f7ffa01917418594484c0ff693b9 100644
--- a/backend/projects/tezzaAlgemeen/form/documentToevoegen-aanvullen-form.json
+++ b/backend/projects/tezzaAlgemeen/form/documentToevoegen-aanvullen-form.json
@@ -1,952 +1,6 @@
 {
   "display": "form",
   "components": [
-    {
-      "key": "columns",
-      "type": "columns",
-      "input": false,
-      "label": "Columns",
-      "columns": [
-        {
-          "pull": 0,
-          "push": 0,
-          "size": "md",
-          "width": 6,
-          "offset": 0,
-          "components": [
-            {
-              "key": "pv.metadata_documenttype",
-              "data": {
-                "values": [
-                  { "label": "Beschrijving", "value": "Beschrijving" },
-                  { "label": "Rapport", "value": "Rapport" },
-                  { "label": "Tekening", "value": "Tekening" },
-                  { "label": "Certificaat", "value": "Certificaat" },
-                  { "label": "Verklaring", "value": "Verklaring" },
-                  { "label": "Software", "value": "Software" }
-                ],
-                "json": "",
-                "url": "",
-                "resource": "",
-                "custom": ""
-              },
-              "type": "select",
-              "input": true,
-              "label": "Documenttype",
-              "widget": "choicesjs",
-              "validate": {
-                "required": true,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "onlyAvailableItems": false
-              },
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_documenttype" },
-              "id": "e8tyjz4",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "dataSrc": "values",
-              "authenticate": false,
-              "ignoreCache": false,
-              "template": "<span>{{ item.label }}</span>",
-              "idPath": "id",
-              "clearOnRefresh": false,
-              "limit": 100,
-              "valueProperty": "",
-              "lazyLoad": true,
-              "filter": "",
-              "searchEnabled": true,
-              "searchDebounce": 0.3,
-              "searchField": "",
-              "minSearch": 0,
-              "readOnlyValue": false,
-              "selectFields": "",
-              "selectThreshold": 0.3,
-              "uniqueOptions": false,
-              "fuseOptions": { "include": "score", "threshold": 0.3 },
-              "indexeddb": { "filter": {} },
-              "customOptions": {},
-              "useExactSearch": false
-            },
-            {
-              "key": "pv.metadata_titel",
-              "type": "textfield",
-              "input": true,
-              "label": "Titel",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_titel" },
-              "applyMaskOn": "change",
-              "id": "eyuo1dk",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            },
-            {
-              "key": "pv.metadata_vertrouwelijkheidsniveau",
-              "data": {
-                "values": [
-                  { "label": "Openbaar", "value": "Openbaar" },
-                  { "label": "Vertrouwelijk", "value": "Openbaarertrouwelijk" }
-                ],
-                "json": "",
-                "url": "",
-                "resource": "",
-                "custom": ""
-              },
-              "type": "select",
-              "input": true,
-              "label": "Vertrouwelijkheidsniveau",
-              "widget": "choicesjs",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_vertrouwelijkheidsniveau" },
-              "id": "eavpapi",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "onlyAvailableItems": false
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "dataSrc": "values",
-              "authenticate": false,
-              "ignoreCache": false,
-              "template": "<span>{{ item.label }}</span>",
-              "idPath": "id",
-              "clearOnRefresh": false,
-              "limit": 100,
-              "valueProperty": "",
-              "lazyLoad": true,
-              "filter": "",
-              "searchEnabled": true,
-              "searchDebounce": 0.3,
-              "searchField": "",
-              "minSearch": 0,
-              "readOnlyValue": false,
-              "selectFields": "",
-              "selectThreshold": 0.3,
-              "uniqueOptions": false,
-              "fuseOptions": { "include": "score", "threshold": 0.3 },
-              "indexeddb": { "filter": {} },
-              "customOptions": {},
-              "useExactSearch": false
-            },
-            {
-              "key": "pv.metadata_auteur",
-              "type": "textfield",
-              "input": true,
-              "label": "Auteur",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_auteur" },
-              "applyMaskOn": "change",
-              "id": "e3prtw6",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            },
-            {
-              "key": "pv.metadata_actualiteit",
-              "data": {
-                "values": [
-                  { "label": "As-Built (waargenomen)", "value": "As-Built (waargenomen)" },
-                  { "label": "As-Built (afgeleid)", "value": "As-Built (afgeleid)" },
-                  { "label": "Deels As-Built", "value": "Deels As-Built" },
-                  { "label": "Historisch/verlopen", "value": "Historisch/verlopen" },
-                  { "label": "Deel historisch/verlopen", "value": "Deel historisch/verlopen" },
-                  { "label": "Onbekend", "value": "Onbekend" }
-                ],
-                "json": "",
-                "url": "",
-                "resource": "",
-                "custom": ""
-              },
-              "type": "select",
-              "input": true,
-              "label": "Actualiteit",
-              "widget": "choicesjs",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_actualiteit" },
-              "id": "eb0gu5g",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "onlyAvailableItems": false
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "dataSrc": "values",
-              "authenticate": false,
-              "ignoreCache": false,
-              "template": "<span>{{ item.label }}</span>",
-              "idPath": "id",
-              "clearOnRefresh": false,
-              "limit": 100,
-              "valueProperty": "",
-              "lazyLoad": true,
-              "filter": "",
-              "searchEnabled": true,
-              "searchDebounce": 0.3,
-              "searchField": "",
-              "minSearch": 0,
-              "readOnlyValue": false,
-              "selectFields": "",
-              "selectThreshold": 0.3,
-              "uniqueOptions": false,
-              "fuseOptions": { "include": "score", "threshold": 0.3 },
-              "indexeddb": { "filter": {} },
-              "customOptions": {},
-              "useExactSearch": false
-            },
-            {
-              "key": "pv.metadata_revisie",
-              "type": "textfield",
-              "input": true,
-              "label": "Revisie",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_revisie" },
-              "applyMaskOn": "change",
-              "id": "esh0p5l",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            }
-          ],
-          "currentWidth": 6
-        },
-        {
-          "pull": 0,
-          "push": 0,
-          "size": "md",
-          "width": 6,
-          "offset": 0,
-          "components": [
-            {
-              "key": "pv.metadata_documentdatumBeginGeldigheid",
-              "type": "datetime",
-              "input": true,
-              "label": "Documentdatum (Begin geldigheid)",
-              "format": "yyyy-MM-dd",
-              "widget": {
-                "type": "calendar",
-                "displayInTimezone": "viewer",
-                "locale": "nl",
-                "useLocaleSettings": false,
-                "allowInput": true,
-                "mode": "single",
-                "enableTime": false,
-                "noCalendar": false,
-                "format": "yyyy-MM-dd",
-                "hourIncrement": 1,
-                "minuteIncrement": 1,
-                "time_24hr": false,
-                "minDate": null,
-                "disableWeekends": false,
-                "disableWeekdays": false,
-                "maxDate": null
-              },
-              "tableView": false,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_documentdatumBeginGeldigheid" },
-              "datePicker": {
-                "disableWeekdays": false,
-                "disableWeekends": false,
-                "showWeeks": true,
-                "startingDay": 0,
-                "initDate": "",
-                "minMode": "day",
-                "maxMode": "year",
-                "yearRows": 4,
-                "yearColumns": 5,
-                "minDate": null,
-                "maxDate": null
-              },
-              "enableTime": false,
-              "enableMaxDateInput": false,
-              "enableMinDateInput": false,
-              "id": "e283d1e",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": "",
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": { "required": false, "custom": "", "customPrivate": false, "strictDateValidation": false, "multiple": false, "unique": false },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "useLocaleSettings": false,
-              "allowInput": true,
-              "enableDate": true,
-              "defaultDate": "",
-              "displayInTimezone": "viewer",
-              "timezone": "",
-              "datepickerMode": "day",
-              "timePicker": { "hourStep": 1, "minuteStep": 1, "showMeridian": true, "readonlyInput": false, "mousewheel": true, "arrowkeys": true },
-              "customOptions": {}
-            },
-            {
-              "key": "pv.metadata_verloopdatum",
-              "type": "datetime",
-              "input": true,
-              "label": "Verloopdatum (Eind geldigheid)",
-              "format": "yyyy-MM-dd",
-              "widget": {
-                "type": "calendar",
-                "displayInTimezone": "viewer",
-                "locale": "nl",
-                "useLocaleSettings": false,
-                "allowInput": true,
-                "mode": "single",
-                "enableTime": false,
-                "noCalendar": false,
-                "format": "yyyy-MM-dd",
-                "hourIncrement": 1,
-                "minuteIncrement": 1,
-                "time_24hr": false,
-                "minDate": null,
-                "disableWeekends": false,
-                "disableWeekdays": false,
-                "maxDate": null
-              },
-              "tableView": false,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_verloopdatum" },
-              "datePicker": {
-                "disableWeekdays": false,
-                "disableWeekends": false,
-                "showWeeks": true,
-                "startingDay": 0,
-                "initDate": "",
-                "minMode": "day",
-                "maxMode": "year",
-                "yearRows": 4,
-                "yearColumns": 5,
-                "minDate": null,
-                "maxDate": null
-              },
-              "enableTime": false,
-              "enableMaxDateInput": false,
-              "enableMinDateInput": false,
-              "id": "e4gaam9",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": "",
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": { "required": false, "custom": "", "customPrivate": false, "strictDateValidation": false, "multiple": false, "unique": false },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "useLocaleSettings": false,
-              "allowInput": true,
-              "enableDate": true,
-              "defaultDate": "",
-              "displayInTimezone": "viewer",
-              "timezone": "",
-              "datepickerMode": "day",
-              "timePicker": { "hourStep": 1, "minuteStep": 1, "showMeridian": true, "readonlyInput": false, "mousewheel": true, "arrowkeys": true },
-              "customOptions": {}
-            },
-            {
-              "key": "pv.metadata_taal",
-              "data": {
-                "values": [
-                  { "label": "Nederlands", "value": "dut" },
-                  { "label": "Duits", "value": "ger" },
-                  { "label": "Engels", "value": "eng" }
-                ],
-                "json": "",
-                "url": "",
-                "resource": "",
-                "custom": ""
-              },
-              "type": "select",
-              "input": true,
-              "label": "Taal",
-              "widget": "choicesjs",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_taal" },
-              "defaultValue": "dut",
-              "id": "ed4501o",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "onlyAvailableItems": false
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "dataSrc": "values",
-              "authenticate": false,
-              "ignoreCache": false,
-              "template": "<span>{{ item.label }}</span>",
-              "idPath": "id",
-              "clearOnRefresh": false,
-              "limit": 100,
-              "valueProperty": "",
-              "lazyLoad": true,
-              "filter": "",
-              "searchEnabled": true,
-              "searchDebounce": 0.3,
-              "searchField": "",
-              "minSearch": 0,
-              "readOnlyValue": false,
-              "selectFields": "",
-              "selectThreshold": 0.3,
-              "uniqueOptions": false,
-              "fuseOptions": { "include": "score", "threshold": 0.3 },
-              "indexeddb": { "filter": {} },
-              "customOptions": {},
-              "useExactSearch": false
-            },
-            {
-              "key": "pv.metadata_documentnummer",
-              "type": "textfield",
-              "input": true,
-              "label": "Documentnummer",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_documentnummer" },
-              "applyMaskOn": "change",
-              "id": "ews3zy",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            },
-            {
-              "key": "pv.metadata_actualiteitsopmerking",
-              "type": "textfield",
-              "input": true,
-              "label": "Actualiteitsopmerking",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_actualiteitsopmerking" },
-              "applyMaskOn": "change",
-              "id": "epbw9fi",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            }
-          ],
-          "currentWidth": 6
-        }
-      ],
-      "tableView": false,
-      "id": "etr5jc7",
-      "placeholder": "",
-      "prefix": "",
-      "customClass": "",
-      "suffix": "",
-      "multiple": false,
-      "defaultValue": null,
-      "protected": false,
-      "unique": false,
-      "persistent": false,
-      "hidden": false,
-      "clearOnHide": false,
-      "refreshOn": "",
-      "redrawOn": "",
-      "modalEdit": false,
-      "dataGridLabel": false,
-      "labelPosition": "top",
-      "description": "",
-      "errorLabel": "",
-      "tooltip": "",
-      "hideLabel": false,
-      "tabindex": "",
-      "disabled": false,
-      "autofocus": false,
-      "dbIndex": false,
-      "customDefaultValue": "",
-      "calculateValue": "",
-      "calculateServer": false,
-      "widget": null,
-      "attributes": {},
-      "validateOn": "change",
-      "validate": { "required": false, "custom": "", "customPrivate": false, "strictDateValidation": false, "multiple": false, "unique": false },
-      "conditional": { "show": null, "when": null, "eq": "" },
-      "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-      "allowCalculateOverride": false,
-      "encrypted": false,
-      "showCharCount": false,
-      "showWordCount": false,
-      "properties": {},
-      "allowMultipleMasks": false,
-      "addons": [],
-      "tree": false,
-      "lazyLoad": false,
-      "autoAdjust": false
-    },
     {
       "key": "pv.commentHistory",
       "rows": 5,
@@ -959,7 +13,7 @@
       "attributes": { "data-testid": "beoordeelVersieDocument-beoordeelBeheerder-form-pv.commentHistory" },
       "autoExpand": false,
       "applyMaskOn": "change",
-      "id": "eth2ofs",
+      "id": "eugovmb",
       "placeholder": "",
       "prefix": "",
       "customClass": "",
@@ -1040,7 +94,7 @@
       "tableView": true,
       "attributes": { "data-testid": "beoordeelVersieDocument-correctie-form-pv.bpm_comment" },
       "applyMaskOn": "change",
-      "id": "eik6fpj",
+      "id": "eq3ngo",
       "placeholder": "",
       "prefix": "",
       "customClass": "",
@@ -1094,7 +148,56 @@
       "label": "relatedNodeIds",
       "tableView": false,
       "attributes": { "data-testid": "tezza-review-form-pv.relatedNodeIds" },
-      "id": "ewetfkr",
+      "id": "e1xzvll",
+      "placeholder": "",
+      "prefix": "",
+      "customClass": "",
+      "suffix": "",
+      "multiple": false,
+      "defaultValue": null,
+      "protected": false,
+      "unique": false,
+      "persistent": true,
+      "hidden": false,
+      "clearOnHide": true,
+      "refreshOn": "",
+      "redrawOn": "",
+      "modalEdit": false,
+      "dataGridLabel": false,
+      "labelPosition": "top",
+      "description": "",
+      "errorLabel": "",
+      "tooltip": "",
+      "hideLabel": false,
+      "tabindex": "",
+      "disabled": false,
+      "autofocus": false,
+      "dbIndex": false,
+      "customDefaultValue": "",
+      "calculateValue": "",
+      "calculateServer": false,
+      "widget": { "type": "input" },
+      "validateOn": "change",
+      "validate": { "required": false, "custom": "", "customPrivate": false, "strictDateValidation": false, "multiple": false, "unique": false },
+      "conditional": { "show": null, "when": null, "eq": "" },
+      "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
+      "allowCalculateOverride": false,
+      "encrypted": false,
+      "showCharCount": false,
+      "showWordCount": false,
+      "properties": {},
+      "allowMultipleMasks": false,
+      "addons": [],
+      "inputType": "hidden"
+    },
+    {
+      "key": "pv.dynamicFormId",
+      "type": "hidden",
+      "input": true,
+      "label": "dynamicFormId",
+      "tableView": false,
+      "attributes": { "data-testid": "documentToevoegen-aanvullen-form-duplicate-pv.dynamicFormId" },
+      "id": "eqxlb4q",
       "placeholder": "",
       "prefix": "",
       "customClass": "",
@@ -1145,7 +248,7 @@
       "saveOnEnter": false,
       "showValidations": false,
       "disableOnInvalid": true,
-      "id": "empomjj",
+      "id": "ee7fn4w",
       "placeholder": "",
       "prefix": "",
       "customClass": "",
diff --git a/backend/projects/tezzaAlgemeen/form/documentToevoegen-beoordelenAanvullen-form.json b/backend/projects/tezzaAlgemeen/form/documentToevoegen-beoordelenAanvullen-form.json
index 8ff09586f10360fc67ba7672789b34ead04ac703..b055cf687160c1d07ef473ed531158b438d3206d 100644
--- a/backend/projects/tezzaAlgemeen/form/documentToevoegen-beoordelenAanvullen-form.json
+++ b/backend/projects/tezzaAlgemeen/form/documentToevoegen-beoordelenAanvullen-form.json
@@ -1,952 +1,6 @@
 {
   "display": "form",
   "components": [
-    {
-      "key": "columns",
-      "type": "columns",
-      "input": false,
-      "label": "Columns",
-      "columns": [
-        {
-          "pull": 0,
-          "push": 0,
-          "size": "md",
-          "width": 6,
-          "offset": 0,
-          "components": [
-            {
-              "key": "pv.metadata_documenttype",
-              "data": {
-                "values": [
-                  { "label": "Beschrijving", "value": "Beschrijving" },
-                  { "label": "Rapport", "value": "Rapport" },
-                  { "label": "Tekening", "value": "Tekening" },
-                  { "label": "Certificaat", "value": "Certificaat" },
-                  { "label": "Verklaring", "value": "Verklaring" },
-                  { "label": "Software", "value": "Software" }
-                ],
-                "json": "",
-                "url": "",
-                "resource": "",
-                "custom": ""
-              },
-              "type": "select",
-              "input": true,
-              "label": "Documenttype",
-              "widget": "choicesjs",
-              "validate": {
-                "required": true,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "onlyAvailableItems": false
-              },
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_documenttype" },
-              "id": "e62ril",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "dataSrc": "values",
-              "authenticate": false,
-              "ignoreCache": false,
-              "template": "<span>{{ item.label }}</span>",
-              "idPath": "id",
-              "clearOnRefresh": false,
-              "limit": 100,
-              "valueProperty": "",
-              "lazyLoad": true,
-              "filter": "",
-              "searchEnabled": true,
-              "searchDebounce": 0.3,
-              "searchField": "",
-              "minSearch": 0,
-              "readOnlyValue": false,
-              "selectFields": "",
-              "selectThreshold": 0.3,
-              "uniqueOptions": false,
-              "fuseOptions": { "include": "score", "threshold": 0.3 },
-              "indexeddb": { "filter": {} },
-              "customOptions": {},
-              "useExactSearch": false
-            },
-            {
-              "key": "pv.metadata_titel",
-              "type": "textfield",
-              "input": true,
-              "label": "Titel",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_titel" },
-              "applyMaskOn": "change",
-              "id": "eaoxqma",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            },
-            {
-              "key": "pv.metadata_vertrouwelijkheidsniveau",
-              "data": {
-                "values": [
-                  { "label": "Openbaar", "value": "Openbaar" },
-                  { "label": "Vertrouwelijk", "value": "Openbaarertrouwelijk" }
-                ],
-                "json": "",
-                "url": "",
-                "resource": "",
-                "custom": ""
-              },
-              "type": "select",
-              "input": true,
-              "label": "Vertrouwelijkheidsniveau",
-              "widget": "choicesjs",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_vertrouwelijkheidsniveau" },
-              "id": "e2leb2p",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "onlyAvailableItems": false
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "dataSrc": "values",
-              "authenticate": false,
-              "ignoreCache": false,
-              "template": "<span>{{ item.label }}</span>",
-              "idPath": "id",
-              "clearOnRefresh": false,
-              "limit": 100,
-              "valueProperty": "",
-              "lazyLoad": true,
-              "filter": "",
-              "searchEnabled": true,
-              "searchDebounce": 0.3,
-              "searchField": "",
-              "minSearch": 0,
-              "readOnlyValue": false,
-              "selectFields": "",
-              "selectThreshold": 0.3,
-              "uniqueOptions": false,
-              "fuseOptions": { "include": "score", "threshold": 0.3 },
-              "indexeddb": { "filter": {} },
-              "customOptions": {},
-              "useExactSearch": false
-            },
-            {
-              "key": "pv.metadata_auteur",
-              "type": "textfield",
-              "input": true,
-              "label": "Auteur",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_auteur" },
-              "applyMaskOn": "change",
-              "id": "eo8g25k",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            },
-            {
-              "key": "pv.metadata_actualiteit",
-              "data": {
-                "values": [
-                  { "label": "As-Built (waargenomen)", "value": "As-Built (waargenomen)" },
-                  { "label": "As-Built (afgeleid)", "value": "As-Built (afgeleid)" },
-                  { "label": "Deels As-Built", "value": "Deels As-Built" },
-                  { "label": "Historisch/verlopen", "value": "Historisch/verlopen" },
-                  { "label": "Deel historisch/verlopen", "value": "Deel historisch/verlopen" },
-                  { "label": "Onbekend", "value": "Onbekend" }
-                ],
-                "json": "",
-                "url": "",
-                "resource": "",
-                "custom": ""
-              },
-              "type": "select",
-              "input": true,
-              "label": "Actualiteit",
-              "widget": "choicesjs",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_actualiteit" },
-              "id": "emqzlvr",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "onlyAvailableItems": false
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "dataSrc": "values",
-              "authenticate": false,
-              "ignoreCache": false,
-              "template": "<span>{{ item.label }}</span>",
-              "idPath": "id",
-              "clearOnRefresh": false,
-              "limit": 100,
-              "valueProperty": "",
-              "lazyLoad": true,
-              "filter": "",
-              "searchEnabled": true,
-              "searchDebounce": 0.3,
-              "searchField": "",
-              "minSearch": 0,
-              "readOnlyValue": false,
-              "selectFields": "",
-              "selectThreshold": 0.3,
-              "uniqueOptions": false,
-              "fuseOptions": { "include": "score", "threshold": 0.3 },
-              "indexeddb": { "filter": {} },
-              "customOptions": {},
-              "useExactSearch": false
-            },
-            {
-              "key": "pv.metadata_revisie",
-              "type": "textfield",
-              "input": true,
-              "label": "Revisie",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_revisie" },
-              "applyMaskOn": "change",
-              "id": "edo6j7e",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            }
-          ],
-          "currentWidth": 6
-        },
-        {
-          "pull": 0,
-          "push": 0,
-          "size": "md",
-          "width": 6,
-          "offset": 0,
-          "components": [
-            {
-              "key": "pv.metadata_documentdatumBeginGeldigheid",
-              "type": "datetime",
-              "input": true,
-              "label": "Documentdatum (Begin geldigheid)",
-              "format": "yyyy-MM-dd",
-              "widget": {
-                "type": "calendar",
-                "displayInTimezone": "viewer",
-                "locale": "nl",
-                "useLocaleSettings": false,
-                "allowInput": true,
-                "mode": "single",
-                "enableTime": false,
-                "noCalendar": false,
-                "format": "yyyy-MM-dd",
-                "hourIncrement": 1,
-                "minuteIncrement": 1,
-                "time_24hr": false,
-                "minDate": null,
-                "disableWeekends": false,
-                "disableWeekdays": false,
-                "maxDate": null
-              },
-              "tableView": false,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_documentdatumBeginGeldigheid" },
-              "datePicker": {
-                "disableWeekdays": false,
-                "disableWeekends": false,
-                "showWeeks": true,
-                "startingDay": 0,
-                "initDate": "",
-                "minMode": "day",
-                "maxMode": "year",
-                "yearRows": 4,
-                "yearColumns": 5,
-                "minDate": null,
-                "maxDate": null
-              },
-              "enableTime": false,
-              "enableMaxDateInput": false,
-              "enableMinDateInput": false,
-              "id": "eyyfcu",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": "",
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": { "required": false, "custom": "", "customPrivate": false, "strictDateValidation": false, "multiple": false, "unique": false },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "useLocaleSettings": false,
-              "allowInput": true,
-              "enableDate": true,
-              "defaultDate": "",
-              "displayInTimezone": "viewer",
-              "timezone": "",
-              "datepickerMode": "day",
-              "timePicker": { "hourStep": 1, "minuteStep": 1, "showMeridian": true, "readonlyInput": false, "mousewheel": true, "arrowkeys": true },
-              "customOptions": {}
-            },
-            {
-              "key": "pv.metadata_verloopdatum",
-              "type": "datetime",
-              "input": true,
-              "label": "Verloopdatum (Eind geldigheid)",
-              "format": "yyyy-MM-dd",
-              "widget": {
-                "type": "calendar",
-                "displayInTimezone": "viewer",
-                "locale": "nl",
-                "useLocaleSettings": false,
-                "allowInput": true,
-                "mode": "single",
-                "enableTime": false,
-                "noCalendar": false,
-                "format": "yyyy-MM-dd",
-                "hourIncrement": 1,
-                "minuteIncrement": 1,
-                "time_24hr": false,
-                "minDate": null,
-                "disableWeekends": false,
-                "disableWeekdays": false,
-                "maxDate": null
-              },
-              "tableView": false,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_verloopdatum" },
-              "datePicker": {
-                "disableWeekdays": false,
-                "disableWeekends": false,
-                "showWeeks": true,
-                "startingDay": 0,
-                "initDate": "",
-                "minMode": "day",
-                "maxMode": "year",
-                "yearRows": 4,
-                "yearColumns": 5,
-                "minDate": null,
-                "maxDate": null
-              },
-              "enableTime": false,
-              "enableMaxDateInput": false,
-              "enableMinDateInput": false,
-              "id": "ek3avz",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": "",
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": { "required": false, "custom": "", "customPrivate": false, "strictDateValidation": false, "multiple": false, "unique": false },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "useLocaleSettings": false,
-              "allowInput": true,
-              "enableDate": true,
-              "defaultDate": "",
-              "displayInTimezone": "viewer",
-              "timezone": "",
-              "datepickerMode": "day",
-              "timePicker": { "hourStep": 1, "minuteStep": 1, "showMeridian": true, "readonlyInput": false, "mousewheel": true, "arrowkeys": true },
-              "customOptions": {}
-            },
-            {
-              "key": "pv.metadata_taal",
-              "data": {
-                "values": [
-                  { "label": "Nederlands", "value": "dut" },
-                  { "label": "Duits", "value": "ger" },
-                  { "label": "Engels", "value": "eng" }
-                ],
-                "json": "",
-                "url": "",
-                "resource": "",
-                "custom": ""
-              },
-              "type": "select",
-              "input": true,
-              "label": "Taal",
-              "widget": "choicesjs",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_taal" },
-              "defaultValue": "dut",
-              "id": "e5jofbn",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "onlyAvailableItems": false
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "dataSrc": "values",
-              "authenticate": false,
-              "ignoreCache": false,
-              "template": "<span>{{ item.label }}</span>",
-              "idPath": "id",
-              "clearOnRefresh": false,
-              "limit": 100,
-              "valueProperty": "",
-              "lazyLoad": true,
-              "filter": "",
-              "searchEnabled": true,
-              "searchDebounce": 0.3,
-              "searchField": "",
-              "minSearch": 0,
-              "readOnlyValue": false,
-              "selectFields": "",
-              "selectThreshold": 0.3,
-              "uniqueOptions": false,
-              "fuseOptions": { "include": "score", "threshold": 0.3 },
-              "indexeddb": { "filter": {} },
-              "customOptions": {},
-              "useExactSearch": false
-            },
-            {
-              "key": "pv.metadata_documentnummer",
-              "type": "textfield",
-              "input": true,
-              "label": "Documentnummer",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_documentnummer" },
-              "applyMaskOn": "change",
-              "id": "e9rdf5t",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            },
-            {
-              "key": "pv.metadata_actualiteitsopmerking",
-              "type": "textfield",
-              "input": true,
-              "label": "Actualiteitsopmerking",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_actualiteitsopmerking" },
-              "applyMaskOn": "change",
-              "id": "e06ttcvl",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            }
-          ],
-          "currentWidth": 6
-        }
-      ],
-      "tableView": false,
-      "id": "erm9tf",
-      "placeholder": "",
-      "prefix": "",
-      "customClass": "",
-      "suffix": "",
-      "multiple": false,
-      "defaultValue": null,
-      "protected": false,
-      "unique": false,
-      "persistent": false,
-      "hidden": false,
-      "clearOnHide": false,
-      "refreshOn": "",
-      "redrawOn": "",
-      "modalEdit": false,
-      "dataGridLabel": false,
-      "labelPosition": "top",
-      "description": "",
-      "errorLabel": "",
-      "tooltip": "",
-      "hideLabel": false,
-      "tabindex": "",
-      "disabled": false,
-      "autofocus": false,
-      "dbIndex": false,
-      "customDefaultValue": "",
-      "calculateValue": "",
-      "calculateServer": false,
-      "widget": null,
-      "attributes": {},
-      "validateOn": "change",
-      "validate": { "required": false, "custom": "", "customPrivate": false, "strictDateValidation": false, "multiple": false, "unique": false },
-      "conditional": { "show": null, "when": null, "eq": "" },
-      "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-      "allowCalculateOverride": false,
-      "encrypted": false,
-      "showCharCount": false,
-      "showWordCount": false,
-      "properties": {},
-      "allowMultipleMasks": false,
-      "addons": [],
-      "tree": false,
-      "lazyLoad": false,
-      "autoAdjust": false
-    },
     {
       "key": "pv.commentHistory",
       "rows": 5,
@@ -1136,6 +190,55 @@
       "addons": [],
       "inputType": "hidden"
     },
+    {
+      "key": "pv.dynamicFormId",
+      "type": "hidden",
+      "input": true,
+      "label": "dynamicFormId",
+      "tableView": false,
+      "attributes": { "data-testid": "documentToevoegen-aanvullen-form-duplicate-pv.dynamicFormId" },
+      "id": "eqxlb4q",
+      "placeholder": "",
+      "prefix": "",
+      "customClass": "",
+      "suffix": "",
+      "multiple": false,
+      "defaultValue": null,
+      "protected": false,
+      "unique": false,
+      "persistent": true,
+      "hidden": false,
+      "clearOnHide": true,
+      "refreshOn": "",
+      "redrawOn": "",
+      "modalEdit": false,
+      "dataGridLabel": false,
+      "labelPosition": "top",
+      "description": "",
+      "errorLabel": "",
+      "tooltip": "",
+      "hideLabel": false,
+      "tabindex": "",
+      "disabled": false,
+      "autofocus": false,
+      "dbIndex": false,
+      "customDefaultValue": "",
+      "calculateValue": "",
+      "calculateServer": false,
+      "widget": { "type": "input" },
+      "validateOn": "change",
+      "validate": { "required": false, "custom": "", "customPrivate": false, "strictDateValidation": false, "multiple": false, "unique": false },
+      "conditional": { "show": null, "when": null, "eq": "" },
+      "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
+      "allowCalculateOverride": false,
+      "encrypted": false,
+      "showCharCount": false,
+      "showWordCount": false,
+      "properties": {},
+      "allowMultipleMasks": false,
+      "addons": [],
+      "inputType": "hidden"
+    },
     {
       "key": "pv.outcomeDocumentBeheerder",
       "type": "hidden",
diff --git a/backend/projects/tezzaAlgemeen/form/documentToevoegen-goedkeuring-form.json b/backend/projects/tezzaAlgemeen/form/documentToevoegen-goedkeuring-form.json
index 7a787138cef2b0014cb72144b420816b7c9626aa..b7aeaaadfdd8991c56f38a16b96dbea55c79b69a 100644
--- a/backend/projects/tezzaAlgemeen/form/documentToevoegen-goedkeuring-form.json
+++ b/backend/projects/tezzaAlgemeen/form/documentToevoegen-goedkeuring-form.json
@@ -1,952 +1,6 @@
 {
   "display": "form",
   "components": [
-    {
-      "key": "columns",
-      "type": "columns",
-      "input": false,
-      "label": "Columns",
-      "columns": [
-        {
-          "pull": 0,
-          "push": 0,
-          "size": "md",
-          "width": 6,
-          "offset": 0,
-          "components": [
-            {
-              "key": "pv.metadata_documenttype",
-              "data": {
-                "values": [
-                  { "label": "Beschrijving", "value": "Beschrijving" },
-                  { "label": "Rapport", "value": "Rapport" },
-                  { "label": "Tekening", "value": "Tekening" },
-                  { "label": "Certificaat", "value": "Certificaat" },
-                  { "label": "Verklaring", "value": "Verklaring" },
-                  { "label": "Software", "value": "Software" }
-                ],
-                "json": "",
-                "url": "",
-                "resource": "",
-                "custom": ""
-              },
-              "type": "select",
-              "input": true,
-              "label": "Documenttype",
-              "widget": "choicesjs",
-              "validate": {
-                "required": true,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "onlyAvailableItems": false
-              },
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_documenttype" },
-              "id": "enswl4",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "dataSrc": "values",
-              "authenticate": false,
-              "ignoreCache": false,
-              "template": "<span>{{ item.label }}</span>",
-              "idPath": "id",
-              "clearOnRefresh": false,
-              "limit": 100,
-              "valueProperty": "",
-              "lazyLoad": true,
-              "filter": "",
-              "searchEnabled": true,
-              "searchDebounce": 0.3,
-              "searchField": "",
-              "minSearch": 0,
-              "readOnlyValue": false,
-              "selectFields": "",
-              "selectThreshold": 0.3,
-              "uniqueOptions": false,
-              "fuseOptions": { "include": "score", "threshold": 0.3 },
-              "indexeddb": { "filter": {} },
-              "customOptions": {},
-              "useExactSearch": false
-            },
-            {
-              "key": "pv.metadata_titel",
-              "type": "textfield",
-              "input": true,
-              "label": "Titel",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_titel" },
-              "applyMaskOn": "change",
-              "id": "edh1pgq",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            },
-            {
-              "key": "pv.metadata_vertrouwelijkheidsniveau",
-              "data": {
-                "values": [
-                  { "label": "Openbaar", "value": "Openbaar" },
-                  { "label": "Vertrouwelijk", "value": "Openbaarertrouwelijk" }
-                ],
-                "json": "",
-                "url": "",
-                "resource": "",
-                "custom": ""
-              },
-              "type": "select",
-              "input": true,
-              "label": "Vertrouwelijkheidsniveau",
-              "widget": "choicesjs",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_vertrouwelijkheidsniveau" },
-              "id": "eecn5si",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "onlyAvailableItems": false
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "dataSrc": "values",
-              "authenticate": false,
-              "ignoreCache": false,
-              "template": "<span>{{ item.label }}</span>",
-              "idPath": "id",
-              "clearOnRefresh": false,
-              "limit": 100,
-              "valueProperty": "",
-              "lazyLoad": true,
-              "filter": "",
-              "searchEnabled": true,
-              "searchDebounce": 0.3,
-              "searchField": "",
-              "minSearch": 0,
-              "readOnlyValue": false,
-              "selectFields": "",
-              "selectThreshold": 0.3,
-              "uniqueOptions": false,
-              "fuseOptions": { "include": "score", "threshold": 0.3 },
-              "indexeddb": { "filter": {} },
-              "customOptions": {},
-              "useExactSearch": false
-            },
-            {
-              "key": "pv.metadata_auteur",
-              "type": "textfield",
-              "input": true,
-              "label": "Auteur",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_auteur" },
-              "applyMaskOn": "change",
-              "id": "ejro7zs",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            },
-            {
-              "key": "pv.metadata_actualiteit",
-              "data": {
-                "values": [
-                  { "label": "As-Built (waargenomen)", "value": "As-Built (waargenomen)" },
-                  { "label": "As-Built (afgeleid)", "value": "As-Built (afgeleid)" },
-                  { "label": "Deels As-Built", "value": "Deels As-Built" },
-                  { "label": "Historisch/verlopen", "value": "Historisch/verlopen" },
-                  { "label": "Deel historisch/verlopen", "value": "Deel historisch/verlopen" },
-                  { "label": "Onbekend", "value": "Onbekend" }
-                ],
-                "json": "",
-                "url": "",
-                "resource": "",
-                "custom": ""
-              },
-              "type": "select",
-              "input": true,
-              "label": "Actualiteit",
-              "widget": "choicesjs",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_actualiteit" },
-              "id": "e2vevn",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "onlyAvailableItems": false
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "dataSrc": "values",
-              "authenticate": false,
-              "ignoreCache": false,
-              "template": "<span>{{ item.label }}</span>",
-              "idPath": "id",
-              "clearOnRefresh": false,
-              "limit": 100,
-              "valueProperty": "",
-              "lazyLoad": true,
-              "filter": "",
-              "searchEnabled": true,
-              "searchDebounce": 0.3,
-              "searchField": "",
-              "minSearch": 0,
-              "readOnlyValue": false,
-              "selectFields": "",
-              "selectThreshold": 0.3,
-              "uniqueOptions": false,
-              "fuseOptions": { "include": "score", "threshold": 0.3 },
-              "indexeddb": { "filter": {} },
-              "customOptions": {},
-              "useExactSearch": false
-            },
-            {
-              "key": "pv.metadata_revisie",
-              "type": "textfield",
-              "input": true,
-              "label": "Revisie",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_revisie" },
-              "applyMaskOn": "change",
-              "id": "ezo1thk",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            }
-          ],
-          "currentWidth": 6
-        },
-        {
-          "pull": 0,
-          "push": 0,
-          "size": "md",
-          "width": 6,
-          "offset": 0,
-          "components": [
-            {
-              "key": "pv.metadata_documentdatumBeginGeldigheid",
-              "type": "datetime",
-              "input": true,
-              "label": "Documentdatum (Begin geldigheid)",
-              "format": "yyyy-MM-dd",
-              "widget": {
-                "type": "calendar",
-                "displayInTimezone": "viewer",
-                "locale": "nl",
-                "useLocaleSettings": false,
-                "allowInput": true,
-                "mode": "single",
-                "enableTime": false,
-                "noCalendar": false,
-                "format": "yyyy-MM-dd",
-                "hourIncrement": 1,
-                "minuteIncrement": 1,
-                "time_24hr": false,
-                "minDate": null,
-                "disableWeekends": false,
-                "disableWeekdays": false,
-                "maxDate": null
-              },
-              "tableView": false,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_documentdatumBeginGeldigheid" },
-              "datePicker": {
-                "disableWeekdays": false,
-                "disableWeekends": false,
-                "showWeeks": true,
-                "startingDay": 0,
-                "initDate": "",
-                "minMode": "day",
-                "maxMode": "year",
-                "yearRows": 4,
-                "yearColumns": 5,
-                "minDate": null,
-                "maxDate": null
-              },
-              "enableTime": false,
-              "enableMaxDateInput": false,
-              "enableMinDateInput": false,
-              "id": "exhgqhc",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": "",
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": { "required": false, "custom": "", "customPrivate": false, "strictDateValidation": false, "multiple": false, "unique": false },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "useLocaleSettings": false,
-              "allowInput": true,
-              "enableDate": true,
-              "defaultDate": "",
-              "displayInTimezone": "viewer",
-              "timezone": "",
-              "datepickerMode": "day",
-              "timePicker": { "hourStep": 1, "minuteStep": 1, "showMeridian": true, "readonlyInput": false, "mousewheel": true, "arrowkeys": true },
-              "customOptions": {}
-            },
-            {
-              "key": "pv.metadata_verloopdatum",
-              "type": "datetime",
-              "input": true,
-              "label": "Verloopdatum (Eind geldigheid)",
-              "format": "yyyy-MM-dd",
-              "widget": {
-                "type": "calendar",
-                "displayInTimezone": "viewer",
-                "locale": "nl",
-                "useLocaleSettings": false,
-                "allowInput": true,
-                "mode": "single",
-                "enableTime": false,
-                "noCalendar": false,
-                "format": "yyyy-MM-dd",
-                "hourIncrement": 1,
-                "minuteIncrement": 1,
-                "time_24hr": false,
-                "minDate": null,
-                "disableWeekends": false,
-                "disableWeekdays": false,
-                "maxDate": null
-              },
-              "tableView": false,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_verloopdatum" },
-              "datePicker": {
-                "disableWeekdays": false,
-                "disableWeekends": false,
-                "showWeeks": true,
-                "startingDay": 0,
-                "initDate": "",
-                "minMode": "day",
-                "maxMode": "year",
-                "yearRows": 4,
-                "yearColumns": 5,
-                "minDate": null,
-                "maxDate": null
-              },
-              "enableTime": false,
-              "enableMaxDateInput": false,
-              "enableMinDateInput": false,
-              "id": "egwhpz",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": "",
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": { "required": false, "custom": "", "customPrivate": false, "strictDateValidation": false, "multiple": false, "unique": false },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "useLocaleSettings": false,
-              "allowInput": true,
-              "enableDate": true,
-              "defaultDate": "",
-              "displayInTimezone": "viewer",
-              "timezone": "",
-              "datepickerMode": "day",
-              "timePicker": { "hourStep": 1, "minuteStep": 1, "showMeridian": true, "readonlyInput": false, "mousewheel": true, "arrowkeys": true },
-              "customOptions": {}
-            },
-            {
-              "key": "pv.metadata_taal",
-              "data": {
-                "values": [
-                  { "label": "Nederlands", "value": "dut" },
-                  { "label": "Duits", "value": "ger" },
-                  { "label": "Engels", "value": "eng" }
-                ],
-                "json": "",
-                "url": "",
-                "resource": "",
-                "custom": ""
-              },
-              "type": "select",
-              "input": true,
-              "label": "Taal",
-              "widget": "choicesjs",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_taal" },
-              "defaultValue": "dut",
-              "id": "et53yrg",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "onlyAvailableItems": false
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "dataSrc": "values",
-              "authenticate": false,
-              "ignoreCache": false,
-              "template": "<span>{{ item.label }}</span>",
-              "idPath": "id",
-              "clearOnRefresh": false,
-              "limit": 100,
-              "valueProperty": "",
-              "lazyLoad": true,
-              "filter": "",
-              "searchEnabled": true,
-              "searchDebounce": 0.3,
-              "searchField": "",
-              "minSearch": 0,
-              "readOnlyValue": false,
-              "selectFields": "",
-              "selectThreshold": 0.3,
-              "uniqueOptions": false,
-              "fuseOptions": { "include": "score", "threshold": 0.3 },
-              "indexeddb": { "filter": {} },
-              "customOptions": {},
-              "useExactSearch": false
-            },
-            {
-              "key": "pv.metadata_documentnummer",
-              "type": "textfield",
-              "input": true,
-              "label": "Documentnummer",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_documentnummer" },
-              "applyMaskOn": "change",
-              "id": "e6rcgyg",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            },
-            {
-              "key": "pv.metadata_actualiteitsopmerking",
-              "type": "textfield",
-              "input": true,
-              "label": "Actualiteitsopmerking",
-              "tableView": true,
-              "attributes": { "data-testid": "documentToevoegen-aanvullen-form-pv.metadata_actualiteitsopmerking" },
-              "applyMaskOn": "change",
-              "id": "e7h2t6",
-              "placeholder": "",
-              "prefix": "",
-              "customClass": "",
-              "suffix": "",
-              "multiple": false,
-              "defaultValue": null,
-              "protected": false,
-              "unique": false,
-              "persistent": true,
-              "hidden": false,
-              "clearOnHide": true,
-              "refreshOn": "",
-              "redrawOn": "",
-              "modalEdit": false,
-              "dataGridLabel": false,
-              "labelPosition": "top",
-              "description": "",
-              "errorLabel": "",
-              "tooltip": "",
-              "hideLabel": false,
-              "tabindex": "",
-              "disabled": false,
-              "autofocus": false,
-              "dbIndex": false,
-              "customDefaultValue": "",
-              "calculateValue": "",
-              "calculateServer": false,
-              "widget": { "type": "input" },
-              "validateOn": "change",
-              "validate": {
-                "required": false,
-                "custom": "",
-                "customPrivate": false,
-                "strictDateValidation": false,
-                "multiple": false,
-                "unique": false,
-                "minLength": "",
-                "maxLength": "",
-                "pattern": ""
-              },
-              "conditional": { "show": null, "when": null, "eq": "" },
-              "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-              "allowCalculateOverride": false,
-              "encrypted": false,
-              "showCharCount": false,
-              "showWordCount": false,
-              "properties": {},
-              "allowMultipleMasks": false,
-              "addons": [],
-              "mask": false,
-              "inputType": "text",
-              "inputFormat": "plain",
-              "inputMask": "",
-              "displayMask": "",
-              "spellcheck": true,
-              "truncateMultipleSpaces": false
-            }
-          ],
-          "currentWidth": 6
-        }
-      ],
-      "tableView": false,
-      "id": "ewpjbyk",
-      "placeholder": "",
-      "prefix": "",
-      "customClass": "",
-      "suffix": "",
-      "multiple": false,
-      "defaultValue": null,
-      "protected": false,
-      "unique": false,
-      "persistent": false,
-      "hidden": false,
-      "clearOnHide": false,
-      "refreshOn": "",
-      "redrawOn": "",
-      "modalEdit": false,
-      "dataGridLabel": false,
-      "labelPosition": "top",
-      "description": "",
-      "errorLabel": "",
-      "tooltip": "",
-      "hideLabel": false,
-      "tabindex": "",
-      "disabled": false,
-      "autofocus": false,
-      "dbIndex": false,
-      "customDefaultValue": "",
-      "calculateValue": "",
-      "calculateServer": false,
-      "widget": null,
-      "attributes": {},
-      "validateOn": "change",
-      "validate": { "required": false, "custom": "", "customPrivate": false, "strictDateValidation": false, "multiple": false, "unique": false },
-      "conditional": { "show": null, "when": null, "eq": "" },
-      "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
-      "allowCalculateOverride": false,
-      "encrypted": false,
-      "showCharCount": false,
-      "showWordCount": false,
-      "properties": {},
-      "allowMultipleMasks": false,
-      "addons": [],
-      "tree": false,
-      "lazyLoad": false,
-      "autoAdjust": false
-    },
     {
       "key": "pv.commentHistory",
       "rows": 5,
@@ -1136,6 +190,55 @@
       "addons": [],
       "inputType": "hidden"
     },
+    {
+      "key": "pv.dynamicFormId",
+      "type": "hidden",
+      "input": true,
+      "label": "dynamicFormId",
+      "tableView": false,
+      "attributes": { "data-testid": "documentToevoegen-aanvullen-form-duplicate-pv.dynamicFormId" },
+      "id": "eqxlb4q",
+      "placeholder": "",
+      "prefix": "",
+      "customClass": "",
+      "suffix": "",
+      "multiple": false,
+      "defaultValue": null,
+      "protected": false,
+      "unique": false,
+      "persistent": true,
+      "hidden": false,
+      "clearOnHide": true,
+      "refreshOn": "",
+      "redrawOn": "",
+      "modalEdit": false,
+      "dataGridLabel": false,
+      "labelPosition": "top",
+      "description": "",
+      "errorLabel": "",
+      "tooltip": "",
+      "hideLabel": false,
+      "tabindex": "",
+      "disabled": false,
+      "autofocus": false,
+      "dbIndex": false,
+      "customDefaultValue": "",
+      "calculateValue": "",
+      "calculateServer": false,
+      "widget": { "type": "input" },
+      "validateOn": "change",
+      "validate": { "required": false, "custom": "", "customPrivate": false, "strictDateValidation": false, "multiple": false, "unique": false },
+      "conditional": { "show": null, "when": null, "eq": "" },
+      "overlay": { "style": "", "left": "", "top": "", "width": "", "height": "" },
+      "allowCalculateOverride": false,
+      "encrypted": false,
+      "showCharCount": false,
+      "showWordCount": false,
+      "properties": {},
+      "allowMultipleMasks": false,
+      "addons": [],
+      "inputType": "hidden"
+    },
     {
       "key": "pv.outcomeDocumentReviewer",
       "type": "hidden",
diff --git a/backend/projects/tezzaAlgemeen/process-document-link/tezzaAlgemeen.json b/backend/projects/tezzaAlgemeen/process-document-link/tezzaAlgemeen.json
index 1d78c4e7a71cb5c603460d34f255e575249f02f3..ff27715101f76851c502785732f6d3673ddee54c 100644
--- a/backend/projects/tezzaAlgemeen/process-document-link/tezzaAlgemeen.json
+++ b/backend/projects/tezzaAlgemeen/process-document-link/tezzaAlgemeen.json
@@ -19,11 +19,6 @@
     "canInitializeDocument": true,
     "startableByUser": true
   },
-  {
-    "processDefinitionKey": "beoordeelVersieDocument",
-    "canInitializeDocument": true,
-    "startableByUser": true
-  },
   {
     "processDefinitionKey": "documentToevoegen",
     "canInitializeDocument": true,
diff --git a/backend/src/main/java/nl/contezza/gzac/tezza/autoconfigure/TezzaResourceAutoConfiguration.java b/backend/src/main/java/nl/contezza/gzac/tezza/autoconfigure/TezzaResourceAutoConfiguration.java
index 9dafd692f8f684e3a64c3dcb140e7c42240a875d..5cda97675aca5ce839b1b9e9a9d385e77efc957f 100644
--- a/backend/src/main/java/nl/contezza/gzac/tezza/autoconfigure/TezzaResourceAutoConfiguration.java
+++ b/backend/src/main/java/nl/contezza/gzac/tezza/autoconfigure/TezzaResourceAutoConfiguration.java
@@ -13,7 +13,8 @@ import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilde
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
 
-// import com.ritense.connector.service.ConnectorService;
+import com.ritense.authorization.role.RoleRepository;
+import com.ritense.connector.service.ConnectorService;
 import com.ritense.processdocument.service.ProcessDocumentAssociationService;
 import com.ritense.processlink.service.ProcessLinkActivityService;
 import com.ritense.valtimo.contract.annotation.ProcessBean;
@@ -61,9 +62,20 @@ public class TezzaResourceAutoConfiguration {
             ZaakInstanceLinkService zaakInstanceLinkService,
             ZaakTypeLinkService zaakTypeLinkService,
             UserManagementService userManagementService,
-            KeycloakService keycloakService) {
-        return new TezzaService(zaakTypeLinkRepository, pluginService, documentService, documentSearchService,
-                zaakInstanceLinkService, zaakTypeLinkService, userManagementService, keycloakService);
+            KeycloakService keycloakService,
+            RoleRepository roleRepository
+    // ,
+    // KeycloakService keycloakService
+    ) {
+        return new TezzaService(
+                zaakTypeLinkRepository,
+                pluginService,
+                documentService,
+                documentSearchService,
+                zaakInstanceLinkService,
+                zaakTypeLinkService,
+                userManagementService, keycloakService,
+                roleRepository);
     }
 
     @Bean
diff --git a/backend/src/main/java/nl/contezza/gzac/tezza/bean/TezzaUploadFileBean.java b/backend/src/main/java/nl/contezza/gzac/tezza/bean/TezzaUploadFileBean.java
index e9f5b9982767f1d0d615dfb48c9f42279b7c0936..850682832cd6263dfed50308b9a8ab84fde74ad1 100644
--- a/backend/src/main/java/nl/contezza/gzac/tezza/bean/TezzaUploadFileBean.java
+++ b/backend/src/main/java/nl/contezza/gzac/tezza/bean/TezzaUploadFileBean.java
@@ -1,9 +1,11 @@
 package nl.contezza.gzac.tezza.bean;
 
+import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.NoSuchElementException;
 import java.util.stream.Collectors;
 
 import org.alfresco.extension.acs.ApiException;
@@ -126,7 +128,6 @@ public class TezzaUploadFileBean {
                 }
             }
         }
-
     }
 
     /**
@@ -137,9 +138,11 @@ public class TezzaUploadFileBean {
      * Een list met orginele locaties wordt toegevoegd aan de proces variabelen.
      * 
      * @param execution De excecutie van het proces
+     * @throws URISyntaxException
      */
     @SuppressWarnings("unchecked")
-    public void moveNode(ActivityExecution execution, List<String> workflowUsers) {
+    public void moveNode(ActivityExecution execution, List<String> workflowUsers)
+            throws URISyntaxException {
         // Haal relatedNodeIds op voor tonen bijlages
         List<String> relatedNodeIds = new ArrayList<>();
         Object relatedNodeIdsObj = execution.getVariable("relatedNodeIds");
@@ -176,7 +179,6 @@ public class TezzaUploadFileBean {
             }
             execution.setVariable("originalNodes", originalNodes);
         }
-
     }
 
     /**
@@ -194,26 +196,43 @@ public class TezzaUploadFileBean {
             originalNodes = (List<String>) originalNodesObj;
         }
 
-        NodesApi api = tezzaService.getNodesApi();
-        for (String nodeId : originalNodes) {
-            String[] nodeArray = nodeId.split(",");
-            NodeBodyMove body = new NodeBodyMove();
-            body.setTargetParentId(nodeArray[1]);
+        if (originalNodes.size() > 0) {
+
+            // Haal nodeId op
+            String originalNodeId = null;
             try {
-                api.moveNode(nodeArray[0], body, null, null);
+                originalNodeId = tezzaService.getNodeId(execution.getBusinessKey());
+            } catch (NoSuchElementException e) {
+                logger.info("No nodeId found within document " + execution.getBusinessKey());
+            }
+            NodesApi api = tezzaService.getNodesApi();
+            for (String nodeId : originalNodes) {
+                String[] nodeArray = nodeId.split(",");
+
+                NodeBodyMove body = new NodeBodyMove();
+                // If there is a nodeId given for the dossier, use that, if not, use the
+                // original nodeId of the file
+                if (originalNodeId != null) {
+                    body.setTargetParentId(originalNodeId);
+                } else {
+                    body.setTargetParentId(nodeArray[1]);
+                }
+
+                try {
+                    api.moveNode(nodeArray[0], body, null, null);
+                } catch (ApiException e) {
+                    logger.debug(e.getResponseBody());
+                    e.printStackTrace();
+                }
+            }
+
+            try {
+                api.deleteNode((String) execution.getVariable("documentFolderId"), true);
             } catch (ApiException e) {
                 logger.debug(e.getResponseBody());
                 e.printStackTrace();
             }
         }
-
-        try {
-            api.deleteNode((String) execution.getVariable("documentFolderId"), true);
-        } catch (ApiException e) {
-            logger.debug(e.getResponseBody());
-            e.printStackTrace();
-        }
-
     }
 
     private String getFolderId(ActivityExecution execution, NodesApi api, String folderNodeId,
@@ -243,7 +262,7 @@ public class TezzaUploadFileBean {
         return documentFolderId;
     }
 
-    public PermissionsBody creatPermissionsBody(List<String> workflowUsers) {
+    private PermissionsBody creatPermissionsBody(List<String> workflowUsers) {
         List<String> uniqueWorkflowUsers = workflowUsers.stream()
                 .distinct()
                 .collect(Collectors.toList());
diff --git a/backend/src/main/java/nl/contezza/gzac/tezza/domain/MetadataConfig.java b/backend/src/main/java/nl/contezza/gzac/tezza/domain/MetadataConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..499e4ac913dc84eb9ca141ecdd7987295dea08a5
--- /dev/null
+++ b/backend/src/main/java/nl/contezza/gzac/tezza/domain/MetadataConfig.java
@@ -0,0 +1,38 @@
+package nl.contezza.gzac.tezza.domain;
+
+import java.util.List;
+
+public class MetadataConfig {
+    private String objectType;
+    private List<MetadataMapping> defaultMappings;
+
+    public MetadataConfig() {
+    }
+
+    public MetadataConfig(String objectType, List<MetadataMapping> defaultMappings) {
+        this.objectType = objectType;
+        this.defaultMappings = defaultMappings;
+    }
+
+    public String getObjectType() {
+        return objectType;
+    }
+
+    public void setObjectType(String objectType) {
+        this.objectType = objectType;
+    }
+
+    public List<MetadataMapping> getDefaultMappings() {
+        return defaultMappings;
+    }
+
+    public void setDefaultMappings(List<MetadataMapping> defaultMappings) {
+        this.defaultMappings = defaultMappings;
+    }
+
+    @Override
+    public String toString() {
+        return "MetadataConfig [objectType=" + objectType + ", defaultMappings=" + defaultMappings + "]";
+    }
+
+}
diff --git a/backend/src/main/java/nl/contezza/gzac/tezza/domain/MetadataMapping.java b/backend/src/main/java/nl/contezza/gzac/tezza/domain/MetadataMapping.java
new file mode 100644
index 0000000000000000000000000000000000000000..bba2c73ef10fe9b93f673516523b1b7225d9caf4
--- /dev/null
+++ b/backend/src/main/java/nl/contezza/gzac/tezza/domain/MetadataMapping.java
@@ -0,0 +1,47 @@
+package nl.contezza.gzac.tezza.domain;
+
+public class MetadataMapping {
+    private String propertyId;
+    private String prcessVariable;
+    private String defaultValue;
+
+    public MetadataMapping() {
+    }
+
+    public MetadataMapping(String propertyId, String prcessVariable, String defaultValue) {
+        this.propertyId = propertyId;
+        this.prcessVariable = prcessVariable;
+        this.defaultValue = defaultValue;
+    }
+
+    public String getPropertyId() {
+        return propertyId;
+    }
+
+    public void setPropertyId(String propertyId) {
+        this.propertyId = propertyId;
+    }
+
+    public String getPrcessVariable() {
+        return prcessVariable;
+    }
+
+    public void setPrcessVariable(String prcessVariable) {
+        this.prcessVariable = prcessVariable;
+    }
+
+    public String getDefaultValue() {
+        return defaultValue;
+    }
+
+    public void setDefaultValue(String defaultValue) {
+        this.defaultValue = defaultValue;
+    }
+
+    @Override
+    public String toString() {
+        return "MetadataMapping [propertyId=" + propertyId + ", prcessVariable=" + prcessVariable + ", defaultValue="
+                + defaultValue + "]";
+    }
+
+}
diff --git a/backend/src/main/java/nl/contezza/gzac/tezza/domain/UserTezzaResource.java b/backend/src/main/java/nl/contezza/gzac/tezza/domain/UserTezzaResource.java
index e1ca7194171093fbfd0c71bb90d2a91df10e640f..8880d9bdfd00ef7cb893ff73218462cc3e08f40c 100644
--- a/backend/src/main/java/nl/contezza/gzac/tezza/domain/UserTezzaResource.java
+++ b/backend/src/main/java/nl/contezza/gzac/tezza/domain/UserTezzaResource.java
@@ -1,5 +1,7 @@
 package nl.contezza.gzac.tezza.domain;
 
+import java.util.Objects;
+
 public class UserTezzaResource {
     private String userId;
     private String email;
@@ -51,4 +53,19 @@ public class UserTezzaResource {
                 + username + "]";
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o)
+            return true;
+        if (o == null || getClass() != o.getClass())
+            return false;
+        UserTezzaResource that = (UserTezzaResource) o;
+        return Objects.equals(userId, that.userId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(userId);
+    }
+
 }
diff --git a/backend/src/main/java/nl/contezza/gzac/tezza/security/config/TezzaResourceHttpSecurityConfigurer.java b/backend/src/main/java/nl/contezza/gzac/tezza/security/config/TezzaResourceHttpSecurityConfigurer.java
index 1006b57462f02e7d363084ea6327bb5ba4ca5f40..44b7a7c0faf83850e9e73e1cdd946252eadb73bb 100644
--- a/backend/src/main/java/nl/contezza/gzac/tezza/security/config/TezzaResourceHttpSecurityConfigurer.java
+++ b/backend/src/main/java/nl/contezza/gzac/tezza/security/config/TezzaResourceHttpSecurityConfigurer.java
@@ -28,12 +28,18 @@ public class TezzaResourceHttpSecurityConfigurer implements HttpSecurityConfigur
                             .requestMatchers(
                                     antMatcher(GET, "/api/v1/tezza/users/email/{email}"),
                                     antMatcher(GET, "/api/v1/tezza/users/username/{username}"),
+                    .hasAuthority(AuthoritiesConstants.USER)
+                    .antMatchers(HttpMethod.GET, "/api/v1/tezza/group/{groupId}/users")
                                     antMatcher(GET, "/api/v1/tezza/users"),
                                     antMatcher(GET, "/api/v1/tezza/action-definitions"),
                                     antMatcher(GET, "/api/v1/tezza/version"))
                             .authenticated()
                             .requestMatchers(
                                     antMatcher(GET, "/api/v1/tezza/task"),
+                    .hasAuthority(AuthoritiesConstants.USER)
+                    .antMatchers(HttpMethod.GET, "/api/v1/tezza/task/{taskId}/candidate-user")
+                    .hasAuthority(AuthoritiesConstants.USER)
+                    .antMatchers(HttpMethod.POST, "/api/v1/tezza/task/{taskId}/assign")
                                     antMatcher(GET, "/api/v1/tezza/task/{taskId}/history/variables"),
                                     antMatcher(GET, "/api/v1/tezza/task/{taskId}/history"))
                             .authenticated()
diff --git a/backend/src/main/java/nl/contezza/gzac/tezza/service/TezzaService.java b/backend/src/main/java/nl/contezza/gzac/tezza/service/TezzaService.java
index b704b1e6ab627c7e39355580ad3ee03a593d3dc8..5d0fb01687846cfa86a039da1863e98150db34bd 100644
--- a/backend/src/main/java/nl/contezza/gzac/tezza/service/TezzaService.java
+++ b/backend/src/main/java/nl/contezza/gzac/tezza/service/TezzaService.java
@@ -2,12 +2,15 @@ package nl.contezza.gzac.tezza.service;
 
 import com.fasterxml.jackson.core.JsonPointer;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ritense.authorization.role.RoleRepository;
 import com.ritense.document.domain.Document;
 import com.ritense.document.domain.impl.request.NewDocumentRequest;
 import com.ritense.document.service.DocumentSearchService;
 import com.ritense.document.service.DocumentService;
 import com.ritense.document.service.impl.SearchCriteria;
 import com.ritense.document.service.impl.SearchRequest;
+import com.ritense.objecttypenapi.ObjecttypenApiPlugin;
+import com.ritense.objecttypenapi.client.Objecttype;
 import com.ritense.zakenapi.domain.ZaakTypeLink;
 import com.ritense.zakenapi.service.ZaakTypeLinkService;
 import com.ritense.plugin.domain.PluginConfiguration;
@@ -34,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.alfresco.extension.acs.ApiClient;
 import org.alfresco.extension.acs.ApiException;
 import org.alfresco.extension.acs.api.ActionsApi;
+import org.alfresco.extension.acs.api.GroupsApi;
 import org.alfresco.extension.acs.api.NodesApi;
 import org.alfresco.extension.acs.api.VersionsApi;
 import org.alfresco.extension.acs.search.api.SearchApi;
@@ -44,16 +48,22 @@ import org.alfresco.extension.acs.model.ActionBodyExec;
 import org.alfresco.extension.acs.model.ActionDefinitionEntry;
 import org.alfresco.extension.acs.model.ActionDefinitionList;
 import org.alfresco.extension.acs.model.ActionExecResultEntry;
+import org.alfresco.extension.acs.model.GroupMember;
+import org.alfresco.extension.acs.model.GroupMemberEntry;
+import org.alfresco.extension.acs.model.GroupMemberPaging;
 
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.Set;
 import java.util.UUID;
 import java.util.stream.Collectors;
 
@@ -73,6 +83,7 @@ public class TezzaService {
     private final ZaakTypeLinkService zaakTypeLinkService;
     private final UserManagementService userManagementService;
     private final KeycloakService keycloakService;
+    private final RoleRepository roleRepository;
 
     private TezzaPlugin tezzaPlugin;
 
@@ -82,7 +93,8 @@ public class TezzaService {
             ZaakInstanceLinkService zaakInstanceLinkService,
             ZaakTypeLinkService zaakTypeLinkService,
             UserManagementService userManagementService,
-            KeycloakService keycloakService) {
+            KeycloakService keycloakService,
+            RoleRepository roleRepository) {
         this.zaakTypeLinkRepository = zaakTypeLinkRepository;
         this.pluginService = pluginService;
         this.documentService = documentService;
@@ -91,6 +103,7 @@ public class TezzaService {
         this.zaakTypeLinkService = zaakTypeLinkService;
         this.userManagementService = userManagementService;
         this.keycloakService = keycloakService;
+        this.roleRepository = roleRepository;
     }
 
     public List<ZaakTypeLink> findDossierDefinitionsByZaakTypeUrl(URI zaakTypeUrl) {
@@ -125,6 +138,10 @@ public class TezzaService {
         return new VersionsApi(client());
     }
 
+    public GroupsApi getGroupsApi() {
+        return new GroupsApi(client());
+    }
+
     /**
      * Create API client for communication with repo.
      * 
@@ -238,7 +255,12 @@ public class TezzaService {
 
     public String getNodeId(String dossierId) {
         Document document = documentService.get(dossierId);
+        // try {
         return document.content().getValueBy(JsonPointer.compile("/nodeId")).get().asText();
+        // } catch (Exception e) {
+        // logger.warn("error class " + e.getClass().getName() + ": ", e);
+        // return null;
+        // }
     }
 
     private void createTezzaPlugin() {
@@ -342,17 +364,16 @@ public class TezzaService {
 
     public List<UserTezzaResource> getAllUsers() {
         return userManagementService.findByRole(USER).stream()
-                .map(manageableUser -> new UserTezzaResource(
-                        manageableUser.getId(), manageableUser.getEmail(),
-                        manageableUser.getFullName(), manageableUser.getUsername()))
+                .map(user -> new UserTezzaResource(user.getId(), user.getEmail(),
+                        user.getFullName(), user.getUsername()))
                 .collect(Collectors.toList());
     }
 
     public Optional<UserTezzaResource> findUserByEmail(String email) {
         return userManagementService.findByEmail(email)
-                .map(manageableUser -> new UserTezzaResource(
-                        manageableUser.getId(), manageableUser.getEmail(),
-                        manageableUser.getFullName(), manageableUser
+                .map(user -> new UserTezzaResource(user.getId(),
+                        user.getEmail(),
+                        user.getFullName(), user
                                 .getUsername()));
     }
 
diff --git a/backend/src/main/java/nl/contezza/gzac/tezza/web/rest/TezzaResource.java b/backend/src/main/java/nl/contezza/gzac/tezza/web/rest/TezzaResource.java
index bcee971169e369d8adf98fec01a5b3d917add6fa..9ffd6b82665888b5bd396171dfdf8eca0f4d4bb2 100644
--- a/backend/src/main/java/nl/contezza/gzac/tezza/web/rest/TezzaResource.java
+++ b/backend/src/main/java/nl/contezza/gzac/tezza/web/rest/TezzaResource.java
@@ -5,6 +5,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.NoSuchElementException;
 import java.util.Set;
 import java.util.UUID;
 import java.util.stream.Collectors;
@@ -54,216 +55,220 @@ import nl.contezza.gzac.tezza.service.TezzaService;
 @RestController
 @RequestMapping(value = "/api/v1/tezza", produces = { ValtimoMediaType.APPLICATION_JSON_UTF8_VALUE })
 public class TezzaResource {
-        private final ProcessDocumentAssociationService processDocumentAssociationService;
-        private final CamundaProcessService camundaProcessService;
-        private final CamundaTaskService camundaTaskService;
-        private final TezzaService tezzaService;
-        private final ProcessLinkActivityService processLinkActivityService;
-        private final FormSubmissionService formSubmissionService;
-        private final HistoryService historyService;
+    private final ProcessDocumentAssociationService processDocumentAssociationService;
+    private final CamundaProcessService camundaProcessService;
+    private final CamundaTaskService camundaTaskService;
+    private final TezzaService tezzaService;
+    private final ProcessLinkActivityService processLinkActivityService;
+    private final FormSubmissionService formSubmissionService;
+    private final HistoryService historyService;
 
-        private static final String GENERAL_DOSSIER_DEFINITION = "tezzaAlgemeen";
+    private static final String GENERAL_DOSSIER_DEFINITION = "tezzaAlgemeen";
 
-        @SuppressWarnings("unused")
-        private static final Logger logger = LoggerFactory.getLogger(TezzaResource.class);
+    @SuppressWarnings("unused")
+    private static final Logger logger = LoggerFactory.getLogger(TezzaResource.class);
 
-        public TezzaResource(
-                        ProcessDocumentAssociationService processDocumentAssociationService,
-                        CamundaProcessService camundaProcessService,
-                        CamundaTaskService camundaTaskService,
-                        TezzaService tezzaService,
-                        ProcessLinkActivityService processLinkActivityService,
-                        FormSubmissionService formSubmissionService,
-                        HistoryService historyService) {
-                this.processDocumentAssociationService = processDocumentAssociationService;
-                this.camundaProcessService = camundaProcessService;
-                this.camundaTaskService = camundaTaskService;
-                this.tezzaService = tezzaService;
-                this.processLinkActivityService = processLinkActivityService;
-                this.formSubmissionService = formSubmissionService;
-                this.historyService = historyService;
-        }
+    public TezzaResource(
+            ProcessDocumentAssociationService processDocumentAssociationService,
+            CamundaProcessService camundaProcessService,
+            CamundaTaskService camundaTaskService,
+            TezzaService tezzaService,
+            ProcessLinkActivityService processLinkActivityService,
+            FormSubmissionService formSubmissionService,
+            HistoryService historyService) {
+        this.processDocumentAssociationService = processDocumentAssociationService;
+        this.camundaProcessService = camundaProcessService;
+        this.camundaTaskService = camundaTaskService;
+        this.tezzaService = tezzaService;
+        this.processLinkActivityService = processLinkActivityService;
+        this.formSubmissionService = formSubmissionService;
+        this.historyService = historyService;
+    }
 
-        @GetMapping("/dossier/{dossierId}/nodeId")
-        public ResponseEntity<TezzaNode> getNodeId(
-                        @PathVariable String dossierId) {
-                return ResponseEntity.ok(new TezzaNode(tezzaService.getNodeId(dossierId)));
+    @GetMapping("/dossier/{dossierId}/nodeId")
+    public ResponseEntity<TezzaNode> getNodeId(
+            @PathVariable String dossierId) {
+        try {
+            return ResponseEntity.ok(new TezzaNode(tezzaService.getNodeId(dossierId)));
+        } catch (NoSuchElementException e) {
+            return ResponseEntity.notFound().build();
         }
+    }
 
-        @GetMapping("/node/{nodeId}/processes")
-        public ResponseEntity<List<? extends HistoricProcessInstance>> getProcessesByNodeId(
-                        @PathVariable String nodeId) {
-                Document document = tezzaService.findDocument(nodeId);
-                Set<String> processInstanceIds = document != null
-                                ? processDocumentAssociationService.findProcessDocumentInstances(document.id()).stream()
-                                                .map(processDocumentInstance -> processDocumentInstance
-                                                                .processDocumentInstanceId().processInstanceId()
-                                                                .toString())
-                                                .collect(Collectors.toSet())
-                                : Collections.emptySet();
-
-                return ResponseEntity.ok(
-                                processInstanceIds.isEmpty() == false
-                                                ? historyService.createHistoricProcessInstanceQuery()
-                                                                .processInstanceIds(processInstanceIds).list()
-                                                : Collections.emptyList());
-        }
-
-        @GetMapping("/node/{nodeId}/process/startable")
-        public ResponseEntity<List<? extends ProcessDocumentDefinition>> getStartableProcesses(
-                        @PathVariable String nodeId,
-                        @RequestParam(name = "zaaktypeUrl", required = false) URI zaakTypeUrl) {
-                List<? extends ProcessDocumentDefinition> processDefinitions;
-                if (zaakTypeUrl != null) {
-                        String documentDefinitionName = tezzaService
-                                        .findDossierDefinitionsByZaakTypeUrl(zaakTypeUrl)
-                                        .stream()
-                                        .findFirst()
-                                        .map(ZaakTypeLink::getDocumentDefinitionName)
-                                        .orElse(null);
-                        processDefinitions = documentDefinitionName != null
-                                        ? getStartableProcessesAllowed(nodeId, documentDefinitionName)
-                                        : getStartableProcessesAllowed(nodeId, GENERAL_DOSSIER_DEFINITION);
-                } else {
-                        processDefinitions = getStartableProcessesAllowed(nodeId, GENERAL_DOSSIER_DEFINITION);
-                }
-                return ResponseEntity.ok(processDefinitions);
-        }
+    @GetMapping("/node/{nodeId}/processes")
+    public ResponseEntity<List<? extends HistoricProcessInstance>> getProcessesByNodeId(
+            @PathVariable String nodeId) {
+        Document document = tezzaService.findDocument(nodeId);
+        Set<String> processInstanceIds = document != null
+                ? processDocumentAssociationService.findProcessDocumentInstances(document.id()).stream()
+                        .map(processDocumentInstance -> processDocumentInstance
+                                .processDocumentInstanceId().processInstanceId()
+                                .toString())
+                        .collect(Collectors.toSet())
+                : Collections.emptySet();
 
-        private List<? extends ProcessDocumentDefinition> getStartableProcessesAllowed(String nodeId,
-                        String documentDefinitionName) {
-                List<? extends ProcessDocumentDefinition> processDefinitions = processDocumentAssociationService
-                                .findProcessDocumentDefinitions(documentDefinitionName);
-                Boolean hasDocument = tezzaService.findDocument(nodeId) != null;
-                return processDefinitions.stream()
-                                .filter(def -> (def.canInitializeDocument() && !hasDocument) ||
-                                                (def.startableByUser() && hasDocument))
-                                .collect(Collectors.toList());
-        }
+        return ResponseEntity.ok(
+                processInstanceIds.isEmpty() == false
+                        ? historyService.createHistoricProcessInstanceQuery()
+                                .processInstanceIds(processInstanceIds).list()
+                        : Collections.emptyList());
+    }
 
-        @GetMapping("/dossier/{documentDefinitionName}/process/{processDefinitionId}/start-form")
-        public ResponseEntity<ProcessLinkActivityResult<?>> getStartForm(@PathVariable String documentDefinitionName,
-                        @PathVariable String processDefinitionId) {
-                return ResponseEntity.ok(
-                                processLinkActivityService.getStartEventObject(
-                                                processDefinitionId,
-                                                null,
-                                                documentDefinitionName));
+    @GetMapping("/node/{nodeId}/process/startable")
+    public ResponseEntity<List<? extends ProcessDocumentDefinition>> getStartableProcesses(
+            @PathVariable String nodeId,
+            @RequestParam(name = "zaaktypeUrl", required = false) URI zaakTypeUrl) {
+        List<? extends ProcessDocumentDefinition> processDefinitions;
+        if (zaakTypeUrl != null) {
+            String documentDefinitionName = tezzaService
+                    .findDossierDefinitionsByZaakTypeUrl(zaakTypeUrl)
+                    .stream()
+                    .findFirst()
+                    .map(ZaakTypeLink::getDocumentDefinitionName)
+                    .orElse(null);
+            processDefinitions = documentDefinitionName != null
+                    ? getStartableProcessesAllowed(nodeId, documentDefinitionName)
+                    : getStartableProcessesAllowed(nodeId, GENERAL_DOSSIER_DEFINITION);
+        } else {
+            processDefinitions = getStartableProcessesAllowed(nodeId, GENERAL_DOSSIER_DEFINITION);
         }
+        return ResponseEntity.ok(processDefinitions);
+    }
 
-        @PostMapping("/node/{nodeId}/processLink/{processLinkId}/form/submission")
-        public ResponseEntity<FormSubmissionResult> formSubmission(
-                        @PathVariable String nodeId,
-                        @PathVariable UUID processLinkId,
-                        @Validated @RequestBody FormSubmissionRequest request) {
-                Document document = tezzaService.findOrCreateDocument(nodeId, request.getDocumentDefinitionName());
-                tezzaService.handleZaakInstanceLink(request.getDocumentDefinitionName(), request.getZaakUrl(),
-                                request.getZaaktypeUrl(), document);
-                JsonNode submission = request.getSubmission();
+    private List<? extends ProcessDocumentDefinition> getStartableProcessesAllowed(String nodeId,
+            String documentDefinitionName) {
+        List<? extends ProcessDocumentDefinition> processDefinitions = processDocumentAssociationService
+                .findProcessDocumentDefinitions(documentDefinitionName);
+        Boolean hasDocument = tezzaService.findDocument(nodeId) != null;
+        return processDefinitions.stream()
+                .filter(def -> (def.canInitializeDocument() && !hasDocument) ||
+                        (def.startableByUser() && hasDocument))
+                .collect(Collectors.toList());
+    }
 
-                // Voeg relatedNodeIds toe aan submission data
-                List<String> relatedNodeIds = request.getRelatedNodeIds();
-                if (relatedNodeIds != null && !relatedNodeIds.isEmpty()) {
-                        ObjectNode submissionObject = (ObjectNode) submission;
-                        if (!submissionObject.has("pv")) {
-                                submissionObject.putObject("pv").putArray("relatedNodeIds");
-                        }
-                        ObjectNode pvNode = (ObjectNode) submissionObject.path("pv");
-                        ArrayNode relatedNodeIdsArray = pvNode.has("relatedNodeIds")
-                                        && pvNode.get("relatedNodeIds").isArray()
-                                                        ? (ArrayNode) pvNode.get("relatedNodeIds")
-                                                        : pvNode
-                                                                        .putArray("relatedNodeIds");
-                        for (String relatedNodeId : relatedNodeIds) {
-                                relatedNodeIdsArray.add(relatedNodeId);
-                        }
-                }
+    @GetMapping("/dossier/{documentDefinitionName}/process/{processDefinitionId}/start-form")
+    public ResponseEntity<ProcessLinkActivityResult<?>> getStartForm(@PathVariable String documentDefinitionName,
+            @PathVariable String processDefinitionId) {
+        return ResponseEntity.ok(
+                processLinkActivityService.getStartEventObject(
+                        processDefinitionId,
+                        null,
+                        documentDefinitionName));
+    }
 
-                FormSubmissionResult result = formSubmissionService.handleSubmission(
-                                processLinkId,
-                                submission,
-                                null,
-                                document.id().getId().toString(),
-                                null);
+    @PostMapping("/node/{nodeId}/processLink/{processLinkId}/form/submission")
+    public ResponseEntity<FormSubmissionResult> formSubmission(
+            @PathVariable String nodeId,
+            @PathVariable UUID processLinkId,
+            @Validated @RequestBody FormSubmissionRequest request) {
+        Document document = tezzaService.findOrCreateDocument(nodeId, request.getDocumentDefinitionName());
+        tezzaService.handleZaakInstanceLink(request.getDocumentDefinitionName(), request.getZaakUrl(),
+                request.getZaaktypeUrl(), document);
+        JsonNode submission = request.getSubmission();
 
-                return ResponseEntity.ok(result);
+        // Voeg relatedNodeIds toe aan submission data
+        List<String> relatedNodeIds = request.getRelatedNodeIds();
+        if (relatedNodeIds != null && !relatedNodeIds.isEmpty()) {
+            ObjectNode submissionObject = (ObjectNode) submission;
+            if (!submissionObject.has("pv")) {
+                submissionObject.putObject("pv").putArray("relatedNodeIds");
+            }
+            ObjectNode pvNode = (ObjectNode) submissionObject.path("pv");
+            ArrayNode relatedNodeIdsArray = pvNode.has("relatedNodeIds")
+                    && pvNode.get("relatedNodeIds").isArray()
+                            ? (ArrayNode) pvNode.get("relatedNodeIds")
+                            : pvNode
+                                    .putArray("relatedNodeIds");
+            for (String relatedNodeId : relatedNodeIds) {
+                relatedNodeIdsArray.add(relatedNodeId);
+            }
         }
 
-        /**
-         * Deze fuctie zoek op basis van de zaakInstanceUrl naar alle taken die
-         * hieraangekoppeld zijn in GZAC.
-         * 
-         * @param nodeId      - NodeId vanuit een extern systeem, zoals een ZaakId of
-         *                    een Alfresco NodeId
-         * @param filter      - De filteropties worden gescheiden door een ';'. Elke
-         *                    key/value pair wordt gescheiden door een ':'
-         * @param pageable    - Pageable object om paging en sorting toe te voegen
-         *                    aan de response
-         * @param userDetails - Door Springframework aangeleverde userDetails
-         * @return Een Page met eventueel gevonden taken
-         */
-        @GetMapping("/node/{nodeId}/task/search")
-        public ResponseEntity<Page<TaskInstanceWithIdentityLink>> searchTaskByNodeId(
-                        @PathVariable String nodeId,
-                        @RequestParam(name = "filter", required = false) String filter,
-                        Pageable pageable,
-                        @AuthenticationPrincipal UserDetails userDetails) {
-                List<TaskInstanceWithIdentityLink> tasks = new ArrayList<>();
+        FormSubmissionResult result = formSubmissionService.handleSubmission(
+                processLinkId,
+                submission,
+                null,
+                document.id().getId().toString(),
+                null);
 
-                Document docment = tezzaService.findDocument(
-                                nodeId);
-                if (docment != null) {
-                        // Voor wanneer "assignee" is '-me-', zet de username van de aanroepende
-                        // gebruiker
-                        String username = tezzaService.findUserByEmail(userDetails.getUsername()).isPresent()
-                                        ? tezzaService.findUserByEmail(userDetails.getUsername()).get().getUserId()
-                                        : "";
+        return ResponseEntity.ok(result);
+    }
 
-                        List<Map.Entry<String, String>> filters = TezzaResourceShared.parseKeyValuePairs(filter);
+    /**
+     * Deze fuctie zoek op basis van de zaakInstanceUrl naar alle taken die
+     * hieraangekoppeld zijn in GZAC.
+     * 
+     * @param nodeId      - NodeId vanuit een extern systeem, zoals een ZaakId of
+     *                    een Alfresco NodeId
+     * @param filter      - De filteropties worden gescheiden door een ';'. Elke
+     *                    key/value pair wordt gescheiden door een ':'
+     * @param pageable    - Pageable object om paging en sorting toe te voegen
+     *                    aan de response
+     * @param userDetails - Door Springframework aangeleverde userDetails
+     * @return Een Page met eventueel gevonden taken
+     */
+    @GetMapping("/node/{nodeId}/task/search")
+    public ResponseEntity<Page<TaskInstanceWithIdentityLink>> searchTaskByNodeId(
+            @PathVariable String nodeId,
+            @RequestParam(name = "filter", required = false) String filter,
+            Pageable pageable,
+            @AuthenticationPrincipal UserDetails userDetails) {
+        List<TaskInstanceWithIdentityLink> tasks = new ArrayList<>();
 
-                        // GET process-document/instance/document/${id}
-                        List<? extends ProcessDocumentInstance> processDocumentInstances = processDocumentAssociationService
-                                        .findProcessDocumentInstances(
-                                                        JsonSchemaDocumentId.existingId(docment.id().getId()));
+        Document docment = tezzaService.findDocument(
+                nodeId);
+        if (docment != null) {
+            // Voor wanneer "assignee" is '-me-', zet de username van de aanroepende
+            // gebruiker
+            String username = tezzaService.findUserByEmail(userDetails.getUsername()).isPresent()
+                    ? tezzaService.findUserByEmail(userDetails.getUsername()).get().getUserId()
+                    : "";
 
-                        // Ophalen taken per processInstance
-                        for (ProcessDocumentInstance processDocumentInstance : processDocumentInstances) {
-                                String processInstanceId = processDocumentInstance.processDocumentInstanceId()
-                                                .processInstanceId()
-                                                .toString();
+            List<Map.Entry<String, String>> filters = TezzaResourceShared.parseKeyValuePairs(filter);
 
-                                // GET process/${id}/tasks
-                                List<TaskInstanceWithIdentityLink> tasksInstance = AuthorizationContext
-                                                .runWithoutAuthorization(
-                                                                () -> camundaProcessService
-                                                                                .findProcessInstanceById(
-                                                                                                processInstanceId)
-                                                                                .map(processInstance -> camundaTaskService
-                                                                                                .getProcessInstanceTasks(
-                                                                                                                processInstance.getId(),
-                                                                                                                processInstance.getBusinessKey()))
-                                                                                .orElse(new ArrayList<>())
-                                                                                .stream()
-                                                                                .filter(task -> TezzaResourceShared
-                                                                                                .isConformFilter(task,
-                                                                                                                filters,
-                                                                                                                username))
-                                                                                .collect(Collectors.toList()));
-                                tasks.addAll(tasksInstance);
-                        }
-                }
+            // GET process-document/instance/document/${id}
+            List<? extends ProcessDocumentInstance> processDocumentInstances = processDocumentAssociationService
+                    .findProcessDocumentInstances(
+                            JsonSchemaDocumentId.existingId(docment.id().getId()));
 
-                // Sorteer het resultaat aan de hand van de Sort in het Pageable object
-                long pageSize = pageable.getPageNumber(), size = pageable.getPageSize();
-                List<TaskInstanceWithIdentityLink> tasksPaged = tasks.stream()
-                                .sorted(TezzaResourceShared
-                                                .getComparator(pageable))
-                                .skip(pageSize * size)
-                                .limit(size)
-                                .collect(Collectors.toList());
+            // Ophalen taken per processInstance
+            for (ProcessDocumentInstance processDocumentInstance : processDocumentInstances) {
+                String processInstanceId = processDocumentInstance.processDocumentInstanceId()
+                        .processInstanceId()
+                        .toString();
 
-                // Retourneer het resultaat als een Page, met het totale aantal gevonden
-                Page<TaskInstanceWithIdentityLink> page = new PageImpl<>(tasksPaged, pageable, tasks.size());
-                return ResponseEntity.ok(page);
+                // GET process/${id}/tasks
+                List<TaskInstanceWithIdentityLink> tasksInstance = AuthorizationContext
+                        .runWithoutAuthorization(
+                                () -> camundaProcessService
+                                        .findProcessInstanceById(
+                                                processInstanceId)
+                                        .map(processInstance -> camundaTaskService
+                                                .getProcessInstanceTasks(
+                                                        processInstance.getId(),
+                                                        processInstance.getBusinessKey()))
+                                        .orElse(new ArrayList<>())
+                                        .stream()
+                                        .filter(task -> TezzaResourceShared
+                                                .isConformFilter(task,
+                                                        filters,
+                                                        username))
+                                        .collect(Collectors.toList()));
+                tasks.addAll(tasksInstance);
+            }
         }
+
+        // Sorteer het resultaat aan de hand van de Sort in het Pageable object
+        long pageSize = pageable.getPageNumber(), size = pageable.getPageSize();
+        List<TaskInstanceWithIdentityLink> tasksPaged = tasks.stream()
+                .sorted(TezzaResourceShared
+                        .getComparator(pageable))
+                .skip(pageSize * size)
+                .limit(size)
+                .collect(Collectors.toList());
+
+        // Retourneer het resultaat als een Page, met het totale aantal gevonden
+        Page<TaskInstanceWithIdentityLink> page = new PageImpl<>(tasksPaged, pageable, tasks.size());
+        return ResponseEntity.ok(page);
+    }
 }
\ No newline at end of file
diff --git a/backend/src/main/java/nl/contezza/gzac/tezza/web/rest/TezzaSupportResource.java b/backend/src/main/java/nl/contezza/gzac/tezza/web/rest/TezzaSupportResource.java
index 64f482b149cb01be24c743591492f06e2fc19255..2c01147681bd61d7b4f17d2a57eecbfdd16ceeac 100644
--- a/backend/src/main/java/nl/contezza/gzac/tezza/web/rest/TezzaSupportResource.java
+++ b/backend/src/main/java/nl/contezza/gzac/tezza/web/rest/TezzaSupportResource.java
@@ -41,6 +41,11 @@ public class TezzaSupportResource {
                 .orElseGet(() -> ResponseEntity.notFound().build());
     }
 
+    @GetMapping("/group/{groupId}/users")
+    public ResponseEntity<List<UserTezzaResource>> getUsersByGroup(@PathVariable String groupId) {
+        return ResponseEntity.ok(tezzaService.getUsersByGroup(groupId));
+    }
+
     @GetMapping("/action-definitions")
     public ResponseEntity<List<ActionDefinitionEntry>> getActionExecutorList() {
         try {
diff --git a/backend/src/main/java/nl/contezza/gzac/tezza/web/rest/TezzaTaskResource.java b/backend/src/main/java/nl/contezza/gzac/tezza/web/rest/TezzaTaskResource.java
index a83b1026a096bd58da82841c773d704f9e88d5c8..43fb881f1987c062d5abd72d5c837653591dbe9c 100644
--- a/backend/src/main/java/nl/contezza/gzac/tezza/web/rest/TezzaTaskResource.java
+++ b/backend/src/main/java/nl/contezza/gzac/tezza/web/rest/TezzaTaskResource.java
@@ -1,7 +1,9 @@
 package nl.contezza.gzac.tezza.web.rest;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 import org.camunda.bpm.engine.HistoryService;
@@ -18,89 +20,142 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.ritense.valtimo.camunda.domain.CamundaIdentityLink;
 import com.ritense.valtimo.contract.domain.ValtimoMediaType;
 import com.ritense.valtimo.repository.camunda.dto.TaskInstanceWithIdentityLink;
 import com.ritense.valtimo.service.CamundaTaskService;
+import com.ritense.valtimo.service.request.AssigneeRequest;
 
+import nl.contezza.gzac.tezza.domain.UserTezzaResource;
 import nl.contezza.gzac.tezza.service.TezzaService;
 
 @RestController
 @RequestMapping(value = "/api/v1/tezza", produces = { ValtimoMediaType.APPLICATION_JSON_UTF8_VALUE })
 public class TezzaTaskResource {
-    private final CamundaTaskService camundaTaskService;
-    private final HistoryService historyService;
-    private final TezzaService tezzaService;
-
-    @SuppressWarnings("unused")
-    private static final Logger logger = LoggerFactory.getLogger(TezzaTaskResource.class);
-
-    public TezzaTaskResource(
-            CamundaTaskService camundaTaskService,
-            HistoryService historyService,
-            TezzaService tezzaService) {
-        this.camundaTaskService = camundaTaskService;
-        this.historyService = historyService;
-        this.tezzaService = tezzaService;
-    }
-
-    @GetMapping("/task/{taskId}/history/variables")
-    public ResponseEntity<List<HistoricDetail>> getHistoricTaskVariables(@PathVariable String taskId) {
-        List<HistoricDetail> historicDetails = historyService.createHistoricDetailQuery().formFields()
-                .taskId(taskId)
-                .list();
-        return ResponseEntity.ok(historicDetails);
-    }
-
-    @GetMapping("/task/{taskId}/history")
-    public ResponseEntity<HistoricTaskInstance> getHistoricTask(@PathVariable String taskId) {
-        List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery()
-                .taskId(taskId)
-                .list();
-        return historicTaskInstances.size() > 0 ? ResponseEntity.ok(historicTaskInstances.get(0))
-                : ResponseEntity.notFound().build();
-    }
-
-    @GetMapping("/task")
-    public ResponseEntity<Page<TaskInstanceWithIdentityLink>> getAllOpenTasks(String filter,
-            Pageable pageable,
-            @AuthenticationPrincipal UserDetails userDetails)
-            throws IllegalAccessException {
-        // Voor wanneer "assignee" is '-me-', zet de username van de aanroepende
-        // gebruiker
-        // String username = userDetails.getUsername();
-
-        String username = tezzaService.findUserByEmail(userDetails.getUsername()).isPresent()
-                ? tezzaService.findUserByEmail(userDetails.getUsername()).get().getUserId()
-                : "";
-        List<Map.Entry<String, String>> filters = TezzaResourceShared.parseKeyValuePairs(filter);
-
-        // Fetch all active historic process instances
-        List<HistoricProcessInstance> activeProcesses = historyService
-                .createHistoricProcessInstanceQuery().active()
-                .list();
-
-        // Filter tasks based on the provided criteria
-        List<TaskInstanceWithIdentityLink> filteredTasks = activeProcesses.stream()
-                .flatMap(process -> camundaTaskService.getProcessInstanceTasks(
-                        process.getId(), process.getBusinessKey()).stream())
-                .filter(task -> TezzaResourceShared
-                        .isConformFilter(task, filters, username))
-                .collect(Collectors.toList());
-
-        // Sort and paginate the filtered tasks
-        List<TaskInstanceWithIdentityLink> pagedTasks = filteredTasks.stream()
-                .sorted(TezzaResourceShared
-                        .getComparator(pageable))
-                .skip(pageable.getPageNumber() * pageable.getPageSize())
-                .limit(pageable.getPageSize())
-                .collect(Collectors.toList());
-
-        // Create and return a Page object
-        Page<TaskInstanceWithIdentityLink> page = new PageImpl<>(pagedTasks, pageable, filteredTasks.size());
-        return ResponseEntity.ok(page);
-    }
-
+	private final CamundaTaskService camundaTaskService;
+	private final HistoryService historyService;
+	private final TezzaService tezzaService;
+
+	@SuppressWarnings("unused")
+	private static final Logger logger = LoggerFactory.getLogger(TezzaTaskResource.class);
+
+	public TezzaTaskResource(
+			CamundaTaskService camundaTaskService,
+			HistoryService historyService,
+			TezzaService tezzaService) {
+		this.camundaTaskService = camundaTaskService;
+		this.historyService = historyService;
+		this.tezzaService = tezzaService;
+	}
+
+	@GetMapping("/task/{taskId}/history/variables")
+	public ResponseEntity<List<HistoricDetail>> getHistoricTaskVariables(@PathVariable String taskId) {
+		List<HistoricDetail> historicDetails = historyService.createHistoricDetailQuery().formFields()
+				.taskId(taskId)
+				.list();
+		return ResponseEntity.ok(historicDetails);
+	}
+
+	@GetMapping("/task/{taskId}/history")
+	public ResponseEntity<HistoricTaskInstance> getHistoricTask(@PathVariable String taskId) {
+		List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery()
+				.taskId(taskId)
+				.list();
+		return historicTaskInstances.size() > 0 ? ResponseEntity.ok(historicTaskInstances.get(0))
+				: ResponseEntity.notFound().build();
+	}
+
+	@GetMapping("/task")
+	public ResponseEntity<Page<TaskInstanceWithIdentityLink>> getAllOpenTasks(String filter,
+			Pageable pageable,
+			@AuthenticationPrincipal UserDetails userDetails)
+			throws IllegalAccessException {
+		// Voor wanneer "assignee" is '-me-', zet de username van de aanroepende
+		// gebruiker
+		// String username = userDetails.getUsername();
+
+		String username = tezzaService.findUserByEmail(userDetails.getUsername()).isPresent()
+				? tezzaService.findUserByEmail(userDetails.getUsername()).get().getUserId()
+				: "";
+		List<Map.Entry<String, String>> filters = TezzaResourceShared.parseKeyValuePairs(filter);
+
+		// Fetch all active historic process instances
+		List<HistoricProcessInstance> activeProcesses = historyService
+				.createHistoricProcessInstanceQuery().active()
+				.list();
+
+		// Filter tasks based on the provided criteria
+		List<TaskInstanceWithIdentityLink> filteredTasks = activeProcesses.stream()
+				.flatMap(process -> camundaTaskService.getProcessInstanceTasks(
+						process.getId(), process.getBusinessKey()).stream())
+				.filter(task -> TezzaResourceShared
+						.isConformFilter(task, filters, username))
+				.collect(Collectors.toList());
+
+		// Sort and paginate the filtered tasks
+		List<TaskInstanceWithIdentityLink> pagedTasks = filteredTasks.stream()
+				.sorted(TezzaResourceShared
+						.getComparator(pageable))
+				.skip(pageable.getPageNumber() * pageable.getPageSize())
+				.limit(pageable.getPageSize())
+				.collect(Collectors.toList());
+
+		// Create and return a Page object
+		Page<TaskInstanceWithIdentityLink> page = new PageImpl<>(pagedTasks, pageable, filteredTasks.size());
+		return ResponseEntity.ok(page);
+	}
+
+	/**
+	 * Deze REST functie geeft alle candidate users voor een taak terug. Hiervoor
+	 * kijkt het systeem in volgorde naar de volgende bronnen:
+	 * - Candidate users uit proces;
+	 * - candidate groups vergeleken met keycloak;
+	 * - candidate groups vergeleken met alfresco.
+	 * In alle gevallen worden de users uit keycloak gehaald, voor ze geretourneerd
+	 * worden.
+	 * 
+	 * @param taskId de taak waarvan candidate users verzameld moeten worden
+	 * @return de candidate users
+	 */
+	@GetMapping("/task/{taskId}/candidate-user")
+	public ResponseEntity<List<UserTezzaResource>> getCandidates(@PathVariable String taskId) {
+		return ResponseEntity.ok(getCandidatesList(taskId));
+	}
+
+	@PostMapping("/task/{taskId}/assign")
+	public ResponseEntity<Void> assign(@PathVariable String taskId, @RequestBody AssigneeRequest assigneeRequest) {
+		if (isCandidate(taskId, assigneeRequest.getAssignee())) {
+			camundaTaskService.assign(taskId, assigneeRequest.getAssignee());
+			return ResponseEntity.ok().build();
+		} else {
+			throw new RuntimeException("User is not a candidate for this task");
+		}
+	}
+
+	private boolean isCandidate(String taskId, String email) {
+		return getCandidatesList(taskId).stream()
+				.anyMatch(user -> user.getEmail().equalsIgnoreCase(email));
+	}
+
+	private List<UserTezzaResource> getCandidatesList(String taskId) {
+		List<CamundaIdentityLink> identityLinks = camundaTaskService.getIdentityLinksForTask(taskId);
+		List<UserTezzaResource> candidateUsers = new ArrayList<>();
+		for (CamundaIdentityLink identityLink : identityLinks) {
+			if (identityLink.getUserId() != null && !identityLink.getUserId().isEmpty()) {
+				// Ophalen gebruikers uit keycloak die direct als candidate zijn aangemeld
+				Optional<UserTezzaResource> user = tezzaService.findUserByEmail(identityLink.getUserId());
+				if (user.isPresent()) {
+					candidateUsers.add(user.get());
+				}
+			} else if (identityLink.getGroupId() != null && !identityLink.getGroupId().isEmpty()) {
+				candidateUsers.addAll(tezzaService.getUsersByGroup(identityLink.getGroupId()));
+			}
+		}
+		return candidateUsers;
+	}
 }
\ No newline at end of file
diff --git a/backend/src/main/resources/autodeploy.pluginconfig.json b/backend/src/main/resources/autodeploy.pluginconfig.json
index 710865d9950de7cdde0898e4d9d1b0faf5a64f20..c5fa120cf6679c82a33eee8a4de10e621ed9a627 100644
--- a/backend/src/main/resources/autodeploy.pluginconfig.json
+++ b/backend/src/main/resources/autodeploy.pluginconfig.json
@@ -58,5 +58,22 @@
       "emailFrom": "demo@contezza.nl",
       "templateRm": "notify_user_destruction"
     }
+  },
+  {
+    "id": "71d51bfb-e25b-49ff-ba5c-4c93afd76979",
+    "title": "Tezza Objecttypen Auth",
+    "pluginDefinitionKey": "objecttokenauthentication",
+    "properties": {
+      "token": "apikey_alfresco_objecttypen"
+    }
+  },
+  {
+    "id": "28082865-cb8d-4a2d-b62a-10e1b91f1863",
+    "title": "Tezza objecttypen",
+    "pluginDefinitionKey": "objecttypenapi",
+    "properties": {
+      "url": "http://objecttypen.local:8000/api/v2/",
+      "authenticationPluginConfiguration": "71d51bfb-e25b-49ff-ba5c-4c93afd76979"
+    }
   }
 ]
diff --git a/docs/pom.xml b/docs/pom.xml
index 6c12b488cce5e798b5fab8c23dad91f4c8f02a7d..3a4dd26be78cde0730f275597a38c6763ea0fe98 100644
--- a/docs/pom.xml
+++ b/docs/pom.xml
@@ -4,7 +4,7 @@
 	<parent>
 		<groupId>nl.contezza.tezza.gzac</groupId>
 		<artifactId>tezza-gzac</artifactId>
-		<version>0.5.1-SNAPSHOT</version>
+		<version>0.5.6-SNAPSHOT</version>
 		<relativePath>../pom.xml</relativePath>
 	</parent>
 
diff --git a/docs/src/docs/asciidoc/includes/_introduction.adoc b/docs/src/docs/asciidoc/includes/_introduction.adoc
index d8c36cc145c7f6d0219122760f0edaad474dac2a..887d128539eee70aea0c1672ebccc73483b93602 100644
--- a/docs/src/docs/asciidoc/includes/_introduction.adoc
+++ b/docs/src/docs/asciidoc/includes/_introduction.adoc
@@ -108,6 +108,12 @@ Dit haald de gegevens van een afgeronde taak op.
 
 Waarom: Voor een histories overzicht is het nodig om te zien wat de gegevens van een taak waren bij afronding.
 
+*/api/v1/tezza/task/{taskId}/candidate-user* +
+Dit haald alle Candidate users van een taak op. Hiervoor worden gebruikers die direct aan de taak zijn gekoppeld uit Keycloak.
+Voor groupen die als candidate zijn gekoppeld wordt de lijst met gebruikers uit Keycloak of Alfresco gehaald. De service kijkt eerst of de groep in Keycloak bestaat, en geeft de gebruikers daarvan terug. Als deze niet bestaat in Keycloak, kijkt de service of de groep in Alfresco bestaat. Als dat het geval is, worden de gebruikers recursief opgehaald vanuit de Alfresco group en subgroepen. Gebruikers die in Alfresco gevonden worden, worden alleen teruggegeven als deze ook in Keycloak bestaan.
+
+Waarom: We moeten de groepen structuur van alfresco in GZAC kunnen gebruiken.
+
 ==== Tezza Support Resource
 Dit bevat resources voor de support van formulieren en front-end configuratie binnen GZAC.
 
@@ -116,6 +122,11 @@ Dit haalt alle gebruikers op uit de groep ROLE_USER. Hiervan worden enkel de ema
 
 Waarom: We moeten in een form een gebruiker kunnen aanwijzen voor toekomstige acties.
 
+*/api/v1/tezza/group/{groupId}/users* +
+Dit haalt alle gebruikers op van een bepaalde group. De service kijkt eerst of de groep in Keycloak bestaat, en geeft de gebruikers daarvan terug. Als deze niet bestaat in Keycloak, kijkt de service of de groep in Alfresco bestaat. Als dat het geval is, worden de gebruikers recursief opgehaald vanuit de Alfresco group en subgroepen. Gebruikers die in Alfresco gevonden worden, worden alleen teruggegeven als deze ook in Keycloak bestaan.
+
+Waarom: We moeten de groepen structuur van alfresco in GZAC kunnen gebruiken.
+
 */api/v1/tezza/users/email/{email}* +
 Dit haalt een gebruiker op die voldoet aan de opgegeven email. Hiervan worden enkel de email, gebruikersnaam en volledige naam geretourneerd.
 
@@ -198,54 +209,55 @@ Deze bean is ontworpen voor het documentGoedkeuring proces. Het geeft het proces
 * relatedNodeIds: Een ArrayList van nodeId's uit alfresco;
 * de lijst van gebruikers als een List meegegeven wordt, als de email van elke gebruiker.
 
-De bean bevat twee publieke functies.
+De bean bevat vier publieke functies.
 
 *updateNodeWithWorkflowIds* +
-Dit voegd aan alle nodes uit 'relatedNodeIds' een property tza:workflowIds toe, met het huidige processInstanceId. Als er al een lijst met ids bestaat, wordt de nieuwe processInstanceId hier aan toegevoegd. Dit is een update buiten GZAC, bij Alfresco, via de Java API.
+Dit voegt aan alle nodes uit 'relatedNodeIds' een property tza:workflowIds toe, met het huidige processInstanceId. Als er al een lijst met ids bestaat, wordt de nieuwe processInstanceId hier aan toegevoegd. Dit is een update buiten GZAC, bij Alfresco, via de Java API.
 
 *removeWorkflowId* +
-Dit verwijderd het huidige processInstanceId van alle nodes uit 'relatedNodeIds', in property tza:workflowIds. Overige processInstanceIds in de lijst zullen blijfen bestaan op de node. Als de lijst na verwijderen van huidige processInstanceId leeg is, wordt het aspect van de node verwijderd. Dit is een update buiten GZAC, bij Alfresco, via de Java API.
+Dit verwijdert het huidige processInstanceId van alle nodes uit 'relatedNodeIds', in property tza:workflowIds. Overige processInstanceIds in de lijst zullen blijven bestaan op de node. Als de lijst na verwijderen van huidige processInstanceId leeg is, wordt het aspect van de node verwijderd. Dit is een update buiten GZAC, bij Alfresco, via de Java API.
 
 *moveNode* +
 Deze functie maakt een nieuwe folder aan onder -shared-, met het id van de processInstance als naam. Toegang wordt gelimiteerd tot initiator en bpm_assignee. Vervolgens worden alle bestanden benoemd in relatedNodeIds verplaats naar deze folder.
-Er wordt een vaiabele 'originalNodes' toegevoegd aan het proces voor toekomstige terugplaatsing.
+Er wordt een variabele 'originalNodes' toegevoegd aan het proces voor toekomstige terugplaatsing.
 
 *restoreNodes* +
-Deze functie plaats alle nodes benoemd in 'originalNodes' terug op de oorspronkelijke locatie, en verwijderd de folder in -shared-
+Deze functie plaatst alle nodes benoemd in 'originalNodes' op de juiste locatie, en verwijdert de folder in -shared-.
+Als er voor het dossier een nodeId bekend is, worden bestanden daarnaartoe verplaats. Is deze niet bekend, dan worden de bestanden op de orspronkelijke locatie teruggezet.
 
 ==== SimpleDestructionBean
 Deze bean is ontworpen voor het simpleDestruction proces. Dit heeft 2 support functies voor dat proces.
 
 *sendEmail* +
-Dit kan als taskListner expressie worden toegevoegd aan het begin van een taak. De expressie daarvoor is '${simpleDestructionBean.sendEmail(task)}'.
-Dit haald de gebruiker op die is toegewezen aan de taak, en stuurt via de Alfresco Action 'mail' een email, met het template 'notify_user_destruction'. Dit template moet aanwezig zijn in de Alfresco implementatie waar Camunda en Tezza mee gekoppeld zijn. Dit wordt niet vanuit deze module ingeregeld.
+Dit kan als taskListener expressie worden toegevoegd aan het begin van een taak. De expressie daarvoor is '${simpleDestructionBean.sendEmail(task)}'.
+Dit haalt de gebruiker op die is toegewezen aan de taak, en stuurt via de Alfresco Action 'mail' een email, met het template 'notify_user_destruction'. Dit template moet aanwezig zijn in de Alfresco implementatie waar Camunda en Tezza mee gekoppeld zijn. Dit wordt niet vanuit deze module ingeregeld.
 
 *addComment* +
-Dit kan als taskListner expressie worden toegevoegd aan het einde van een taak. De expressie daarvoor is '${simpleDestructionBean.addComment(task)}'.
+Dit kan als taskListener expressie worden toegevoegd aan het einde van een taak. De expressie daarvoor is '${simpleDestructionBean.addComment(task)}'.
 Bij uitvoering, wordt het commentaar van de taak aan de history toegevoegd, en wordt de variabele 'latestComment' gevuld met het commentaar. Aan het einde van de functie wordt de waarde van het commentaar veld geleegd.
 
 ==== TezzaProcessBean
 Deze bean is ontworpen voor de standaard Tezza processen proces. Dit heeft 2 support functies voor deze processen.
 
 *sendEmail* +
-Dit kan als taskListner expressie worden toegevoegd aan het begin van een taak. De expressie daarvoor is '${tezzaProcessBean.sendEmail(task)}'.
+Dit kan als taskListener expressie worden toegevoegd aan het begin van een taak. De expressie daarvoor is '${tezzaProcessBean.sendEmail(task)}'.
 Dit haalt de gebruiker op die is toegewezen aan de taak, en stuurt via de Alfresco Action 'mail' een email, met het template 'notify_user_tezza'. Dit template moet aanwezig zijn in de Alfresco implementatie waar Camunda en Tezza mee gekoppeld zijn. Dit wordt niet vanuit deze module ingeregeld.
 
 *addComment* +
-Dit kan als taskListner expressie worden toegevoegd aan het einde van een taak. De expressie daarvoor is '${tezzaProcessBean.addComment(task)}'.
+Dit kan als taskListener expressie worden toegevoegd aan het einde van een taak. De expressie daarvoor is '${tezzaProcessBean.addComment(task)}'.
 Bij uitvoering, wordt het commentaar van de taak aan de history toegevoegd. Aan het einde van de functie wordt de waarde van het commentaar veld geleegd. Dit wordt enkel gebruikt in processen met parallelle taken op dit moment.
 
-=== Listners
-Dit beschrijft Task en Execution Listners die gedefinieerd zijn binnen dit project. Deze kunnen in een Camunda proces worden geïmplementeerd.
+=== Listeners
+Dit beschrijft Task en Execution Listeners die gedefinieerd zijn binnen dit project. Deze kunnen in een Camunda proces worden geïmplementeerd.
 
-==== FormFieldToLocalListner
-Dit is een Task Listner voor het overzetten van alle Form Fields die een taak in Camunda gekregen heeft vanuit form.io. maakt voor elke Form Field een variableLocal aan op taak niveau met dezelfde naam. Deze kunnen vervolgens in andere task listners worden gebruikt, mits deze na uitvoering van deze listner worden uitgevoerd. Enkel velden uit het form.io formulier die als proces variabelen zijn gedefinieerd, zijn hier beschikbaar. Velden die aan het GZAC dossier zijn gekoppeld, zullen hier niet beschikbaar zijn.
+==== FormFieldToLocalListener
+Dit is een Task Listener voor het overzetten van alle Form Fields die een taak in Camunda gekregen heeft vanuit form.io. maakt voor elke Form Field een variableLocal aan op taak niveau met dezelfde naam. Deze kunnen vervolgens in andere task listeners worden gebruikt, mits deze na uitvoering van deze listener worden uitgevoerd. Enkel velden uit het form.io formulier die als proces variabelen zijn gedefinieerd, zijn hier beschikbaar. Velden die aan het GZAC dossier zijn gekoppeld, zullen hier niet beschikbaar zijn.
 
 === Formulieren
-Formulieren worden opgebouwd met behulp van form.io, en wordenopgeslagen in de database van GZAC. Deze kunnen op twee manieren worden toegevoegd aan een GZAC installatie. Ze kunnen aangemaakt worden in de GZAC gebruikers interface onder 'Admin -> Formulieren', of ze kunnen via autodeploy worden meegeven tijdens opstarten. Een formulier dat mee wordt gegeven via autodeploy, wordt altijd als read-only opgevoerd, en overschrijft een bestaand formulier met dezelfde naam. De locatie voor autodeploy van formulieren is 'resource/config/form'. Hier worden enkele design principes voor formulieren binnen Tezza beschreven.
+Formulieren worden opgebouwd met behulp van form.io, en worden opgeslagen in de database van GZAC. Deze kunnen op twee manieren worden toegevoegd aan een GZAC installatie. Ze kunnen aangemaakt worden in de GZAC gebruikers interface onder 'Admin -> Formulieren', of ze kunnen via autodeploy worden meegeven tijdens opstarten. Een formulier dat mee wordt gegeven via autodeploy, wordt altijd als read-only opgevoerd, en overschrijft een bestaand formulier met dezelfde naam. De locatie voor autodeploy van formulieren is 'resource/config/form'. Hier worden enkele design principes voor formulieren binnen Tezza beschreven.
 
 ==== Aanroep API's
-Als een element van een form data van de backend nodig heeft, kan deze wordn opgehaald met een GET request naar de back-end. Hiervoor wordt dan een relatieve url gebruikt. Bijvoorbeeld als de url naar de API 'http://localhost:9091/api/v1/tezza/users' is, wordt dit '/api/v1/tezza/users' in het formulier. Form.io heeft een functie die dit vertaald naar de correcte url, getFormioAppConfig().
+Als een element van een form data van de backend nodig heeft, kan deze worden opgehaald met een GET request naar de back-end. Hiervoor wordt dan een relatieve url gebruikt. Bijvoorbeeld als de url naar de API 'http://localhost:9091/api/v1/tezza/users' is, wordt dit '/api/v1/tezza/users' in het formulier. Form.io heeft een functie die dit vertaald naar de correcte url, getFormioAppConfig().
 
 Als er een externe applicatie wordt gebruikt om de formulieren te laden, moet deze functie geimplementeerd worden. Denk ook aan eventuele toevoegingen aan de URL. De standaard functie voegt de location.origin toe aan de URL, maar mogelijk moet er voor interne redirects nog een extra prefix bij.
 
@@ -288,12 +300,12 @@ Hier wordt de waarde van 'gzacHost' meegegeven via een Docker variabele, APP_CON
 Voor meer informatie zie: https://help.form.io/developers/introduction/application#application-configuration
 
 ==== Button styling
-Om buttons die bedoeld zijn voor het beindiggen van een taak correct te tonen in externe applicaties zoals Tezza, moet er een Custom CSS Class worden gezet op de buttons. De class is 'contezza-submit-button'. Dit geeft de front-end applicaties de mogelijkheid dze buttons te herkennen, en deze correct te plaatsen binnen de applicatie.
+Om buttons die bedoeld zijn voor het beëindigen van een taak correct te tonen in externe applicaties zoals Tezza, moet er een Custom CSS Class op de buttons worden gezet. De class is 'contezza-submit-button'. Dit geeft de front-end applicaties de mogelijkheid deze buttons te herkennen, en deze correct te plaatsen binnen de applicatie.
 
 Verder wordt enkel de button theme 'Primary' ondersteund in de CSS van Tezza. Alle themas
 
 ==== Gebruik Goedkeuren & Afwijzen knoppen.
-Voor een review taak waar een gebruiker taken kan goedkeuren en afkeuren, gaat de voorkeur uit naar knoppen voor deze acties, i.p.v. een selecte en een enkele knop om de keuze te bevestigen. Om dit te doen zijn twee knoppen nodig met een custom actie, en een hidden field voor de gemaakte keuze. 
+Voor een review taak waar een gebruiker taken kan goedkeuren en afkeuren, gaat de voorkeur uit naar knoppen voor deze acties, i.p.v. een select en een enkele knop om de keuze te bevestigen. Om dit te doen zijn twee knoppen nodig met een custom actie, en een hidden field voor de gemaakte keuze. 
 
 Dit is de code van het hidden field, zoals het in de Form editor getoond wordt:
 [source,json]
@@ -370,6 +382,115 @@ De code voor het verborgen veld.
   }
 }
 ----
+=== Dossiers beheren
+
+Er worden binnen dit project enkele gzac dossiers beheerd. Deze zijn te vinden onder 'backend/projects'. Als hier een project aan toegevoegd wordt, moet dit op enkele plekken worden aangegeven om het correct lokaal te buiden, en te releasen naar Nexus.
+
+==== Voor lokale build
+Voeg het project toe aan het profile 'copy-projects' in backend/pom.xml.
+Dit kan door aan de execution van de plugin een element in de resources als onderstaand toe te voegen:
+
+```xml
+<execution>
+    <id>copy-resources-tezzaAlgemeen</id>
+    <phase>validate</phase>
+    <goals>
+        <goal>copy-resources</goal>
+    </goals>
+    <configuration>
+        <outputDirectory>${project.build.directory}/resources/config</outputDirectory>
+        <resources>
+            <resource>
+                <directory>projects/tezzaAlgemeen</directory>
+                <filtering>true</filtering>
+            </resource>
+            <resource>
+                <directory>projects/destructionProcessDossier</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+    </configuration>
+</execution>
+```
+
+Hierbij is de directory in 'execution/configuration/resources/resource' de directory in 'backend/projects'
+Elk project moet bestaan uit de volgende structuur:
+
+\project +
+  \-- bpmn +
+  \-- case +
+  ---- definition +
+  ---- list +
+  \-- document +
+  ---- definition +
+  \-- form +
+  \-- process-document-link +
+  \-- processlink +
+
+==== Voor release naar nexus
+Om te zorgen dat het eerder gemaakte project naar nexus gepushed wordt. moet het eerst als een assembly aangemaakt worden. Dit gebeurd in twee stappen, met een assembly file in de projects folder, en met een verwijzing in de POM van de backend.
+
+Het assembly bestand wordt in backend/projects geplaatst, en krijgt de naam van het dossier. Dus voor tezzaAlgemeen is dat 'projects/tezzaAlgemeen.xml' De XML hiervan is dan als volgt:
+
+[source,xml]
+----
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.2.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.2.0 http://maven.apache.org/xsd/assembly-2.2.0.xsd">
+    <id>tezzaAlgemeen</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+    <includeBaseDirectory>false</includeBaseDirectory>
+    <fileSets>
+        <fileSet>
+            <directory>projects/tezzaAlgemeen</directory>
+            <outputDirectory>/</outputDirectory>
+            <useDefaultExcludes>false</useDefaultExcludes>
+            <includes>
+                <include>**/*</include>
+            </includes>
+        </fileSet>
+    </fileSets>
+</assembly>
+----
+
+Hierbij is de directory de verwijzing naar de folder die als zip naar nexus moet, en id wordt de naam die in de POM wordt gebruikt voor het aanmaken van de zip.
+Via de include tag kan je ook nog verder specificeren wat wel en niet mee moet worden gepackaged, standaard is dat de volledige inhoud.
+
+In de POM van backend, moet het profile 'package-projects' worden gevonden. Hier worden de referenties naar de assembly files geplaatst, en zal de plugin de packages aanmaken. In het voorbeeld hieronder, moeten de referenties in een descriptor worden geplaatst.
+Het bestand wat wordt aangemaakt, zal er dan als volgt uit zien: tezza-gzac-backend-<version>-<assemblyId>.zip
+
+[source,xml]
+----
+<profile>
+    <id>package-projects</id>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>3.7.1</version>
+                <configuration>
+                    <descriptors>
+                        <descriptor>projects/tezzaAlgemeen.xml</descriptor>
+                        <descriptor>projects/destructionProcessDossier.xml</descriptor>
+                        <descriptor>projects/aanvraagEvenementenvergunning.xml</descriptor>
+                    </descriptors>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</profile>
+----
 
 === Installeren
 
diff --git a/docs/src/docs/asciidoc/includes/_release_notes.adoc b/docs/src/docs/asciidoc/includes/_release_notes.adoc
index 6bf019d753a6fc2084f958b9a9bd51d36e38b047..f7b9a94dc7c8a375b13011bee351030372b1dcaa 100644
--- a/docs/src/docs/asciidoc/includes/_release_notes.adoc
+++ b/docs/src/docs/asciidoc/includes/_release_notes.adoc
@@ -7,6 +7,18 @@ Overzicht van de release notities.
 |===
 |Datum |Versie  |Omschrijving
 
+|2024-08-07
+|0.5.5
+|Bekijk de <<Release 0.5.5,release details>>.
+
+|2024-07-25
+|0.5.3
+|Bekijk de <<Release 0.5.3,release details>>.
+
+|2024-07-23
+|0.5.2
+|Bekijk de <<Release 0.5.2,release details>>.
+
 |2024-07-04
 |0.5.1
 |Bekijk de <<Release 0.5.1,release details>>.
@@ -66,6 +78,49 @@ In onderstaande paragrafen worden de release details beschreven.
 
 :sectnums!:
 
+==== Release 0.5.5
+
+De volgende wijzigingen zitten in deze release:
+
+*Backend*
+
+* Bean TezzaUploadFileBean.restoreNodes verplaats bestanden nu naar de node van het dossier, en enkel naar de oorspronkelijke locatie bij afwezigheid van node;
+* API call '/api/v1/tezza/dossier/{dossierId}/nodeId' geeft nu een HTTP 404 terug bij ontbreken van een nodeId, ipv een HTTP 500.
+
+*Frontend*
+
+Geen wijzigingen
+
+==== Release 0.5.3
+
+De volgende wijzigingen zitten in deze release:
+
+*Backend*
+
+* Aanpassing proces '' en start formulier, candidate groups hiervoor zijn nu Alfresco groepen TEZZA_BEHEER en TEZZA_GEMEENTE;
+* Aanpassing REST API '/api/v1/tezza/task/{taskId}/candidate-user', gebruikers worden nu recursief opgehaald uit Alfresco;
+* Aanpassing REST API '/api/v1/tezza/group/{groupId}/users', gebruikers worden nu recursief opgehaald uit Alfresco;
+* Toevoeging REST API '/api/v1/tezza/task/{taskId}/assign', controleerd gebruiker tegenover candidate lijst
+
+*Frontend*
+
+Geen wijzigingen
+
+==== Release 0.5.2
+
+De volgende wijzigingen zitten in deze release:
+
+*Backend*
+
+* Verwijderen proces beoordeelVersieDocument uit project tezzaAlgemeen startbare processen, proces nog aanwezig;
+* Toevoeging REST API '/api/v1/tezza/task/{taskId}/candidate-user' voor ophalen candidate users vanuit Keycloak en alfresco per taak;
+* Toevoeging REST API '/api/v1/tezza/group/{groupId}/users' voor ophalen users vanuit Keycloak en alfresco per groep;
+* Toevoeging getObjectType aan TezzaService, voor het ophalen van een objecttype via een objecttypen-api plugin, met een URL.
+
+*Frontend*
+
+Geen wijzigingen
+
 ==== Release 0.5.1
 
 De volgende wijzigingen zitten in deze release:
diff --git a/frontend/pom.xml b/frontend/pom.xml
index 48eff6ded0f4a3f5d97b745e301c575463b94f7f..2e3a8637a0ae7db5766c72857d4f4cf39e4a3665 100644
--- a/frontend/pom.xml
+++ b/frontend/pom.xml
@@ -4,7 +4,7 @@
     <parent>
         <groupId>nl.contezza.tezza.gzac</groupId>
         <artifactId>tezza-gzac</artifactId>
-        <version>0.5.1-SNAPSHOT</version>
+        <version>0.5.6-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
@@ -18,8 +18,8 @@
         <image.name>contezza/tezza-gzac-frontend</image.name>
 
         <!-- Base image -->
-        <docker.base.image>nginxinc/nginx-unprivileged</docker.base.image>
-        <docker.base.version>1.21-alpine</docker.base.version>
+        <docker.base.image>docker.io/nginx</docker.base.image>
+        <docker.base.version>stable-alpine</docker.base.version>
 
         <!-- Docker -->
         <fabric8.maven.plugin.version>3.5.37</fabric8.maven.plugin.version>
@@ -215,22 +215,19 @@
                 <plugins>
                     <plugin>
                         <groupId>io.fabric8</groupId>
-                        <artifactId>fabric8-maven-plugin</artifactId>
-                        <version>${fabric8.maven.plugin.version}</version>
+                        <artifactId>docker-maven-plugin</artifactId>
+                        <version>0.43.3</version>
                         <configuration>
                             <outputDirectory>.docker-build</outputDirectory>
+                            <registry>${image.registry}</registry>
                             <images>
                                 <image>
                                     <name>${image.name}:${project.version}</name>
-                                    <registry>${image.registry}</registry>
                                     <build>
-                                        <dockerFileDir>${project.build.directory}/</dockerFileDir>
+                                        <dockerFile>${project.build.directory}/Dockerfile</dockerFile>
                                     </build>
                                 </image>
                             </images>
-                            <pushImage>true</pushImage>
-                            <serverId>${image.registry}</serverId>
-                            <registryUrl>${image.registry}</registryUrl>
                         </configuration>
                         <executions>
                             <execution>
diff --git a/frontend/src/main/docker/Dockerfile b/frontend/src/main/docker/Dockerfile
index a8db169fa1267c8d678ce606a6b432160d0f0da3..087c36eebc937cebc81b3fa4288717eae69cea5d 100644
--- a/frontend/src/main/docker/Dockerfile
+++ b/frontend/src/main/docker/Dockerfile
@@ -1,15 +1,11 @@
 FROM ${docker.base.image}:${docker.base.version}
 
-USER root
-
-COPY --chown=1000:1000 dist /usr/share/nginx/html
-COPY --chown=1000:1000 default.conf /etc/nginx/conf.d/default.conf
-COPY --chown=1000:1000 entrypoint.sh /entrypoint.sh 
+COPY dist /usr/share/nginx/html
+COPY default.conf /etc/nginx/conf.d/default.conf
+COPY entrypoint.sh /entrypoint.sh 
 
 RUN chmod a+x /entrypoint.sh
 
-USER 1000
-
 # When the container starts, replace the env.js with values from environment variables
 CMD ["/bin/sh",  "-c",  "/entrypoint.sh && envsubst < /usr/share/nginx/html/assets/config.template.js > /usr/share/nginx/html/assets/config.js && exec nginx -g 'daemon off;'"]
 
diff --git a/pom.xml b/pom.xml
index 44603ab3a639dcb748b91f31d717b303d77380cd..30b5db9d3cf564a4fd9b78b8684484ddceca6c8e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>nl.contezza.tezza.gzac</groupId>
     <artifactId>tezza-gzac</artifactId>
-    <version>0.5.1-SNAPSHOT</version>
+    <version>0.5.6-SNAPSHOT</version>
     <name>tezza-gzac (Tezza GZAC)</name>
     <description>tezza-gzac (Tezza GZAC)</description>
     <packaging>pom</packaging>