diff --git a/package.json b/package.json
index 8548d4dafdff59887c28a6ae9a353b8a39383473..e569e945409eb68cb5efa59cbf127e09528d9f5d 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
   },
   "dependencies": {
     "@coscine/api-client": "^2.6.0",
-    "@coscine/form-generator": "^3.0.7",
+    "@coscine/form-generator": "^3.0.8",
     "@rdfjs-elements/formats-pretty": "^0.4.3",
     "@rdfjs/data-model": "^2.0.0",
     "@rdfjs/dataset": "^2.0.0",
@@ -90,5 +90,8 @@
     "vite-plugin-windicss": "^1.8.3",
     "vue-template-compiler": "^2.7.10"
   },
-  "packageManager": "yarn@3.2.4"
+  "packageManager": "yarn@3.2.4",
+  "resolutions": {
+    "nodeify-fetch": "3.0.0"
+  }
 }
diff --git a/src/modules/login/components/LoginMain.vue b/src/modules/login/components/LoginMain.vue
index ba5669c21b2ef89827909c0ef91ea35477961950..5c8be071285037afc6729c576e6cc542a59e6394 100644
--- a/src/modules/login/components/LoginMain.vue
+++ b/src/modules/login/components/LoginMain.vue
@@ -104,7 +104,7 @@ export default defineComponent({
     // is a one time fix for data conforming to the old schema. Can be
     // removed from March 2023. Also edit the store type to use object.
     fixMalformedLoginStoredData() {
-      const loginStoredData = this.loginStore.loginStoredData;
+      const loginStoredData: string = this.loginStore.loginStoredData;
       if (loginStoredData && loginStoredData.trim() !== "") {
         this.loginStore.loginStoredData = loginStoredData
           .replace("entityID", "entityId")
diff --git a/src/modules/resource/components/resource-page/MetadataManager.vue b/src/modules/resource/components/resource-page/MetadataManager.vue
index 85b0d03035cd4b456ae1069ed2e914fe380d3f53..0ba2a99829954a5992eac823b3515705f10abaf6 100644
--- a/src/modules/resource/components/resource-page/MetadataManager.vue
+++ b/src/modules/resource/components/resource-page/MetadataManager.vue
@@ -20,7 +20,7 @@
       :show-detail="showDetail"
       :shown-files="shownFiles"
       @changeMetadata="changeMetadata"
-      @loadAllFilesTab="loadAllFilesTab"
+      @loadAllFilesTab="changeMetadata(-1)"
       @removeElement="removeElement"
     />
     <b-row id="metadataManagerMetadataSection">
@@ -65,10 +65,12 @@
             :selected-shape="resource.applicationProfile"
             :shapes="applicationProfile"
             :disabled-mode="resource.archived"
+            :validation-context="currentFileId + ''"
             :class-receiver="receiveClass"
             :user-receiver="async () => user"
             @input="inputMetadata"
-            @isValid="isValid($event, currentFileId)"
+            @isValid="isValid"
+            @isValidating="isValidatingChange"
           />
         </span>
       </b-col>
@@ -213,6 +215,8 @@ export default defineComponent({
         conforms: boolean;
         results: ValidationResult[];
       }[],
+      isValidating: false,
+      storedSwitch: null as number | null,
 
       saveDuplicateFilesModalVisible: false,
     };
@@ -343,6 +347,12 @@ export default defineComponent({
     fileListEdit() {
       this.getOptions();
     },
+    isValidating() {
+      if (!this.isValidating && this.storedSwitch !== null) {
+        this.currentFileId = this.storedSwitch;
+        this.storedSwitch = null;
+      }
+    },
     shownFiles() {
       this.validationResults = Array.from(
         { length: this.shownFiles.length + 1 },
@@ -370,17 +380,25 @@ export default defineComponent({
         }
       }
     },
-    isValid(valid: ValidationReport, fileId: number) {
+    isValid(valid: ValidationReport, fileString: string) {
+      let fileId = Number(fileString);
+      if (isNaN(fileId)) {
+        fileId = this.currentFileId;
+      }
       if (this.validationResults.length && this.validationResults[fileId + 1]) {
         this.validationResults[fileId + 1].conforms = valid.conforms;
         this.validationResults[fileId + 1].results = valid.results;
       }
     },
-    loadAllFilesTab() {
-      this.currentFileId = -1;
+    isValidatingChange(isValidating: boolean, _: string) {
+      this.isValidating = isValidating;
     },
     changeMetadata(index: number) {
-      this.currentFileId = index;
+      if (this.isValidating) {
+        this.storedSwitch = index;
+      } else {
+        this.currentFileId = index;
+      }
     },
     removeElement(index: number, count = 1) {
       if (this.showDetail) {
diff --git a/vite.config.js b/vite.config.js
index 342e79f4ffa809566806af502b736df2ce26e013..e5f7481a6e5c0f7c8079fc24591a48febead975d 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -63,6 +63,7 @@ const config = defineConfig({
   },
 
   build: {
+    target: "es2020",
     minify: true,
     rollupOptions: {
       external: [],
diff --git a/yarn.lock-workspace b/yarn.lock-workspace
index 158312bf18cc240346ca49e7d33aa2a198f817ad..93979962bbfc690ac7104efd56369de58163c9d9 100644
--- a/yarn.lock-workspace
+++ b/yarn.lock-workspace
@@ -307,16 +307,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@coscine/api-client@npm:^2.5.0":
-  version: 2.5.0
-  resolution: "@coscine/api-client@npm:2.5.0"
-  dependencies:
-    axios: ^0.21.1
-  checksum: 2e1fd19238288046c9de957ca153f71967f1f5347d565cf39cb06be39c649be98413cf8bd614c12bac7080cf3059358832b483c416994dc2514cf3e0c736ec4e
-  languageName: node
-  linkType: hard
-
-"@coscine/api-client@npm:^2.6.0":
+"@coscine/api-client@npm:^2.5.0, @coscine/api-client@npm:^2.6.0":
   version: 2.6.0
   resolution: "@coscine/api-client@npm:2.6.0"
   dependencies:
@@ -325,9 +316,9 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@coscine/form-generator@npm:^3.0.7":
-  version: 3.0.7
-  resolution: "@coscine/form-generator@npm:3.0.7"
+"@coscine/form-generator@npm:^3.0.8":
+  version: 3.0.8
+  resolution: "@coscine/form-generator@npm:3.0.8"
   dependencies:
     "@coscine/api-client": ^2.5.0
     "@zazuko/rdf-vocabularies": ^2022.6.29
@@ -347,7 +338,7 @@ __metadata:
   peerDependenciesMeta:
     "@vue/composition-api":
       optional: true
-  checksum: dcbc0b5b73207306b9427263ea69990581befb7e5e2ca4e1228715e4ec7950fc0bbfe6d92351a4c13de0ef025a1557acf397175f9008b1d57c2721e0401a3127
+  checksum: 8df99f7b85fe0b3ac4964a0ba32e127b8f3d2cefd017dc6d73ad32b023b16e9796387e46b58b76689d7d42d1bfa05b13b992ede24e25739c33a31e092df5920d
   languageName: node
   linkType: hard
 
@@ -2183,15 +2174,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@zazuko/node-fetch@npm:^2.6.6":
-  version: 2.6.6
-  resolution: "@zazuko/node-fetch@npm:2.6.6"
-  dependencies:
-    whatwg-url: ^5.0.0
-  checksum: d2690111a98942a6329162d8486b9aea29b16bc4f5abf82709856568f0fe1268f1ac681d66b7ba0abc86d0c7cc5479ea0d53a05bb662ec506cf321fae1e7fad8
-  languageName: node
-  linkType: hard
-
 "@zazuko/rdf-vocabularies@npm:^2022.6.29":
   version: 2022.6.29
   resolution: "@zazuko/rdf-vocabularies@npm:2022.6.29"
@@ -3107,18 +3089,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"concat-stream@npm:^1.6.0":
-  version: 1.6.2
-  resolution: "concat-stream@npm:1.6.2"
-  dependencies:
-    buffer-from: ^1.0.0
-    inherits: ^2.0.3
-    readable-stream: ^2.2.2
-    typedarray: ^0.0.6
-  checksum: 1ef77032cb4459dcd5187bd710d6fc962b067b64ec6a505810de3d2b8cc0605638551b42f8ec91edf6fcd26141b32ef19ad749239b58fae3aba99187adc32285
-  languageName: node
-  linkType: hard
-
 "concat-stream@npm:^2.0.0":
   version: 2.0.0
   resolution: "concat-stream@npm:2.0.0"
@@ -3236,7 +3206,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"cross-fetch@npm:^3.0.4, cross-fetch@npm:^3.0.5, cross-fetch@npm:^3.0.6":
+"cross-fetch@npm:^3.0.5, cross-fetch@npm:^3.0.6":
   version: 3.1.5
   resolution: "cross-fetch@npm:3.1.5"
   dependencies:
@@ -6875,20 +6845,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"nodeify-fetch@npm:^2.2.1":
-  version: 2.2.2
-  resolution: "nodeify-fetch@npm:2.2.2"
-  dependencies:
-    "@zazuko/node-fetch": ^2.6.6
-    concat-stream: ^1.6.0
-    cross-fetch: ^3.0.4
-    readable-error: ^1.0.0
-    readable-stream: ^3.5.0
-  checksum: ad884a840cadfa740328907958974fa2da41eda0222025d80dfb2eae3627a5a97cb1f29d89476ef3af79fceed56bedbe3967fff9da8336a06c7d2945485c7c95
-  languageName: node
-  linkType: hard
-
-"nodeify-fetch@npm:^3.0.0":
+"nodeify-fetch@npm:3.0.0":
   version: 3.0.0
   resolution: "nodeify-fetch@npm:3.0.0"
   dependencies:
@@ -8229,7 +8186,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.2, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.3, readable-stream@npm:~2.3.6":
+"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.2, readable-stream@npm:^2.3.3, readable-stream@npm:~2.3.6":
   version: 2.3.7
   resolution: "readable-stream@npm:2.3.7"
   dependencies:
@@ -9421,7 +9378,7 @@ __metadata:
 
 "typescript@patch:typescript@^4.8.3#~builtin<compat/typescript>":
   version: 4.8.3
-  resolution: "typescript@patch:typescript@npm%3A4.8.3#~builtin<compat/typescript>::version=4.8.3&hash=a1c5e5"
+  resolution: "typescript@patch:typescript@npm%3A4.8.3#~builtin<compat/typescript>::version=4.8.3&hash=701156"
   bin:
     tsc: bin/tsc
     tsserver: bin/tsserver
@@ -9443,7 +9400,7 @@ __metadata:
   resolution: "ui@workspace:."
   dependencies:
     "@coscine/api-client": ^2.6.0
-    "@coscine/form-generator": ^3.0.7
+    "@coscine/form-generator": ^3.0.8
     "@esbuild-plugins/node-globals-polyfill": ^0.1.1
     "@esbuild-plugins/node-modules-polyfill": ^0.1.4
     "@rdfjs-elements/formats-pretty": ^0.4.3