diff --git a/mc_backend/tests.py b/mc_backend/tests.py
index 4a149ea9fc3cdc1f73b57c07920f57acb0b699d7..7df1f40258fde06954aba92855b8820cc3e54dfd 100644
--- a/mc_backend/tests.py
+++ b/mc_backend/tests.py
@@ -358,7 +358,7 @@ class McTestCase(unittest.TestCase):
         DatabaseService.commit()
         response = Mocks.app_dict[self.class_name].client.post(
             TestingConfig.SERVER_URI_H5P, headers=Mocks.headers_form_data, data=hf.to_dict())
-        self.assertEqual(len(response.get_data()), 1940145)
+        self.assertEqual(len(response.get_data()), 1963607)
         with patch.object(mcserver.app.api.h5pAPI, "get_text_field_content", return_value=""):
             response = Mocks.app_dict[self.class_name].client.post(
                 TestingConfig.SERVER_URI_H5P, headers=Mocks.headers_form_data, data=hf.to_dict())
diff --git a/mc_frontend/README.md b/mc_frontend/README.md
index 13a57883ee7a07a0042032aa48725858c92a5364..73acd0930233cb83d7ca8fddd52ac502e009d198 100644
--- a/mc_frontend/README.md
+++ b/mc_frontend/README.md
@@ -2,7 +2,7 @@
 1. Clone the repo: `git clone https://scm.cms.hu-berlin.de/callidus/machina-callida.git`
 2. Move to the newly created folder: `cd machina-callida/mc_frontend`
 3. Run `npm install`
-4. Run `npm install -g @angular/cli` (you may need `sudo`).
+4. Run `npm install -g @angular/cli` (you may need `sudo`). Optional: Install the Ionic CLI for additional command-line utilities: `npm i -g @ionic/cli`.
 5. Check that the Angular command line interface is installed by running `ng --version`. It should print the version of the Angular CLI.
 6. Run `npm start`.
 If you already ran `npm install` and the CLI still complains about missing dependencies, install them one by one using `npm install DEPENDENCY_NAME`. 
diff --git a/mc_frontend/src/app/app-routing.module.ts b/mc_frontend/src/app/app-routing.module.ts
index 304b844afeef2cde091866be96f2aa9d03bfba1f..11ef370a310bddb0da46672a96b432e422c37615 100644
--- a/mc_frontend/src/app/app-routing.module.ts
+++ b/mc_frontend/src/app/app-routing.module.ts
@@ -30,6 +30,10 @@ export const routes: Routes = [
     path: 'embed',
     loadChildren: () => import('./embed/embed.module').then( m => m.EmbedPageModule)
   },
+  {
+    path: 'sequences',
+    loadChildren: () => import('./sequences/sequences.module').then( m => m.SequencesPageModule)
+  },
 
 
 
diff --git a/mc_frontend/src/app/app.component.spec.ts b/mc_frontend/src/app/app.component.spec.ts
index d8679f5b9730cddc3d4937453f3d035c30a9b54f..0a9a0cb1d1034851fc41b04ec3a760c59a8a03f5 100644
--- a/mc_frontend/src/app/app.component.spec.ts
+++ b/mc_frontend/src/app/app.component.spec.ts
@@ -25,6 +25,7 @@ import {LoadChildrenCallback, Route} from '@angular/router';
 import configMC from '../configMC';
 import {SemanticsPageModule} from './semantics/semantics.module';
 import {EmbedPageModule} from './embed/embed.module';
+import {SequencesPageModule} from './sequences/sequences.module';
 
 describe('AppComponent', () => {
     let statusBarSpy, splashScreenSpy, platformReadySpy, fixture: ComponentFixture<AppComponent>,
@@ -105,8 +106,9 @@ describe('AppComponent', () => {
     });
 
     it('should test routing', (done) => {
-        const urls: string[] = [configMC.pageUrlEmbed.slice(1), configMC.pageUrlSemantics.slice(1)];
-        const modules: any[] = [EmbedPageModule, SemanticsPageModule];
+        const urls: string[] = [configMC.pageUrlEmbed.slice(1), configMC.pageUrlSemantics.slice(1),
+            configMC.pageUrlSequences.slice(1)];
+        const modules: any[] = [EmbedPageModule, SemanticsPageModule, SequencesPageModule];
         let doneCount = 0;
         new Promise(resolve => {
             urls.forEach((url, index) => {
diff --git a/mc_frontend/src/app/corpus.service.spec.ts b/mc_frontend/src/app/corpus.service.spec.ts
index 9b7597d7bf7081d6f573630a134371502052ac10..f9864274b59d7a731903ac39a2f8f8dc5aae55be 100644
--- a/mc_frontend/src/app/corpus.service.spec.ts
+++ b/mc_frontend/src/app/corpus.service.spec.ts
@@ -74,7 +74,7 @@ describe('CorpusService', () => {
         corpusService.checkAnnisResponse().then(() => {
         }, () => {
             expect(corpusService.annisResponse).toBeFalsy();
-            helperService.applicationState.next(new ApplicationState());
+            helperService.applicationState.next(new ApplicationState({mostRecentSetup: new TextData()}));
             corpusService.checkAnnisResponse().then(() => {
             }, () => {
                 expect(corpusService.annisResponse).toBeFalsy();
diff --git a/mc_frontend/src/app/corpus.service.ts b/mc_frontend/src/app/corpus.service.ts
index 633eee619d6cd593856a942666abc1865d7d9e0c..48b52639c777225a3e6fd505a56a89a8aadd80eb 100644
--- a/mc_frontend/src/app/corpus.service.ts
+++ b/mc_frontend/src/app/corpus.service.ts
@@ -122,15 +122,11 @@ export class CorpusService {
                 return resolve();
             }
             this.helperService.applicationState.pipe(take(1)).subscribe((state: ApplicationState) => {
-                if (state.mostRecentSetup) {
-                    this.annisResponse = state.mostRecentSetup.annisResponse;
-                    this.currentAuthor = state.mostRecentSetup.currentAuthor;
-                    this.currentUrn = state.mostRecentSetup.currentUrn;
-                    this.currentCorpusCache = state.mostRecentSetup.currentCorpus;
-                    return resolve();
-                } else {
-                    return reject();
-                }
+                this.annisResponse = state.mostRecentSetup.annisResponse;
+                this.currentAuthor = state.mostRecentSetup.currentAuthor;
+                this.currentUrn = state.mostRecentSetup.currentUrn;
+                this.currentCorpusCache = state.mostRecentSetup.currentCorpus;
+                return this.annisResponse ? resolve() : reject();
             }, () => {
                 return reject();
             });
diff --git a/mc_frontend/src/app/embed/embed.page.spec.ts b/mc_frontend/src/app/embed/embed.page.spec.ts
index a5f560c06bead3f896fbfae5a97c1d7919f94939..4a6881d72a12ab66a1edf210a49257f729ffe1fb 100644
--- a/mc_frontend/src/app/embed/embed.page.spec.ts
+++ b/mc_frontend/src/app/embed/embed.page.spec.ts
@@ -31,7 +31,7 @@ describe('EmbedPage', () => {
     beforeEach(() => {
         fixture = TestBed.createComponent(EmbedPage);
         embedPage = fixture.componentInstance;
-        loadExerciseSpy = spyOn(embedPage, 'loadExercise').and.returnValue(Promise.resolve());
+        loadExerciseSpy = spyOn(embedPage.exerciseService, 'loadExerciseFromQueryParams').and.returnValue(Promise.resolve());
         fixture.detectChanges();
     });
 
@@ -46,10 +46,12 @@ describe('EmbedPage', () => {
 
     it('should load an exercise', (done) => {
         loadExerciseSpy.and.callThrough();
-        const loadH5Pspy: Spy = spyOn(embedPage.exerciseService, 'loadH5P').and.returnValue(Promise.resolve());
-        embedPage.loadExercise().then(() => {
+        const loadH5Pspy: Spy = spyOn(embedPage.exerciseService, 'loadExercise').and.returnValue(Promise.resolve());
+        embedPage.exerciseService.loadExerciseFromQueryParams(embedPage.activatedRoute).then(() => {
+            expect(loadH5Pspy).toHaveBeenCalledTimes(1);
             loadH5Pspy.and.callFake(() => Promise.reject());
-            embedPage.loadExercise().then(() => {}, () => {
+            embedPage.exerciseService.loadExerciseFromQueryParams(embedPage.activatedRoute).then(() => {
+            }, () => {
                 expect(loadH5Pspy).toHaveBeenCalledTimes(2);
                 done();
             });
diff --git a/mc_frontend/src/app/embed/embed.page.ts b/mc_frontend/src/app/embed/embed.page.ts
index 98fc40480e03410e7bd272e194f4cb0a369e33c6..db5670dc9641aefd0f3618580e437b87eda6e01e 100644
--- a/mc_frontend/src/app/embed/embed.page.ts
+++ b/mc_frontend/src/app/embed/embed.page.ts
@@ -1,7 +1,6 @@
 import {Component, OnInit} from '@angular/core';
 import {ActivatedRoute} from '@angular/router';
 import {ExerciseService} from '../exercise.service';
-import {ExerciseParams} from '../models/exerciseParams';
 
 @Component({
     selector: 'app-embed',
@@ -14,21 +13,9 @@ export class EmbedPage implements OnInit {
                 public exerciseService: ExerciseService) {
     }
 
-    loadExercise(): Promise<void> {
-        return new Promise<void>((resolve, reject) => {
-            this.activatedRoute.queryParams.subscribe((params: ExerciseParams) => {
-                this.exerciseService.loadH5P(params.eid).then(() => {
-                    return resolve();
-                }, () => {
-                    return reject();
-                });
-            });
-        });
-    }
-
     ngOnInit(): Promise<void> {
         return new Promise<void>((resolve, reject) => {
-            this.loadExercise().then(() => {
+            this.exerciseService.loadExerciseFromQueryParams(this.activatedRoute).then(() => {
                 return resolve();
             }, () => {
                 return reject();
diff --git a/mc_frontend/src/app/exercise.service.spec.ts b/mc_frontend/src/app/exercise.service.spec.ts
index bfa74e6b5139adf5045238e4b2954b30c2c3a93b..e44cb3d782e4ca69d88aa12ab8d887749e7bde85 100644
--- a/mc_frontend/src/app/exercise.service.spec.ts
+++ b/mc_frontend/src/app/exercise.service.spec.ts
@@ -8,11 +8,13 @@ import {TranslateTestingModule} from './translate-testing/translate-testing.modu
 import {ExercisePart} from './models/exercisePart';
 import MockMC from './models/mockMC';
 import {ApplicationState} from './models/applicationState';
-import {AnnisResponse, ExerciseTypePath} from '../../openapi';
-import {ExerciseType, MoodleExerciseType} from './models/enum';
+import {AnnisResponse, ExerciseTypePath, Solution} from '../../openapi';
+import {ExerciseType, LanguageShortcut, MoodleExerciseType} from './models/enum';
 import {ExerciseParams} from './models/exerciseParams';
 import configMC from '../configMC';
 import Spy = jasmine.Spy;
+import {ActivatedRoute} from '@angular/router';
+import {of} from 'rxjs';
 
 declare var H5PStandalone: any;
 
@@ -76,21 +78,26 @@ describe('ExerciseService', () => {
         const postSpy: Spy = spyOn(exerciseService.helperService, 'makePostRequest').and.callFake(() => Promise.resolve(new Blob()));
         const downloadSpy: Spy = spyOn(exerciseService, 'downloadBlobAsFile');
         exerciseService.corpusService.annisResponse = {exercise_id: ''};
-        exerciseService.corpusService.currentSolutions = exerciseService.corpusService.annisResponse.solutions = [{
-            target: {
-                token_id: 1,
-                sentence_id: 1
-            }
-        }];
         exerciseService.corpusService.exercise.type = ExerciseType.markWords;
+        exerciseService.currentExerciseLanguage = LanguageShortcut.English;
         exerciseService.downloadH5Pexercise().then(() => {
             expect(downloadSpy).toHaveBeenCalledTimes(1);
-            postSpy.and.callFake(() => Promise.reject());
-            exerciseService.corpusService.exercise.type = ExerciseType.cloze;
+            exerciseService.corpusService.currentSolutions =
+                exerciseService.corpusService.annisResponse.solutions = [{
+                    target: {
+                        token_id: 1,
+                        sentence_id: 1
+                    }
+                }];
             exerciseService.downloadH5Pexercise().then(() => {
-            }, () => {
-                expect(downloadSpy).toHaveBeenCalledTimes(1);
-                done();
+                expect(downloadSpy).toHaveBeenCalledTimes(2);
+                postSpy.and.callFake(() => Promise.reject());
+                exerciseService.corpusService.exercise.type = ExerciseType.cloze;
+                exerciseService.downloadH5Pexercise().then(() => {
+                }, () => {
+                    expect(downloadSpy).toHaveBeenCalledTimes(2);
+                    done();
+                });
             });
         });
     });
@@ -107,49 +114,77 @@ describe('ExerciseService', () => {
         expect(nodeList.length).toBe(1);
     });
 
+    it('should get solution indices', () => {
+        const solution: Solution = {target: {sentence_id: 1, token_id: 1}};
+        exerciseService.corpusService.annisResponse = {solutions: [solution]};
+        const result: string = exerciseService.getSolutionIndices([solution]);
+        expect(result).toContain('0');
+    });
+
     it('should initialize H5P', (done) => {
         let h5pCalled = false;
         spyOn(exerciseService, 'createH5Pstandalone').and.callFake(() => new Promise(resolve => {
             h5pCalled = true;
             return resolve();
         }));
-        exerciseService.initH5P('', false).then(() => {
+        exerciseService.initH5P('', '', false).then(() => {
             expect(h5pCalled).toBe(true);
             done();
         });
     });
 
     it('should load an exercise', (done) => {
-        const ar: AnnisResponse = {exercise_type: MoodleExerciseType.cloze.toString()};
-        const getSpy: Spy = spyOn(exerciseService.helperService, 'makeGetRequest').and.returnValue(Promise.resolve(ar));
         const initSpy: Spy = spyOn(exerciseService, 'initH5P').and.returnValue(Promise.resolve());
-        exerciseService.helperService.applicationState.next(
-            exerciseService.helperService.deepCopy(MockMC.applicationState) as ApplicationState);
-        let ep: ExerciseParams = {eid: 'eid'};
-        exerciseService.loadExercise(ep).then(() => {
-            expect(initSpy).toHaveBeenCalledTimes(1);
-            getSpy.and.callFake(() => Promise.reject());
+        exerciseService.loadExercise({}).then(() => {
+        }, () => {
+            expect(initSpy).toHaveBeenCalledTimes(0);
+            const ar: AnnisResponse = {exercise_type: MoodleExerciseType.cloze.toString()};
+            const getSpy: Spy = spyOn(exerciseService.helperService, 'makeGetRequest').and.returnValue(Promise.resolve(ar));
+            exerciseService.helperService.applicationState.next(
+                exerciseService.helperService.deepCopy(MockMC.applicationState) as ApplicationState);
+            let ep: ExerciseParams = {eid: 'eid'};
             exerciseService.loadExercise(ep).then(() => {
-            }, () => {
                 expect(initSpy).toHaveBeenCalledTimes(1);
-                ep = {file: '', type: ''};
+                getSpy.and.callFake(() => Promise.reject());
                 exerciseService.loadExercise(ep).then(() => {
-                    ep = {file: '', type: ExerciseTypePath.VocList};
+                }, () => {
+                    expect(initSpy).toHaveBeenCalledTimes(1);
+                    ep = {file: '', type: '', language: LanguageShortcut.English, showActions: true};
                     exerciseService.loadExercise(ep).then(() => {
-                        expect(initSpy).toHaveBeenCalledTimes(3);
-                        done();
+                        ep = {file: '', type: ExerciseTypePath.VocList};
+                        exerciseService.loadExercise(ep).then(() => {
+                            expect(initSpy).toHaveBeenCalledTimes(3);
+                            done();
+                        });
                     });
                 });
             });
         });
     });
 
+    it('should load an exercise from query params', (done) => {
+        const loadSpy: Spy = spyOn(exerciseService, 'loadExercise').and.returnValue(Promise.resolve());
+        const activatedRoute: ActivatedRoute = {queryParams: of({})} as ActivatedRoute;
+        exerciseService.loadExerciseFromQueryParams(activatedRoute).then(() => {
+            loadSpy.and.callFake(() => Promise.reject());
+            exerciseService.loadExerciseFromQueryParams(activatedRoute).then(() => {}, () => {
+                expect(loadSpy).toHaveBeenCalledTimes(2);
+                done();
+            });
+        });
+    });
+
     it('should load H5P', (done) => {
         const initSpy: Spy = spyOn(exerciseService, 'initH5P').and.returnValue(Promise.resolve());
         exerciseService.corpusService.exercise.type = ExerciseType.markWords;
         exerciseService.loadH5P('').then(() => {
             expect(initSpy).toHaveBeenCalledTimes(1);
-            done();
+            exerciseService.excludeOOV = true;
+            exerciseService.corpusService.currentSolutions = [];
+            exerciseService.loadH5P('').then(() => {
+                expect(initSpy).toHaveBeenCalledTimes(2);
+                done();
+            });
         });
     });
 
@@ -214,6 +249,12 @@ describe('ExerciseService', () => {
             .withArgs(exerciseService.embedTextAreaString).and.returnValue(textarea);
         getSpy.withArgs(exerciseService.embedSizeInputString, true).and.returnValue(inputs);
         exerciseService.corpusService.annisResponse = {exercise_type: MoodleExerciseType.cloze.toString()};
+        exerciseService.currentExerciseParams = {eid: ''};
+        exerciseService.updateEmbedUrl();
+        expect(textarea.innerHTML).toBeTruthy();
+        textarea.innerHTML = '';
+        expect(textarea.innerHTML).toBeFalsy();
+        exerciseService.currentExerciseParams = {eid: 'eid'};
         exerciseService.updateEmbedUrl();
         expect(textarea.innerHTML).toBeTruthy();
     });
diff --git a/mc_frontend/src/app/exercise.service.ts b/mc_frontend/src/app/exercise.service.ts
index f04085f0765f8139d9d388e8cbc87057f54c8e97..8b8710679213716c3951c27d178cc1fbf9d9ca57 100644
--- a/mc_frontend/src/app/exercise.service.ts
+++ b/mc_frontend/src/app/exercise.service.ts
@@ -3,9 +3,9 @@ import {Injectable} from '@angular/core';
 import configMC from '../configMC';
 import {HelperService} from './helper.service';
 import {ExercisePart} from './models/exercisePart';
-import {EventMC, ExerciseType, MoodleExerciseType} from './models/enum';
+import {EventMC, ExerciseType, LanguageShortcut, MoodleExerciseType} from './models/enum';
 import {HttpClient, HttpParams} from '@angular/common/http';
-import {AnnisResponse, ExerciseTypePath, H5PForm} from '../../openapi';
+import {AnnisResponse, ExerciseTypePath, H5PForm, Solution} from '../../openapi';
 import {take} from 'rxjs/operators';
 import {ApplicationState} from './models/applicationState';
 import {ToastController} from '@ionic/angular';
@@ -14,6 +14,7 @@ import {TranslateService} from '@ngx-translate/core';
 import {Storage} from '@ionic/storage';
 import {ExerciseParams} from './models/exerciseParams';
 import {DisplayOptions, Options} from './models/h5pStandalone';
+import {ActivatedRoute} from '@angular/router';
 
 declare var H5PStandalone: any;
 
@@ -38,9 +39,12 @@ export class ExerciseService {
             '';
     }
 
+    public currentExerciseLanguage: string | LanguageShortcut;
     public currentExerciseName: string;
+    public currentExerciseParams: ExerciseParams;
     public currentExercisePartIndex: number;
     public currentExerciseParts: ExercisePart[] = [];
+    public currentExerciseTypePath: ExerciseTypePath;
     public displayOptions: DisplayOptions = { // Customise the look of the H5P
         frame: true,
         copyright: true,
@@ -56,7 +60,9 @@ export class ExerciseService {
     public excludeOOV = false;
     public h5pContainerString = '.h5p-container';
     public h5pIframeString = '.h5p-iframe';
+    public h5pPathLocal = 'assets/h5p';
     public kwicGraphs: string;
+    public nonH5Pstring = 'nonH5P';
     public options: Options = {
         frameCss: 'assets/h5p-standalone-master/dist/styles/h5p.css',
         frameJs: 'assets/h5p-standalone-master/dist/frame.bundle.js',
@@ -108,15 +114,12 @@ export class ExerciseService {
     downloadH5Pexercise(): Promise<void> {
         return new Promise<void>((resolve, reject) => {
             const url = `${configMC.backendBaseUrl}${configMC.backendApiH5pPath}`;
-            const indices: number[] = this.corpusService.currentSolutions.map(
-                x => this.corpusService.annisResponse.solutions.indexOf(x));
-            const exerciseTypePath: ExerciseTypePath =
-                this.corpusService.exercise.type === ExerciseType.markWords ?
-                    ExerciseTypePath.MarkWords : ExerciseTypePath.DragText;
+            const indices: number[] = this.corpusService.currentSolutions ? this.corpusService.currentSolutions.map(
+                x => this.corpusService.annisResponse.solutions.indexOf(x)) : [];
             const h5pForm: H5PForm = {
                 eid: this.corpusService.annisResponse.exercise_id,
-                exercise_type_path: exerciseTypePath,
-                lang: this.translateService.currentLang,
+                exercise_type_path: this.currentExerciseTypePath,
+                lang: this.currentExerciseLanguage.toString(),
                 solution_indices: indices
             };
             const formData: FormData = new FormData();
@@ -125,7 +128,7 @@ export class ExerciseService {
             const errorMsg: string = HelperService.generalErrorAlertMessage;
             this.helperService.makePostRequest(this.http, this.toastCtrl, url, formData, errorMsg, options)
                 .then((result: Blob) => {
-                    const fileName = exerciseTypePath + '.h5p';
+                    const fileName = this.currentExerciseTypePath + '.h5p';
                     this.downloadBlobAsFile(result, fileName);
                     return resolve();
                 }, () => {
@@ -147,10 +150,18 @@ export class ExerciseService {
         return document.querySelector(this.h5pIframeString);
     }
 
-    initH5P(exerciseTypePath: string, showActions: boolean = true): Promise<void> {
+    getSolutionIndices(solutions: Solution[]): string {
+        const indices: string[] =
+            solutions.map(x => this.corpusService.annisResponse.solutions.indexOf(x).toString());
+        return '&solution_indices=' + indices.join(',');
+    }
+
+    initH5P(exerciseTypePath: ExerciseTypePath | string, url: string, showActions: boolean = true): Promise<void> {
         return new Promise((resolve) => {
+            this.setH5Purl(url);
+            this.currentExerciseTypePath = exerciseTypePath as ExerciseTypePath;
             const el: HTMLDivElement = document.querySelector(this.h5pContainerString);
-            const h5pLocation = 'assets/h5p/' + exerciseTypePath;
+            const h5pLocation = this.h5pPathLocal + '/' + exerciseTypePath;
             const displayOptions: DisplayOptions = this.helperService.deepCopy(this.displayOptions);
             if (!showActions) {
                 displayOptions.embed = false;
@@ -169,6 +180,12 @@ export class ExerciseService {
 
     loadExercise(params: ExerciseParams): Promise<void> {
         return new Promise<void>((resolve, reject) => {
+            if (!Object.keys(params).length) {
+                return reject();
+            }
+            this.currentExerciseLanguage = params.language ?
+                params.language.toString() : this.translateService.currentLang;
+            this.currentExerciseParams = params;
             if (params.eid) {
                 const url: string = configMC.backendBaseUrl + configMC.backendApiExercisePath;
                 const httpParams: HttpParams = new HttpParams().set('eid', params.eid);
@@ -186,29 +203,38 @@ export class ExerciseService {
                     return reject();
                 });
             } else {
-                const exerciseType: string = params.type;
-                const exerciseTypePath: string = exerciseType === ExerciseTypePath.VocList ?
-                    ExerciseTypePath.FillBlanks : exerciseType;
-                const file: string = params.file;
-                const lang: string = this.translateService.currentLang;
-                this.storage.set(configMC.localStorageKeyH5P,
-                    this.helperService.baseUrl + '/assets/h5p/' + exerciseType + '/content/' + file + '_' + lang + '.json')
-                    .then();
-                this.initH5P(exerciseTypePath).then(() => {
+                let etp: ExerciseTypePath = params.type as ExerciseTypePath;
+                etp = etp === ExerciseTypePath.VocList ? ExerciseTypePath.FillBlanks : etp;
+                const url = `${this.helperService.baseUrl}/${this.h5pPathLocal}/${etp}/content/${params.author}/` +
+                    `${params.file}_${this.currentExerciseLanguage}.json`;
+                this.initH5P(etp, url, params.showActions ? params.showActions : true)
+                    .then(() => {
+                        return resolve();
+                    });
+            }
+        });
+    }
+
+    loadExerciseFromQueryParams(activatedRoute: ActivatedRoute) {
+        return new Promise<void>((resolve, reject) => {
+            activatedRoute.queryParams.subscribe((params: ExerciseParams) => {
+                this.loadExercise(params).then(() => {
                     return resolve();
+                }, () => {
+                    return reject();
                 });
-            }
+            });
         });
     }
 
     loadH5P(eid: string): Promise<void> {
+        const solutionIndicesString: string = this.excludeOOV ? this.getSolutionIndices(this.corpusService.currentSolutions) : '';
         // this will be called via GET request from the h5p standalone javascript library
         const url: string = `${configMC.backendBaseUrl}${configMC.backendApiH5pPath}` +
-            `?eid=${eid}&lang=${this.translateService.currentLang}`;
-        this.setH5Purl(url);
-        const exerciseTypePath: string = this.corpusService.exercise.type === ExerciseType.markWords ?
+            `?eid=${eid}&lang=${this.translateService.currentLang}${solutionIndicesString}`;
+        const etp: ExerciseTypePath = this.corpusService.exercise.type === ExerciseType.markWords ?
             ExerciseTypePath.MarkWords : ExerciseTypePath.DragText;
-        return this.initH5P(exerciseTypePath);
+        return this.initH5P(etp, url);
     }
 
     setH5PdownloadEventHandler(): void {
@@ -252,12 +278,22 @@ export class ExerciseService {
     updateEmbedUrl(): void {
         const embedTextarea: HTMLTextAreaElement = this.getH5Pelements(this.embedTextAreaString);
         const baseUrl: string = configMC.frontendBaseUrl + configMC.pageUrlEmbed;
-        const eid: string = this.corpusService.annisResponse.exercise_id;
+        const params: string[] = [];
+        if (this.currentExerciseParams.eid) {
+            params.push('eid=' + this.currentExerciseParams.eid);
+        } else {
+            params.push('author=' + this.currentExerciseParams.author);
+            params.push('file=' + this.currentExerciseParams.file);
+            params.push('language=' + this.currentExerciseParams.language);
+            params.push('type=' + this.currentExerciseParams.type);
+        }
         const inputs: NodeListOf<HTMLInputElement> = this.getH5Pelements(this.embedSizeInputString, true);
         const width: string = inputs[0].value;
         const height: string = inputs[1].value;
         embedTextarea.innerHTML =
-            `<iframe src="${baseUrl}?eid=${eid}" width="${width}px" height="${height}px" allowfullscreen="allowfullscreen"></iframe>
-<script src="https://h5p.org/sites/all/modules/h5p/library/js/h5p-resizer.js" charset="UTF-8"></script>`;
+            `<iframe src="${baseUrl}?${params.join('&')}" width="${width}px" ` +
+            `height="${height}px" allowfullscreen="allowfullscreen"></iframe>` +
+            `<script src="https://h5p.org/sites/all/modules/h5p/library/js/h5p-resizer.js" ` +
+            `charset="UTF-8"></script>`;
     }
 }
diff --git a/mc_frontend/src/app/exercise/exercise.page.html b/mc_frontend/src/app/exercise/exercise.page.html
index 7234210b272b93a0d29b833aa4f4ffbd57371818..92372445408400db14fab110f00e56e931f8e8cb 100644
--- a/mc_frontend/src/app/exercise/exercise.page.html
+++ b/mc_frontend/src/app/exercise/exercise.page.html
@@ -18,5 +18,12 @@
 </ion-header>
 
 <ion-content>
+    <ion-grid *ngIf="!helperService.openRequests.length && !exerciseLoadedSuccess">
+        <ion-row>
+            <ion-col>
+                <h2>{{ 'NO_EXERCISES_FOUND' | translate }}</h2>
+            </ion-col>
+        </ion-row>
+    </ion-grid>
     <div class="h5p-container"></div>
 </ion-content>
diff --git a/mc_frontend/src/app/exercise/exercise.page.spec.ts b/mc_frontend/src/app/exercise/exercise.page.spec.ts
index 85a1d4ec7b7d47559f0bbb8a825ea3026faf31b2..cdfab565f1377a081a6f780334aa53489c434ec3 100644
--- a/mc_frontend/src/app/exercise/exercise.page.spec.ts
+++ b/mc_frontend/src/app/exercise/exercise.page.spec.ts
@@ -48,17 +48,20 @@ describe('ExercisePage', () => {
             expect(loadExerciseSpy).toHaveBeenCalledTimes(2);
             checkSpy.and.callFake(() => Promise.reject());
             exercisePage.ngOnInit().then(() => {
-                expect(loadExerciseSpy).toHaveBeenCalledTimes(2);
-                done();
+                expect(loadExerciseSpy).toHaveBeenCalledTimes(3);
+                checkSpy.and.callFake(() => Promise.reject());
+                exercisePage.ngOnInit().then(() => {
+                    expect(loadExerciseSpy).toHaveBeenCalledTimes(4);
+                    done();
+                });
             });
         });
     });
 
     it('should load an exercise', (done) => {
-        loadExerciseSpy.and.returnValue(Promise.resolve());
-        exercisePage.initExercise().then(() => {
+        exercisePage.exerciseService.loadExerciseFromQueryParams(exercisePage.activatedRoute).then(() => {
             loadExerciseSpy.and.callFake(() => Promise.reject());
-            exercisePage.initExercise().then(() => {
+            exercisePage.exerciseService.loadExerciseFromQueryParams(exercisePage.activatedRoute).then(() => {
             }, () => {
                 expect(loadExerciseSpy).toHaveBeenCalledTimes(3);
                 done();
diff --git a/mc_frontend/src/app/exercise/exercise.page.ts b/mc_frontend/src/app/exercise/exercise.page.ts
index fa2ad85423dfcc191c41cf7417d412fc25141e7d..0d7fc02f65f3e39beb130407ecb006d4a74b8459 100644
--- a/mc_frontend/src/app/exercise/exercise.page.ts
+++ b/mc_frontend/src/app/exercise/exercise.page.ts
@@ -2,7 +2,6 @@
 import {Component, OnInit} from '@angular/core';
 import {ActivatedRoute} from '@angular/router';
 import {ExerciseService} from 'src/app/exercise.service';
-import {ExerciseParams} from '../models/exerciseParams';
 import {CorpusService} from '../corpus.service';
 import {HelperService} from '../helper.service';
 import {NavController} from '@ionic/angular';
@@ -13,6 +12,7 @@ import {NavController} from '@ionic/angular';
     styleUrls: ['./exercise.page.scss'],
 })
 export class ExercisePage implements OnInit {
+    exerciseLoadedSuccess = false;
 
     constructor(public activatedRoute: ActivatedRoute,
                 public exerciseService: ExerciseService,
@@ -21,28 +21,15 @@ export class ExercisePage implements OnInit {
                 public navCtrl: NavController) {
     }
 
-    initExercise(): Promise<void> {
-        return new Promise<void>((resolve, reject) => {
-            this.activatedRoute.queryParams.subscribe((params: ExerciseParams) => {
-                this.exerciseService.loadExercise(params).then(() => {
-                    return resolve();
-                }, () => {
-                    return reject();
-                });
-            });
-        });
-    }
-
     ngOnInit(): Promise<void> {
         return new Promise<void>((resolve) => {
-            this.corpusService.checkAnnisResponse().then(() => {
-                this.initExercise().then(() => {
+            this.corpusService.checkAnnisResponse().finally(() => {
+                this.exerciseService.loadExerciseFromQueryParams(this.activatedRoute).then(() => {
+                    this.exerciseLoadedSuccess = true;
                     return resolve();
                 }, () => {
                     return resolve();
                 });
-            }, () => {
-                return resolve();
             });
         });
     }
diff --git a/mc_frontend/src/app/helper.service.spec.ts b/mc_frontend/src/app/helper.service.spec.ts
index 960644e5262f6e9bf483dffd584124ef450e3064..765c02f1a960c7ee43419d0cd64e818398d0f2e3 100644
--- a/mc_frontend/src/app/helper.service.spec.ts
+++ b/mc_frontend/src/app/helper.service.spec.ts
@@ -102,9 +102,9 @@ describe('HelperService', () => {
     it('should go to a specific page', (done) => {
         function checkNavigation(pageUrls: string[], navController: NavController, navSpy: Spy): Promise<void> {
             return new Promise<void>(resolve => {
-                range(0, pageUrls.length).forEach(async (idx: number) => {
-                    await helperService.goToPage(navController, pageUrls[idx]);
-                    expect(navSpy).toHaveBeenCalledWith(pageUrls[idx]);
+                pageUrls.forEach(async (pageUrl: string) => {
+                    await helperService.goToPage(navController, pageUrl, {});
+                    expect(navSpy).toHaveBeenCalledWith(pageUrl, {});
                 });
                 return resolve();
             });
diff --git a/mc_frontend/src/app/helper.service.ts b/mc_frontend/src/app/helper.service.ts
index 444014b7b69a65ace5f2aade451a71baa47b0a51..d20b0eceb40e6bebfe3e5ee91311f76cbe60f46a 100644
--- a/mc_frontend/src/app/helper.service.ts
+++ b/mc_frontend/src/app/helper.service.ts
@@ -4,7 +4,7 @@ import {Injectable} from '@angular/core';
 import {NavController, ToastController} from '@ionic/angular';
 import {ApplicationState} from 'src/app/models/applicationState';
 import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-import {CaseValue, DependencyValue, PartOfSpeechValue} from 'src/app/models/enum';
+import {CaseValue, DependencyValue, LanguageShortcut, PartOfSpeechValue} from 'src/app/models/enum';
 import {TranslateService} from '@ngx-translate/core';
 import {Storage} from '@ionic/storage';
 import {Language} from 'src/app/models/language';
@@ -13,6 +13,7 @@ import {TextData} from './models/textData';
 import configMC from '../configMC';
 import EventRegistry from './models/eventRegistry';
 import {UpdateInfo} from './models/updateInfo';
+import {NavigationOptions} from '@ionic/angular/providers/nav-controller';
 
 declare var H5P: any;
 // dirty hack to prevent H5P access errors after resize events
@@ -92,8 +93,8 @@ export class HelperService {
     public isDevMode = ['localhost'].indexOf(window.location.hostname) > -1; // set this to "false" for simulated production mode
     public isVocabularyCheck = false;
     public languages: Language[] = [
-        new Language({name: 'English', shortcut: 'en'}),
-        new Language({name: 'Deutsch', shortcut: 'de'})];
+        new Language({name: 'English', shortcut: LanguageShortcut.English}),
+        new Language({name: 'Deutsch', shortcut: LanguageShortcut.German})];
     public openRequests: string[] = [];
     public partOfSpeechMap: { [rawValue: string]: PartOfSpeechValue } = {
         ADJ: PartOfSpeechValue.adjective,
@@ -210,8 +211,8 @@ export class HelperService {
         return navCtrl.navigateRoot(configMC.pageUrlHome);
     }
 
-    goToPage(navCtrl: NavController, pageUrl: string): Promise<boolean> {
-        return navCtrl.navigateForward(pageUrl);
+    goToPage(navCtrl: NavController, pageUrl: string, options?: NavigationOptions): Promise<boolean> {
+        return navCtrl.navigateForward(pageUrl, options);
     }
 
     goToShowTextPage(navCtrl: NavController, isVocabularyCheck: boolean = false): Promise<boolean> {
@@ -239,12 +240,14 @@ export class HelperService {
             this.storage.get(configMC.localStorageKeyApplicationState).then((jsonString: string) => {
                 this.applicationStateCache = new ApplicationState({
                     currentSetup: new TextData(),
-                    exerciseList: []
+                    exerciseList: [],
+                    mostRecentSetup: new TextData()
                 });
                 if (jsonString) {
                     const jsonObject: any = this.updateAnnisResponse(jsonString);
                     const state: ApplicationState = jsonObject as ApplicationState;
                     state.exerciseList = state.exerciseList ? state.exerciseList : [];
+                    state.mostRecentSetup = state.mostRecentSetup ? state.mostRecentSetup : new TextData();
                     this.applicationStateCache = state;
                 }
                 this.applicationState.next(this.applicationStateCache);
@@ -267,7 +270,8 @@ export class HelperService {
     initLanguage(): void {
         // dirty hack to wait for the translateService intializing
         setTimeout(() => {
-            this.currentLanguage = this.languages.find(x => x.shortcut === this.translate.currentLang);
+            this.currentLanguage = this.languages.find(
+                x => x.shortcut.toString() === this.translate.currentLang);
             this.loadTranslations(this.translate);
         });
     }
diff --git a/mc_frontend/src/app/home/home.page.html b/mc_frontend/src/app/home/home.page.html
index 3156cd5f604eaf80f89ca1cd9d9cbfccfc1923a0..bc0204f8b7df7cdb1d99e3109bcc7b674ac99329 100644
--- a/mc_frontend/src/app/home/home.page.html
+++ b/mc_frontend/src/app/home/home.page.html
@@ -73,15 +73,14 @@
                 <div class="card">
                     <img src="assets/imgs/results_testmode.webp" alt="Ergebnisübersicht des Testmoduls"
                          style="padding: 0.5em 0.25em 0 0.25em;">
-                    <h1>{{ 'TEST' | translate }}</h1>
+                    <h1>{{ 'SEQUENCES' | translate }}</h1>
                     <p>
-                        {{'TEXT_WORK' | translate }}<br>
-                        {{'EXERCISES' | translate }}<br>
-                        {{'UNIT_TEST_TITLE' | translate }}<br>
-                        {{'UNIT_EVALUATION_TITLE' | translate }}
+                        {{'TEST' | translate }}<br>
+                        ...
                     </p>
                     <p>
-                        <ion-button (click)="helperService.goToTestPage(navCtrl)">{{ 'CONTINUE' | translate }}
+                        <ion-button (click)="helperService.goToPage(navCtrl, configMC.pageUrlSequences)">
+                            {{ 'CONTINUE' | translate }}
                         </ion-button>
                     </p>
                 </div>
diff --git a/mc_frontend/src/app/models/enum.ts b/mc_frontend/src/app/models/enum.ts
index e9ccaaff698f9729c9de7032595e8e4d8dccef7e..adff231c533afa9294e082cf59908ac5a82b124f 100644
--- a/mc_frontend/src/app/models/enum.ts
+++ b/mc_frontend/src/app/models/enum.ts
@@ -95,6 +95,11 @@ export enum EventMC {
     xAPI = 'xAPI' as any,
 }
 
+export enum ExerciseAuthor {
+    callidus = 'callidus' as any,
+    potsdam = 'potsdam' as any
+}
+
 export enum ExerciseType {
     cloze = 'cloze' as any,
     kwic = 'kwic' as any,
@@ -116,6 +121,11 @@ export enum InstructionsTranslation {
     matching = 'INSTRUCTIONS_MATCHING' as any,
 }
 
+export enum LanguageShortcut {
+    German = 'de' as any,
+    English = 'en' as any
+}
+
 export enum MoodleExerciseType {
     cloze = 'ddwtos' as any,
     kwic = 'kwic' as any,
diff --git a/mc_frontend/src/app/models/exerciseParams.ts b/mc_frontend/src/app/models/exerciseParams.ts
index 3d34ba371f1a7d72c65c51cf1bf54977b6e20cad..6a3d554097302e5197210f59e4d3d19abcafdd91 100644
--- a/mc_frontend/src/app/models/exerciseParams.ts
+++ b/mc_frontend/src/app/models/exerciseParams.ts
@@ -1,5 +1,11 @@
+import {ExerciseAuthor, LanguageShortcut} from './enum';
+import {ExerciseTypePath} from '../../../openapi';
+
 export interface ExerciseParams {
+    author?: ExerciseAuthor;
     eid?: string;
     file?: string;
-    type?: string;
+    language?: LanguageShortcut;
+    showActions?: boolean;
+    type?: ExerciseTypePath | string;
 }
diff --git a/mc_frontend/src/app/models/language.ts b/mc_frontend/src/app/models/language.ts
index 491758dc87febe9a5fbc11e317334c00ede7f080..c51f20756e28a45cb4a08e330ee5e6fd4fb495ea 100644
--- a/mc_frontend/src/app/models/language.ts
+++ b/mc_frontend/src/app/models/language.ts
@@ -1,6 +1,9 @@
+import {LanguageShortcut} from './enum';
+
 export class Language {
     public name: string;
-    public shortcut: string;
+    public shortcut: LanguageShortcut;
+
     constructor(init?: Partial<Language>) {
         Object.assign(this, init);
     }
diff --git a/mc_frontend/src/app/preview/preview.page.spec.ts b/mc_frontend/src/app/preview/preview.page.spec.ts
index f503984a5afd18c6a47a7dac76f9a449ce4a2952..e96b72e86ec503e37b42580cea74d30d27fddbf5 100644
--- a/mc_frontend/src/app/preview/preview.page.spec.ts
+++ b/mc_frontend/src/app/preview/preview.page.spec.ts
@@ -154,6 +154,20 @@ describe('PreviewPage', () => {
         expect(previewPage.corpusService.currentSolutions[2]).toBe(solutions[0]);
     });
 
+    it('should select the link', (done) => {
+        previewPage.showShareLink = true;
+        previewPage.corpusService.annisResponse = {solutions: []};
+        fixture.detectChanges();
+        const ta: HTMLTextAreaElement = document.querySelector(previewPage.inputSelector);
+        let wasSelected = false;
+        ta.onselect = (ev: Event) => {
+            wasSelected = true;
+            expect(wasSelected).toBeTrue();
+            done();
+        };
+        previewPage.selectLink();
+    });
+
     it('should send data', (done) => {
         const requestSpy: Spy = spyOn(previewPage.helperService, 'makePostRequest').and.returnValue(Promise.resolve());
         const consoleSpy: Spy = spyOn(console, 'log');
diff --git a/mc_frontend/src/app/preview/preview.page.ts b/mc_frontend/src/app/preview/preview.page.ts
index eb426a787d8ea01bfd02497162c742cd6d42967f..79062b7c0c0c877bac8ae7d77119431b05c368bf 100644
--- a/mc_frontend/src/app/preview/preview.page.ts
+++ b/mc_frontend/src/app/preview/preview.page.ts
@@ -48,22 +48,8 @@ export class PreviewPage implements AfterContentInit, OnDestroy, OnInit {
         this.helperService.showToast(this.toastCtrl, this.corpusService.shareLinkCopiedString, 'middle').then();
     }
 
-    getSolutionIndices(solutions: Solution[]): string {
-        const indices: string[] =
-            solutions.map(x => this.corpusService.annisResponse.solutions.indexOf(x).toString());
-        return '&solution_indices=' + indices.join(',');
-    }
-
     initH5P(): void {
-        const solutionIndicesString: string = this.exerciseService.excludeOOV ?
-            this.getSolutionIndices(this.corpusService.currentSolutions) : '';
-        // this will be called via GET request from the h5p standalone javascript library
-        const url: string = `${configMC.backendBaseUrl + configMC.backendApiH5pPath}` +
-            `?eid=${this.corpusService.annisResponse.exercise_id}&lang=${this.translateService.currentLang + solutionIndicesString}`;
-        this.exerciseService.setH5Purl(url);
-        const exerciseTypePath: string = this.corpusService.exercise.type === ExerciseType.markWords ?
-            ExerciseTypePath.MarkWords : ExerciseTypePath.DragText;
-        this.exerciseService.initH5P(exerciseTypePath).then();
+        this.exerciseService.loadExercise({eid: this.corpusService.annisResponse.exercise_id}).then();
         this.updateFileUrl();
     }
 
@@ -170,7 +156,8 @@ export class PreviewPage implements AfterContentInit, OnDestroy, OnInit {
         this.urlBase = configMC.backendBaseUrl + configMC.backendApiFilePath + '?id=' + fileId + fileTypeBase;
         this.solutionIndicesString = '';
         if (this.exerciseService.excludeOOV) {
-            this.solutionIndicesString = this.getSolutionIndices(this.corpusService.currentSolutions);
+            this.solutionIndicesString = this.exerciseService.getSolutionIndices(
+                this.corpusService.currentSolutions);
         }
     }
 }
diff --git a/mc_frontend/src/app/sequences/sequences-routing.module.ts b/mc_frontend/src/app/sequences/sequences-routing.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5ac8041363c1a8d05b2d0cb4602b297a1134951b
--- /dev/null
+++ b/mc_frontend/src/app/sequences/sequences-routing.module.ts
@@ -0,0 +1,17 @@
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { SequencesPage } from './sequences.page';
+
+const routes: Routes = [
+  {
+    path: '',
+    component: SequencesPage
+  }
+];
+
+@NgModule({
+  imports: [RouterModule.forChild(routes)],
+  exports: [RouterModule],
+})
+export class SequencesPageRoutingModule {}
diff --git a/mc_frontend/src/app/sequences/sequences.module.ts b/mc_frontend/src/app/sequences/sequences.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7a5e69c01dda23b6f2b2fa9314bdab695143d731
--- /dev/null
+++ b/mc_frontend/src/app/sequences/sequences.module.ts
@@ -0,0 +1,23 @@
+import {NgModule} from '@angular/core';
+import {CommonModule} from '@angular/common';
+import {FormsModule} from '@angular/forms';
+
+import {IonicModule} from '@ionic/angular';
+
+import {SequencesPageRoutingModule} from './sequences-routing.module';
+
+import {SequencesPage} from './sequences.page';
+import {TranslateModule} from '@ngx-translate/core';
+
+@NgModule({
+    imports: [
+        CommonModule,
+        FormsModule,
+        IonicModule,
+        SequencesPageRoutingModule,
+        TranslateModule.forChild()
+    ],
+    declarations: [SequencesPage]
+})
+export class SequencesPageModule {
+}
diff --git a/mc_frontend/src/app/sequences/sequences.page.html b/mc_frontend/src/app/sequences/sequences.page.html
new file mode 100644
index 0000000000000000000000000000000000000000..cec6c409e59cb5179733c9a390c15633b06c2b8c
--- /dev/null
+++ b/mc_frontend/src/app/sequences/sequences.page.html
@@ -0,0 +1,80 @@
+<ion-header>
+    <ion-toolbar>
+        <ion-buttons slot="start">
+            <div class="home-logo">
+                <a (click)="helperService.goToHomePage(navCtrl)">
+                    <img src="assets/imgs/logo.png" width="32px" height="32px" alt="CALLIDUS Logo">
+                </a>
+            </div>
+        </ion-buttons>
+        <ion-spinner *ngIf="helperService.openRequests.length"></ion-spinner>
+        <ion-title>{{ 'SEQUENCES' | translate }}</ion-title>
+        <ion-buttons slot="end">
+            <ion-menu-button autoHide="false">
+                <ion-icon name="menu"></ion-icon>
+            </ion-menu-button>
+        </ion-buttons>
+    </ion-toolbar>
+</ion-header>
+
+<ion-content>
+    <ion-grid>
+        <ion-row style="border: 2px solid darkgrey">
+            <ion-col>
+                <ion-grid>
+                    <ion-row>
+                        <ion-col>
+                            <h1>{{ 'SEQUENCES_POTSDAM' | translate }}</h1>
+                        </ion-col>
+                    </ion-row>
+                    <ion-row>
+                        <ion-col>
+                            <ion-button
+                                    (click)="helperService.goToPage(navCtrl, configMC.pageUrlExercise, {queryParams: exerciseParams})">
+                                {{ 'CONTINUE' | translate }}
+                            </ion-button>
+                        </ion-col>
+                    </ion-row>
+                </ion-grid>
+            </ion-col>
+        </ion-row>
+        <ion-row style="border: 2px solid darkgrey">
+            <ion-col>
+                <ion-grid>
+                    <ion-row>
+                        <ion-col>
+                            <h1>{{ 'TEST' | translate }}</h1>
+                        </ion-col>
+                    </ion-row>
+                    <ion-row>
+                        <ion-col>
+                            {{'TEXT_WORK' | translate }}
+                        </ion-col>
+                    </ion-row>
+                    <ion-row>
+                        <ion-col>
+                            {{'EXERCISES' | translate }}
+                        </ion-col>
+                    </ion-row>
+                    <ion-row>
+                        <ion-col>
+                            {{'UNIT_TEST_TITLE' | translate }}
+                        </ion-col>
+                    </ion-row>
+                    <ion-row>
+                        <ion-col>
+                            {{'UNIT_EVALUATION_TITLE' | translate }}
+                        </ion-col>
+                    </ion-row>
+                    <ion-row>
+                        <ion-col>
+                            <ion-button (click)="helperService.goToTestPage(navCtrl)">
+                                {{ 'CONTINUE' | translate }}
+                            </ion-button>
+                        </ion-col>
+                    </ion-row>
+                </ion-grid>
+            </ion-col>
+        </ion-row>
+    </ion-grid>
+</ion-content>
diff --git a/mc_frontend/src/app/sequences/sequences.page.scss b/mc_frontend/src/app/sequences/sequences.page.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/mc_frontend/src/app/sequences/sequences.page.spec.ts b/mc_frontend/src/app/sequences/sequences.page.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..51bda6a0a6de8142e4613c0dbb83b9b24ea651b7
--- /dev/null
+++ b/mc_frontend/src/app/sequences/sequences.page.spec.ts
@@ -0,0 +1,34 @@
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {IonicModule} from '@ionic/angular';
+
+import {SequencesPage} from './sequences.page';
+import {HttpClientModule} from '@angular/common/http';
+import {IonicStorageModule} from '@ionic/storage';
+import {TranslateTestingModule} from '../translate-testing/translate-testing.module';
+import {RouterModule} from '@angular/router';
+
+describe('SequencesPage', () => {
+    let component: SequencesPage;
+    let fixture: ComponentFixture<SequencesPage>;
+
+    beforeEach(async(() => {
+        TestBed.configureTestingModule({
+            declarations: [SequencesPage],
+            imports: [
+                HttpClientModule,
+                IonicModule.forRoot(),
+                IonicStorageModule.forRoot(),
+                RouterModule.forRoot([]),
+                TranslateTestingModule,
+            ]
+        }).compileComponents().then();
+
+        fixture = TestBed.createComponent(SequencesPage);
+        component = fixture.componentInstance;
+        fixture.detectChanges();
+    }));
+
+    it('should create', () => {
+        expect(component).toBeTruthy();
+    });
+});
diff --git a/mc_frontend/src/app/sequences/sequences.page.ts b/mc_frontend/src/app/sequences/sequences.page.ts
new file mode 100644
index 0000000000000000000000000000000000000000..48305ea7c26fd54a992823463e192c0be6f4f92b
--- /dev/null
+++ b/mc_frontend/src/app/sequences/sequences.page.ts
@@ -0,0 +1,31 @@
+import {Component, OnInit} from '@angular/core';
+import {HelperService} from '../helper.service';
+import {NavController} from '@ionic/angular';
+import configMC from '../../configMC';
+import {ExerciseParams} from '../models/exerciseParams';
+import {ExerciseAuthor, ExerciseType, LanguageShortcut} from '../models/enum';
+import {ExerciseTypePath} from '../../../openapi';
+import {Language} from '../models/language';
+
+@Component({
+    selector: 'app-sequences',
+    templateUrl: './sequences.page.html',
+    styleUrls: ['./sequences.page.scss'],
+})
+export class SequencesPage implements OnInit {
+    configMC = configMC;
+    exerciseParams: ExerciseParams = {
+        author: ExerciseAuthor.potsdam,
+        file: '1',
+        language: LanguageShortcut.German,
+        type: ExerciseTypePath.FillBlanks
+    };
+
+    constructor(public helperService: HelperService,
+                public navCtrl: NavController) {
+    }
+
+    ngOnInit() {
+    }
+
+}
diff --git a/mc_frontend/src/app/test/test.page.html b/mc_frontend/src/app/test/test.page.html
index b4a833bc407cfde6389ba0c4cee75aed760e96fd..54beb5ca081e1ac72331664a6353e8a5e9b80c42 100644
--- a/mc_frontend/src/app/test/test.page.html
+++ b/mc_frontend/src/app/test/test.page.html
@@ -52,7 +52,7 @@
                 <ion-progress-bar value="{{progressBarValue}}"></ion-progress-bar>
             </ion-col>
         </ion-row>
-        <ion-row *ngIf="!exerciseService.currentExerciseName.startsWith(nonH5Pstring)">
+        <ion-row *ngIf="!exerciseService.currentExerciseName.startsWith(exerciseService.nonH5Pstring)">
             <ion-col>
                 {{ 'TEST_MODULE_EXERCISE_ID' | translate }}: #{{ exerciseService.currentExerciseIndex + 1 }}
             </ion-col>
@@ -102,7 +102,7 @@
         </ion-row>
         <ion-row
                 *ngIf="(!isTestMode || currentState == TestModuleState.showSolutions) &&
-                !exerciseService.currentExerciseName.startsWith(nonH5Pstring)">
+                !exerciseService.currentExerciseName.startsWith(exerciseService.nonH5Pstring)">
             <ion-button (click)="continueToNextExercise(isTestMode)">
                 {{ 'BUTTON_CONTINUE' | translate}}
             </ion-button>
diff --git a/mc_frontend/src/app/test/test.page.spec.ts b/mc_frontend/src/app/test/test.page.spec.ts
index 5c251a1635bb6b5725218169fe3ee6d50ae363f7..7eecbef96d85fcf9a623e8f398009c7b030fb313 100644
--- a/mc_frontend/src/app/test/test.page.spec.ts
+++ b/mc_frontend/src/app/test/test.page.spec.ts
@@ -240,7 +240,7 @@ describe('TestPage', () => {
         const inputEventSpy: Spy = spyOn(testPage, 'setInputEventHandler');
         const solutionsEventSpy: Spy = spyOn(testPage, 'handleSolutionsEvent');
         testPage.currentState = TestModuleState.inProgress;
-        const domChangedEvent: any = {data: {library: testPage.fillBlanksString}};
+        const domChangedEvent: any = {data: {library: ExerciseTypePath.FillBlanks}};
         testPage.helperService.events.trigger(EventMC.h5pCreated, domChangedEvent);
         expect(inputEventSpy).toHaveBeenCalledTimes(1);
         testPage.currentState = TestModuleState.showSolutions;
@@ -275,27 +275,32 @@ describe('TestPage', () => {
         const previousExercises: number[] = testPage.exerciseService.currentExerciseParts.slice(0, targetExercisePartIndex)
             .map(x => x.exercises.length);
         testPage.exerciseService.currentExerciseIndex = previousExercises.reduce((a, b) => a + b);
-        testPage.helperService.events.on(EventMC.h5pCreated, async (event: any) => {
+        testPage.helperService.events.on(EventMC.h5pCreated, (event: any) => {
             expect(event.data.library).toBe(ExerciseTypePath.FillBlanks);
             testPage.helperService.events.off(EventMC.h5pCreated);
-            testPage.vocService.currentTestResults[2] = new TestResultMC({
-                statement: new StatementBase({
-                    context: new Context({
-                        contextActivities: new ContextActivities({category: [new Activity({id: testPage.h5pDragTextString})]})
+            const loadSpy: Spy = spyOn(testPage.exerciseService, 'loadExercise').and.callFake(() => Promise.reject());
+            testPage.showNextExercise(testPage.exerciseService.currentExerciseIndex).then(() => {
+            }, async () => {
+                expect(loadSpy).toHaveBeenCalledTimes(1);
+                testPage.vocService.currentTestResults[2] = new TestResultMC({
+                    statement: new StatementBase({
+                        context: new Context({
+                            contextActivities: new ContextActivities({category: [new Activity({id: testPage.h5pDragTextString})]})
+                        })
                     })
-                })
+                });
+                testPage.exerciseService.currentExerciseIndex = 2;
+                const iframe: HTMLIFrameElement = MockMC.addIframe(testPage.exerciseService.h5pIframeString);
+                fixture.detectChanges();
+                await testPage.showNextExercise(2, true);
+                expect(hideButtonSpy).toHaveBeenCalledTimes(1);
+                testPage.exerciseService.currentExerciseName = testPage.exerciseService.nonH5Pstring;
+                await testPage.showNextExercise(testPage.exerciseService.currentExerciseParts
+                    [testPage.exerciseService.currentExerciseParts.length - 1].startIndex);
+                expect(resultsSpy).toHaveBeenCalledTimes(1);
+                iframe.parentElement.removeChild(iframe);
+                done();
             });
-            testPage.exerciseService.currentExerciseIndex = 2;
-            const iframe: HTMLIFrameElement = MockMC.addIframe(testPage.exerciseService.h5pIframeString);
-            fixture.detectChanges();
-            await testPage.showNextExercise(2, true);
-            expect(hideButtonSpy).toHaveBeenCalledTimes(1);
-            testPage.exerciseService.currentExerciseName = testPage.nonH5Pstring;
-            await testPage.showNextExercise(testPage.exerciseService.currentExerciseParts
-                [testPage.exerciseService.currentExerciseParts.length - 1].startIndex);
-            expect(resultsSpy).toHaveBeenCalledTimes(1);
-            iframe.parentElement.removeChild(iframe);
-            done();
         });
         spyOn(testPage.exerciseService, 'createH5Pstandalone').and.returnValue(Promise.resolve());
         testPage.showNextExercise(testPage.exerciseService.currentExerciseIndex).then();
diff --git a/mc_frontend/src/app/test/test.page.ts b/mc_frontend/src/app/test/test.page.ts
index f8ef94854c98ae1b3a63e89eb0772cac3fa7e529..fa19f6c456bba94a80dd0ed27d236dd19c6cc253 100644
--- a/mc_frontend/src/app/test/test.page.ts
+++ b/mc_frontend/src/app/test/test.page.ts
@@ -5,7 +5,7 @@ import {HelperService} from '../helper.service';
 import {XAPIevent} from 'src/app/models/xAPIevent';
 import {TranslateService} from '@ngx-translate/core';
 import {VocabularyService} from 'src/app/vocabulary.service';
-import {EventMC, TestModuleState, TestType} from 'src/app/models/enum';
+import {EventMC, ExerciseAuthor, TestModuleState, TestType} from 'src/app/models/enum';
 import {ConfirmCancelPage} from 'src/app/confirm-cancel/confirm-cancel.page';
 import {ExercisePart} from 'src/app/models/exercisePart';
 import Activity from 'src/app/models/xAPI/Activity';
@@ -33,52 +33,70 @@ export class TestPage implements OnDestroy, OnInit {
     public availableExerciseParts: ExercisePart[] = [new ExercisePart({
         startIndex: 0,
         durationSeconds: 0,
-        exercises: ['nonH5P_1']
+        exercises: [`${this.exerciseService.nonH5Pstring}_1`]
     }), new ExercisePart({
         /** pretest */
         startIndex: 0,
         durationSeconds: 240,
-        exercises: ['fill_blanks_6', 'fill_blanks_1', 'multi_choice_5', 'multi_choice_6',
-            'multi_choice_7', 'multi_choice_8', 'fill_blanks_2', 'fill_blanks_7',
-            'fill_blanks_4', 'multi_choice_18', 'multi_choice_9']
+        exercises: [`${ExerciseTypePath.FillBlanks}_6`, `${ExerciseTypePath.FillBlanks}_1`,
+            `${ExerciseTypePath.MultiChoice}_5`, `${ExerciseTypePath.MultiChoice}_6`,
+            `${ExerciseTypePath.MultiChoice}_7`, `${ExerciseTypePath.MultiChoice}_8`,
+            `${ExerciseTypePath.FillBlanks}_2`, `${ExerciseTypePath.FillBlanks}_7`,
+            `${ExerciseTypePath.FillBlanks}_4`, `${ExerciseTypePath.MultiChoice}_18`,
+            `${ExerciseTypePath.MultiChoice}_9`]
     }), new ExercisePart({
         /** comprehension exercise */
         startIndex: 0,
         durationSeconds: 1080,
-        exercises: ['mark_words_1', 'fill_blanks_11', 'fill_blanks_12', 'fill_blanks_13',
-            'fill_blanks_14', 'fill_blanks_16', 'fill_blanks_15', 'multi_choice_24']
+        exercises: ['mark_words_1', `${ExerciseTypePath.FillBlanks}_11`, `${ExerciseTypePath.FillBlanks}_12`,
+            `${ExerciseTypePath.FillBlanks}_13`, `${ExerciseTypePath.FillBlanks}_14`,
+            `${ExerciseTypePath.FillBlanks}_16`, `${ExerciseTypePath.FillBlanks}_15`,
+            `${ExerciseTypePath.MultiChoice}_24`]
     }), new ExercisePart({
         /** cloze text exercise */
         startIndex: 0,
         durationSeconds: 720,
-        exercises: ['drag_text_1', 'drag_text_2', 'drag_text_3', 'drag_text_4', 'drag_text_6', 'drag_text_5']
+        exercises: [`${ExerciseTypePath.DragText}_1`, `${ExerciseTypePath.DragText}_2`,
+            `${ExerciseTypePath.DragText}_3`, `${ExerciseTypePath.DragText}_4`,
+            `${ExerciseTypePath.DragText}_6`, `${ExerciseTypePath.DragText}_5`]
     }), new ExercisePart({
         /** pair association exercise */
         startIndex: 0,
         durationSeconds: 720,
-        exercises: HelperService.shuffle(['voc_list_2', 'voc_list_6', 'voc_list_10',
-            'voc_list_11', 'voc_list_12', 'voc_list_16',
-            'voc_list_17', 'voc_list_18', 'voc_list_27',
-            'voc_list_29', 'voc_list_30', 'voc_list_31', 'voc_list_34',
-            'voc_list_42', 'voc_list_43', 'voc_list_49', 'voc_list_52',
-            'voc_list_53', 'voc_list_54', 'voc_list_56', 'voc_list_61', 'voc_list_62',
-            'voc_list_65', 'voc_list_66', 'voc_list_67', 'voc_list_70',
-            'voc_list_72', 'voc_list_84', 'voc_list_85', 'voc_list_86',
-            'voc_list_87', 'voc_list_88', 'voc_list_89', 'voc_list_90', 'voc_list_91'])
+        exercises: HelperService.shuffle([`${ExerciseTypePath.VocList}_2`, `${ExerciseTypePath.VocList}_6`,
+            `${ExerciseTypePath.VocList}_10`, `${ExerciseTypePath.VocList}_11`,
+            `${ExerciseTypePath.VocList}_12`, `${ExerciseTypePath.VocList}_16`,
+            `${ExerciseTypePath.VocList}_17`, `${ExerciseTypePath.VocList}_18`,
+            `${ExerciseTypePath.VocList}_27`, `${ExerciseTypePath.VocList}_29`,
+            `${ExerciseTypePath.VocList}_30`, `${ExerciseTypePath.VocList}_31`,
+            `${ExerciseTypePath.VocList}_34`, `${ExerciseTypePath.VocList}_42`,
+            `${ExerciseTypePath.VocList}_43`, `${ExerciseTypePath.VocList}_49`,
+            `${ExerciseTypePath.VocList}_52`, `${ExerciseTypePath.VocList}_53`,
+            `${ExerciseTypePath.VocList}_54`, `${ExerciseTypePath.VocList}_56`,
+            `${ExerciseTypePath.VocList}_61`, `${ExerciseTypePath.VocList}_62`,
+            `${ExerciseTypePath.VocList}_65`, `${ExerciseTypePath.VocList}_66`,
+            `${ExerciseTypePath.VocList}_67`, `${ExerciseTypePath.VocList}_70`,
+            `${ExerciseTypePath.VocList}_72`, `${ExerciseTypePath.VocList}_84`,
+            `${ExerciseTypePath.VocList}_85`, `${ExerciseTypePath.VocList}_86`,
+            `${ExerciseTypePath.VocList}_87`, `${ExerciseTypePath.VocList}_88`,
+            `${ExerciseTypePath.VocList}_89`, `${ExerciseTypePath.VocList}_90`,
+            `${ExerciseTypePath.VocList}_91`])
     }), new ExercisePart({
         /** posttest */
         startIndex: 0,
         durationSeconds: 240,
-        exercises: ['fill_blanks_6', 'fill_blanks_1', 'multi_choice_5', 'multi_choice_6',
-            'multi_choice_7', 'multi_choice_8', 'fill_blanks_2', 'fill_blanks_7',
-            'fill_blanks_4', 'multi_choice_18', 'multi_choice_9']
-    }), new ExercisePart({exercises: ['nonH5P_2'], startIndex: 0})];
+        exercises: [`${ExerciseTypePath.FillBlanks}_6`, `${ExerciseTypePath.FillBlanks}_1`,
+            `${ExerciseTypePath.MultiChoice}_5`, `${ExerciseTypePath.MultiChoice}_6`,
+            `${ExerciseTypePath.MultiChoice}_7`, `${ExerciseTypePath.MultiChoice}_8`,
+            `${ExerciseTypePath.FillBlanks}_2`, `${ExerciseTypePath.FillBlanks}_7`,
+            `${ExerciseTypePath.FillBlanks}_4`, `${ExerciseTypePath.MultiChoice}_18`,
+            `${ExerciseTypePath.MultiChoice}_9`]
+    }), new ExercisePart({exercises: [`${this.exerciseService.nonH5Pstring}_2`], startIndex: 0})];
     public configMC = configMC;
     public countDownDateTime: number;
     public currentState: TestModuleState = TestModuleState.inProgress;
     public didTimeRunOut = false;
     public exerciseIndices: number[];
-    public fillBlanksString = 'fill_blanks';
     public finishExerciseTimeout = 200;
     public h5pAnswerClassString = '.h5p-answer';
     public h5pBlanksString = 'H5P.Blanks';
@@ -93,7 +111,6 @@ export class TestPage implements OnDestroy, OnInit {
     public hideClassString = 'hide';
     public isTestMode: boolean;
     public knownCount: [number, number];
-    public nonH5Pstring = 'nonH5P';
     public progressBarValue: number;
     public results: [number, number][];
     public resultsBaseIndex: number;
@@ -393,7 +410,7 @@ export class TestPage implements OnDestroy, OnInit {
             }
         });
         this.helperService.events.on(EventMC.h5pCreated, (event: any) => {
-            if (this.currentState === TestModuleState.inProgress && event.data.library === this.fillBlanksString) {
+            if (this.currentState === TestModuleState.inProgress && event.data.library === ExerciseTypePath.FillBlanks) {
                 this.setInputEventHandler();
             } else if (this.currentState === TestModuleState.showSolutions) {
                 this.handleSolutionsEvent();
@@ -421,13 +438,13 @@ export class TestPage implements OnDestroy, OnInit {
     }
 
     showNextExercise(newIndex: number, review: boolean = false): Promise<void> {
-        return new Promise<void>(resolve => {
+        return new Promise<void>((resolve, reject) => {
             this.adjustTimer(newIndex, review);
             const currentExercisePart: ExercisePart = this.exerciseService.currentExerciseParts
                 [this.exerciseService.currentExercisePartIndex];
             const maxProgress: number = currentExercisePart.exercises.length;
             this.progressBarValue = (newIndex - currentExercisePart.startIndex) / maxProgress;
-            if (this.exerciseService.currentExerciseName.startsWith(this.nonH5Pstring)) {
+            if (this.exerciseService.currentExerciseName.startsWith(this.exerciseService.nonH5Pstring)) {
                 document.querySelector(this.h5pRowIDstring).classList.add(this.hideClassString);
                 if (newIndex ===
                     this.exerciseService.currentExerciseParts[this.exerciseService.currentExerciseParts.length - 1].startIndex) {
@@ -451,15 +468,20 @@ export class TestPage implements OnDestroy, OnInit {
                     return resolve();
                 }
             }
-            const fileName: string = this.exerciseService.currentExerciseName.split('_').slice(-1) + '_' +
-                this.translate.currentLang + '.json';
+            const fileName: string = this.exerciseService.currentExerciseName.split('_').slice(-1)[0];
             let exerciseType = this.exerciseService.currentExerciseName.split('_').slice(0, 2).join('_');
-            this.exerciseService.setH5Purl(this.helperService.baseUrl + '/assets/h5p/' + exerciseType + '/content/' + fileName);
-            if (exerciseType.startsWith(ExerciseTypePath.VocList)) {
-                exerciseType = ExerciseTypePath.FillBlanks;
-            }
-            this.exerciseService.initH5P(exerciseType, false).then(() => {
+            this.exerciseService.loadExercise({
+                showActions: false,
+                author: ExerciseAuthor.callidus,
+                file: fileName,
+                type: exerciseType
+            }).then(() => {
+                if (exerciseType.startsWith(ExerciseTypePath.VocList)) {
+                    exerciseType = ExerciseTypePath.FillBlanks;
+                }
                 return resolve();
+            }, () => {
+                return reject();
             });
         });
     }
diff --git a/mc_frontend/src/assets/h5p/drag_text/content/1-3_de.json b/mc_frontend/src/assets/h5p/drag_text/content/callidus/1-3_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/drag_text/content/1-3_de.json
rename to mc_frontend/src/assets/h5p/drag_text/content/callidus/1-3_de.json
diff --git a/mc_frontend/src/assets/h5p/drag_text/content/1-3_en.json b/mc_frontend/src/assets/h5p/drag_text/content/callidus/1-3_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/drag_text/content/1-3_en.json
rename to mc_frontend/src/assets/h5p/drag_text/content/callidus/1-3_en.json
diff --git a/mc_frontend/src/assets/h5p/drag_text/content/1_de.json b/mc_frontend/src/assets/h5p/drag_text/content/callidus/1_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/drag_text/content/1_de.json
rename to mc_frontend/src/assets/h5p/drag_text/content/callidus/1_de.json
diff --git a/mc_frontend/src/assets/h5p/drag_text/content/1_en.json b/mc_frontend/src/assets/h5p/drag_text/content/callidus/1_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/drag_text/content/1_en.json
rename to mc_frontend/src/assets/h5p/drag_text/content/callidus/1_en.json
diff --git a/mc_frontend/src/assets/h5p/drag_text/content/2_de.json b/mc_frontend/src/assets/h5p/drag_text/content/callidus/2_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/drag_text/content/2_de.json
rename to mc_frontend/src/assets/h5p/drag_text/content/callidus/2_de.json
diff --git a/mc_frontend/src/assets/h5p/drag_text/content/2_en.json b/mc_frontend/src/assets/h5p/drag_text/content/callidus/2_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/drag_text/content/2_en.json
rename to mc_frontend/src/assets/h5p/drag_text/content/callidus/2_en.json
diff --git a/mc_frontend/src/assets/h5p/drag_text/content/3_de.json b/mc_frontend/src/assets/h5p/drag_text/content/callidus/3_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/drag_text/content/3_de.json
rename to mc_frontend/src/assets/h5p/drag_text/content/callidus/3_de.json
diff --git a/mc_frontend/src/assets/h5p/drag_text/content/3_en.json b/mc_frontend/src/assets/h5p/drag_text/content/callidus/3_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/drag_text/content/3_en.json
rename to mc_frontend/src/assets/h5p/drag_text/content/callidus/3_en.json
diff --git a/mc_frontend/src/assets/h5p/drag_text/content/4_de.json b/mc_frontend/src/assets/h5p/drag_text/content/callidus/4_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/drag_text/content/4_de.json
rename to mc_frontend/src/assets/h5p/drag_text/content/callidus/4_de.json
diff --git a/mc_frontend/src/assets/h5p/drag_text/content/4_en.json b/mc_frontend/src/assets/h5p/drag_text/content/callidus/4_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/drag_text/content/4_en.json
rename to mc_frontend/src/assets/h5p/drag_text/content/callidus/4_en.json
diff --git a/mc_frontend/src/assets/h5p/drag_text/content/5_de.json b/mc_frontend/src/assets/h5p/drag_text/content/callidus/5_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/drag_text/content/5_de.json
rename to mc_frontend/src/assets/h5p/drag_text/content/callidus/5_de.json
diff --git a/mc_frontend/src/assets/h5p/drag_text/content/5_en.json b/mc_frontend/src/assets/h5p/drag_text/content/callidus/5_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/drag_text/content/5_en.json
rename to mc_frontend/src/assets/h5p/drag_text/content/callidus/5_en.json
diff --git a/mc_frontend/src/assets/h5p/drag_text/content/6_de.json b/mc_frontend/src/assets/h5p/drag_text/content/callidus/6_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/drag_text/content/6_de.json
rename to mc_frontend/src/assets/h5p/drag_text/content/callidus/6_de.json
diff --git a/mc_frontend/src/assets/h5p/drag_text/content/6_en.json b/mc_frontend/src/assets/h5p/drag_text/content/callidus/6_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/drag_text/content/6_en.json
rename to mc_frontend/src/assets/h5p/drag_text/content/callidus/6_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/es.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/es.json
deleted file mode 100644
index fca34f5f20b967f24750077a4787b13760f6ff96..0000000000000000000000000000000000000000
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/es.json
+++ /dev/null
@@ -1,195 +0,0 @@
-{
-  "semantics": [
-    {
-      "label": "Media",
-      "fields": [
-        {
-          "label": "Tipo",
-          "description": "Optional media to display above the question."
-        }
-      ]
-    },
-    {
-      "label": "Descripción de la tarea",
-      "default": "Rellenar las palabras que faltan",
-      "description": "Una guía que dice al usuario cómo responder a esta tarea."
-    },
-    {
-      "label": "Bloques de texto",
-      "entity": "bloque de texto",
-      "field": {
-        "label": "Línea de texto",
-        "placeholder": "Oslo es la capital de *Noruega*.",
-        "description": "",
-        "important": {
-          "description": "<ul><li>Se añaden espacios en blanco con un asterisco (*) delante y detrás de la palabra/frase correcta.</li> <li>Respuestas alternativas se separan con una barra diagonal (/).</li> <li>Puede agregar un texto de consejo, mediante dos puntos (:) delante del texto consejo.</li></ul>",
-          "example": "H5P content may be edited using a *browser/web-browser:Something you use every day*."
-        }
-      }
-    },
-    {
-      "label": "Overall Feedback",
-      "fields": [
-        {
-          "widgets": [
-            {
-              "label": "Default"
-            }
-          ],
-          "label": "Define custom feedback for any score range",
-          "description": "Click the \"Add range\" button to add as many ranges as you need. Example: 0-20% Bad score, 21-91% Average Score, 91-100% Great Score!",
-          "entity": "range",
-          "field": {
-            "fields": [
-              {
-                "label": "Score Range"
-              },
-              {},
-              {
-                "label": "Feedback for defined score range",
-                "placeholder": "Fill in the feedback"
-              }
-            ]
-          }
-        }
-      ]
-    },
-    {
-      "label": "Texto para el botón de \"Mostrar soluciones\"",
-      "default": "Mostrar solución"
-    },
-    {
-      "label": "Texto para el botón de \"Reintentar\"",
-      "default": "Retry"
-    },
-    {
-      "label": "Text for \"Check\" button",
-      "default": "Check"
-    },
-    {
-      "label": "Text for \"Not filled out\" message",
-      "default": "Please fill in all blanks to view solution"
-    },
-    {
-      "label": "Text for \"':ans' is correct\" message",
-      "default": "':ans' is correct"
-    },
-    {
-      "label": "Text for \"':ans' is wrong\" message",
-      "default": "':ans' is wrong"
-    },
-    {
-      "label": "Text for \"Answered correctly\" message",
-      "default": "Answered correctly"
-    },
-    {
-      "label": "Text for \"Answered incorrectly\" message",
-      "default": "Answered incorrectly"
-    },
-    {
-      "label": "Assistive technology label for solution",
-      "default": "Correct answer:"
-    },
-    {
-      "label": "Assistive technology label for input field",
-      "description": "Use @num and @total to replace current cloze number and total cloze number",
-      "default": "Blank input @num of @total"
-    },
-    {
-      "label": "Assistive technology label for saying an input has a tip tied to it",
-      "default": "Tip available"
-    },
-    {
-      "label": "Tip icon label",
-      "default": "Tip"
-    },
-    {
-      "label": "Behavioural settings.",
-      "description": "These options will let you control how the task behaves.",
-      "fields": [
-        {
-          "label": "Enable \"Retry\""
-        },
-        {
-          "label": "Enable \"Show solution\" button"
-        },
-        {
-          "label": "Enable \"Check\" button"
-        },
-        {
-          "label": "Automatically check answers after input"
-        },
-        {
-          "label": "Case sensitive",
-          "description": "Makes sure the user input has to be exactly the same as the answer."
-        },
-        {
-          "label": "Require all fields to be answered before the solution can be viewed"
-        },
-        {
-          "label": "Put input fields on separate lines"
-        },
-        {
-          "label": "Disable image zooming for question image"
-        },
-        {
-          "label": "Show confirmation dialog on \"Check\"",
-          "description": "This options is not compatible with the \"Automatically check answers after input\" option"
-        },
-        {
-          "label": "Show confirmation dialog on \"Retry\""
-        },
-        {
-          "label": "Accept minor spelling errors",
-          "description": "If activated, an answer will also count as correct with minor spelling errors (3-9 characters: 1 spelling error, more than 9 characters: 2 spelling errors)"
-        }
-      ]
-    },
-    {
-      "label": "Check confirmation dialog",
-      "fields": [
-        {
-          "label": "Header text",
-          "default": "Finish ?"
-        },
-        {
-          "label": "Body text",
-          "default": "Are you sure you wish to finish ?"
-        },
-        {
-          "label": "Cancel button label",
-          "default": "Cancel"
-        },
-        {
-          "label": "Confirm button label",
-          "default": "Finish"
-        }
-      ]
-    },
-    {
-      "label": "Retry confirmation dialog",
-      "fields": [
-        {
-          "label": "Header text",
-          "default": "Retry ?"
-        },
-        {
-          "label": "Body text",
-          "default": "Are you sure you wish to retry ?"
-        },
-        {
-          "label": "Cancel button label",
-          "default": "Cancel"
-        },
-        {
-          "label": "Confirm button label",
-          "default": "Confirm"
-        }
-      ]
-    },
-    {
-      "label": "Textual representation of the score bar for those using a readspeaker",
-      "default": "You got :num out of :total points"
-    }
-  ]
-}
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/pl.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/pl.json
deleted file mode 100644
index eeb1c37342dd564b925a3bd02275843d79e8792a..0000000000000000000000000000000000000000
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/pl.json
+++ /dev/null
@@ -1,195 +0,0 @@
-{
-  "semantics": [
-    {
-      "label": "Media",
-      "fields": [
-        {
-          "label": "Type",
-          "description": "Optional media to display above the question."
-        }
-      ]
-    },
-    {
-      "label": "Task description",
-      "default": "Fill in the missing words",
-      "description": "A guide telling the user how to answer this task."
-    },
-    {
-      "label": "Text blocks",
-      "entity": "text block",
-      "field": {
-        "label": "Line of text",
-        "placeholder": "Oslo is the capital of *Norway*.",
-        "description": "",
-        "important": {
-          "description": "<ul><li>Blanks are added with an asterisk (*) in front and behind the correct word/phrase.</li><li>Alternative answers are separated with a forward slash (/).</li><li>You may add a textual tip, using a colon (:) in front of the tip.</li></ul>",
-          "example": "H5P content may be edited using a *browser/web-browser:Something you use every day*."
-        }
-      }
-    },
-    {
-      "label": "Overall Feedback",
-      "fields": [
-        {
-          "widgets": [
-            {
-              "label": "Default"
-            }
-          ],
-          "label": "Define custom feedback for any score range",
-          "description": "Click the \"Add range\" button to add as many ranges as you need. Example: 0-20% Bad score, 21-91% Average Score, 91-100% Great Score!",
-          "entity": "range",
-          "field": {
-            "fields": [
-              {
-                "label": "Score Range"
-              },
-              {},
-              {
-                "label": "Feedback for defined score range",
-                "placeholder": "Fill in the feedback"
-              }
-            ]
-          }
-        }
-      ]
-    },
-    {
-      "label": "Text for \"Show solutions\" button",
-      "default": "Show solution"
-    },
-    {
-      "label": "Text for \"Retry\" button",
-      "default": "Retry"
-    },
-    {
-      "label": "Text for \"Check\" button",
-      "default": "Check"
-    },
-    {
-      "label": "Text for \"Not filled out\" message",
-      "default": "Please fill in all blanks to view solution"
-    },
-    {
-      "label": "Text for \"':ans' is correct\" message",
-      "default": "':ans' is correct"
-    },
-    {
-      "label": "Text for \"':ans' is wrong\" message",
-      "default": "':ans' is wrong"
-    },
-    {
-      "label": "Text for \"Answered correctly\" message",
-      "default": "Answered correctly"
-    },
-    {
-      "label": "Text for \"Answered incorrectly\" message",
-      "default": "Answered incorrectly"
-    },
-    {
-      "label": "Assistive technology label for solution",
-      "default": "Correct answer:"
-    },
-    {
-      "label": "Assistive technology label for input field",
-      "description": "Use @num and @total to replace current cloze number and total cloze number",
-      "default": "Blank input @num of @total"
-    },
-    {
-      "label": "Assistive technology label for saying an input has a tip tied to it",
-      "default": "Tip available"
-    },
-    {
-      "label": "Tip icon label",
-      "default": "Tip"
-    },
-    {
-      "label": "Behavioural settings.",
-      "description": "These options will let you control how the task behaves.",
-      "fields": [
-        {
-          "label": "Enable \"Retry\""
-        },
-        {
-          "label": "Enable \"Show solution\" button"
-        },
-        {
-          "label": "Enable \"Check\" button"
-        },
-        {
-          "label": "Automatically check answers after input"
-        },
-        {
-          "label": "Case sensitive",
-          "description": "Makes sure the user input has to be exactly the same as the answer."
-        },
-        {
-          "label": "Require all fields to be answered before the solution can be viewed"
-        },
-        {
-          "label": "Put input fields on separate lines"
-        },
-        {
-          "label": "Disable image zooming for question image"
-        },
-        {
-          "label": "Show confirmation dialog on \"Check\"",
-          "description": "This options is not compatible with the \"Automatically check answers after input\" option"
-        },
-        {
-          "label": "Show confirmation dialog on \"Retry\""
-        },
-        {
-          "label": "Accept minor spelling errors",
-          "description": "If activated, an answer will also count as correct with minor spelling errors (3-9 characters: 1 spelling error, more than 9 characters: 2 spelling errors)"
-        }
-      ]
-    },
-    {
-      "label": "Check confirmation dialog",
-      "fields": [
-        {
-          "label": "Header text",
-          "default": "Finish ?"
-        },
-        {
-          "label": "Body text",
-          "default": "Are you sure you wish to finish ?"
-        },
-        {
-          "label": "Cancel button label",
-          "default": "Cancel"
-        },
-        {
-          "label": "Confirm button label",
-          "default": "Finish"
-        }
-      ]
-    },
-    {
-      "label": "Retry confirmation dialog",
-      "fields": [
-        {
-          "label": "Header text",
-          "default": "Retry ?"
-        },
-        {
-          "label": "Body text",
-          "default": "Are you sure you wish to retry ?"
-        },
-        {
-          "label": "Cancel button label",
-          "default": "Cancel"
-        },
-        {
-          "label": "Confirm button label",
-          "default": "Confirm"
-        }
-      ]
-    },
-    {
-      "label": "Textual representation of the score bar for those using a readspeaker",
-      "default": "You got :num out of :total points"
-    }
-  ]
-}
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ru.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ru.json
deleted file mode 100644
index eeb1c37342dd564b925a3bd02275843d79e8792a..0000000000000000000000000000000000000000
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ru.json
+++ /dev/null
@@ -1,195 +0,0 @@
-{
-  "semantics": [
-    {
-      "label": "Media",
-      "fields": [
-        {
-          "label": "Type",
-          "description": "Optional media to display above the question."
-        }
-      ]
-    },
-    {
-      "label": "Task description",
-      "default": "Fill in the missing words",
-      "description": "A guide telling the user how to answer this task."
-    },
-    {
-      "label": "Text blocks",
-      "entity": "text block",
-      "field": {
-        "label": "Line of text",
-        "placeholder": "Oslo is the capital of *Norway*.",
-        "description": "",
-        "important": {
-          "description": "<ul><li>Blanks are added with an asterisk (*) in front and behind the correct word/phrase.</li><li>Alternative answers are separated with a forward slash (/).</li><li>You may add a textual tip, using a colon (:) in front of the tip.</li></ul>",
-          "example": "H5P content may be edited using a *browser/web-browser:Something you use every day*."
-        }
-      }
-    },
-    {
-      "label": "Overall Feedback",
-      "fields": [
-        {
-          "widgets": [
-            {
-              "label": "Default"
-            }
-          ],
-          "label": "Define custom feedback for any score range",
-          "description": "Click the \"Add range\" button to add as many ranges as you need. Example: 0-20% Bad score, 21-91% Average Score, 91-100% Great Score!",
-          "entity": "range",
-          "field": {
-            "fields": [
-              {
-                "label": "Score Range"
-              },
-              {},
-              {
-                "label": "Feedback for defined score range",
-                "placeholder": "Fill in the feedback"
-              }
-            ]
-          }
-        }
-      ]
-    },
-    {
-      "label": "Text for \"Show solutions\" button",
-      "default": "Show solution"
-    },
-    {
-      "label": "Text for \"Retry\" button",
-      "default": "Retry"
-    },
-    {
-      "label": "Text for \"Check\" button",
-      "default": "Check"
-    },
-    {
-      "label": "Text for \"Not filled out\" message",
-      "default": "Please fill in all blanks to view solution"
-    },
-    {
-      "label": "Text for \"':ans' is correct\" message",
-      "default": "':ans' is correct"
-    },
-    {
-      "label": "Text for \"':ans' is wrong\" message",
-      "default": "':ans' is wrong"
-    },
-    {
-      "label": "Text for \"Answered correctly\" message",
-      "default": "Answered correctly"
-    },
-    {
-      "label": "Text for \"Answered incorrectly\" message",
-      "default": "Answered incorrectly"
-    },
-    {
-      "label": "Assistive technology label for solution",
-      "default": "Correct answer:"
-    },
-    {
-      "label": "Assistive technology label for input field",
-      "description": "Use @num and @total to replace current cloze number and total cloze number",
-      "default": "Blank input @num of @total"
-    },
-    {
-      "label": "Assistive technology label for saying an input has a tip tied to it",
-      "default": "Tip available"
-    },
-    {
-      "label": "Tip icon label",
-      "default": "Tip"
-    },
-    {
-      "label": "Behavioural settings.",
-      "description": "These options will let you control how the task behaves.",
-      "fields": [
-        {
-          "label": "Enable \"Retry\""
-        },
-        {
-          "label": "Enable \"Show solution\" button"
-        },
-        {
-          "label": "Enable \"Check\" button"
-        },
-        {
-          "label": "Automatically check answers after input"
-        },
-        {
-          "label": "Case sensitive",
-          "description": "Makes sure the user input has to be exactly the same as the answer."
-        },
-        {
-          "label": "Require all fields to be answered before the solution can be viewed"
-        },
-        {
-          "label": "Put input fields on separate lines"
-        },
-        {
-          "label": "Disable image zooming for question image"
-        },
-        {
-          "label": "Show confirmation dialog on \"Check\"",
-          "description": "This options is not compatible with the \"Automatically check answers after input\" option"
-        },
-        {
-          "label": "Show confirmation dialog on \"Retry\""
-        },
-        {
-          "label": "Accept minor spelling errors",
-          "description": "If activated, an answer will also count as correct with minor spelling errors (3-9 characters: 1 spelling error, more than 9 characters: 2 spelling errors)"
-        }
-      ]
-    },
-    {
-      "label": "Check confirmation dialog",
-      "fields": [
-        {
-          "label": "Header text",
-          "default": "Finish ?"
-        },
-        {
-          "label": "Body text",
-          "default": "Are you sure you wish to finish ?"
-        },
-        {
-          "label": "Cancel button label",
-          "default": "Cancel"
-        },
-        {
-          "label": "Confirm button label",
-          "default": "Finish"
-        }
-      ]
-    },
-    {
-      "label": "Retry confirmation dialog",
-      "fields": [
-        {
-          "label": "Header text",
-          "default": "Retry ?"
-        },
-        {
-          "label": "Body text",
-          "default": "Are you sure you wish to retry ?"
-        },
-        {
-          "label": "Cancel button label",
-          "default": "Cancel"
-        },
-        {
-          "label": "Confirm button label",
-          "default": "Confirm"
-        }
-      ]
-    },
-    {
-      "label": "Textual representation of the score bar for those using a readspeaker",
-      "default": "You got :num out of :total points"
-    }
-  ]
-}
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/css/blanks.css b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/css/blanks.css
similarity index 89%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/css/blanks.css
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/css/blanks.css
index ec908c203c46be8791ec19aced7e439fc1758368..476eb6fdfc76463eb20bd6c7669962a82bfb2016 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/css/blanks.css
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/css/blanks.css
@@ -39,9 +39,15 @@
   border: 1px solid #9dd8bb;
   color: #255c41;
 }
+/* Showing solution */
 .h5p-blanks .h5p-correct-answer {
   color: #255c41;
   font-weight: bold;
+  border: 1px #255c41 dashed;
+  background-color: #d4f6e6;
+  padding: 0.15em;
+  border-radius: 0.25em;
+  margin-left: .5em;
 }
 .h5p-blanks .h5p-correct:after {
   position: absolute;
@@ -96,3 +102,9 @@
 .h5p-blanks .has-tip.h5p-wrong .h5p-text-input {
   padding-right: 3.5em;
 }
+.h5p-blanks .hidden-but-read {
+  position: absolute;
+  height: 0;
+  width: 0;
+  overflow: hidden;
+}
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/icon.svg b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/icon.svg
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/icon.svg
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/icon.svg
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/js/blanks.js b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/js/blanks.js
similarity index 87%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/js/blanks.js
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/js/blanks.js
index c123d05f9289a45105381052639957cd13f16779..13f14aade21bef0865ef86622dc91f78d0e7a423 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/js/blanks.js
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/js/blanks.js
@@ -9,6 +9,10 @@ H5P.Blanks = (function ($, Question) {
   var STATE_SHOWING_SOLUTION = 'showing-solution';
   var STATE_FINISHED = 'finished';
 
+  const XAPI_ALTERNATIVE_EXTENSION = 'https://h5p.org/x-api/alternatives';
+  const XAPI_CASE_SENSITIVITY = 'https://h5p.org/x-api/case-sensitivity';
+  const XAPI_REPORTING_VERSION_EXTENSION = 'https://h5p.org/x-api/h5p-reporting-version';
+
   /**
    * @typedef {Object} Params
    *  Parameters/configuration object for Blanks
@@ -77,9 +81,12 @@ H5P.Blanks = (function ($, Question) {
         caseSensitive: true,
         showSolutionsRequiresInput: true,
         autoCheck: false,
-        separateLines: false,
-        disableImageZooming: false
-      }
+        separateLines: false
+      },
+      a11yCheck: 'Check the answers. The responses will be marked as correct, incorrect, or unanswered.',
+      a11yShowSolution: 'Show the solution. The task will be marked with its correct solution.',
+      a11yRetry: 'Retry the task. Reset all responses and start the task over again.',
+      a11yHeader: 'Checking mode',
     }, params);
 
     // Delete empty questions
@@ -125,13 +132,14 @@ H5P.Blanks = (function ($, Question) {
 
     // Check for task media
     var media = self.params.media;
-    if (media && media.library) {
+    if (media && media.type && media.type.library) {
+      media = media.type;
       var type = media.library.split(' ')[0];
       if (type === 'H5P.Image') {
         if (media.params.file) {
           // Register task image
           self.setImage(media.params.file.path, {
-            disableImageZooming: self.params.behaviour.disableImageZooming,
+            disableImageZooming: self.params.media.disableImageZooming || false,
             alt: media.params.alt,
             title: media.params.title
           });
@@ -145,11 +153,14 @@ H5P.Blanks = (function ($, Question) {
       }
     }
 
+    // Using instructions as label for our text groups
+    const labelId = 'h5p-blanks-instructions-' + Blanks.idCounter;
+
     // Register task introduction text
-    self.setIntroduction(self.params.text);
+    self.setIntroduction('<div id="' + labelId + '">' + self.params.text + '</div>');
 
     // Register task content area
-    self.setContent(self.createQuestions(), {
+    self.setContent(self.createQuestions(labelId), {
       'class': self.params.behaviour.separateLines ? 'h5p-separate-lines' : ''
     });
 
@@ -171,11 +182,11 @@ H5P.Blanks = (function ($, Question) {
 
     // select find container to attach dialogs to
     var $container;
-    if($containerParents.length !== 0) {
+    if ($containerParents.length !== 0) {
       // use parent highest up if any
       $container = $containerParents.last();
     }
-    else if($content.length !== 0){
+    else if ($content.length !== 0) {
       $container = $content;
     }
     else  {
@@ -185,11 +196,17 @@ H5P.Blanks = (function ($, Question) {
     if (!self.params.behaviour.autoCheck && this.params.behaviour.enableCheckButton) {
       // Check answer button
       self.addButton('check-answer', self.params.checkAnswer, function () {
+        // Move focus to top of content
+        self.a11yHeader.innerHTML = self.params.a11yHeader;
+        self.a11yHeader.focus();
+
         self.toggleButtonVisibility(STATE_CHECKING);
         self.markResults();
         self.showEvaluation();
         self.triggerAnswered();
-      }, true, {}, {
+      }, true, {
+        'aria-label': self.params.a11yCheck,
+      }, {
         confirmationDialog: {
           enable: self.params.behaviour.confirmCheckDialog,
           l10n: self.params.confirmCheck,
@@ -202,14 +219,19 @@ H5P.Blanks = (function ($, Question) {
     // Show solution button
     self.addButton('show-solution', self.params.showSolutions, function () {
       self.showCorrectAnswers(false);
-    }, self.params.behaviour.enableSolutionsButton);
+    }, self.params.behaviour.enableSolutionsButton, {
+      'aria-label': self.params.a11yShowSolution,
+    });
 
     // Try again button
     if (self.params.behaviour.enableRetry === true) {
       self.addButton('try-again', self.params.tryAgain, function () {
+        self.a11yHeader.innerHTML = '';
         self.resetTask();
         self.$questions.filter(':first').find('input:first').focus();
-      }, true, {}, {
+      }, true, {
+        'aria-label': self.params.a11yRetry,
+      }, {
         confirmationDialog: {
           enable: self.params.behaviour.confirmRetryDialog,
           l10n: self.params.confirmRetry,
@@ -262,7 +284,7 @@ H5P.Blanks = (function ($, Question) {
   /**
    * Create questitons html for DOM
    */
-  Blanks.prototype.createQuestions = function () {
+  Blanks.prototype.createQuestions = function (labelId) {
     var self = this;
 
     var html = '';
@@ -288,12 +310,17 @@ H5P.Blanks = (function ($, Question) {
         return cloze;
       });
 
-      html += '<div>' + question + '</div>';
+      html += '<div role="group" aria-labelledby="' + labelId + '">' + question + '</div>';
     }
 
     self.hasClozes = clozeNumber > 0;
     this.$questions = $(html);
 
+    self.a11yHeader = document.createElement('div');
+    self.a11yHeader.classList.add('hidden-but-read');
+    self.a11yHeader.tabIndex = -1;
+    self.$questions[0].insertBefore(self.a11yHeader, this.$questions[0].childNodes[0] || null);
+
     // Set input fields.
     this.$questions.find('input').each(function (i) {
       var afterCheck;
@@ -383,7 +410,7 @@ H5P.Blanks = (function ($, Question) {
     var rightPadPx = fontSize * rightPadEm;
     var static_min_pad = 0.5 * fontSize;
 
-    setTimeout(function(){
+    setTimeout(function () {
       var tmp = $('<div>', {
         'text': $input.val()
       });
@@ -591,7 +618,7 @@ H5P.Blanks = (function ($, Question) {
   /**
    * Trigger xAPI answered event
    */
-  Blanks.prototype.triggerAnswered = function() {
+  Blanks.prototype.triggerAnswered = function () {
     this.answered = true;
     var xAPIEvent = this.createXAPIEventTemplate('answered');
     this.addQuestionToXAPI(xAPIEvent);
@@ -625,48 +652,51 @@ H5P.Blanks = (function ($, Question) {
     };
     definition.type = 'http://adlnet.gov/expapi/activities/cmi.interaction';
     definition.interactionType = 'fill-in';
-    definition.correctResponsesPattern = ['{case_matters=' + this.params.behaviour.caseSensitive + '}'];
-    var firstCorrectResponse = true;
+
+    const clozeSolutions = [];
+    let crp = '';
     // xAPI forces us to create solution patterns for all possible solution combinations
     for (var i = 0; i < this.params.questions.length; i++) {
-      var question = this.handleBlanks(this.params.questions[i], function(solution) {
-        // Store new patterns for each extra alternative answer
-        var newPatterns = [];
-        for (var j = 0; j < definition.correctResponsesPattern.length; j++) {
-          if (!firstCorrectResponse) {
-            definition.correctResponsesPattern[j] += '[,]';
-          }
-          var prefix = definition.correctResponsesPattern[j];
-          for (var k = 0; k < solution.solutions.length; k++) {
-            if (k === 0) {
-              // This is the first possible answr, just add it to the pattern
-              definition.correctResponsesPattern[j] += solution.solutions[k];
-            }
-            else {
-              // This is an alternative possible answer, we need to create a new permutation
-              newPatterns.push(prefix + solution.solutions[k]);
-            }
-          }
-        }
-        // Add any new permutations to the list of response patterns
-        definition.correctResponsesPattern = definition.correctResponsesPattern.concat(newPatterns);
+      var question = this.handleBlanks(this.params.questions[i], function (solution) {
+        // Collect all solution combinations for the H5P Alternative extension
+        clozeSolutions.push(solution.solutions);
 
-        firstCorrectResponse = false;
+        // Create a basic response pattern out of the first alternative for each blanks field
+        crp += (!crp ? '' : '[,]') + solution.solutions[0];
 
         // We replace the solutions in the question with a "blank"
         return '__________';
       });
       definition.description['en-US'] += question;
     }
+
+    // Set the basic response pattern (not supporting multiple alternatives for blanks)
+    definition.correctResponsesPattern = [
+      '{case_matters=' + this.params.behaviour.caseSensitive + '}' + crp,
+    ];
+
+    // Add the H5P Alternative extension which provides all the combinations of different answers
+    // Reporting software will need to support this extension for alternatives to work.
+    definition.extensions = definition.extensions || {};
+    definition.extensions[XAPI_CASE_SENSITIVITY] = this.params.behaviour.caseSensitive;
+    definition.extensions[XAPI_ALTERNATIVE_EXTENSION] = clozeSolutions;
+
     return definition;
   };
 
   /**
    * Add the question itselt to the definition part of an xAPIEvent
    */
-  Blanks.prototype.addQuestionToXAPI = function(xAPIEvent) {
+  Blanks.prototype.addQuestionToXAPI = function (xAPIEvent) {
     var definition = xAPIEvent.getVerifiedStatementValue(['object', 'definition']);
-    $.extend(definition, this.getxAPIDefinition());
+    $.extend(true, definition, this.getxAPIDefinition());
+
+    // Set reporting module version if alternative extension is used
+    if (this.hasAlternatives) {
+      const context = xAPIEvent.getVerifiedStatementValue(['context']);
+      context.extensions = context.extensions || {};
+      context.extensions[XAPI_REPORTING_VERSION_EXTENSION] = '1.1.0';
+    }
   };
 
   /**
@@ -692,6 +722,7 @@ H5P.Blanks = (function ($, Question) {
 
     // Split up alternatives
     var solutions = solution.split('/');
+    this.hasAlternatives = this.hasAlternatives || solutions.length > 1;
 
     // Trim solutions
     for (var i = 0; i < solutions.length; i++) {
@@ -788,7 +819,7 @@ H5P.Blanks = (function ($, Question) {
     return correct;
   };
 
-  Blanks.prototype.getTitle = function() {
+  Blanks.prototype.getTitle = function () {
     return H5P.createTitle((this.contentData.metadata && this.contentData.metadata.title) ? this.contentData.metadata.title : 'Fill In');
   };
 
@@ -866,7 +897,8 @@ H5P.Blanks = (function ($, Question) {
       if (self.params.behaviour.autoCheck) {
         if (cloze.filledOut()) {
           cloze.checkAnswer();
-        } else {
+        }
+        else {
           hasAllClozesFilled = false;
         }
       }
@@ -886,5 +918,7 @@ H5P.Blanks = (function ($, Question) {
     this.$questions.find('input').attr('disabled', true);
   };
 
+  Blanks.idCounter = 0;
+
   return Blanks;
 })(H5P.jQuery, H5P.Question);
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/js/cloze.js b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/js/cloze.js
similarity index 99%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/js/cloze.js
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/js/cloze.js
index c3a6da688d64797a572317999b75242044821801..122bba435266096a47999db00a7c0655525d2a8b 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/js/cloze.js
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/js/cloze.js
@@ -201,7 +201,7 @@
      */
     this.toString = function () {
       var extra = defaultUserAnswer ? ' value="' + defaultUserAnswer + '"' : '';
-      var result = '<span class="h5p-input-wrapper"><input type="text" class="h5p-text-input" autocomplete="off" autocapitalize="off"' + extra + '></span>';
+      var result = '<span class="h5p-input-wrapper"><input type="text" class="h5p-text-input" autocomplete="off" autocapitalize="off" spellcheck="false"' + extra + '></span>';
       self.length = result.length;
       return result;
     };
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/af.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/af.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/af.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/af.json
index eeb1c37342dd564b925a3bd02275843d79e8792a..21166c6516afcf51bf40327ec0687d410e076a7c 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/af.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/af.json
@@ -6,6 +6,9 @@
         {
           "label": "Type",
           "description": "Optional media to display above the question."
+        },
+        {
+          "label": "Disable image zooming"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ar.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ar.json
similarity index 91%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ar.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ar.json
index a310ea168ed39ee362daef10bddf4ffaca636689..e58011d6daa845ab012ea491314efdbe57819e2b 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ar.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ar.json
@@ -6,6 +6,9 @@
         {
           "label": "النوع",
           "description": "وسائط اختيارية لعرضها فوق السؤال."
+        },
+        {
+          "label": "تعطيل تكبير الصورة لصورة السؤال"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "ضع حقول الإدخال على أسطر منفصلة"
         },
-        {
-          "label": "تعطيل تكبير الصورة لصورة السؤال"
-        },
         {
           "label": "إظهار مربع حوار التأكيد على  \"تحقق \" ",
           "description": "هذه الخيارات غير متوافقة مع الخيار 'التحقق التلقائي من الإجابات بعد الإدخال '."
@@ -190,6 +190,22 @@
     {
       "label": "تمثيل نصي لشريط النتيجة لأولئك الذين يستخدمون تقنية تحويل النص الى كلام ",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/bg.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/bg.json
new file mode 100644
index 0000000000000000000000000000000000000000..1ab3799d15112984d34b897f755ca63b309e47d2
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/bg.json
@@ -0,0 +1,211 @@
+{
+  "semantics": [
+    {
+      "label": "Медия",
+      "fields": [
+        {
+          "label": "Тип",
+          "description": "Незадължителна медия, която да се показва над въпроса."
+        },
+        {
+          "label": "Деактивиране мащабирането на изображения"
+        }
+      ]
+    },
+    {
+      "label": "Описание на задачата",
+      "default": "Попълнете липсващите думи",
+      "description": "Ръководство, което указва на потребителя как да отговори на тази задача."
+    },
+    {
+      "label": "Текстови блокове",
+      "entity": "текстов блок",
+      "field": {
+        "label": "Ред от текста",
+        "placeholder": "Осло е столицата на *Норвегия*.",
+        "description": "",
+        "important": {
+          "description": "<ul><li>Празните полета се добавят като се посвавя знак (*) пред и след думата или фразата, която трябва да се изпише в тях по коректен начин. </li><li>Алтернативните отговори се разделят с наклонена черта (/).</li><li>Можете да добавите текстови съвети, като сложите двоеточие (:) отпред.</li></ul>",
+          "example": "Съдържанието на H5P може да се редактира с помощта на * браузър/уеб браузър:нещо, което използвате всеки ден *."
+        }
+      }
+    },
+    {
+      "label": "Обща обратна връзка",
+      "fields": [
+        {
+          "widgets": [
+            {
+              "label": "По подразбиране"
+            }
+          ],
+          "label": "Определете персонализирани отзиви за всеки диапазон от резултати",
+          "description": "Кликнете върху бутона \"Добавяне на диапазон\", за да добавите толкова диапазони, от колкото имате нужда. Пример: 0-20% Лош резултат, 21-91% Среден резултат, 91-100% Отлично! ",
+          "entity": "диапазон",
+          "field": {
+            "fields": [
+              {
+                "label": "Обхват на резултата"
+              },
+              {},
+              {
+                "label": "Обратна връзка за определен диапазон от резултати",
+                "placeholder": "Попълнете обратна връзка"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    {
+      "label": "Текст за бутона \"Показване на решението\"",
+      "default": "Покажи верния отговор"
+    },
+    {
+      "label": "Текст за бутона \"Опитай пак\"",
+      "default": "Опитай пак"
+    },
+    {
+      "label": "Текст за бутона \"Провери\"",
+      "default": "Провери"
+    },
+    {
+      "label": "Текст за съобщението \"Не е попълнено\"",
+      "default": "Моля, попълнете най-напред празните полета, за да можете да проверите отговора"
+    },
+    {
+      "label": "Текст за съобщението \"':ans' е правилно\"",
+      "default": "':ans' е правилно"
+    },
+    {
+      "label": "Текст за съобщението \"':ans' е грешно\"",
+      "default": "':ans' е грешно"
+    },
+    {
+      "label": "Текст за съобщенето\"Правилен отговор\"",
+      "default": "Правилен отговор"
+    },
+    {
+      "label": "Текст за съобщението \"Грешен отговор\"",
+      "default": "Грешен отговор"
+    },
+    {
+      "label": "Помощен етикет за решение",
+      "default": "Верен отговор:"
+    },
+    {
+      "label": "Помощен етикет на за поле за въвеждане на текст",
+      "description": "Използвайте @num и @total, за да замените текущия брой и общия брой полета за въвеждане",
+      "default": "Празно поле за въвеждане на текст @num от @total"
+    },
+    {
+      "label": "Помощен етикет, който казва, че полето има свързана с него подсказка",
+      "default": "Тук има подсказка"
+    },
+    {
+      "label": "Етикет за подсказка",
+      "default": "Подсказка"
+    },
+    {
+      "label": "Настройки на поведението на задачата",
+      "description": "Тези опции ще ви позволят да контролирате поведението на задачата.",
+      "fields": [
+        {
+          "label": "Разрешаване на бутон \"Опитай пак\""
+        },
+        {
+          "label": "Разрешаване на бутон \"Покажи решението\""
+        },
+        {
+          "label": "Разрешаване на бутон \"Провери\""
+        },
+        {
+          "label": "Автоматична проверка на отговорите след въвеждане"
+        },
+        {
+          "label": "Различаване на главни от малки букви",
+          "description": "Изисква се написаното да бъде идентично със зададеното от вас."
+        },
+        {
+          "label": "Изисква се да се отговори на всички полета, преди решението да може да бъде разгледано"
+        },
+        {
+          "label": "Поставете полетата за въвеждане на отделни редове"
+        },
+        {
+          "label": "Показване на диалогов прозорец за потвърждение при кликване на бутон \"Провери\"",
+          "description": "Тази опция не е съвместима с опцията за автоматична проверка на отговорите след въвеждане."
+        },
+        {
+          "label": "Показване на диалогов прозорец за потвърждение при кликване на бутон \"Опитай пак\""
+        },
+        {
+          "label": "Приемане на малки правописни грешки",
+          "description": "Ако е активирано, отговорът ще бъде приеман за верен и с малко правописни грешки ( от 3-9 знака: 1 правописна грешка, за повече от 9 знака: 2 правописни грешки)"
+        }
+      ]
+    },
+    {
+      "label": "Етикет на бутона за потвърждаване",
+      "fields": [
+        {
+          "label": "Текст в заглавката",
+          "default": "Приключване?"
+        },
+        {
+          "label": "Основен текст",
+          "default": "Сигурни ли сте, че искате да приключите?"
+        },
+        {
+          "label": "Етикет на бутона за отказ",
+          "default": "Отказ"
+        },
+        {
+          "label": "Етикет на бутона за потвърждаване",
+          "default": "Приключване на опита"
+        }
+      ]
+    },
+    {
+      "label": "Повторен диалогов прозорец за потвърждение",
+      "fields": [
+        {
+          "label": "Текст в заглавката",
+          "default": "Повторен опит?"
+        },
+        {
+          "label": "Основен текст",
+          "default": "Сигурни ли сте, че искате да опитате пак?"
+        },
+        {
+          "label": "Етикет на бутона за отказ",
+          "default": "Отказ"
+        },
+        {
+          "label": "Етикет на бутона за потвърждаване",
+          "default": "Да"
+        }
+      ]
+    },
+    {
+      "label": "Текстово представяне на лентата с резултати",
+      "default": "Вие получихте :num от общо :total точки"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/bs.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/bs.json
similarity index 74%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/bs.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/bs.json
index 1f56b98a07269d1d1a6d45de3575e64716e58703..cb56b43e9f314f1800f3ac5b5fd38ada862ed9f7 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/bs.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/bs.json
@@ -6,6 +6,9 @@
         {
           "label": "Tip",
           "description": "Opcionalni mediji koji mogu biti prikazani iznad zadatka."
+        },
+        {
+          "label": "Deaktivirati zumiranje slike"
         }
       ]
     },
@@ -33,21 +36,21 @@
         {
           "widgets": [
             {
-              "label": "Default"
+              "label": "Standardno"
             }
           ],
-          "label": "Define custom feedback for any score range",
-          "description": "Click the \"Add range\" button to add as many ranges as you need. Example: 0-20% Bad score, 21-91% Average Score, 91-100% Great Score!",
-          "entity": "range",
+          "label": "Definiraj standardnu pvratnu informaciju za bilo koji raspon rezultata",
+          "description": "Klikni na dugme \"Dodaj raspon\" i dodaj raspona rezultata koliko je potrebno. Primjer: 0-20% Loše, 21-91% Dobro, 91-100% Odlično!",
+          "entity": "raspon",
           "field": {
             "fields": [
               {
-                "label": "Score Range"
+                "label": "Raspon za rezultat"
               },
               {},
               {
-                "label": "Feedback for defined score range",
-                "placeholder": "Fill in the feedback"
+                "label": "Povratna informacija za definirani raspon rezultata",
+                "placeholder": "Popuni povratnu informaciju"
               }
             ]
           }
@@ -91,8 +94,8 @@
       "default": "Tačan odgovor:"
     },
     {
-      "label": "Text für technische Hilfsmittel für das Eingabefeld",
-      "description": "Benutze @num und @total um die aktuelle Nummer der Lücke und die Gesamtzahl der Lücken einzufügen",
+      "label": "Tekst za tehnička sredstva za polje za unos",
+      "description": "Koristi @num i @total kako bi aktuelni broj praznina popunio",
       "default": "Praznina @num od @total"
     },
     {
@@ -100,7 +103,7 @@
       "default": "Savjet dostupan"
     },
     {
-      "label": "Beschriftung für das Tipp-Icon",
+      "label": "Oznaka za dugme savjet",
       "default": "Savjet"
     },
     {
@@ -108,13 +111,13 @@
       "description": "Diese Optionen kontrollieren, wie sich die Aufgabe verhält.",
       "fields": [
         {
-          "label": "Omogući \"Ponovi\" dugme"
+          "label": "Omogući dugme \"Ponovi\""
         },
         {
-          "label": "Omogući \"Prikaži rješenje\" dugme"
+          "label": "Omogući dugme \"Prikaži rješenje\""
         },
         {
-          "label": "Enable \"Check\" button"
+          "label": "Omogući dugme \"Provjeri\""
         },
         {
           "label": "Odgovore nakon unošenja automatski provjeri"
@@ -127,10 +130,7 @@
           "label": "Sve praznine moraju biti popunjene kako bi se vidjelo rješenje zadatka."
         },
         {
-          "label": "Setze die Lücken jeweils in eine eigene Zeile"
-        },
-        {
-          "label": "Deaktivirati zumiranje slike."
+          "label": "Staviti sve praznine u jednu liniju"
         },
         {
           "label": "Prikazati dijalog potvrde nakon klika na dugme \"Provjeri\"",
@@ -189,7 +189,23 @@
     },
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
-      "default": "You got :num out of :total points"
+      "default": "Postigli ste :num od :total bodova"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ca.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ca.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ca.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ca.json
index 6675fabd3d7bfc351ae1caa69636239a04ec4a95..e2c3b34cb51f6ac2560920aff3b9268652d84490 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ca.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ca.json
@@ -6,6 +6,9 @@
         {
           "label": "Tipus",
           "description": "Recursos opcionals per mostrar al damunt de la pregunta."
+        },
+        {
+          "label": "Disable image zooming"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/cs.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/cs.json
new file mode 100644
index 0000000000000000000000000000000000000000..0c682de6bca871edd37a3382fdda8307481a410c
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/cs.json
@@ -0,0 +1,211 @@
+{
+  "semantics": [
+    {
+      "label": "Média",
+      "fields": [
+        {
+          "label": "Typ",
+          "description": "Volitelná média k zobrazení nad otázkou."
+        },
+        {
+          "label": "Zakázat zvětšení obrázzu"
+        }
+      ]
+    },
+    {
+      "label": "Popis úlohy",
+      "default": "Doplňte chybějící slova",
+      "description": "Průvodce, který uživateli řekne, jak na tuto úlohu odpovědět."
+    },
+    {
+      "label": "Textové bloky",
+      "entity": "textové bloky",
+      "field": {
+        "label": "Řádek textu",
+        "placeholder": "Oslo je hlavním městem *Norska*.",
+        "description": "",
+        "important": {
+          "description": "<ul><li>Mezery jsou přidány s hvězdičkou (*) před a za správným slovem/frází.</li><li>Alternativní odpovědi jsou odděleny lomítkem (/).</li><li>Můžete přidat textovou nápovědu pomocí dvojtečky (:) před nápovědou.</li></ul>",
+          "example": "Obsah H5P lze upravovat pomocí *prohlížeče/webového prohlížeče: Něco, co používáte každý den*."
+        }
+      }
+    },
+    {
+      "label": "Celková zpětná vazba",
+      "fields": [
+        {
+          "widgets": [
+            {
+              "label": "Výchozí"
+            }
+          ],
+          "label": "Definujte vlastní zpětnou vazbu pro jakýkoli rozsah skóre",
+          "description": "Klikněte na tlačítko \"Add range\" pro přidání tolika rozsahů, kolik potřebujete. Například: 0-20% špatný výsledek, 21-91% průměrný výsledek, 91-100% výborný výsledek!",
+          "entity": "rozsah",
+          "field": {
+            "fields": [
+              {
+                "label": "Rozsah skóre"
+              },
+              {},
+              {
+                "label": "Zpětná vazba pro definovaný rozsah skóre",
+                "placeholder": "Vyplňte ve zpětné vazbě"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    {
+      "label": "Popis tlačítka \"Zobrazit řešení\" ",
+      "default": "Zobrazit řešení"
+    },
+    {
+      "label": "Popis tlačítka \"Opakovat\" ",
+      "default": "Opakovat"
+    },
+    {
+      "label": "Popis tlačítka \"Zkontrolovat\" ",
+      "default": "Zkontrolovat"
+    },
+    {
+      "label": "Text pro zprávu  \"Nevyplněno\" ",
+      "default": "Pro zobrazení řešení vyplňte prosím všechny mezery"
+    },
+    {
+      "label": "Text pro zprávu \"':ans' je správně\" ",
+      "default": "':ans' je správně"
+    },
+    {
+      "label": "Text pro zprávu \"':ans' je chybně\" ",
+      "default": "':ans' je chybnÄ›"
+    },
+    {
+      "label": "Text pro zprávu \"Odpověď je správně\" ",
+      "default": "Odpověď je správně"
+    },
+    {
+      "label": "Text pro zprávu \"Odpověď je chybně\" ",
+      "default": "Odpověď je chybně"
+    },
+    {
+      "label": "Popisek pomocné technologie pro řešení",
+      "default": "Správná odpověď:"
+    },
+    {
+      "label": "Popisek pomocné technologie pro vstupní pole",
+      "description": "Použijte @num a @total k nahrazení aktuálního počtu doplnění a celkového počtu doplnění v úloze",
+      "default": "Prázdný vstup @num ze @total"
+    },
+    {
+      "label": "Popisek pomocné technologie pro vyslovení vstupu, ke kterému je nápověda",
+      "default": "Nápověda k dispozici"
+    },
+    {
+      "label": "Popisek ikony nápovědy",
+      "default": "Nápověda"
+    },
+    {
+      "label": "Nastavení chování.",
+      "description": "Tyto možnosti vám umožní řídit, jak se bude úloha chovat.",
+      "fields": [
+        {
+          "label": "Povolit tlačítko \"Opakovat\""
+        },
+        {
+          "label": "Povolit tlačítko \"Zobrazit řešení\""
+        },
+        {
+          "label": "EPovolit tlačítko \"Zkontrolovat\" "
+        },
+        {
+          "label": "Po zadání automaticky zkontrolovat odpovědi "
+        },
+        {
+          "label": "Rozeznává velká a malá písmena",
+          "description": "Zajišťuje, že vstup uživatele musí být přesně stejný jako odpověď."
+        },
+        {
+          "label": "Před zobrazením řešení je třeba odpovědět na všechna pole"
+        },
+        {
+          "label": "Vložte vstupní pole na samostatné řádky"
+        },
+        {
+          "label": "Zobrazit potvrzovací dialog \"Zkontrolovat\"",
+          "description": "Tato volba není kompatibilní s volbou \"Po zadání automaticky zkontrolovat odpovědi\" "
+        },
+        {
+          "label": "Zobrazit potvrzovací dialog \"Opakovat\""
+        },
+        {
+          "label": "Přijmout malé pravopisné chyby",
+          "description": "Je-li aktivováno, odpověď se také počítá jako správná s drobnými pravopisnými chybami (3-9 znaků: 1 pravopisná chyba, více než 9 znaků: 2 pravopisné chyby)"
+        }
+      ]
+    },
+    {
+      "label": "Potvrzovací dialog kontroly",
+      "fields": [
+        {
+          "label": "Text záhlaví",
+          "default": "Ukončit ?"
+        },
+        {
+          "label": "Tělo textu",
+          "default": "Opravdu chcete ukončit ?"
+        },
+        {
+          "label": "Popis tlačítka zrušení",
+          "default": "Zrušit"
+        },
+        {
+          "label": "Popis potvrzovacího tlačítka",
+          "default": "Konec"
+        }
+      ]
+    },
+    {
+      "label": "Dialog pro potvrzení opakování",
+      "fields": [
+        {
+          "label": "Text záhlaví",
+          "default": "Opakovat ?"
+        },
+        {
+          "label": "Tělo textu",
+          "default": "Opravdu chcete akci opakovat ?"
+        },
+        {
+          "label": "Popis tlačítka zrušení",
+          "default": "Zrušit"
+        },
+        {
+          "label": "opis potvrzovacího tlačítka",
+          "default": "Potvrdit"
+        }
+      ]
+    },
+    {
+      "label": "Textové znázornění výsledkové lišty pro ty, kteří používají čtecí zařízení",
+      "default": "Získal jste :num z :total bodů"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/da.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/da.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/da.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/da.json
index eeb1c37342dd564b925a3bd02275843d79e8792a..21166c6516afcf51bf40327ec0687d410e076a7c 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/da.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/da.json
@@ -6,6 +6,9 @@
         {
           "label": "Type",
           "description": "Optional media to display above the question."
+        },
+        {
+          "label": "Disable image zooming"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/de.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/de.json
similarity index 59%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/de.json
index dbef866201e309c45849d6b93b4561e45b3ec92f..1806e46138411b50344b1a8f6987d9517f93b9cf 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/de.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/de.json
@@ -5,35 +5,38 @@
       "fields": [
         {
           "label": "Typ",
-          "description": "Optionale Medien, die über der Frage angezeigt werden können."
+          "description": "Medium, das wahlweise oberhalb der Aufgabe angezeigt wird."
+        },
+        {
+          "label": "Bildzoom deaktivieren"
         }
       ]
     },
     {
       "label": "Aufgabenbeschreibung",
       "default": "Trage die fehlenden Wörter ein.",
-      "description": "Eine Anleitung, die dem Nutzer sagt, wie die Aufgabe beantwortet werden kann."
+      "description": "Eine Anleitung, die dem Nutzer mitteilt, wie die Aufgabe beantwortet werden kann."
     },
     {
       "label": "Textblöcke",
-      "entity": "textblock",
+      "entity": "Textblock",
       "field": {
         "label": "Textzeile",
         "placeholder": "Berlin ist die Hauptstadt von *Deutschland*.",
         "description": "",
         "important": {
-          "description": "<ul><li>Lücken werden mit einem Sternchen (*) vor und hinter dem richtigen Wort festgelegt.</li><li>Alternative Antworten können jeweils mit einem Schrägstrich (/) angefügt werden.</li><li>Du kannst einen Tipp mit einem Doppelpunkt (:) davor angeben.</li></ul>",
+          "description": "<ul><li>Lücken werden mit einem Sternchen (*) vor und hinter dem richtigen Wort markiert.</li><li>Alternative Antworten können jeweils mit einem Schrägstrich (/) angefügt werden.</li><li>Du kannst einen Tipp mit einem Doppelpunkt (:) davor hinzufügen.</li></ul>",
           "example": "H5P-Inhalte können mit einem *Browser/Web-Browser:Etwas, das du jeden Tag nutzt* betrachtet werden."
         }
       }
     },
     {
-      "label": "Allgemeine Rückmeldung",
+      "label": "Gesamtrückmeldung",
       "fields": [
         {
           "widgets": [
             {
-              "label": "Vorgabe"
+              "label": "Eingabemaske"
             }
           ],
           "label": "Lege Rückmeldungen für einzelne Punktebereiche fest",
@@ -46,7 +49,7 @@
               },
               {},
               {
-                "label": "Rückmeldung für festgelegte Punktebereiche",
+                "label": "Rückmeldung für jeweiligen Punktebereich",
                 "placeholder": "Trage die Rückmeldung ein"
               }
             ]
@@ -55,82 +58,79 @@
       ]
     },
     {
-      "label": "Beschriftung für den \"Lösung anzeigen\"-Button",
+      "label": "Beschriftung des \"Lösung anzeigen\"-Buttons",
       "default": "Lösung anzeigen"
     },
     {
-      "label": "Beschriftung für den \"Wiederholen\"-Button",
+      "label": "Beschriftung des \"Wiederholen\"-Buttons",
       "default": "Wiederholen"
     },
     {
-      "label": "Beschriftung für den \"Überprüfen\"-Button",
+      "label": "Beschriftung des \"Überprüfen\"-Buttons",
       "default": "Überprüfen"
     },
     {
-      "label": "Text für die \"Nicht ausgefüllt\"-Nachricht",
-      "default": "Bitte fülle alle Lücken aus, um die Lösung zu sehen"
+      "label": "Text der \"Nicht ausgefüllt\"-Nachricht",
+      "default": "Bitte fülle alle Lücken aus, um die Lösung ansehen zu können"
     },
     {
-      "label": "Text für die \"':ans' ist korrekt\"-Nachricht",
+      "label": "Text der \"... ist korrekt\"-Nachricht (:ans als Platzhalter für die Antwort der Lernenden verwenden)",
       "default": "':ans' ist korrekt"
     },
     {
-      "label": "Text für die \"':ans' ist falsch\"-Nachricht",
+      "label": "Text der \"... ist falsch\"-Nachricht (:ans als Platzhalter für die Antwort der Lernenden verwenden)",
       "default": "':ans' ist falsch"
     },
     {
-      "label": "Text für die \"Korrekt beantwortet\"-Nachricht",
+      "label": "Text der \"Korrekt beantwortet\"-Nachricht",
       "default": "Korrekt beantwortet"
     },
     {
-      "label": "Text für \"Falsch beantwortet\"-Nachricht",
+      "label": "Text der \"Falsch beantwortet\"-Nachricht",
       "default": "Falsch beantwortet"
     },
     {
-      "label": "Text für technische Hilfsmittel für die Lösung",
+      "label": "Beschriftung der Lösung für Vorlesewerkzeuge (Barrierefreiheit)",
       "default": "Korrekte Antwort:"
     },
     {
-      "label": "Text für technische Hilfsmittel für das Eingabefeld",
+      "label": "Beschriftung des Eingabefelds für Vorlesewerkzeuge (Barrierefreiheit)",
       "description": "Benutze @num und @total um die aktuelle Nummer der Lücke und die Gesamtzahl der Lücken einzufügen",
       "default": "Lücke @num von @total"
     },
     {
-      "label": "Text für technische Hilfsmittel, der darauf hinweist, dass ein Tipp verfügbar ist",
+      "label": "Text für Vorlesewerkzeuge (Barrierefreiheit), der darauf hinweist, dass ein Tipp verfügbar ist",
       "default": "Tipp verfügbar"
     },
     {
-      "label": "Beschriftung für das Tipp-Icon",
+      "label": "Beschriftung des Tipp-Symbols",
       "default": "Tipp"
     },
     {
-      "label": "Verhaltenseinstellungen.",
+      "label": "Verhaltenseinstellungen",
       "description": "Diese Optionen kontrollieren, wie sich die Aufgabe verhält.",
       "fields": [
         {
           "label": "\"Wiederholen\" zulassen"
         },
         {
-          "label": "\"Lösung anzeigen\"-Button anzeigen"
+          "label": "\"Lösung anzeigen\" ermöglichen"
         },
         {
-          "label": "Enable \"Check\" button"
+          "label": "\"Überprüfen\"-Button anzeigen"
         },
         {
           "label": "Antworten nach Eingabe automatisch prüfen"
         },
         {
           "label": "Auf Groß-/Kleinschreibung achten",
-          "description": "Stellt sicher, dass die Lösung exakt der Vorgabe entsprechen muss."
+          "description": "Stellt sicher, dass die Lösung exakt der Vorgabe entspricht."
         },
         {
           "label": "Alle Lücken müssen ausgefüllt sein, bevor die Lösung angesehen werden kann."
         },
         {
-          "label": "Setze die Lücken jeweils in eine eigene Zeile"
-        },
-        {
-          "label": "Bilderzoom für Bilder zu Fragen deaktivieren."
+          "label": "Setzt die Lücken jeweils in eine eigene Zeile"
         },
         {
           "label": "Bestätigungsdialog beim Klicken auf \"Überprüfen\" anzeigen",
@@ -146,10 +146,10 @@
       ]
     },
     {
-      "label": "Bestätigungsdialog beim Prüfen",
+      "label": "Bestätigungsdialog beim Überprüfen",
       "fields": [
         {
-          "label": "Text der Titelzeile",
+          "label": "Text der Überschrift",
           "default": "Beenden?"
         },
         {
@@ -170,7 +170,7 @@
       "label": "Bestätigungsdialog beim Wiederholen",
       "fields": [
         {
-          "label": "Text der Titelzeile",
+          "label": "Text der Überschrift",
           "default": "Wiederholen?"
         },
         {
@@ -188,8 +188,24 @@
       ]
     },
     {
-      "label": "Textliche Repräsentation der Punkteleiste für diejenigen, die Readspeaker benutzen",
+      "label": "Anzeigetext der Punkteleiste für Vorlesewerkzeuge (Barrierefreiheit)",
       "default": "Du hast :num von :total Punkten erreicht."
+    },
+    {
+      "label": "Beschreibung des \"Überprüfen\"-Buttons (für Hilfsmittel zur Barrierefreiheit)",
+      "default": "Die Antworten überprüfen. Die Eingaben werden als richtig, falsch oder unbeantwortet markiert."
+    },
+    {
+      "label": "Beschreibung des \"Lösung anzeigen\"-Buttons (für Hilfsmittel zur Barrierefreiheit)",
+      "default": "Die Lösung anzeigen. Die richtigen Lösungen werden in der Aufgabe angezeigt."
+    },
+    {
+      "label": "Beschreibung des \"Wiederholen\"-Buttons (für Hilfsmittel zur Barrierefreiheit)",
+      "default": "Die Aufgabe wiederholen. Alle Eingaben werden zurückgesetzt und die Aufgabe wird erneut gestartet."
+    },
+    {
+      "label": "Beschreibung zu Beginn der Aufgabe, nachdem der \"Überprüfen\"-Button geklickt wurde (für Hilfsmittel zur Barrierefreiheit)",
+      "default": "Überprüfen-Modus aktiv"
     }
   ]
 }
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/el.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/el.json
new file mode 100644
index 0000000000000000000000000000000000000000..5a9289db4b892a9045ff6bc7ef46df0ed0be69fe
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/el.json
@@ -0,0 +1,211 @@
+{
+  "semantics": [
+    {
+      "label": "Στοιχεία πολυμέσων",
+      "fields": [
+        {
+          "label": "Τύπος",
+          "description": "Προσθήκη στοιχείου πολυμέσων προς εμφάνιση πάνω από την ερώτηση (προαιρετικό)."
+        },
+        {
+          "label": "Απενεργοποίηση της επιλογής zoom για την εικόνα της ερώτησης"
+        }
+      ]
+    },
+    {
+      "label": "Περιγραφή άσκησης",
+      "default": "Συμπληρώστε τα κενά με τις λέξεις που λείπουν",
+      "description": "Οδηγίες προς τον χρήστη για τη συμπλήρωση της άσκησης."
+    },
+    {
+      "label": "Πλαίσιο κειμένου",
+      "entity": "πλαισιου κειμενου",
+      "field": {
+        "label": "Γραμμή κειμένου",
+        "placeholder": "Το Όσλο είναι η πρωτεύουσα της *Νορβηγίας*.",
+        "description": "",
+        "important": {
+          "description": "<ul><li>Προσθέστε κενά χρησιμοποιώντας κάθε φορά έναν αστερίσκο (*) πριν και μετά τη σωστή λέξη/φράση.</li><li>Διαχωρίστε τις εναλλακτικές απαντήσεις με πλάγια παύλα (/).</li><li>Μπορείτε να ορίσετε επεξηγηματικό κείμενο προσθέτοντας μία άνω και κάτω τελεία (:) πριν την επεξήγηση.</li></ul>",
+          "example": "Μπορεί να γίνει επεξεργασία των αντικειμένων του e-me content με τη χρήση ενός *φυλλομετρητή: Κάτι που χρησιμοποιείτε κάθε μέρα*."
+        }
+      }
+    },
+    {
+      "label": "Συνολική ανατροφοδότηση",
+      "fields": [
+        {
+          "widgets": [
+            {
+              "label": "Βασικό"
+            }
+          ],
+          "label": "Χαρακτηρισμός κάθε κλίμακας βαθμολογίας",
+          "description": "Κάντε κλικ στο κουμπί \"Προσθήκη κλίμακας\" για να προσθέσετε όσες  κλίμακες ή διαβαθμίσεις επιθυμείτε. Παράδειγμα: 0-20% Χαμηλή βαθμολογία, 21-91% Μέτρια βαθμολογία, 91-100% Εξαιρετική βαθμολογία!",
+          "entity": "κλιμακας",
+          "field": {
+            "fields": [
+              {
+                "label": "Βαθμολογία"
+              },
+              {},
+              {
+                "label": "Χαρακτηρισμός",
+                "placeholder": "Συμπληρώστε τον χαρακτηρισμό"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    {
+      "label": "Ετικέτα κουμπιού εμφάνισης λύσης",
+      "default": "Λύση"
+    },
+    {
+      "label": "Ετικέτα κουμπιού νέας προσπάθειας",
+      "default": "Επανάληψη"
+    },
+    {
+      "label": "Ετικέτα κουμπιού ελέγχου απάντησης",
+      "default": "Έλεγχος"
+    },
+    {
+      "label": "Κείμενο μηνύματος μη συμπλήρωσης κενού",
+      "default": "Παρακαλώ συμπλήρωσε όλα τα κενά για να δεις τις σωστές απαντήσεις"
+    },
+    {
+      "label": "Κείμενο μηνύματος σωστής απάντησης",
+      "default": "Η απάντηση ':ans' είναι σωστή"
+    },
+    {
+      "label": "Κείμενο μηνύματος λάθος απάντησης",
+      "default": "Η απάντηση ':ans' είναι λάθος"
+    },
+    {
+      "label": "Κείμενο μηνύματος \"Απαντήθηκε σωστά\"",
+      "default": "Απαντήθηκε σωστά"
+    },
+    {
+      "label": "Κείμενο μηνύματος \"Απαντήθηκε λάθος\"",
+      "default": "Απαντήθηκε λάθος"
+    },
+    {
+      "label": "Ετικέτα σωστής απάντησης για υποστηρικτικές τεχνολογίες",
+      "default": "Σωστή απάντηση:"
+    },
+    {
+      "label": "Ετικέτα πεδίου εισαγωγής κειμένου για υποστηρικτικές τεχνολογίες",
+      "description": "Χρησιμοποιήστε το @num και το @total για να αντικαταστήσετε τον τρέχοντα αριθμό κενών και τον συνολικό αριθμό κενών",
+      "default": "@num κενά από @total"
+    },
+    {
+      "label": "Ετικέτα για υποστηρικτικές τεχνολογίες που ενημερώνει για την ύπαρξη διαθέσιμου επεξηγηματικού κειμένου",
+      "default": "Επεξήγηση διαθέσιμη"
+    },
+    {
+      "label": "Ετικέτα εικονιδίου επεξήγησης",
+      "default": "Επεξήγηση"
+    },
+    {
+      "label": "Ρυθμίσεις άσκησης",
+      "description": "Αυτές οι ρυθμίσεις σας επιτρέπουν να καθορίσετε τον τρόπο λειτουργίας της άσκησης.",
+      "fields": [
+        {
+          "label": "Ενεργοποίηση κουμπιού \"Επανάληψη\""
+        },
+        {
+          "label": "Ενεργοποίηση κουμπιού \"Λύση\""
+        },
+        {
+          "label": "Ενεργοποίηση κουμπιού \"Έλεγχος\""
+        },
+        {
+          "label": "Αυτόματος έλεγχος απαντήσεων μετά τη συμπλήρωση"
+        },
+        {
+          "label": "Διάκριση πεζών - κεφαλαίων",
+          "description": "Το κείμενο που εισάγει ο χρήστης πρέπει να είναι ακριβώς το ίδιο (πεζά - κεφαλαία) με την απάντηση."
+        },
+        {
+          "label": "Απαιτείται η συμπλήρωση όλων των πεδίων πριν την εμφάνιση της σωστής απάντησης"
+        },
+        {
+          "label": "Τοποθέτηση πεδίων προς συμπλήρωση σε χωριστές γραμμές "
+        },
+        {
+          "label": "Εμφάνιση παραθύρου επιβεβαίωσης κατά τον \"Έλεγχο\"",
+          "description": "Αυτή η επιλογή δεν είναι συμβατή με την επιλογή \"Αυτόματος έλεγχος απαντήσεων μετά τη συμπλήρωση\""
+        },
+        {
+          "label": "Εμφάνιση παραθύρου επιβεβαίωσης κατά την \"Επανάληψη\""
+        },
+        {
+          "label": "Παράβλεψη μικρής σημασίας ορθογραφικών λαθών",
+          "description": "Αν ενεργοποιηθεί, μια απάντηση θα ληφθεί ως σωστή ακόμη κι αν έχει μικρής σημασίας ορθογραφικά λάθη"
+        }
+      ]
+    },
+    {
+      "label": "Παράθυρο επιβεβαίωσης",
+      "fields": [
+        {
+          "label": "Κείμενο επικεφαλίδας",
+          "default": "Ολοκλήρωση άσκησης"
+        },
+        {
+          "label": "Κυρίως κείμενο",
+          "default": "Είσαι σίγουρος ότι θέλεις να ολοκληρώσεις την άσκηση;"
+        },
+        {
+          "label": "Ετικέτα κουμπιού ακύρωσης",
+          "default": "Όχι"
+        },
+        {
+          "label": "Ετικέτα κουμπιού επιβεβαίωσης",
+          "default": "Ναι"
+        }
+      ]
+    },
+    {
+      "label": "Παράθυρο επιβεβαίωσης",
+      "fields": [
+        {
+          "label": "Κείμενο επικεφαλίδας",
+          "default": "Επανάληψη"
+        },
+        {
+          "label": "Κυρίως κείμενο",
+          "default": "Είσαι σίγουρος ότι θέλεις να προσπαθήσεις ξανά;"
+        },
+        {
+          "label": "Ετικέτα κουμπιού ακύρωσης",
+          "default": "Όχι"
+        },
+        {
+          "label": "Ετικέτα κουμπιού επιβεβαίωσης",
+          "default": "Ναι"
+        }
+      ]
+    },
+    {
+      "label": "Κειμενική απόδοση της μπάρας βαθμολογίας για όσους χρησιμοποιούν ακουστική υποβοήθηση",
+      "default": "Έχεις :num από :total βαθμούς"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/es-mx.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/es-mx.json
new file mode 100644
index 0000000000000000000000000000000000000000..66a03566dc0fadd4d723390e9e827f88c84f65d7
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/es-mx.json
@@ -0,0 +1,211 @@
+{
+  "semantics": [
+    {
+      "label": "Medio",
+      "fields": [
+        {
+          "label": "Tipo",
+          "description": "Medio opcional a mostrar arriba de la pregunta."
+        },
+        {
+          "label": "Desabilitar Zoom de imagen"
+        }
+      ]
+    },
+    {
+      "label": "Descripción de la tarea",
+      "default": "Rellenar las palabras que faltan",
+      "description": "Una guía que dice al usuario cómo responder a esta tarea."
+    },
+    {
+      "label": "Bloques de texto",
+      "entity": "bloque de texto",
+      "field": {
+        "label": "Línea de texto",
+        "placeholder": "Oslo es la capital de *Noruega*.",
+        "description": "",
+        "important": {
+          "description": "<ul><li>Se añaden espacios en blanco con un asterisco (*) delante y detrás de la palabra/frase correcta.</li> <li>Respuestas alternativas se separan con una barra diagonal (/).</li> <li>Puede agregar un texto de consejo, mediante dos puntos (:) delante del texto consejo.</li></ul>",
+          "example": "El contenido H5P puede ser editado usando un *browser/web-browser:Algo que Usted usa todos los días*."
+        }
+      }
+    },
+    {
+      "label": "Retroalimentación global",
+      "fields": [
+        {
+          "widgets": [
+            {
+              "label": "Predeterminado"
+            }
+          ],
+          "label": "Definir retroalimentación personalizada para cualquier rango de puntaje",
+          "description": "Hacer cic en el botón de \"Añadir rango\" para añadir cuantos rangos necesite. Ejemplo: 0-20% Mal puntaje, 21-91% Puntaje promedio, 91-100% ¡Magnífico Puntaje!",
+          "entity": "rango",
+          "field": {
+            "fields": [
+              {
+                "label": "Rango de Puntaje"
+              },
+              {},
+              {
+                "label": "Retroalimentación para rango de puntaje definido",
+                "placeholder": "Complete la retroalimentación"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    {
+      "label": "Texto para el botón de \"Mostrar soluciones\"",
+      "default": "Mostrar solución"
+    },
+    {
+      "label": "Texto para el botón de \"Reintentar\"",
+      "default": "Reintentar"
+    },
+    {
+      "label": "Texto para botón para \"Revisar\" ",
+      "default": "revisar"
+    },
+    {
+      "label": "Texto para mensaje de \"No contestado\" ",
+      "default": "Por favor llene todos los espacios para ver la solución"
+    },
+    {
+      "label": "Texto para mensaje de \"':ans' es correcto\" ",
+      "default": "':ans' es correcto"
+    },
+    {
+      "label": "Texto para mensaje de \"':ans' es incorrecto\" ",
+      "default": "':ans' es incorrecto"
+    },
+    {
+      "label": "Texto para mensaje de \"Contestado correctamente\" ",
+      "default": "Contestado correctamente"
+    },
+    {
+      "label": "Texto para mensaje de \"Contestado incorrectamente\" ",
+      "default": "Contestado incorrectamente"
+    },
+    {
+      "label": "Etiqueta para tecnología asistiva para Solución",
+      "default": "Respuesta correcta:"
+    },
+    {
+      "label": "Etiqueta para tecnología asistiva para campo de ingreso",
+      "description": "Use @num y @total para remplazar número cloze actual y número cloze total",
+      "default": "Vacío ingreso @num de @total"
+    },
+    {
+      "label": "Etiqueta para tecnología asistiva para decir que una entrada tiene una pista asociada a ella",
+      "default": "Pista disponible"
+    },
+    {
+      "label": "etiqueta de ícono de pista",
+      "default": "Pista"
+    },
+    {
+      "label": "Configuraciones de comportamiento.",
+      "description": "Estas opciones le permitirán controlar como se comporta el trabajo.",
+      "fields": [
+        {
+          "label": "Habilitar \"Reintentar\""
+        },
+        {
+          "label": "Habilitar botón para \"Mostrar solución\" "
+        },
+        {
+          "label": "Habilitar botón \"Revisar\" "
+        },
+        {
+          "label": "Automáticamente revisar respuestas después de ingresadas"
+        },
+        {
+          "label": "MAYÚSCULAS/minúsculas si importan",
+          "description": "Asegurar que la entrada del usuario tenga que ser exactamente la misma que la respuesta."
+        },
+        {
+          "label": "Requerir que todos los campos sean contestados antes que que pueda ser vista la solución"
+        },
+        {
+          "label": "Poner campos de entrada en líneas separadas"
+        },
+        {
+          "label": "Mostrar diálogo de confirmación en \"Revisar\"",
+          "description": "Esta opción no es compatible con la opción para \"Revisar respuestas automáticamente después de ingresadas\" "
+        },
+        {
+          "label": "Mostrar diálogo de confirmación en \"Reintentar\""
+        },
+        {
+          "label": "Aceptar errores tipográficos menores",
+          "description": "Si se activa, una respuesta también contará como correcta con errores tipográficos menores (3-9 caracteres: 1 error tipográfico, más de 9 caracteres: 2 errores tipográficos)"
+        }
+      ]
+    },
+    {
+      "label": "Diálogo de confirmación para Revisar",
+      "fields": [
+        {
+          "label": "Texto del encabezado",
+          "default": "¿ Terminar ?"
+        },
+        {
+          "label": "Texto del cuerpo",
+          "default": "¿Está seguro que desea terminar ?"
+        },
+        {
+          "label": "Etiqueta botón Cancelar",
+          "default": "Cancelar"
+        },
+        {
+          "label": "Etiqueta botón Confirmar",
+          "default": "Terminar"
+        }
+      ]
+    },
+    {
+      "label": "Diálogo de confirmación Reintentar",
+      "fields": [
+        {
+          "label": "Texto del encabezado",
+          "default": "¿ Reintentar ?"
+        },
+        {
+          "label": "Texto del cuerpo",
+          "default": "¿ Está seguro de querer Reintentar ?"
+        },
+        {
+          "label": "Etiqueta botón Cancelar",
+          "default": "Cancelar"
+        },
+        {
+          "label": "Etiqueta botón Confirmar",
+          "default": "Confirmar"
+        }
+      ]
+    },
+    {
+      "label": "Representación textual de la barra de puntaje para aquellos que usan un Lector de voz",
+      "default": "Usted obtuvo :num de un total de :total puntos"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/es.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/es.json
new file mode 100644
index 0000000000000000000000000000000000000000..51e0acebc995621c6ddeabd3819e02ec84fcbebb
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/es.json
@@ -0,0 +1,211 @@
+{
+  "semantics": [
+    {
+      "label": "Medio",
+      "fields": [
+        {
+          "label": "Tipo",
+          "description": "Medio opcional a mostrar arriba de la pregunta."
+        },
+        {
+          "label": "Desabilitar Zoom de imagen"
+        }
+      ]
+    },
+    {
+      "label": "Descripción de la tarea",
+      "default": "Rellenar las palabras que faltan",
+      "description": "Una guía que dice al usuario cómo responder a esta tarea."
+    },
+    {
+      "label": "Bloques de texto",
+      "entity": "bloque de texto",
+      "field": {
+        "label": "Línea de texto",
+        "placeholder": "Oslo es la capital de *Noruega*.",
+        "description": "",
+        "important": {
+          "description": "<ul><li>Se añaden espacios en blanco con un asterisco (*) delante y detrás de la palabra/frase correcta.</li> <li>Respuestas alternativas se separan con una barra diagonal (/).</li> <li>Puede agregar un texto de consejo, mediante dos puntos (:) delante del texto consejo.</li></ul>",
+          "example": "El contenido H5P puede ser editado usando un *browser/web-browser:Algo que Usted usa todos los días*."
+        }
+      }
+    },
+    {
+      "label": "Realimentación global",
+      "fields": [
+        {
+          "widgets": [
+            {
+              "label": "Predeterminado"
+            }
+          ],
+          "label": "Definir realimentación personalizada para cualquier rango de puntaje",
+          "description": "Hacer cic en el botón de \"Añadir rango\" para añadir cuantos rangos necesite. Ejemplo: 0-20% Mal puntaje, 21-91% Puntaje promedio, 91-100% ¡Magnífico Puntaje!",
+          "entity": "rango",
+          "field": {
+            "fields": [
+              {
+                "label": "Rango de Puntaje"
+              },
+              {},
+              {
+                "label": "Realimentación para rango de puntaje definido",
+                "placeholder": "Complete la realimentación"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    {
+      "label": "Texto para el botón de \"Mostrar soluciones\"",
+      "default": "Mostrar solución"
+    },
+    {
+      "label": "Texto para el botón de \"Reintentar\"",
+      "default": "Reintentar"
+    },
+    {
+      "label": "Texto para botón para \"Revisar\" ",
+      "default": "revisar"
+    },
+    {
+      "label": "Texto para mensaje de \"No contestado\" ",
+      "default": "Por favor llene todos los espacios para ver la solución"
+    },
+    {
+      "label": "Texto para mensaje de \"':ans' es correcto\" ",
+      "default": "':ans' es correcto"
+    },
+    {
+      "label": "Texto para mensaje de \"':ans' es incorrecto\" ",
+      "default": "':ans' es incorrecto"
+    },
+    {
+      "label": "Texto para mensaje de \"Contestado correctamente\" ",
+      "default": "Contestado correctamente"
+    },
+    {
+      "label": "Texto para mensaje de \"Contestado incorrectamente\" ",
+      "default": "Contestado incorrectamente"
+    },
+    {
+      "label": "Etiqueta para tecnología asistiva para Solución",
+      "default": "Respuesta correcta:"
+    },
+    {
+      "label": "Etiqueta para tecnología asistiva para campo de ingreso",
+      "description": "Use @num y @total para remplazar número cloze actual y número cloze total",
+      "default": "Vacío ingreso @num de @total"
+    },
+    {
+      "label": "Etiqueta para tecnología asistiva para decir que una entrada tiene una pista asociada a ella",
+      "default": "Pista disponible"
+    },
+    {
+      "label": "etiqueta de ícono de pista",
+      "default": "Pista"
+    },
+    {
+      "label": "Configuraciones de comportamiento.",
+      "description": "Estas opciones le permitirán controlar como se comporta el trabajo.",
+      "fields": [
+        {
+          "label": "Habilitar \"Reintentar\""
+        },
+        {
+          "label": "Habilitar botón para \"Mostrar solución\" "
+        },
+        {
+          "label": "Habilitar botón \"Revisar\" "
+        },
+        {
+          "label": "Automáticamente revisar respuestas después de ingresadas"
+        },
+        {
+          "label": "MAYÚSCULAS/minúsculas si importan",
+          "description": "Asegurar que la entrada del usuario tenga que ser exactamente la misma que la respuesta."
+        },
+        {
+          "label": "Requerir que todos los campos sean contestados antes que que pueda ser vista la solución"
+        },
+        {
+          "label": "Poner campos de entrada en líneas separadas"
+        },
+        {
+          "label": "Mostrar diálogo de confirmación en \"Revisar\"",
+          "description": "Esta opción no es compatible con la opción para \"Revisar respuestas automáticamente después de ingresadas\" "
+        },
+        {
+          "label": "Mostrar diálogo de confirmación en \"Reintentar\""
+        },
+        {
+          "label": "Aceptar errores tipográficos menores",
+          "description": "Si se activa, una respuesta también contará como correcta con errores tipográficos menores (3-9 caracteres: 1 error tipográfico, más de 9 caracteres: 2 errores tipográficos)"
+        }
+      ]
+    },
+    {
+      "label": "Diálogo de confirmación para Revisar",
+      "fields": [
+        {
+          "label": "Texto del encabezado",
+          "default": "¿ Terminar ?"
+        },
+        {
+          "label": "Texto del cuerpo",
+          "default": "¿Está seguro que desea terminar ?"
+        },
+        {
+          "label": "Etiqueta botón Cancelar",
+          "default": "Cancelar"
+        },
+        {
+          "label": "Etiqueta botón Confirmar",
+          "default": "Terminar"
+        }
+      ]
+    },
+    {
+      "label": "Diálogo de confirmación Reintentar",
+      "fields": [
+        {
+          "label": "Texto del encabezado",
+          "default": "¿ Reintentar ?"
+        },
+        {
+          "label": "Texto del cuerpo",
+          "default": "¿ Está seguro de querer Reintentar ?"
+        },
+        {
+          "label": "Etiqueta botón Cancelar",
+          "default": "Cancelar"
+        },
+        {
+          "label": "Etiqueta botón Confirmar",
+          "default": "Confirmar"
+        }
+      ]
+    },
+    {
+      "label": "Representación textual de la barra de puntaje para aquellos que usan un Lector de voz",
+      "default": "Usted obtuvo :num de un total de :total puntos"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/et.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/et.json
new file mode 100644
index 0000000000000000000000000000000000000000..40186e2f52ddf0f1aacd3526208849026c92f85a
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/et.json
@@ -0,0 +1,211 @@
+{
+  "semantics": [
+    {
+      "label": "Meedia",
+      "fields": [
+        {
+          "label": "Tüüp",
+          "description": "Pilt või video küsimuse juures kuvamiseks (ei ole kohustuslik)."
+        },
+        {
+          "label": "Keela pildi suurendamine"
+        }
+      ]
+    },
+    {
+      "label": "Ülesande kirjeldus",
+      "default": "Sisesta puuduvad sõnad",
+      "description": "Ülesande vastamist kirjeldav juhis kasutajale."
+    },
+    {
+      "label": "Tekstiväljad",
+      "entity": "tekstiväli",
+      "field": {
+        "label": "Tekstirida",
+        "placeholder": "Oslo on *Norway* pealinn.",
+        "description": "",
+        "important": {
+          "description": "<ul><li>Tühjad kohad märgitakse tärni (*) lisamisega korrektse sõna või fraasi ette ja taha.</li><li>Alternatiivsed vastused eraldatakse kaldkriipsuga (/).</li><li>Tekstivihje lisamiseks kasuta koolonit (:) vihje ees.</li></ul>",
+          "example": "H5P sisu töötlemiseks sobib *brauser/veebibrauser:Midagi, mida kasutad iga päev*."
+        }
+      }
+    },
+    {
+      "label": "Üldine tagasiside",
+      "fields": [
+        {
+          "widgets": [
+            {
+              "label": "Vaikimisi"
+            }
+          ],
+          "label": "Määratle kohandatud tagasiside igale punktisumma vahemikule",
+          "description": "Kliki \"Lisa vahemik\" nupule, et lisada vajalik arv vahemikke. Näiteks: 0-20% Halb tulemus, 21-91% Keskmine tulemus, 91-100% Suurepärane tulemus!",
+          "entity": "vahemik",
+          "field": {
+            "fields": [
+              {
+                "label": "Punktisumma vahemik"
+              },
+              {},
+              {
+                "label": "Tagasiside määratletud punktisumma vahemikule",
+                "placeholder": "Sisesta tagasiside"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    {
+      "label": "Nupu \"Näita lahendusi\" tekst",
+      "default": "Näita lahendusi"
+    },
+    {
+      "label": "Nupu \"Proovi uuesti\" tekst",
+      "default": "Proovi uuesti"
+    },
+    {
+      "label": "Nupu \"Kontrolli\" tekst",
+      "default": "Kontrolli"
+    },
+    {
+      "label": "Teate \"Ei ole täidetud\" tekst",
+      "default": "Lahenduse vaatamiseks täida palun kõik tühjad väljad"
+    },
+    {
+      "label": "Teate \"':ans' on õige\" tekst",
+      "default": "':ans' on õige"
+    },
+    {
+      "label": "Teate \"':ans' on õige\" tekst",
+      "default": "':ans' on õige"
+    },
+    {
+      "label": "Teate \"Õigesti vastatud\" tekst",
+      "default": "Õigesti vastatud"
+    },
+    {
+      "label": "Text for \"Valesti vastatud\" message",
+      "default": "Valesti vastatud"
+    },
+    {
+      "label": "Assisteeriva tehnoloogia silt lahendusele",
+      "default": "Õige vastus:"
+    },
+    {
+      "label": "Assisteeriva tehnoloogia silt sisestusväljale",
+      "description": "Kasuta @num ja @total, et asendada jooksev cloze arv ja cloze arvude summa",
+      "default": "Tühi sisend @num / @total"
+    },
+    {
+      "label": "Assisteeriva tehnoloogia silt, mis ütleb, et vastusele on vihje",
+      "default": "Saadaval on vihje"
+    },
+    {
+      "label": "Vihjeikooni silt",
+      "default": "Vihje"
+    },
+    {
+      "label": "Ülesande seadistused.",
+      "description": "Nende seadistustega juhid ülesande toimimist.",
+      "fields": [
+        {
+          "label": "Luba \"Proovi uuesti\" nupp"
+        },
+        {
+          "label": "Luba \"Näit lahendus\" nupp"
+        },
+        {
+          "label": "Luba \"Kontrolli\" nupp"
+        },
+        {
+          "label": "Kontrolli vastused peale sisestamist automaatselt"
+        },
+        {
+          "label": "Tõstutundlik",
+          "description": "Nõuab kasutajalt täpselt sama väike-suurtähtede kasutust nagu on vastuses."
+        },
+        {
+          "label": "Nõuab lahenduse nägemiseks eelnevat kõikide väljade vastamist."
+        },
+        {
+          "label": "Aseta sisendväljad eraldi ridadele"
+        },
+        {
+          "label": "Näita kinnitusdialoogi \"Kontrolli\" nupule vajutamisel",
+          "description": "Seda seadistust ei saa kasutada koos \"Kontrolli vastused peale sisestamist automaatselt\" valikuga"
+        },
+        {
+          "label": "Näita kinnitusdialoogi \"Proovi uuesti\" nupule vajutamisel"
+        },
+        {
+          "label": "Luba vähesed kirjavead",
+          "description": "Seadistuse kasutamisel loetakse õigeks ka kirjavigu sisaldav vastus (3-9 tähemärki: 1 kirjaviga, rohkem, kui 9 tähemärki: 2 kirjaviga)"
+        }
+      ]
+    },
+    {
+      "label": "Kontrolli nupu kinnitusdialoog",
+      "fields": [
+        {
+          "label": "Pealkiri",
+          "default": "Valmis?"
+        },
+        {
+          "label": "Dialoogi tekst",
+          "default": "Oled kindel, et soovid kontrollida?"
+        },
+        {
+          "label": "Tühista nupu silt",
+          "default": "Ei"
+        },
+        {
+          "label": "Kinnita nupu silt",
+          "default": "Jah"
+        }
+      ]
+    },
+    {
+      "label": "Proovi uuesti nupu kinnitusdialoog",
+      "fields": [
+        {
+          "label": "Pealkiri",
+          "default": "Kas proovid uuesti?"
+        },
+        {
+          "label": "Dialoogi tekst",
+          "default": "Oled kindel, et soovid uuesti proovida?"
+        },
+        {
+          "label": "Tühista nupu silt",
+          "default": "Ei"
+        },
+        {
+          "label": "Kinnita nupu silt",
+          "default": "Jah"
+        }
+      ]
+    },
+    {
+      "label": "Punktisumma esitamine tekstilisel kujul neile, kes kasutavad tekstilugerit",
+      "default": "Sa said :num punkti. Maksimaalne punktisumma oli :total punkti"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/eu.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/eu.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/eu.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/eu.json
index 10df76122ab7129d6a63b79ebc1a5a8bc05ee441..b797ddef93a3b5bdbd64d1d5dc02168bb1ffe8f7 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/eu.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/eu.json
@@ -6,6 +6,9 @@
         {
           "label": "Mota",
           "description": "Galderaren azpiko aukerako multimedia."
+        },
+        {
+          "label": "Desgaitu irudiaren zooma"
         }
       ]
     },
@@ -31,7 +34,7 @@
       "label": "Feedback orokorra",
       "fields": [
         {
-          "trepetak": [
+          "widgets": [
             {
               "label": "Lehenetsia"
             }
@@ -129,9 +132,6 @@
         {
           "label": "Jarri eremuen sarrerak lerro bereizietan"
         },
-        {
-          "label": "Desgaitu irudiaren zooma erantzunaren irudian"
-        },
         {
           "label": "Erakutsi egiaztatze dialogoa \"Egiaztatu\"",
           "description": "Aukera hau ez da bateragarria  \"Egiaztatu automatikoki erantzunak sartu ondoren\" aukerarekin"
@@ -190,6 +190,22 @@
     {
       "label": "Puntuazio barraren testu adierazpena irakurgailua erabiltzen dutenentzat",
       "default": "Lortu duzu :num / :total puntu"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/fi.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/fi.json
similarity index 89%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/fi.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/fi.json
index 6bf63974beea103a5f3d330f9dd5bfbde95f46aa..188996d9571bfd60ed78929b39d817ce12aa7978 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/fi.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/fi.json
@@ -6,6 +6,9 @@
         {
           "label": "Tyyppi",
           "description": "Valinnainen kuva tai video, joka näkyy kysymyksen yläpuolella."
+        },
+        {
+          "label": "Estä kysymykseen liitetyn kuvan suurentaminen"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Järjestä vastauskentät eri riveille"
         },
-        {
-          "label": "Estä kysymykseen liitetyn kuvan suurentaminen"
-        },
         {
           "label": "Näytä varmistusdialogi, kun käyttäjä klikkaa \"Tarkista\"",
           "description": "Tämä valinta ei toimi yhdessä \"Tarkista vastaukset automaattisesti\" valinnan kanssa"
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/fr.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/fr.json
similarity index 87%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/fr.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/fr.json
index 45b6ee8d408dae0fdee861164ba711820453556f..2ca307c607c0a70af57d16cae5a0216fbe52e405 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/fr.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/fr.json
@@ -1,11 +1,14 @@
 {
   "semantics": [
     {
-      "label": "Fichier média",
+      "label": "Média",
       "fields": [
         {
-          "label": "Type de média",
-          "description": "Fichier média à afficher en option au-dessus de la question."
+          "label": "Type",
+          "description": "Média à afficher au-dessus de la question (facultatif)."
+        },
+        {
+          "label": "Désactiver l'agrandissement de l'image"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Afficher les blancs sur des lignes séparées."
         },
-        {
-          "label": "Désactiver l'agrandissement de l'image de la question."
-        },
         {
           "label": "Afficher la fenêtre de confirmation pour \"Vérifier\"",
           "description": "Cette option n'est pas compatible avec l'option \"Vérifier les réponses instantanément dès la saisie.\""
@@ -190,6 +190,22 @@
     {
       "label": "Représentation textuelle du panneau du score pour les utilisateurs d'outils de synthèse vocale (comme ReadSpeaker)",
       "default": "Vous avez obtenu :num points sur un total de :points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/et.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/he.json
similarity index 68%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/et.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/he.json
index d782508a1b21c5f1855ec4ee36a09618bf044e99..d107bf7f1a806772b865b09dcc8a25f844ff96fa 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/et.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/he.json
@@ -1,25 +1,28 @@
 {
   "semantics": [
     {
-      "label": "Pilt või video",
+      "label": "מדיה",
       "fields": [
         {
-          "label": "Tüüp",
-          "description": "Pilt või video, mida kuvatakse küsimuse juures (mittekohustuslik element)."
+          "label": "סוג",
+          "description": "ניתן להוסיף תמונה אשר תוצג מעל השאלה."
+        },
+        {
+          "label": "ביטול האפשרות להגדלת תמונה"
         }
       ]
     },
     {
-      "label": "Task description",
-      "default": "Fill in the missing words",
-      "description": "A guide telling the user how to answer this task."
+      "label": "תיאור תוכן",
+      "default": "מילוי המילים החסרות",
+      "description": "מדריך המסביר למשתמש כיצד לענות על המשימה."
     },
     {
-      "label": "Text blocks",
-      "entity": "text block",
+      "label": "משבצות תוכן",
+      "entity": "משבצת תוכן",
       "field": {
-        "label": "Line of text",
-        "placeholder": "Oslo is the capital of *Norway*.",
+        "label": "שורה של טקסט",
+        "placeholder": "אוסלו היא בירת *נורווגיה*.",
         "description": "",
         "important": {
           "description": "<ul><li>Blanks are added with an asterisk (*) in front and behind the correct word/phrase.</li><li>Alternative answers are separated with a forward slash (/).</li><li>You may add a textual tip, using a colon (:) in front of the tip.</li></ul>",
@@ -28,26 +31,26 @@
       }
     },
     {
-      "label": "Overall Feedback",
+      "label": "משוב כללי",
       "fields": [
         {
           "widgets": [
             {
-              "label": "Default"
+              "label": "בררת מחדל"
             }
           ],
-          "label": "Define custom feedback for any score range",
-          "description": "Click the \"Add range\" button to add as many ranges as you need. Example: 0-20% Bad score, 21-91% Average Score, 91-100% Great Score!",
-          "entity": "range",
+          "label": "הגדרת משוב מותאם אישית לכל טווח נקודות שהוא",
+          "description": "לחצו על כפתור \"הוספת טווח\" להוספת טווחים לפי הצורך. לדוגמה: 0-20% ניקוד גרוע, 21-91% ניקוד ממוצע, 91-100% ניקוד מצוין!",
+          "entity": "תחום",
           "field": {
             "fields": [
               {
-                "label": "Score Range"
+                "label": "תחום ציונים"
               },
               {},
               {
-                "label": "Feedback for defined score range",
-                "placeholder": "Fill in the feedback"
+                "label": "משוב לטווח ניקוד מוגדר",
+                "placeholder": "מלאו את המשוב"
               }
             ]
           }
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -158,11 +158,11 @@
         },
         {
           "label": "Cancel button label",
-          "default": "Cancel"
+          "default": "ביטול"
         },
         {
           "label": "Confirm button label",
-          "default": "Finish"
+          "default": "סיום"
         }
       ]
     },
@@ -171,7 +171,7 @@
       "fields": [
         {
           "label": "Header text",
-          "default": "Retry ?"
+          "default": "ניסיון חוזר ?"
         },
         {
           "label": "Body text",
@@ -179,17 +179,33 @@
         },
         {
           "label": "Cancel button label",
-          "default": "Cancel"
+          "default": "ביטול"
         },
         {
           "label": "Confirm button label",
-          "default": "Confirm"
+          "default": "אישור"
         }
       ]
     },
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
 }
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/hu.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/hu.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/hu.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/hu.json
index eeb1c37342dd564b925a3bd02275843d79e8792a..21166c6516afcf51bf40327ec0687d410e076a7c 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/hu.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/hu.json
@@ -6,6 +6,9 @@
         {
           "label": "Type",
           "description": "Optional media to display above the question."
+        },
+        {
+          "label": "Disable image zooming"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/it.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/it.json
similarity index 68%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/it.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/it.json
index 59db202ef07a87a6bf98fc781cb27c5494b87d5d..6f34a74b6dd3cf05fda2c2c471e6217d20278948 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/it.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/it.json
@@ -5,13 +5,16 @@
       "fields": [
         {
           "label": "Tipo",
-          "description": "Media opzionale da mostrare sopra la domanda."
+          "description": "Media facoltativo da mostrare sopra la domanda"
+        },
+        {
+          "label": "Disabilita lo zoom dell'immagine"
         }
       ]
     },
     {
       "label": "Descrizione attività",
-      "default": "Riempire con le parole mancanti",
+      "default": "Riempi con le parole mancanti",
       "description": "Una guida che dice all'utente come rispondere a questo compito."
     },
     {
@@ -19,11 +22,11 @@
       "entity": "Blocco di testo",
       "field": {
         "label": "Linea di testo",
-        "placeholder": "Oslo è la capitale della * Norvegia *.",
+        "placeholder": "Oslo è la capitale della *Norvegia*.",
         "description": "",
         "important": {
-          "description": "<ul><li>Gli spazi vuoti sono aggiunti con un asterisco (*) all'inizio e alla fine della parola/frase corretta.</li> <li>Le risposte alternative sono separate da una barra (/).</li> <li>Si può aggiungere un testo di suggerimento facendolo precedere da due punti (:).</li></ul>",
-          "example": "H5P content may be edited using a *browser/web-browser:Something you use every day*."
+          "description": "<ul><li>Gli spazi vuoti sono aggiunti con un asterisco (*) all'inizio e alla fine della frase corretta.</li> <li>Le risposte alternative sono separate da una barra (/).</li> <li>Si può aggiungere un testo di suggerimento facendolo precedere da due punti (:).</li></ul>",
+          "example": "I contenuti H5P possono essere editati usando un *browser/browser web:Qualcosa che usi ogni giorno*."
         }
       }
     },
@@ -37,7 +40,7 @@
             }
           ],
           "label": "Definisci un feedback personalizzato per ogni intervallo di punteggio",
-          "description": "Click the \"Add range\" button to add as many ranges as you need. Example: 0-20% Bad score, 21-91% Average Score, 91-100% Great Score!",
+          "description": "Clicca sul pulsante \"Aggiungi intervallo\" per aggiungere gli intervalli che ti servono. Per esempio: 0-20%, Punteggio scarso; 21-90%, Punteggio medio; 91-100% Punteggio ottimo!",
           "entity": "Intervallo",
           "field": {
             "fields": [
@@ -71,16 +74,16 @@
       "default": "Per favore, riempi tutti gli spazi vuoti per vedere la soluzione"
     },
     {
-      "label": "Testo del messaggio \"': ans' è corretto\"",
+      "label": "Il testo del messaggio \"': ans' è corretto\"",
       "default": "': ans' è corretto"
     },
     {
-      "label": "Testo del messaggio \"': ans' è sbagliato\"",
+      "label": "Il testo del messaggio \"': ans' è sbagliato\"",
       "default": "': ans' è sbagliato"
     },
     {
       "label": "Testo del messaggio \"Hai risposto correttamente\"",
-      "default": "Ha risposto correttamente"
+      "default": "Hai risposto correttamente"
     },
     {
       "label": "Testo del messaggio \"Hai risposto in modo non corretto\"",
@@ -104,8 +107,8 @@
       "default": "Suggerimento"
     },
     {
-      "label": "Impostazioni di esecuzione.",
-      "description": "Queste opzioni ti consentono di controllare l'andamento del compito.",
+      "label": "Impostazioni di esecuzione",
+      "description": "Queste opzioni ti consentono di controllare l'andamento del compito",
       "fields": [
         {
           "label": "Attiva \"Riprova\""
@@ -114,14 +117,14 @@
           "label": "Attiva il pulsante \"Mostra soluzioni\""
         },
         {
-          "label": "Enable \"Check\" button"
+          "label": "Attiva il pulsante \"Verifica\""
         },
         {
           "label": "Controlla automaticamente le risposte dopo l'immissione"
         },
         {
           "label": "Riconosce maiuscole e minuscole",
-          "description": "Assicurati che i caratteri inseriti dall'utente siano esattamente gli stessi della risposta."
+          "description": "Assicurati che i caratteri inseriti dall'utente siano esattamente gli stessi della risposta"
         },
         {
           "label": "Richiedi che tutti i campi siano completati prima di mostrare la soluzione"
@@ -129,9 +132,6 @@
         {
           "label": "Inserire campi di input in righe separate"
         },
-        {
-          "label": "Disabilita lo zoom dell'immagine su immagini-domanda"
-        },
         {
           "label": "Mostra la finestra di dialogo di conferma su \"Verifica\"",
           "description": "Questa scelta non è compatibile con l'opzione \"Controlla automaticamente le risposte dopo l'immissione\""
@@ -140,8 +140,8 @@
           "label": "Mostra la finestra di dialogo di conferma su \"Riprova\""
         },
         {
-          "label": "Accetta errori minori di ortografia",
-          "description": "Se attivo, una risposta sarà conteggiata come corretta nonostante errori minori di ortografia (da 3 a 9 caratteri: 1 errore; più di 9 characters: 2 errori)"
+          "label": "Accetta piccoli errori di ortografia",
+          "description": "Se attivo, una risposta sarà conteggiata come corretta nonostante piccoli errori di ortografia (da 3 a 9 caratteri: 1 errore; più di 9 caratteri: 2 errori)"
         }
       ]
     },
@@ -150,11 +150,11 @@
       "fields": [
         {
           "label": "Testo dell'intestazione",
-          "default": "Finito?"
+          "default": "Terminato?"
         },
         {
-          "label": "Testo del corpo",
-          "default": "Sei sicuro di voler finire?"
+          "label": "Corpo del testo",
+          "default": "Sei sicuro di voler terminare?"
         },
         {
           "label": "Etichetta del pulsante Annulla",
@@ -162,7 +162,7 @@
         },
         {
           "label": "Etichetta del pulsante di conferma",
-          "default": "Finito"
+          "default": "Terminato"
         }
       ]
     },
@@ -174,7 +174,7 @@
           "default": "Vuoi riprovare?"
         },
         {
-          "label": "Testo del corpo",
+          "label": "Corpo del testo",
           "default": "Sei sicuro di voler riprovare?"
         },
         {
@@ -188,8 +188,24 @@
       ]
     },
     {
-      "label": "Textual representation of the score bar for those using a readspeaker",
-      "default": "You got :num out of :total points"
+      "label": "Rappresentazione testuale sulla barra del punteggio per chi usa un lettore vocale",
+      "default": "Il tuo punteggio è :num di :total"
+    },
+    {
+      "label": "Descrizione delle tecnologie assistive per il pulsante \"Verifica\"",
+      "default": "Verifica"
+    },
+    {
+      "label": "Descrizione delle tecnologie assistive per il pulsante \"Mostra soluzione\"",
+      "default": "Mostra soluzione"
+    },
+    {
+      "label": "Descrizione delle tecnologie assistive per il pulsante \"Riprova\"",
+      "default": "Riprova"
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
 }
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ja.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ja.json
similarity index 89%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ja.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ja.json
index ef022f777f1ebb21678e3dd0431bc3a8337c2e6b..ddb9df4a1634add1893a90114f357a1ca0e1ac5a 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ja.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ja.json
@@ -6,6 +6,9 @@
         {
           "label": "タイプ",
           "description": "設問の上に表示するオプションのメディア。"
+        },
+        {
+          "label": "Disable image zooming"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/el.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/km.json
similarity index 67%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/el.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/km.json
index eeb1c37342dd564b925a3bd02275843d79e8792a..512cb3ad726d8d3564ec6d1d0de43ef76c5edb1b 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/el.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/km.json
@@ -6,12 +6,15 @@
         {
           "label": "Type",
           "description": "Optional media to display above the question."
+        },
+        {
+          "label": "Disable image zooming"
         }
       ]
     },
     {
       "label": "Task description",
-      "default": "Fill in the missing words",
+      "default": "បញ្ចូលពាក្យត្រឹមត្រូវក្នុងចន្លោះ",
       "description": "A guide telling the user how to answer this task."
     },
     {
@@ -56,52 +59,52 @@
     },
     {
       "label": "Text for \"Show solutions\" button",
-      "default": "Show solution"
+      "default": "បង្ហាញចម្លើយត្រឹមត្រូវ"
     },
     {
       "label": "Text for \"Retry\" button",
-      "default": "Retry"
+      "default": "សាកម្តងទៀត"
     },
     {
       "label": "Text for \"Check\" button",
-      "default": "Check"
+      "default": "ពិនិត្យចម្លើយ"
     },
     {
       "label": "Text for \"Not filled out\" message",
-      "default": "Please fill in all blanks to view solution"
+      "default": "សូមបំពេញចន្លោះទាំងអស់ដើម្បីមើលចម្លើយត្រឹមត្រូវ"
     },
     {
       "label": "Text for \"':ans' is correct\" message",
-      "default": "':ans' is correct"
+      "default": "':ans' គឺត្រឹមត្រូវ"
     },
     {
       "label": "Text for \"':ans' is wrong\" message",
-      "default": "':ans' is wrong"
+      "default": "':ans' គឺមិនត្រឹមត្រូវ"
     },
     {
       "label": "Text for \"Answered correctly\" message",
-      "default": "Answered correctly"
+      "default": "បានឆ្លើយត្រឹមត្រូវ"
     },
     {
       "label": "Text for \"Answered incorrectly\" message",
-      "default": "Answered incorrectly"
+      "default": "បានឆ្លើយមិនត្រឹមត្រូវ"
     },
     {
       "label": "Assistive technology label for solution",
-      "default": "Correct answer:"
+      "default": "ចម្លើយត្រឹមត្រូវ:"
     },
     {
       "label": "Assistive technology label for input field",
       "description": "Use @num and @total to replace current cloze number and total cloze number",
-      "default": "Blank input @num of @total"
+      "default": "ចន្លោះទី @num ចំណោម @total"
     },
     {
       "label": "Assistive technology label for saying an input has a tip tied to it",
-      "default": "Tip available"
+      "default": "មានគន្លឹះ"
     },
     {
       "label": "Tip icon label",
-      "default": "Tip"
+      "default": "គន្លឹះ"
     },
     {
       "label": "Behavioural settings.",
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -150,19 +150,19 @@
       "fields": [
         {
           "label": "Header text",
-          "default": "Finish ?"
+          "default": "បញ្ចប់ ?"
         },
         {
           "label": "Body text",
-          "default": "Are you sure you wish to finish ?"
+          "default": "តើអ្នកពិតជាចង់បញ្ចប់មែនទេ ?"
         },
         {
           "label": "Cancel button label",
-          "default": "Cancel"
+          "default": "បោះបង់"
         },
         {
           "label": "Confirm button label",
-          "default": "Finish"
+          "default": "បញ្ចប់"
         }
       ]
     },
@@ -171,25 +171,41 @@
       "fields": [
         {
           "label": "Header text",
-          "default": "Retry ?"
+          "default": "សាកម្តងទៀត ?"
         },
         {
           "label": "Body text",
-          "default": "Are you sure you wish to retry ?"
+          "default": "តើអ្នកពិតជាចង់សាកម្តងទៀតមែនទេ ?"
         },
         {
           "label": "Cancel button label",
-          "default": "Cancel"
+          "default": "បោះបង់"
         },
         {
           "label": "Confirm button label",
-          "default": "Confirm"
+          "default": "យល់ព្រម"
         }
       ]
     },
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
-      "default": "You got :num out of :total points"
+      "default": "អ្នកទទួលបានពិន្ទុ :num លើ :total"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ko.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ko.json
new file mode 100644
index 0000000000000000000000000000000000000000..695b92c7e08a19f7ebcce246e9f8c810a2d38645
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ko.json
@@ -0,0 +1,211 @@
+{
+  "semantics": [
+    {
+      "label": "미디어",
+      "fields": [
+        {
+          "label": "유형",
+          "description": "(선택사항) 질문 위에 표시할 미디어."
+        },
+        {
+          "label": "이미지 확대/축소 사용 안 함"
+        }
+      ]
+    },
+    {
+      "label": "과제 설명",
+      "default": "누락된 단어 입력",
+      "description": "사용자에게 이 과제에 대한 답변 방법을 알려주는 안내서."
+    },
+    {
+      "label": "텍스트 블록",
+      "entity": "텍스트 블록",
+      "field": {
+        "label": "텍스트 줄",
+        "placeholder": "*노르웨이*의 수도는 오슬로이다.",
+        "description": "",
+        "important": {
+          "description": "<ul><li>빈 칸은 정확한 단어/구문 앞뒤에 별표(*)로 추가된다. </li><li>가능한 다른 답변은 슬래시(/)로 구분한다.</li><li>팁 앞에 콜론(:)을 사용하여 텍스트 팁을 추가할 수 있다.</li></ul>",
+          "example": "H5P 컨텐츠는 *브라우저/웹브라우저:매일 사용하는 것*을 사용하여 편집할 수 있음."
+        }
+      }
+    },
+    {
+      "label": "전반적인 피드백",
+      "fields": [
+        {
+          "widgets": [
+            {
+              "label": "기본값"
+            }
+          ],
+          "label": "점수 범위에 대한 사용자 피드백 정의",
+          "description": "\"Add range\" 버튼을 클릭하여 필요한 만큼 범위를 추가하십시오. 예: 0-20% 낮은 점수, 21-91% 평균 점수, 91-100% 높은 점수!",
+          "entity": "범위",
+          "field": {
+            "fields": [
+              {
+                "label": "점수 범위"
+              },
+              {},
+              {
+                "label": "정의된 점수 범위에 대한 피드백",
+                "placeholder": "피드백 작성"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    {
+      "label": "\"Show solutions\" (해답 보기) 버튼",
+      "default": "해답 보기"
+    },
+    {
+      "label": "\"Retry\" (재시도) 버튼에 대한 텍스트",
+      "default": "재시도"
+    },
+    {
+      "label": "\"Check\" (체크) 버튼에 대한 텍스트",
+      "default": "체크"
+    },
+    {
+      "label": "\"Not filled out\" (빈 칸 완성 안됨) 메시지에 대한 텍스트",
+      "default": "해답을 보려면 빈칸을 모두 입력하십시오"
+    },
+    {
+      "label": "\"':ans' is correct\" (정답) 메시지에 대한 텍스트",
+      "default": "':ans' (답)이 옳습니다."
+    },
+    {
+      "label": "\"':ans' is wrong\" (오답) 메시지에 대한 텍스트",
+      "default": "':ans' 은 잘못된 답입니다."
+    },
+    {
+      "label": "\"Answered correctly\" (올바른 답)에 대한 메시지 텍스트",
+      "default": "올바르게 답했습니다."
+    },
+    {
+      "label": "\"Answered incorrectly\" (오답) 메시지에 대한 텍스트",
+      "default": "틀린 답입니다."
+    },
+    {
+      "label": "해답에 대한 보조 기술 라벨",
+      "default": "정답:"
+    },
+    {
+      "label": "입력 필드에 대한 보조 기술 라벨",
+      "description": "@num 와 @total 를 사용하여 총 빈칸 번호과 현재 빈칸 번호를 대체합니다.",
+      "default": "총 @total 중 @num 빈칸 입력"
+    },
+    {
+      "label": "입력과 관련된 팁이 있다고 말하는 보조 기술 라벨",
+      "default": "팁 이용가능함"
+    },
+    {
+      "label": "팁 아이콘 레이블",
+      "default": "팁"
+    },
+    {
+      "label": "학습 행동 관련 설정.",
+      "description": "이 옵션을 사용하면 학습 과정을 제어할 수 있다.",
+      "fields": [
+        {
+          "label": "\"Retry\" (재시도) 버튼 활성화"
+        },
+        {
+          "label": "\"Show solution\" (해답 보이기) 버튼 활성화"
+        },
+        {
+          "label": "\"Check\" (체크) 버튼 활성화"
+        },
+        {
+          "label": "입력 후 자동으로 답변 확인"
+        },
+        {
+          "label": "대소문자 구분",
+          "description": "사용자 입력이 답변과 정확히 같아야 함을 확인."
+        },
+        {
+          "label": "해답을 보기 전에 모든 영역에 응답하도록 요구"
+        },
+        {
+          "label": "입력 필드를 별도의 줄에 놓으십시오"
+        },
+        {
+          "label": "\"Check\"에 확인 대화상자 표시",
+          "description": "이 옵션은 \"Automatically check answers after input\" (입력 후 자동 답 체크) 옵션과 호환되지 않음"
+        },
+        {
+          "label": "\"Retry\"에 확인 대화 상자 표시"
+        },
+        {
+          "label": "사소한 철자 오류 허용",
+          "description": "활성화된 경우, 대답은 사소한 철자 오류(3-9자: 철자 오류 1자, 9자 이상: 철자 오류 2자)와 함께 올바른 것으로 간주된다."
+        }
+      ]
+    },
+    {
+      "label": "확인 대화 창 체크",
+      "fields": [
+        {
+          "label": "머릿말 텍스트",
+          "default": "완료?"
+        },
+        {
+          "label": "본문 텍스트",
+          "default": "정말 끝내시겠습니까?"
+        },
+        {
+          "label": "취소 버튼 레이블",
+          "default": "취소"
+        },
+        {
+          "label": "확인 버튼 레이블",
+          "default": "완료"
+        }
+      ]
+    },
+    {
+      "label": "재시도 확인 창",
+      "fields": [
+        {
+          "label": "머릿말 텍스트",
+          "default": "재시도?"
+        },
+        {
+          "label": "본문 텍스트",
+          "default": "다시 시도하시겠습니까?"
+        },
+        {
+          "label": "취소 버튼 레이블",
+          "default": "취소"
+        },
+        {
+          "label": "확인 버튼 레이블",
+          "default": "확인"
+        }
+      ]
+    },
+    {
+      "label": "자동 문장 읽어주기를 사용하는 사람들을 위한 점수 막대의 텍스트 표현",
+      "default": "총점 :total 중 :num 획득하였습니다."
+    },
+    {
+      "label": "\"Check\" 버튼에 대한 보조 기술 설명",
+      "default": "정답을 확인하세요. 답변은 정답, 오답, 혹은 미답변으로 표기될 것입니다."
+    },
+    {
+      "label": "\"Show Solution\" 버튼에 대한 보조 기술 설명",
+      "default": "해답 표시. 올바른 해답이 표기될 것입니다."
+    },
+    {
+      "label": "\"Retry\" 버튼에 대한 보조 기술 설명",
+      "default": "재시도하세요. 모든 답변을 초기화하고 다시 시도하세요."
+    },
+    {
+      "label": "과제 시작에 대한 보조 기술 설명",
+      "default": "확인 모드"
+    }
+  ]
+}
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/nb.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/nb.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/nb.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/nb.json
index 5e8c1a867a446fb7a269b9a34096b0f527570131..ef8392e38973d8abaf3dc6b73aa022fd080455b3 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/nb.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/nb.json
@@ -6,6 +6,9 @@
         {
           "label": "Type",
           "description": "Et valgfritt multimediaelement som skal vises over spørsmålet."
+        },
+        {
+          "label": "Slå av bilde zooming"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Sett inntastingsfelt på egne linjer"
         },
-        {
-          "label": "Slå av bilde zooming."
-        },
         {
           "label": "Slå på bruker-bekreftelse for \"Fasit\"",
           "description": "Denne innstillingen er ikke forenbar med \"Gi tilbakemelding med en gang brukeren har avgitt svar\" alternativet."
@@ -150,7 +150,7 @@
       "fields": [
         {
           "label": "Tittel",
-          "default": "Feridg ?"
+          "default": "Ferdig ?"
         },
         {
           "label": "Tekst",
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/nl.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/nl.json
similarity index 90%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/nl.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/nl.json
index f58e1b2c1865339d002b20dda687ab06d23e2ff5..230b7ab6bb0cee92cff8fc345cfdfe98d8b0af33 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/nl.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/nl.json
@@ -6,6 +6,9 @@
         {
           "label": "Type",
           "description": "Optionele media, die boven de vragen worden getoond"
+        },
+        {
+          "label": "Deactiveer het zoomen van de afbeelding tijdens het tonen van de opgave"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Zet de invoervelden op afzonderlijke regels"
         },
-        {
-          "label": "Deactiveer het zoomen van de afbeelding tijdens het tonen van de opgave"
-        },
         {
           "label": "Toon bevestigingsvenster bij \"Controleer\"",
           "description": "Deze optie is niet verenigbaar met de \"Controleer automatisch de antwoorden na invoer\" optie"
@@ -190,6 +190,22 @@
     {
       "label": "Tekstuele weergave van de scorebalk voor diegenen die gebruik maken van een readspeaker",
       "default": "Je hebt :num van de :total punten"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/nn.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/nn.json
similarity index 86%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/nn.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/nn.json
index 8e9c7ad747a0fbc8c1aa3884d13bc1ac7072375a..72c9dfe0de6d3184e432327f1262a031d3353f74 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/nn.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/nn.json
@@ -6,6 +6,9 @@
         {
           "label": "Type",
           "description": "Eit valfritt multimediaelement som sjåast over spørsmålet."
+        },
+        {
+          "label": "Slå av bilete zooming"
         }
       ]
     },
@@ -97,7 +100,7 @@
     },
     {
       "label": "Merkelapp for å fortelle at et inntastingsfelt har et tips knyttet til seg",
-      "default": "Tips tilgjengelig"
+      "default": "Tips tilgjengeleg"
     },
     {
       "label": "Merkelapp for tips ikon",
@@ -117,7 +120,7 @@
           "label": "Enable \"Check\" button"
         },
         {
-          "label": "Gi tilbakemelding med en gang brukeren har avgitt svar"
+          "label": "Gi tilbakemelding med ein gong brukaren har svart"
         },
         {
           "label": "Skil mellom store og små bokstavar",
@@ -129,9 +132,6 @@
         {
           "label": "Sett inntastingsfelt på egne linjer"
         },
-        {
-          "label": "Slå av bilete zooming."
-        },
         {
           "label": "Slå på bruker-bekreftelse for \"Fasit\"",
           "description": "Denne innstillingen er ikke forenbar med \"Gi tilbakemelding med en gang brukeren har avgitt svar\" alternativet."
@@ -150,7 +150,7 @@
       "fields": [
         {
           "label": "Tittel",
-          "default": "Feridg ?"
+          "default": "Ferdig ?"
         },
         {
           "label": "Tekst",
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/pl.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/pl.json
new file mode 100644
index 0000000000000000000000000000000000000000..a0a1a3fb5864f322c38507035c427ee36b2324a2
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/pl.json
@@ -0,0 +1,211 @@
+{
+  "semantics": [
+    {
+      "label": "Media",
+      "fields": [
+        {
+          "label": "Typ",
+          "description": "Obraz do wyświetlenia nad pytaniem (opcjonalny)."
+        },
+        {
+          "label": "Zablokuj powiększanie obrazu"
+        }
+      ]
+    },
+    {
+      "label": "Wstęp",
+      "default": "Uzupełnij brakujące wyrażenia",
+      "description": "Objaśnienie dla użytkownika, co należy zrobić w zadaniu."
+    },
+    {
+      "label": "Fragmenty zadania",
+      "entity": "fragment",
+      "field": {
+        "label": "Fragment zadania",
+        "placeholder": "StolicÄ… Polski jest *Warszawa*.",
+        "description": "",
+        "important": {
+          "description": "<ul><li>Pola do wypełnienia wstawia się wpisując gwiazdkę (*) na początku i na końcu poprawnej odpowiedzi.</li><li>Alternatywne poprawne odpowiedzi należy rozdzielić ukośnikiem (/).</li><li>Wewnątrz pola można również dodać podpowiedź, poprzedzoną dwukropkiem (:).</li></ul>",
+          "example": "Zasób H5P można edytować w *przeglądarce/przeglądarka:Aplikacja, której używasz codziennie*."
+        }
+      }
+    },
+    {
+      "label": "Podsumowanie odpowiedzi",
+      "fields": [
+        {
+          "widgets": [
+            {
+              "label": "Domyślne"
+            }
+          ],
+          "label": "Określ własne kryteria oceny dla wybranych zakresów poprawnych odpowiedzi",
+          "description": "Klikając przycisk \"Dodaj zakres\" możesz dodać tyle zakresów, ile potrzebujesz. Przykład: 0-20% Słaby wynik, 21-91% Przeciętny wynik, 91-100% Bardzo dobry wynik!",
+          "entity": "zakres",
+          "field": {
+            "fields": [
+              {
+                "label": "Zakres"
+              },
+              {},
+              {
+                "label": "Komunikat dla danego zakresu",
+                "placeholder": "Wprowadź komunikat"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    {
+      "label": "Etykieta przycisku pokazywania poprawnej odpowiedzi",
+      "default": "Pokaż odpowiedź"
+    },
+    {
+      "label": "Etykieta przycisku ponowienia próby odpowiedzi",
+      "default": "Powtórz"
+    },
+    {
+      "label": "Etykieta przycisku sprawdzania odpowiedzi",
+      "default": "Sprawdź"
+    },
+    {
+      "label": "Komunikat o niewypełnionych polach",
+      "default": "Wypełnij wszystkie pola, zanim zobaczysz rozwiązanie."
+    },
+    {
+      "label": "Komunikat o poprawnej odpowiedzi",
+      "default": "':ans' to poprawna odpowiedź"
+    },
+    {
+      "label": "Komunikat o błędnej odpowiedzi",
+      "default": "':ans' to błędna odpowiedź"
+    },
+    {
+      "label": "Komunikat o liczbie poprawnych odpowiedzi",
+      "default": "Poprawne odpowiedzi"
+    },
+    {
+      "label": "Komunikat o liczbie błędnych odpowiedzi",
+      "default": "Błędne odpowiedzi"
+    },
+    {
+      "label": "Opis pola poprawnej odpowiedzi dla czytników ekranu",
+      "default": "Poprawna odpowiedź:"
+    },
+    {
+      "label": "Opis pola wprowadzania dla czytników ekranu",
+      "description": "Wstaw @num oraz @total jako numer aktualnego pola wprowadzania i liczbę wszystkich pól wprowadzania",
+      "default": "Pole wprowadzania @num z @total"
+    },
+    {
+      "label": "Informacja o dostępności podpowiedzi dla czytników ekranu",
+      "default": "Dostępna podpowiedź"
+    },
+    {
+      "label": "Etykieta ikony podpowiedzi",
+      "default": "Podpowiedź"
+    },
+    {
+      "label": "Ustawienia zachowania",
+      "description": "Te opcje pozwalają określić, jak ma przebiegać zadanie.",
+      "fields": [
+        {
+          "label": "Wyświetl przycisk \"Powtórz\""
+        },
+        {
+          "label": "Wyświetl przycisk \"Pokaż odpowiedź\""
+        },
+        {
+          "label": "Wyświetl przycisk \"Sprawdź\""
+        },
+        {
+          "label": "Automatycznie sprawdzaj wynik po wpisaniu"
+        },
+        {
+          "label": "Uwzględniaj wielkość liter",
+          "description": "Jeśli włączysz tę opcję, odpowiedź będzie musiała być wpisana identycznie ze wzorem."
+        },
+        {
+          "label": "Wymagaj wypełnienia wszystkich pól przed pokazaniem odpowiedzi"
+        },
+        {
+          "label": "Poszczególne pola wprowadzania w osobnych liniach"
+        },
+        {
+          "label": "Żądaj potwierdzenia akcji \"Sprawdź\"",
+          "description": "Ta opcja nie może być włączona razem z opcją \"Automatycznie sprawdzaj wynik po wpisaniu\""
+        },
+        {
+          "label": "Żądaj potwierdzenia akcji \"Powtórz\""
+        },
+        {
+          "label": "Akceptuj literówki",
+          "description": "Włączenie tej opcji spowoduje zaliczanie odpowiedzi minimalnie różniących się od wzoru (3-9 znaków: 1 literówka, więcej niż 9 znaków: 2 literówki)"
+        }
+      ]
+    },
+    {
+      "label": "Żądanie sprawdzenia wyniku",
+      "fields": [
+        {
+          "label": "Nagłówek",
+          "default": "Sprawdzić?"
+        },
+        {
+          "label": "Treść",
+          "default": "Czy na pewno sprawdzić swoje odpowiedzi i zakończyć to zadanie?"
+        },
+        {
+          "label": "Etykieta przycisku anulowania",
+          "default": "Anuluj"
+        },
+        {
+          "label": "Etykieta przycisku potwierdzenia",
+          "default": "Sprawdź"
+        }
+      ]
+    },
+    {
+      "label": "Żądanie powtórzenia testu",
+      "fields": [
+        {
+          "label": "Nagłówek",
+          "default": "Powtórzyć?"
+        },
+        {
+          "label": "Treść",
+          "default": "Czy na pewno chcesz powtórzyć to zadanie?"
+        },
+        {
+          "label": "Etykieta przycisku anulowania",
+          "default": "Anuluj"
+        },
+        {
+          "label": "Etykieta przycisku potwierdzenia",
+          "default": "Powtórz"
+        }
+      ]
+    },
+    {
+      "label": "Tekstowy odpowiednik paska wyniku dla czytników ekranu",
+      "default": "Masz :num z :total punktów"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/pt-br.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/pt-br.json
similarity index 90%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/pt-br.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/pt-br.json
index 02f9cb685f720df84971a1b686bb1f53c46f51a5..cea1f80c119242ef9058f0803d7d872c2736c486 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/pt-br.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/pt-br.json
@@ -6,6 +6,9 @@
         {
           "label": "Tipo",
           "description": "Mídia opcional exibida acima da questão."
+        },
+        {
+          "label": "Desativar zoom para imagem da questão"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Colocar campos preenchíveis em linhas diferentes"
         },
-        {
-          "label": "Desativar zoom para imagem da questão"
-        },
         {
           "label": "Exibir diálogo de confirmação em \"Verificar resposta\"",
           "description": "Estas opções não são compatíveis com a opção \"Verificar resposta automaticamente após o preenchimento\""
@@ -190,6 +190,22 @@
     {
       "label": "Representação textual da barra de pontuação para aqueles que usam leitores de tela",
       "default": "Você marcou :num de :total pontos"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/pt.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/pt.json
similarity index 90%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/pt.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/pt.json
index 38b6050bb936c2bb6d2dd3cf6e133d871b20976d..3ffb4251e6a9ad17d01cf412a764510ade8838a6 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/pt.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/pt.json
@@ -6,6 +6,9 @@
         {
           "label": "Tipo",
           "description": "Conteúdo multimédia opcional para mostrar acima da questão."
+        },
+        {
+          "label": "Desativar ampliação de imagem para a imagem associada à questão"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Coloque os campos de texto em linhas separadas"
         },
-        {
-          "label": "Desativar ampliação de imagem para a imagem associada à questão"
-        },
         {
           "label": "Mostrar caixa de diálogo de confirmação quando clicar em \"Verificar\"",
           "description": "Estas opções não são compatíveis com a opção \"Verificar automaticamente as respostas após a introdução\""
@@ -190,6 +190,22 @@
     {
       "label": "Representação textual da barra de resultados para utilizadores de leitor de ecrã",
       "default": "Conseguiu :num pontos de um total de :total"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ro.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ro.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ro.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ro.json
index eeb1c37342dd564b925a3bd02275843d79e8792a..21166c6516afcf51bf40327ec0687d410e076a7c 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ro.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ro.json
@@ -6,6 +6,9 @@
         {
           "label": "Type",
           "description": "Optional media to display above the question."
+        },
+        {
+          "label": "Disable image zooming"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ru.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ru.json
new file mode 100644
index 0000000000000000000000000000000000000000..10cd18be75b4f6d9ba9f2ee5a037ddbd401ae4a4
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/ru.json
@@ -0,0 +1,211 @@
+{
+  "semantics": [
+    {
+      "label": "Медиа",
+      "fields": [
+        {
+          "label": "Тип",
+          "description": "Дополнительное медиа для отображения над вопросом."
+        },
+        {
+          "label": "Отключить изменение масштаба изображения"
+        }
+      ]
+    },
+    {
+      "label": "Описание задачи",
+      "default": "Заполните пропущенные слова",
+      "description": "Руководство, рассказывающее пользователю, как ответить на это задание."
+    },
+    {
+      "label": "Текстовые блоки",
+      "entity": "текстовый блок",
+      "field": {
+        "label": "Строка текста",
+        "placeholder": "Oslo is the capital of *Norway*.",
+        "description": "",
+        "important": {
+          "description": "<ul><li>Поля заполняются со звездочкой (*) спереди и позади правильного слова/фразы.</li><li>Дополнительные варианты ответов отделяются косой чертой (/).</li><li>Вы можете добавить текстовую подсказку, используя двоеточие (:) перед подсказкой.</li></ul>",
+          "example": "H5P content may be edited using a *browser/web-browser:Something you use every day*."
+        }
+      }
+    },
+    {
+      "label": "Общий отзыв",
+      "fields": [
+        {
+          "widgets": [
+            {
+              "label": "По умолчанию"
+            }
+          ],
+          "label": "Определение пользовательских отзывов для любого диапазона оценок",
+          "description": "Нажмите на кнопку \"Добавить диапазон\" чтобы добавить столько диапазонов, сколько вам нужно. Например: 0-20% Плохая оценка, 21-91% Средняя оценка, 91-100% Отличная оценка!",
+          "entity": "диапазон",
+          "field": {
+            "fields": [
+              {
+                "label": "Диапазон оценок"
+              },
+              {},
+              {
+                "label": "Обратная связь для определенного диапазона оценок",
+                "placeholder": "Заполните отзыв"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    {
+      "label": "Текст для кнопки \"Показать решения\"",
+      "default": "Показать решения"
+    },
+    {
+      "label": "Текст для кнопки \"Повторить\"",
+      "default": "Повторить"
+    },
+    {
+      "label": "Текст для кнопки \"Проверить\"",
+      "default": "Проверить"
+    },
+    {
+      "label": "Текст для сообщения \"Не заполнено\"",
+      "default": "Пожалуйста, заполните все поля для просмотра решения"
+    },
+    {
+      "label": "Текст для сообщения \"':ans' правильный\"",
+      "default": "':ans' правильный"
+    },
+    {
+      "label": "Текст для сообщения \"':ans' неправильный\"",
+      "default": "':ans' неправильный"
+    },
+    {
+      "label": "Текст для сообщения \"Ответили правильно\" message",
+      "default": "Ответили правильно"
+    },
+    {
+      "label": "Текст для сообщения \"Ответили неправильно\" message",
+      "default": "Ответили неправильно"
+    },
+    {
+      "label": "Вспомогательная надпись для решения",
+      "default": "Правильный ответ:"
+    },
+    {
+      "label": "Вспомогательная надпись для поля ввода",
+      "description": "Используйте @num и @total чтобы заменить текущий номер пропуска и общее количество пропусков",
+      "default": "Заполнено пропусков @num из @total"
+    },
+    {
+      "label": "Assistive technology label for saying an input has a tip tied to it",
+      "default": "Доступна подсказка"
+    },
+    {
+      "label": "Надпись иконки подсказки",
+      "default": "Подсказка"
+    },
+    {
+      "label": "Настройки поведения.",
+      "description": "Эти параметры позволят вам контролировать поведение задания.",
+      "fields": [
+        {
+          "label": "Включить кнопку \"Повторить\""
+        },
+        {
+          "label": "Включить кнопку \"Показать решение\""
+        },
+        {
+          "label": "Включить кнопку \"Проверить\""
+        },
+        {
+          "label": "Автоматически проверять ответы после ввода"
+        },
+        {
+          "label": "С учетом регистра",
+          "description": "Убедитесь, что пользовательский ввод должен быть точно таким же, как и ответ."
+        },
+        {
+          "label": "Требовать заполнить все поля, прежде чем можно будет посмотреть решение"
+        },
+        {
+          "label": "Помещать поля ввода в отдельные строки"
+        },
+        {
+          "label": "Показать диалог подтверждения на \"Проверить\"",
+          "description": "Эти параметры не совместимы с опцией \"Автоматически проверять ответы после ввода\""
+        },
+        {
+          "label": "Показать диалог подтверждения на \"Повторить\""
+        },
+        {
+          "label": "Позволять незначительные орфографические ошибки",
+          "description": "Если активирован, ответ также будет считаться правильным с незначительными орфографическими ошибками (3-9 знаков: 1 орфографическая ошибка, более 9 знаков: 2 орфографические ошибки)"
+        }
+      ]
+    },
+    {
+      "label": "Диалог подтверждения проверки",
+      "fields": [
+        {
+          "label": "Текст заголовка",
+          "default": "Завершить ?"
+        },
+        {
+          "label": "Основной текст",
+          "default": "Вы уверены, что хотите завершить ?"
+        },
+        {
+          "label": "Надпись кнопки отмены",
+          "default": "Отменить"
+        },
+        {
+          "label": "Надпись кнопки подтверждения",
+          "default": "Завершить"
+        }
+      ]
+    },
+    {
+      "label": "Диалог подтверждения повтора",
+      "fields": [
+        {
+          "label": "Текст заголовка",
+          "default": "Повторить ?"
+        },
+        {
+          "label": "Основной текст",
+          "default": "Вы уверены, что хотите повторить ?"
+        },
+        {
+          "label": "Надпись кнопки отмены",
+          "default": "Отменить"
+        },
+        {
+          "label": "Надпись кнопки подтверждения",
+          "default": "Подтвердить"
+        }
+      ]
+    },
+    {
+      "label": "Текстовое представление шкалы очков для тех, кто использует озвучку текста",
+      "default": "Вы получили :num из :total баллов"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sl.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sl.json
new file mode 100644
index 0000000000000000000000000000000000000000..64a093248870f042b5234bc3a34a6f2585e8bf01
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sl.json
@@ -0,0 +1,211 @@
+{
+  "semantics": [
+    {
+      "label": "Mediji",
+      "fields": [
+        {
+          "label": "Tip",
+          "description": "Neobvezna nastavitev dodatnega medija za prikaz nad vprašanjem."
+        },
+        {
+          "label": "Onemogoči povečavo slike"
+        }
+      ]
+    },
+    {
+      "label": "Navodilo udeležencem",
+      "default": "Vnesi manjkajoče besede",
+      "description": "Opis reševanja zadane naloge."
+    },
+    {
+      "label": "Odstavek z besedilom",
+      "entity": "odstavek",
+      "field": {
+        "label": "Besedilo naloge",
+        "placeholder": "Oslo je glavno mesto *Norveške*.",
+        "description": "",
+        "important": {
+          "description": "<ul><li>Prazno polje se označi z zvezdico (*) pred in za besedo/besedno zvezo.</li><li>Nadomestni odgovor se loči s poševnico (/).</li><li>Namig za udeležence se od odgovora loči z dvopičjem (:).</li></ul>",
+          "example": "Za brskanje po spletu lahko uporabimo *brskalnik/spletni brskalnik:Takšen program je na primer Chrome*."
+        }
+      }
+    },
+    {
+      "label": "Splošna povratna informacija",
+      "fields": [
+        {
+          "widgets": [
+            {
+              "label": "Privzeto"
+            }
+          ],
+          "label": "Določi ločeno povratno informacijo za vsak razpon rezultatov",
+          "description": "Kliknite gumb \"Dodaj razpon\" za dodajanje dodatnih razponov. Primer: 0-20 % Slab rezultat, 21-91 % Povprečen rezultat, 91-100 % Odličen rezultat!",
+          "entity": "razpon",
+          "field": {
+            "fields": [
+              {
+                "label": "Razpon rezultatov"
+              },
+              {},
+              {
+                "label": "Povratna informacija za definiran razpon rezultatov",
+                "placeholder": "Vnesite povratno informacijo"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    {
+      "label": "Besedilo za gumb \"Prikaži rešitev\"",
+      "default": "Prikaži rešitev"
+    },
+    {
+      "label": "Besedilo za gumb \"Poskusi ponovno\"",
+      "default": "Poskusi ponovno"
+    },
+    {
+      "label": "Besedilo za gumb \"Preveri\"",
+      "default": "Preveri"
+    },
+    {
+      "label": "Besedilo za manjkajoč odgovor",
+      "default": "Pred ogledom rešitve je potrebno izpolniti vsa prazna polja"
+    },
+    {
+      "label": "Besedilo za sporočilo \"... je pravilen\" (:ans je spremenljivka)",
+      "default": "':ans' je pravilen"
+    },
+    {
+      "label": "Besedilo za sporočilo \"... ni pravilen\" (:ans je spremenljivka)",
+      "default": "':ans' ni pravilen"
+    },
+    {
+      "label": "Besedilo za pravilni odgovor",
+      "default": "Pravilno!"
+    },
+    {
+      "label": "Besedilo za nepravilni odgovor",
+      "default": "Nepravilno!"
+    },
+    {
+      "label": "Besedilo, ki ga bralnik zaslona uporabi za izražanje rešitev naloge",
+      "default": "Pravilni odgovori:"
+    },
+    {
+      "label": "Besedilo, ki ga bralnik zaslona uporabi za vnosno polje",
+      "description": "Spremenljivki za oznako vnosnih polj sta @num in @total.",
+      "default": "Vnosno polje @num od @total"
+    },
+    {
+      "label": "Besedilo, ki ga bralnik zaslona uporabi za izražanje dosegljivosti namiga",
+      "default": "Namig je na voljo"
+    },
+    {
+      "label": "Besedilo za ikono namiga",
+      "default": "Namig"
+    },
+    {
+      "label": "Nastavitve interakcije",
+      "description": "Nastavitve omogočajo nadzor nad interakcijo aktivnosti za udeležence.",
+      "fields": [
+        {
+          "label": "Omogoči gumb \"Poskusi ponovno\""
+        },
+        {
+          "label": "Omogoči gumb \"Prikaži rešitev\""
+        },
+        {
+          "label": "Omogoči gumb \"Preveri\""
+        },
+        {
+          "label": "Sprotno preverjaj vnesene odgovore"
+        },
+        {
+          "label": "Loči velike/male črke",
+          "description": "Razlikuje med zapisom v velikih ali malih tiskanih črkah."
+        },
+        {
+          "label": "Pred ogledom rešitve zahtevaj vse odgovore"
+        },
+        {
+          "label": "Vnosna polja zapiši v ločenih vrsticah"
+        },
+        {
+          "label": "Pred zaključkom aktivnosti zahtevaj potrditev",
+          "description": "Možnost se izključuje z izbiro \"Sprotno preverjaj vnesene odgovore\"."
+        },
+        {
+          "label": "Pred ponovitvijo aktivnosti zahtevaj potrditev"
+        },
+        {
+          "label": "Toleriraj manjše napake",
+          "description": "Nastavitev tolerance in upoštevanje pravilnosti odgovora kljub manjšim napakam (npr. 1 napačen znak v besedah med 3 do 9 znaki, 2 napačna znaka v besedah dolgih nad 9 znakov)."
+        }
+      ]
+    },
+    {
+      "label": "Pogovorno okno pred oddajo odgovora",
+      "fields": [
+        {
+          "label": "Naslov",
+          "default": "Zaključi?"
+        },
+        {
+          "label": "Besedilo telesa pogovornega okna",
+          "default": "Ste prepričani, da želite zaključiti?"
+        },
+        {
+          "label": "Besedilo gumba Prekliči",
+          "default": "Prekliči"
+        },
+        {
+          "label": "Besedilo gumba Potrdi",
+          "default": "Potrdi"
+        }
+      ]
+    },
+    {
+      "label": "Pogovorno okno pred ponovitvijo aktivnosti",
+      "fields": [
+        {
+          "label": "Naslov",
+          "default": "Poskusi ponovno?"
+        },
+        {
+          "label": "Besedilo telesa pogovornega okna",
+          "default": "Ste prepričani, da želite poskusiti ponovno?"
+        },
+        {
+          "label": "Besedilo gumba Prekliči",
+          "default": "Prekliči"
+        },
+        {
+          "label": "Besedilo gumba Potrdi",
+          "default": "Potrdi"
+        }
+      ]
+    },
+    {
+      "label": "Besedilo, ki ga bralnik zaslona uporabi za izražanje napredka",
+      "default": "Napredek :num od :total"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ko.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sma.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ko.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sma.json
index eeb1c37342dd564b925a3bd02275843d79e8792a..21166c6516afcf51bf40327ec0687d410e076a7c 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/ko.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sma.json
@@ -6,6 +6,9 @@
         {
           "label": "Type",
           "description": "Optional media to display above the question."
+        },
+        {
+          "label": "Disable image zooming"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/cs.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sme.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/cs.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sme.json
index eeb1c37342dd564b925a3bd02275843d79e8792a..21166c6516afcf51bf40327ec0687d410e076a7c 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/cs.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sme.json
@@ -6,6 +6,9 @@
         {
           "label": "Type",
           "description": "Optional media to display above the question."
+        },
+        {
+          "label": "Disable image zooming"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/he.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/smj.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/he.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/smj.json
index eeb1c37342dd564b925a3bd02275843d79e8792a..21166c6516afcf51bf40327ec0687d410e076a7c 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/he.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/smj.json
@@ -6,6 +6,9 @@
         {
           "label": "Type",
           "description": "Optional media to display above the question."
+        },
+        {
+          "label": "Disable image zooming"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/sr.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sr.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/sr.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sr.json
index eeb1c37342dd564b925a3bd02275843d79e8792a..21166c6516afcf51bf40327ec0687d410e076a7c 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/sr.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sr.json
@@ -6,6 +6,9 @@
         {
           "label": "Type",
           "description": "Optional media to display above the question."
+        },
+        {
+          "label": "Disable image zooming"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/sv.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sv.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/sv.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sv.json
index eeb1c37342dd564b925a3bd02275843d79e8792a..21166c6516afcf51bf40327ec0687d410e076a7c 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/sv.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/sv.json
@@ -6,6 +6,9 @@
         {
           "label": "Type",
           "description": "Optional media to display above the question."
+        },
+        {
+          "label": "Disable image zooming"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/tr.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/tr.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/tr.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/tr.json
index 080af71cb8bf76d806264bda4c3345e8a5ea2e39..8442cd5dcf18f0079c967350df8c879d5d52a1a1 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/tr.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/tr.json
@@ -6,6 +6,9 @@
         {
           "label": "Yazınız",
           "description": "Soru üzerinde görüntülenecek isteğe bağlı ortam."
+        },
+        {
+          "label": "Disable image zooming"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/uk.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/uk.json
new file mode 100644
index 0000000000000000000000000000000000000000..f1affe96c64b0bfced496a20a567b7dabb955d3e
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/uk.json
@@ -0,0 +1,211 @@
+{
+  "semantics": [
+    {
+      "label": "Медіа",
+      "fields": [
+        {
+          "label": "Тип",
+          "description": "Додаткове медіа для відображення над завданням."
+        },
+        {
+          "label": "Відключити зміну маштабу зображення"
+        }
+      ]
+    },
+    {
+      "label": "Опис завдання",
+      "default": "Заповніть пропущені слова",
+      "description": "Інструкція для користувача як відповісти на це завдання."
+    },
+    {
+      "label": "Текстові блоки",
+      "entity": "текстовий блок",
+      "field": {
+        "label": "Рядок тексту",
+        "placeholder": "Київ столиця *України*.",
+        "description": "",
+        "important": {
+          "description": "<ul><li>Пропуски добавляються із ззірочкою (*) спереду та ззаду правильного слова/фрази.</li><li>Додаткові варіанти відповідей відділяються косою рискою (/).</li><li>Ви можете добавити текстову підказку, використовуючи двокрапку (:) перед підказкою.</li></ul>",
+          "example": "Вміст H5P можна редагувати за допомогою *браузера/веб-браузера: те, що ви використовуєте щодня*."
+        }
+      }
+    },
+    {
+      "label": "Загальний відгук",
+      "fields": [
+        {
+          "widgets": [
+            {
+              "label": "По умовчанню"
+            }
+          ],
+          "label": "Визначення користувацьких відгуків для будь якого діапазону оцінок",
+          "description": "Натисніть на кнопку \"Добавити діапазон\" щоб добавити стільки діапазонів, скільки вам потрібно. Наприклад: 0-20% Погана оцінка, 21-91% Середня оцінка, 91-100% Відмінна оцінка!",
+          "entity": "діапазон",
+          "field": {
+            "fields": [
+              {
+                "label": "Діапазон оцінок"
+              },
+              {},
+              {
+                "label": "Зворотній зв'язок для певного діапазону оцінок",
+                "placeholder": "Заповніть відгук"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    {
+      "label": "Текст для кнопки \"Показати відповідь\"",
+      "default": "Показати відповіді"
+    },
+    {
+      "label": "Текст для кнопки \"Повторити\"",
+      "default": "Повторити"
+    },
+    {
+      "label": "Текст для кнопки \"Перевірити\"",
+      "default": "Перевірити"
+    },
+    {
+      "label": "Текст для повідомлення \"Не заповнено\"",
+      "default": "Будь ласка, заповни всі поля для перегляду відповіді"
+    },
+    {
+      "label": "Текст для повідомлення \"':ans' правильний\"",
+      "default": "':ans' правильний"
+    },
+    {
+      "label": "Текст для повідомлення \"':ans' неправильний\"",
+      "default": "':ans' неправильний"
+    },
+    {
+      "label": "Текст для повідомлення \"Відповіли правильно\" message",
+      "default": "Відповіли правильно"
+    },
+    {
+      "label": "Текст для повідомлення \"Відповіли неправильно\" message",
+      "default": "Відповіли неправильно"
+    },
+    {
+      "label": "Допоміжний надпис для відповіді",
+      "default": "Правильна відповідь:"
+    },
+    {
+      "label": "Допоміжний надпис для поля введення",
+      "description": "Використовуйте @num і @total щоб замінити поточний номер пропуску і загальну кількість пропусків",
+      "default": "Заповнено пропусків @num із @total"
+    },
+    {
+      "label": "Значок допоміжної технології для вимови введення",
+      "default": "Доступна підказка"
+    },
+    {
+      "label": "Надпис значка підказки",
+      "default": "Підказка"
+    },
+    {
+      "label": "Налаштування поведінки.",
+      "description": "Ці параметри дозволят вам контролювати поведінку завдання.",
+      "fields": [
+        {
+          "label": "Увімкнути кнопку \"Повторити\""
+        },
+        {
+          "label": "Увімкнути кнопку \"Показати відповідь\""
+        },
+        {
+          "label": "Увімкнути кнопку \"Перевірити\""
+        },
+        {
+          "label": "Автоматично перевіряти відповіді після введення"
+        },
+        {
+          "label": "С врахуванням регістру",
+          "description": "Впевніться, що введене користувачем має бути точно таким, як і відповідь."
+        },
+        {
+          "label": "Вимагати заповнити всі поля, перед тим, як можна буде переглянути відповідь"
+        },
+        {
+          "label": "Розміщувати поля введення в окремі рядки"
+        },
+        {
+          "label": "Показати діалог підтвердження на \"Перевірити\"",
+          "description": "Цей параметр не сумісний з опцією \"Автоматично перевіряти відповіді після введення\""
+        },
+        {
+          "label": "Показати діалог підтвердження на \"Повторити\""
+        },
+        {
+          "label": "Дозволяди незначні орфографічні помилки",
+          "description": "Якщо активовано, відповідь також буде рахуватися правильною з незначними орфографічними помилками (3-9 знаків: 1 орфографічна помилка, білльше 9 знаків: 2 орфографічні помилки)"
+        }
+      ]
+    },
+    {
+      "label": "Діалог підтвердження перевірки",
+      "fields": [
+        {
+          "label": "Текст заголовку",
+          "default": "Завершити?"
+        },
+        {
+          "label": "Основний текст",
+          "default": "Ви впевнені, що хочете завершити?"
+        },
+        {
+          "label": "Надпис кнопки відміни",
+          "default": "Відмінити"
+        },
+        {
+          "label": "Надпис кнопки підтвердження",
+          "default": "Завершити"
+        }
+      ]
+    },
+    {
+      "label": "Діалог підтвердження повторення",
+      "fields": [
+        {
+          "label": "Текст заголовку",
+          "default": "Повторити?"
+        },
+        {
+          "label": "Основний текст",
+          "default": "Ви впевнені, що хочете повторити?"
+        },
+        {
+          "label": "Надпис кнопки відміни",
+          "default": "Відмінити"
+        },
+        {
+          "label": "Надпис кнопки підтвердження",
+          "default": "Підтвердити"
+        }
+      ]
+    },
+    {
+      "label": "Текстове представлення шкали балів для тих, хто використовує озвучку тексту",
+      "default": "Ви отримали :num із :total балів"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/vi.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/vi.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/vi.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/vi.json
index eeb1c37342dd564b925a3bd02275843d79e8792a..21166c6516afcf51bf40327ec0687d410e076a7c 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/language/vi.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/vi.json
@@ -6,6 +6,9 @@
         {
           "label": "Type",
           "description": "Optional media to display above the question."
+        },
+        {
+          "label": "Disable image zooming"
         }
       ]
     },
@@ -129,9 +132,6 @@
         {
           "label": "Put input fields on separate lines"
         },
-        {
-          "label": "Disable image zooming for question image"
-        },
         {
           "label": "Show confirmation dialog on \"Check\"",
           "description": "This options is not compatible with the \"Automatically check answers after input\" option"
@@ -190,6 +190,22 @@
     {
       "label": "Textual representation of the score bar for those using a readspeaker",
       "default": "You got :num out of :total points"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/zh-hans.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/zh-hans.json
new file mode 100644
index 0000000000000000000000000000000000000000..d4f98cd53a4543e435f11235b15be5379de8dcb2
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/language/zh-hans.json
@@ -0,0 +1,211 @@
+{
+  "semantics": [
+    {
+      "label": "媒体",
+      "fields": [
+        {
+          "label": "类型",
+          "description": "用于显示该问题的可选媒体."
+        },
+        {
+          "label": "禁止图片缩放"
+        }
+      ]
+    },
+    {
+      "label": "任务描述",
+      "default": "填入缺少的词语",
+      "description": "用户如何回答此任务的参考."
+    },
+    {
+      "label": "文字块",
+      "entity": "文字块",
+      "field": {
+        "label": "一行文字",
+        "placeholder": "请在空格填入正确答案  2+3=*4* ",
+        "description": "",
+        "important": {
+          "description": "<ul><li>空格内需要填入正确答案 ,正确答案用星号*括起来 .</li><li>备选答案用/分隔.</li><li>你可以加一个文字提示,在提示前加冒号 : 即可.</li></ul>",
+          "example": "如果 |A| = 3 , 那么 A= *3/-3:有两个答案啊!*. 也就是填3或者-3都算对"
+        }
+      }
+    },
+    {
+      "label": "所有评价",
+      "fields": [
+        {
+          "widgets": [
+            {
+              "label": "默认"
+            }
+          ],
+          "label": "为任何成绩自定义评价",
+          "description": "点击 \"添加成绩档次\" 增加档次. 例如: 0-20% 差, 21-91% 中等, 91-100% 优!",
+          "entity": "档次",
+          "field": {
+            "fields": [
+              {
+                "label": "成绩档次"
+              },
+              {},
+              {
+                "label": "指定成绩档次的评价",
+                "placeholder": "填写评价"
+              }
+            ]
+          }
+        }
+      ]
+    },
+    {
+      "label": " \"显示答案\" 按钮文字",
+      "default": "显示答案"
+    },
+    {
+      "label": "\"重试\" 按钮文字",
+      "default": "重试"
+    },
+    {
+      "label": " \"核对答案\" 按钮文字",
+      "default": "核对答案"
+    },
+    {
+      "label": "\"未填空\" 消息文字",
+      "default": "请完成所有填空后查看答案"
+    },
+    {
+      "label": "\"':ans' is correct\" 消息文字",
+      "default": "':ans' 是对的"
+    },
+    {
+      "label": "\"':ans' is wrong\" 消息文字",
+      "default": "':ans' 是错的"
+    },
+    {
+      "label": "\"回答正确\" 消息文字",
+      "default": "回答正确"
+    },
+    {
+      "label": "\"回答错误\" 消息文字",
+      "default": "回答错误"
+    },
+    {
+      "label": "辅助回答标签",
+      "default": "正确答案:"
+    },
+    {
+      "label": "辅助输入标签",
+      "description": "使用 @num 和 @total 来替代当前填空数和总填空数",
+      "default": "未填空@num 总数 @total"
+    },
+    {
+      "label": "输入框有标签辅助提示",
+      "default": "有提示"
+    },
+    {
+      "label": "提示图标标签",
+      "default": "提示"
+    },
+    {
+      "label": "行为设置",
+      "description": "任务动作参数",
+      "fields": [
+        {
+          "label": "启用 \"重试\""
+        },
+        {
+          "label": "启用 \"显示答案\" 按钮"
+        },
+        {
+          "label": "启用 \"核对答案\" 按钮"
+        },
+        {
+          "label": "输入完成后自动核对答案"
+        },
+        {
+          "label": "大小写敏感",
+          "description": "确保输入和答案完全匹配,注意大小写敏感."
+        },
+        {
+          "label": "您必须回答所有问题才能查看答案"
+        },
+        {
+          "label": "在不同行输入"
+        },
+        {
+          "label": "点击 \"核对答案\"时显示确认对话框",
+          "description": "此选项无法和 \"输入完成后自动核对答案\" 同时使用"
+        },
+        {
+          "label": " 点击\"重试\" 时显示确认对话框"
+        },
+        {
+          "label": "允许细微的拼写错误",
+          "description": "如本选项激活, 如果有细微的拼写错误也认为是正确答案 (3-9 字母: 1 个拼写错误, 超过9个字母: 2个拼写错误),估计中文不行"
+        }
+      ]
+    },
+    {
+      "label": "核对答案对话框",
+      "fields": [
+        {
+          "label": "标题文字",
+          "default": "完成 ?"
+        },
+        {
+          "label": "内容文字",
+          "default": "你确定全部完成了?"
+        },
+        {
+          "label": "取消按钮文字",
+          "default": "取消"
+        },
+        {
+          "label": "确认按钮文字",
+          "default": "确认"
+        }
+      ]
+    },
+    {
+      "label": "重试对话框",
+      "fields": [
+        {
+          "label": "标题文字",
+          "default": "重试 ?"
+        },
+        {
+          "label": "内容文字",
+          "default": "你要重来一次吗?"
+        },
+        {
+          "label": "取消按钮文字",
+          "default": "取消"
+        },
+        {
+          "label": "确认按钮文字",
+          "default": "确认"
+        }
+      ]
+    },
+    {
+      "label": "使用讲读器的成绩栏文字",
+      "default": "你得到了 :num 分,总分为 :total 分"
+    },
+    {
+      "label": "Assistive technology description for \"Check\" button",
+      "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered."
+    },
+    {
+      "label": "Assistive technology description for \"Show Solution\" button",
+      "default": "Show the solution. The task will be marked with its correct solution."
+    },
+    {
+      "label": "Assistive technology description for \"Retry\" button",
+      "default": "Retry the task. Reset all responses and start the task over again."
+    },
+    {
+      "label": "Assistive technology description for starting task",
+      "default": "Checking mode"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/library.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/library.json
similarity index 87%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/library.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/library.json
index b0daac7cf39a9853a7e7f032536caae06d07c926..9356015cd5df350b6d582b1704658f007585a654 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/library.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/library.json
@@ -3,8 +3,8 @@
   "description": "Test your users with fill in the blanks tasks(Cloze tests).",
   "machineName": "H5P.Blanks",
   "majorVersion": 1,
-  "minorVersion": 11,
-  "patchVersion": 3,
+  "minorVersion": 12,
+  "patchVersion": 8,
   "runnable": 1,
   "license": "MIT",
   "author": "Joubel",
@@ -55,6 +55,11 @@
       "machineName": "H5PEditor.RangeList",
       "majorVersion": 1,
       "minorVersion": 0
+    },
+    {
+      "machineName": "H5PEditor.ShowWhen",
+      "majorVersion": 1,
+      "minorVersion": 0
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/presave.js b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/presave.js
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/presave.js
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/presave.js
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/semantics.json b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/semantics.json
similarity index 88%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/semantics.json
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/semantics.json
index 8eb70dcb3dab2f7ab952ba25508ca063a9e6bb40..e5a08d9589a269b4c9f848391144435b7210defe 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/semantics.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/semantics.json
@@ -15,6 +15,23 @@
         ],
         "optional": true,
         "description": "Optional media to display above the question."
+      },
+      {
+        "name": "disableImageZooming",
+        "type": "boolean",
+        "label": "Disable image zooming",
+        "importance": "low",
+        "default": false,
+        "optional": true,
+        "widget": "showWhen",
+        "showWhen": {
+          "rules": [
+            {
+              "field": "type",
+              "equals": "H5P.Image 1.1"
+            }
+          ]
+        }
       }
     ]
   },
@@ -36,7 +53,9 @@
       "ol",
       "h2",
       "h3",
-      "hr"
+      "hr",
+      "pre",
+      "code"
     ]
   },
   {
@@ -64,7 +83,8 @@
         "strong",
         "em",
         "del",
-        "u"
+        "u",
+        "code"
       ]
     }
   },
@@ -298,14 +318,6 @@
         "default": false,
         "optional": true
       },
-      {
-        "label": "Disable image zooming for question image",
-        "importance": "low",
-        "name": "disableImageZooming",
-        "type": "boolean",
-        "default": false,
-        "optional": true
-      },
       {
         "label": "Show confirmation dialog on \"Check\"",
         "importance": "low",
@@ -358,7 +370,8 @@
           "strong",
           "em",
           "del",
-          "u"
+          "u",
+          "code"
         ]
       },
       {
@@ -403,7 +416,8 @@
           "strong",
           "em",
           "del",
-          "u"
+          "u",
+          "code"
         ]
       },
       {
@@ -429,5 +443,37 @@
     "default": "You got :num out of :total points",
     "importance": "low",
     "common": true
+  },
+  {
+    "name": "a11yCheck",
+    "type": "text",
+    "label": "Assistive technology description for \"Check\" button",
+    "default": "Check the answers. The responses will be marked as correct, incorrect, or unanswered.",
+    "importance": "low",
+    "common": true
+  },
+  {
+    "name": "a11yShowSolution",
+    "type": "text",
+    "label": "Assistive technology description for \"Show Solution\" button",
+    "default": "Show the solution. The task will be marked with its correct solution.",
+    "importance": "low",
+    "common": true
+  },
+  {
+    "name": "a11yRetry",
+    "type": "text",
+    "label": "Assistive technology description for \"Retry\" button",
+    "default": "Retry the task. Reset all responses and start the task over again.",
+    "importance": "low",
+    "common": true
+  },
+  {
+    "name": "a11yCheckingModeHeader",
+    "type": "text",
+    "label": "Assistive technology description for starting task",
+    "default": "Checking mode",
+    "importance": "low",
+    "common": true
   }
 ]
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/upgrades.js b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/upgrades.js
similarity index 78%
rename from mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/upgrades.js
rename to mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/upgrades.js
index 8666fbb1cc5a03d902551f1df36e638270b6cd1d..bf3ea18e60aaefaf62dcfcc9d537f40892181bf6 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.11/upgrades.js
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5P.Blanks-1.12/upgrades.js
@@ -95,6 +95,29 @@ H5PUpgrades['H5P.Blanks'] = (function () {
           extras.metadata.title = parameters.text.replace(/<[^>]*>?/g, '');
         }
         finished(null, parameters, extras);
+      },
+      /*
+       * Upgrades content parameters to support Blanks 1.9
+       *
+       * Move disableImageZooming from behaviour to media
+       *
+       * @param {object} parameters
+       * @param {function} finished
+       */
+      12: function (parameters, finished) {
+      // If image has been used, move it down in the hierarchy and add disableImageZooming
+        if (parameters && parameters.media) {
+          parameters.media = {
+            type: parameters.media,
+            disableImageZooming: (parameters.behaviour && parameters.behaviour.disableImageZooming) ? parameters.behaviour.disableImageZooming : false
+          };
+        }
+
+        // Delete old disableImageZooming
+        if (parameters && parameters.behaviour) {
+          delete parameters.behaviour.disableImageZooming;
+        }
+        finished(null, parameters);
       }
     }
   };
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5PEditor.ShowWhen-1.0/h5p-show-when.css b/mc_frontend/src/assets/h5p/fill_blanks/H5PEditor.ShowWhen-1.0/h5p-show-when.css
new file mode 100644
index 0000000000000000000000000000000000000000..c998b6e7ff79762ebab5215ac1fa663f9be28c32
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5PEditor.ShowWhen-1.0/h5p-show-when.css
@@ -0,0 +1,3 @@
+.h5p-editor-widget-show-when.hidden {
+  display: none;
+}
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5PEditor.ShowWhen-1.0/h5p-show-when.js b/mc_frontend/src/assets/h5p/fill_blanks/H5PEditor.ShowWhen-1.0/h5p-show-when.js
new file mode 100644
index 0000000000000000000000000000000000000000..4a0c32c22d5628e33ba349ae0935d6cac2de0ebf
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5PEditor.ShowWhen-1.0/h5p-show-when.js
@@ -0,0 +1,153 @@
+H5PEditor.ShowWhen = (function ($) {
+
+  // Handler for the 'select' semantics type
+  function SelectHandler(field, equals) {
+    this.satisfied = function () {
+      return (equals.indexOf(field.value) !== -1);
+    };
+  }
+
+  // Handler for the 'library' semantics type
+  function LibraryHandler(field, equals) {
+    this.satisfied = function () {
+      var value;
+      if (field.currentLibrary !== undefined) {
+        value = field.currentLibrary.split(' ')[0];
+      }
+      return (equals.indexOf(value) !== -1);
+    };
+  }
+
+  function BooleanHandler(field, equals) {
+    this.satisfied = function () {
+      return field.value === equals;
+    };
+  }
+
+  // Factory method for creating handlers
+  // "library", "select" and "boolean" semantics types supported so far
+  function createFieldHandler(field, equals) {
+    if (field.field.type === 'library') {
+      return new LibraryHandler(field, equals);
+    }
+    else if (field.field.type === 'select') {
+      return new SelectHandler(field, equals);
+    }
+    else if (field.field.type === 'boolean') {
+      return new BooleanHandler(field, equals);
+    }
+  }
+
+  // Handling rules
+  function RuleHandler(type) {
+    var TYPE_AND = 'and';
+    var TYPE_OR = 'or';
+    var handlers = [];
+
+    type = type || TYPE_OR;
+
+    this.add = function (handler) {
+      handlers.push(handler);
+    };
+
+    // Check if rules are satisfied
+    this.rulesSatisfied = function () {
+      for (var i = 0; i < handlers.length; i++) {
+        // check if rule was hit
+        var ruleHit = handlers[i].satisfied();
+
+        if (ruleHit && type === TYPE_OR) {
+          return true;
+        }
+        else if (type === TYPE_AND && !ruleHit) {
+          return false;
+        }
+      }
+
+      return false;
+    };
+  }
+
+  // Main widget class constructor
+  function ShowWhen(parent, field, params, setValue) {
+    var self = this;
+
+    self.field = field;
+    // Outsource readies
+    self.passReadies = true;
+    self.value = params;
+
+    // Create the wrapper:
+    var $wrapper = $('<div>', {
+      'class': 'field h5p-editor-widget-show-when'
+    });
+    var showing = false;
+    var config = self.field.showWhen;
+
+    if (config === undefined) {
+      throw new Error('You need to set the showWhen property in semantics.json when using the showWhen widget');
+    }
+
+    var ruleHandler = new RuleHandler(config.type);
+
+    for (var i = 0; i < config.rules.length; i++) {
+      var rule = config.rules[i];
+      var targetField = H5PEditor.findField(rule.field, parent);
+      var handler = createFieldHandler(targetField, rule.equals);
+
+      if (handler !== undefined) {
+        ruleHandler.add(handler);
+        H5PEditor.followField(parent, rule.field, config.detach ? function () {
+          if (showing != ruleHandler.rulesSatisfied()) {
+            showing = !showing;
+            if (showing) {
+              $wrapper.appendTo(self.$container);
+            }
+            else {
+              $wrapper.detach();
+            }
+          }
+        } : function () {
+          showing = ruleHandler.rulesSatisfied();
+          $wrapper.toggleClass('hidden', !showing);
+        });
+      }
+    }
+
+    // Create the real field:
+    var widgetName = config.widget || field.type;
+    var fieldInstance = new H5PEditor.widgets[widgetName](parent, field, params, setValue);
+    fieldInstance.appendTo($wrapper);
+
+    /**
+     * Add myself to the DOM
+     *
+     * @public
+     * @param {H5P.jQuery} $container
+     */
+    self.appendTo = function ($container) {
+      if (!config.detach) {
+        $wrapper.appendTo($container);
+      }
+      self.$container = $container;
+    };
+
+    /**
+     * Validate
+     *
+     * @public
+     * @return {boolean}
+     */
+    self.validate = function () {
+      // Only validate if field is shown!
+      return showing ? fieldInstance.validate() : true;
+    };
+
+    self.remove = function () {};
+  }
+
+  return ShowWhen;
+})(H5PEditor.$);
+
+// Register widget
+H5PEditor.widgets.showWhen = H5PEditor.ShowWhen;
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/H5PEditor.ShowWhen-1.0/library.json b/mc_frontend/src/assets/h5p/fill_blanks/H5PEditor.ShowWhen-1.0/library.json
new file mode 100644
index 0000000000000000000000000000000000000000..b0afef45da0dcf7efbd2f1b2b6b5b6b383d81da5
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/H5PEditor.ShowWhen-1.0/library.json
@@ -0,0 +1,20 @@
+{
+  "machineName": "H5PEditor.ShowWhen",
+  "title": "Toggle visibility of a field based on rules",
+  "license": "MIT",
+  "author": "fnoks",
+  "majorVersion": 1,
+  "minorVersion": 0,
+  "patchVersion": 5,
+  "runnable": 0,
+  "preloadedJs": [
+    {
+      "path": "h5p-show-when.js"
+    }
+  ],
+  "preloadedCss": [
+    {
+      "path": "h5p-show-when.css"
+    }
+  ]
+}
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/10_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/10_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/10_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/10_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/10_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/10_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/10_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/10_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/11_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/11_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/11_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/11_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/11_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/11_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/11_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/11_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/12_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/12_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/12_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/12_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/12_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/12_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/12_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/12_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/13_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/13_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/13_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/13_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/13_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/13_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/13_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/13_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/14_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/14_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/14_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/14_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/14_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/14_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/14_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/14_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/15_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/15_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/15_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/15_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/15_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/15_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/15_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/15_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/16_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/16_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/16_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/16_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/16_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/16_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/16_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/16_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/1_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/1_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/1_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/1_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/1_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/1_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/1_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/1_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/2_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/2_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/2_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/2_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/2_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/2_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/2_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/2_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/3_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/3_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/3_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/3_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/3_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/3_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/3_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/3_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/4_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/4_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/4_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/4_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/4_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/4_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/4_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/4_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/5_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/5_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/5_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/5_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/5_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/5_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/5_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/5_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/6_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/6_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/6_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/6_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/6_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/6_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/6_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/6_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/7_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/7_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/7_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/7_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/7_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/7_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/7_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/7_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/8_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/8_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/8_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/8_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/8_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/8_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/8_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/8_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/9_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/9_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/9_de.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/9_de.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/9_en.json b/mc_frontend/src/assets/h5p/fill_blanks/content/callidus/9_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/fill_blanks/content/9_en.json
rename to mc_frontend/src/assets/h5p/fill_blanks/content/callidus/9_en.json
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/content/potsdam/1_de.json b/mc_frontend/src/assets/h5p/fill_blanks/content/potsdam/1_de.json
new file mode 100644
index 0000000000000000000000000000000000000000..02808c5c3d34a02d4455154759a4dd17f70dfa66
--- /dev/null
+++ b/mc_frontend/src/assets/h5p/fill_blanks/content/potsdam/1_de.json
@@ -0,0 +1 @@
+{"media":{"disableImageZooming":false},"text":"<p><strong>Tragen Sie die jeweils korrekte \u00dcbersetzung ein!&nbsp;<\/strong><\/p>\n\n<p><em><u>Hinweis:<\/u> Aus technischen Gr\u00fcnden k\u00f6nnen nur die jeweiligen auf dem Methodenblatt angef\u00fchrten \u00dcbersetzungen als richtig gewertet werden. Nur eine \u00dcbersetzungsvariante pro L\u00fccke ist zul\u00e4ssig.&nbsp;<\/em><\/p>\n","overallFeedback":[{"from":0,"to":100}],"showSolutions":"L\u00f6sung anzeigen","tryAgain":"Wiederholen","checkAnswer":"\u00dcberpr\u00fcfen","notFilledOut":"Bitte f\u00fclle alle L\u00fccken aus, um die L\u00f6sung ansehen zu k\u00f6nnen","answerIsCorrect":"&#039;:ans&#039; ist korrekt","answerIsWrong":"&#039;:ans&#039; ist falsch","answeredCorrectly":"Korrekt beantwortet","answeredIncorrectly":"Falsch beantwortet","solutionLabel":"Korrekte Antwort:","inputLabel":"L\u00fccke @num von @total","inputHasTipLabel":"Tipp verf\u00fcgbar","tipLabel":"Tipp","behaviour":{"enableRetry":true,"enableSolutionsButton":false,"enableCheckButton":true,"autoCheck":false,"caseSensitive":false,"showSolutionsRequiresInput":false,"separateLines":true,"confirmCheckDialog":false,"confirmRetryDialog":false,"acceptSpellingErrors":false},"scoreBarLabel":"Du hast :num von :total Punkten erreicht.","confirmCheck":{"header":"Beenden?","body":"Ganz sicher beenden?","cancelLabel":"Abbrechen","confirmLabel":"Beenden"},"confirmRetry":{"header":"Wiederholen?","body":"Ganz sicher wiederholen?","cancelLabel":"Abbrechen","confirmLabel":"Best\u00e4tigen"},"questions":["<p>aedificium *Geb\u00e4ude*<\/p>\n\n<p>animus *Sinn\/Gem\u00fct\/Verstand\/innere Haltung*<\/p>\n\n<p>rogare *fragen\/bitten*<\/p>\n\n<p>mirus *seltsam\/wunderlich\/wunderbar*<\/p>\n\n<p>appropinquare *sich n\u00e4hern*<\/p>\n\n<p>quando *wann?\/wann*<\/p>\n\n<p>nonnulli *einige*<\/p>\n\n<p>perantiquus *sehr alt\/uralt*<\/p>\n\n<p>administrare *verwalten\/lenken*<\/p>\n\n<p>satis *genug\/ausreichend*<\/p>\n\n<p>dubitare *z\u00f6gern*<\/p>\n\n<p>explicare *erkl\u00e4ren\/erl\u00e4utern*<\/p>\n\n<p>debere *sollen\/m\u00fcssen\/verdanken\/schulden*<\/p>\n\n<p>velut *wie\/wie zum Beispiel\/ wie z. B.*<\/p>\n\n<p>deinde *sodann\/darauf\/damals*<\/p>\n\n<p>consultare *sich beraten\/beratschlagen*<\/p>\n\n<p>visitare *besuchen*<\/p>\n\n<p>laetus *froh\/fr\u00f6hlich*<\/p>\n\n<p>magnificus *gro\u00dfartig\/pr\u00e4chtig*<\/p>\n\n<p>nonne *denn nicht\/etwa nicht*<\/p>\n"]}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/fill_blanks/h5p.json b/mc_frontend/src/assets/h5p/fill_blanks/h5p.json
index 8213f62f46b0ebe50916d0e0f147146e14ff977a..6859d676013abb0e227f3708295fde27f20201fd 100644
--- a/mc_frontend/src/assets/h5p/fill_blanks/h5p.json
+++ b/mc_frontend/src/assets/h5p/fill_blanks/h5p.json
@@ -1,61 +1 @@
-{
-  "title": "Fill in the Blanks",
-  "language": "und",
-  "mainLibrary": "H5P.Blanks",
-  "embedTypes": [
-    "div"
-  ],
-  "license": "U",
-  "preloadedDependencies": [
-    {
-      "machineName": "H5P.ConfirmationDialog",
-      "majorVersion": "1",
-      "minorVersion": "0"
-    },
-    {
-      "machineName": "H5P.Blanks",
-      "majorVersion": "1",
-      "minorVersion": "11"
-    },
-    {
-      "machineName": "FontAwesome",
-      "majorVersion": "4",
-      "minorVersion": "5"
-    },
-    {
-      "machineName": "H5P.JoubelUI",
-      "majorVersion": "1",
-      "minorVersion": "3"
-    },
-    {
-      "machineName": "H5P.Transition",
-      "majorVersion": "1",
-      "minorVersion": "0"
-    },
-    {
-      "machineName": "Drop",
-      "majorVersion": "1",
-      "minorVersion": "0"
-    },
-    {
-      "machineName": "Tether",
-      "majorVersion": "1",
-      "minorVersion": "0"
-    },
-    {
-      "machineName": "H5P.FontIcons",
-      "majorVersion": "1",
-      "minorVersion": "0"
-    },
-    {
-      "machineName": "H5P.Question",
-      "majorVersion": "1",
-      "minorVersion": "4"
-    },
-    {
-      "machineName": "H5P.TextUtilities",
-      "majorVersion": "1",
-      "minorVersion": "3"
-    }
-  ]
-}
+{"title":"Test: Listen-Lernen","language":"und","mainLibrary":"H5P.Blanks","embedTypes":["div"],"license":"U","defaultLanguage":"de","preloadedDependencies":[{"machineName":"H5P.Blanks","majorVersion":"1","minorVersion":"12"},{"machineName":"FontAwesome","majorVersion":"4","minorVersion":"5"},{"machineName":"H5P.Question","majorVersion":"1","minorVersion":"4"},{"machineName":"H5P.JoubelUI","majorVersion":"1","minorVersion":"3"},{"machineName":"H5P.Transition","majorVersion":"1","minorVersion":"0"},{"machineName":"Drop","majorVersion":"1","minorVersion":"0"},{"machineName":"Tether","majorVersion":"1","minorVersion":"0"},{"machineName":"H5P.FontIcons","majorVersion":"1","minorVersion":"0"},{"machineName":"H5P.TextUtilities","majorVersion":"1","minorVersion":"3"}]}
\ No newline at end of file
diff --git a/mc_frontend/src/assets/h5p/mark_words/content/1_de.json b/mc_frontend/src/assets/h5p/mark_words/content/callidus/1_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/mark_words/content/1_de.json
rename to mc_frontend/src/assets/h5p/mark_words/content/callidus/1_de.json
diff --git a/mc_frontend/src/assets/h5p/mark_words/content/1_en.json b/mc_frontend/src/assets/h5p/mark_words/content/callidus/1_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/mark_words/content/1_en.json
rename to mc_frontend/src/assets/h5p/mark_words/content/callidus/1_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/10_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/10_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/10_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/10_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/10_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/10_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/10_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/10_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/11_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/11_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/11_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/11_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/11_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/11_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/11_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/11_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/12_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/12_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/12_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/12_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/12_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/12_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/12_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/12_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/13_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/13_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/13_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/13_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/13_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/13_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/13_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/13_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/14_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/14_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/14_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/14_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/14_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/14_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/14_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/14_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/15_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/15_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/15_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/15_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/15_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/15_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/15_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/15_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/16_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/16_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/16_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/16_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/16_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/16_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/16_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/16_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/17_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/17_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/17_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/17_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/17_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/17_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/17_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/17_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/18_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/18_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/18_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/18_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/18_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/18_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/18_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/18_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/19_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/19_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/19_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/19_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/1_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/1_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/1_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/1_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/1_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/1_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/1_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/1_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/20_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/20_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/20_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/20_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/20_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/20_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/20_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/20_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/21_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/21_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/21_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/21_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/21_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/21_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/21_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/21_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/22_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/22_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/22_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/22_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/22_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/22_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/22_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/22_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/23_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/23_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/23_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/23_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/23_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/23_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/23_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/23_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/24_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/24_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/24_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/24_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/24_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/24_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/24_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/24_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/2_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/2_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/2_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/2_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/2_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/2_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/2_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/2_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/3_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/3_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/3_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/3_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/3_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/3_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/3_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/3_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/4_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/4_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/4_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/4_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/4_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/4_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/4_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/4_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/5_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/5_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/5_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/5_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/5_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/5_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/5_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/5_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/6_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/6_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/6_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/6_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/6_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/6_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/6_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/6_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/7_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/7_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/7_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/7_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/7_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/7_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/7_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/7_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/8_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/8_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/8_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/8_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/8_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/8_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/8_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/8_en.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/9_de.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/9_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/9_de.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/9_de.json
diff --git a/mc_frontend/src/assets/h5p/multi_choice/content/9_en.json b/mc_frontend/src/assets/h5p/multi_choice/content/callidus/9_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/multi_choice/content/9_en.json
rename to mc_frontend/src/assets/h5p/multi_choice/content/callidus/9_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/10_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/10_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/10_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/10_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/10_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/10_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/10_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/10_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/11_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/11_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/11_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/11_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/11_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/11_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/11_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/11_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/12_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/12_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/12_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/12_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/12_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/12_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/12_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/12_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/16_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/16_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/16_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/16_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/16_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/16_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/16_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/16_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/17_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/17_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/17_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/17_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/17_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/17_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/17_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/17_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/18_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/18_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/18_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/18_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/18_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/18_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/18_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/18_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/1_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/1_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/1_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/1_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/1_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/1_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/1_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/1_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/20_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/20_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/20_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/20_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/20_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/20_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/20_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/20_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/21_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/21_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/21_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/21_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/21_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/21_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/21_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/21_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/22_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/22_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/22_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/22_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/22_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/22_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/22_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/22_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/23_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/23_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/23_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/23_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/23_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/23_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/23_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/23_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/24_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/24_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/24_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/24_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/24_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/24_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/24_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/24_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/25_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/25_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/25_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/25_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/25_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/25_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/25_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/25_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/26_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/26_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/26_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/26_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/26_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/26_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/26_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/26_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/27_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/27_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/27_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/27_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/27_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/27_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/27_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/27_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/28_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/28_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/28_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/28_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/28_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/28_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/28_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/28_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/29_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/29_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/29_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/29_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/29_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/29_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/29_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/29_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/2_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/2_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/2_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/2_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/2_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/2_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/2_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/2_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/30_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/30_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/30_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/30_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/30_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/30_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/30_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/30_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/31_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/31_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/31_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/31_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/31_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/31_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/31_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/31_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/32_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/32_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/32_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/32_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/32_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/32_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/32_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/32_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/33_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/33_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/33_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/33_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/33_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/33_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/33_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/33_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/34_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/34_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/34_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/34_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/34_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/34_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/34_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/34_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/35_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/35_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/35_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/35_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/35_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/35_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/35_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/35_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/36_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/36_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/36_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/36_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/36_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/36_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/36_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/36_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/37_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/37_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/37_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/37_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/37_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/37_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/37_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/37_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/38_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/38_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/38_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/38_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/38_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/38_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/38_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/38_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/39_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/39_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/39_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/39_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/39_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/39_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/39_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/39_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/3_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/3_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/3_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/3_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/3_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/3_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/3_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/3_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/40_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/40_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/40_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/40_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/40_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/40_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/40_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/40_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/41_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/41_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/41_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/41_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/41_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/41_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/41_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/41_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/42_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/42_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/42_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/42_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/42_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/42_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/42_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/42_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/43_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/43_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/43_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/43_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/43_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/43_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/43_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/43_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/44_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/44_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/44_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/44_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/44_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/44_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/44_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/44_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/45_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/45_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/45_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/45_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/45_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/45_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/45_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/45_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/46_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/46_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/46_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/46_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/46_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/46_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/46_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/46_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/47_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/47_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/47_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/47_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/47_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/47_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/47_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/47_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/48_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/48_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/48_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/48_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/48_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/48_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/48_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/48_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/49_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/49_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/49_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/49_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/49_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/49_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/49_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/49_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/4_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/4_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/4_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/4_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/4_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/4_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/4_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/4_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/50_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/50_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/50_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/50_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/50_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/50_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/50_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/50_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/51_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/51_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/51_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/51_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/51_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/51_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/51_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/51_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/52_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/52_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/52_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/52_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/52_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/52_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/52_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/52_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/53_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/53_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/53_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/53_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/53_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/53_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/53_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/53_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/54_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/54_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/54_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/54_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/54_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/54_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/54_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/54_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/55_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/55_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/55_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/55_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/55_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/55_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/55_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/55_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/56_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/56_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/56_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/56_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/56_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/56_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/56_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/56_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/57_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/57_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/57_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/57_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/57_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/57_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/57_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/57_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/58_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/58_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/58_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/58_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/58_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/58_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/58_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/58_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/59_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/59_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/59_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/59_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/59_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/59_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/59_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/59_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/5_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/5_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/5_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/5_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/5_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/5_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/5_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/5_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/60_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/60_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/60_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/60_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/60_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/60_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/60_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/60_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/61_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/61_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/61_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/61_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/61_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/61_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/61_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/61_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/62_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/62_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/62_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/62_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/62_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/62_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/62_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/62_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/63_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/63_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/63_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/63_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/63_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/63_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/63_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/63_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/64_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/64_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/64_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/64_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/64_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/64_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/64_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/64_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/65_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/65_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/65_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/65_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/65_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/65_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/65_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/65_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/66_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/66_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/66_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/66_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/66_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/66_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/66_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/66_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/67_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/67_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/67_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/67_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/67_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/67_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/67_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/67_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/68_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/68_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/68_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/68_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/68_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/68_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/68_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/68_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/69_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/69_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/69_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/69_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/69_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/69_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/69_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/69_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/6_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/6_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/6_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/6_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/6_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/6_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/6_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/6_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/70_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/70_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/70_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/70_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/70_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/70_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/70_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/70_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/71_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/71_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/71_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/71_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/71_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/71_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/71_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/71_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/72_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/72_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/72_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/72_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/72_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/72_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/72_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/72_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/73_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/73_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/73_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/73_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/73_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/73_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/73_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/73_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/74_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/74_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/74_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/74_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/74_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/74_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/74_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/74_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/75_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/75_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/75_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/75_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/75_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/75_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/75_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/75_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/76_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/76_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/76_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/76_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/76_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/76_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/76_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/76_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/77_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/77_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/77_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/77_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/77_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/77_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/77_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/77_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/78_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/78_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/78_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/78_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/78_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/78_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/78_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/78_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/79_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/79_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/79_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/79_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/79_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/79_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/79_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/79_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/7_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/7_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/7_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/7_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/7_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/7_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/7_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/7_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/80_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/80_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/80_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/80_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/80_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/80_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/80_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/80_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/81_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/81_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/81_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/81_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/81_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/81_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/81_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/81_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/82_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/82_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/82_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/82_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/82_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/82_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/82_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/82_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/83_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/83_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/83_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/83_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/83_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/83_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/83_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/83_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/84_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/84_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/84_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/84_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/84_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/84_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/84_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/84_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/85_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/85_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/85_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/85_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/85_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/85_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/85_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/85_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/86_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/86_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/86_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/86_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/86_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/86_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/86_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/86_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/87_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/87_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/87_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/87_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/87_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/87_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/87_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/87_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/88_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/88_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/88_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/88_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/88_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/88_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/88_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/88_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/89_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/89_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/89_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/89_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/89_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/89_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/89_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/89_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/8_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/8_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/8_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/8_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/8_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/8_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/8_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/8_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/90_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/90_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/90_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/90_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/90_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/90_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/90_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/90_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/91_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/91_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/91_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/91_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/91_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/91_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/91_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/91_en.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/9_de.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/9_de.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/9_de.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/9_de.json
diff --git a/mc_frontend/src/assets/h5p/voc_list/content/9_en.json b/mc_frontend/src/assets/h5p/voc_list/content/callidus/9_en.json
similarity index 100%
rename from mc_frontend/src/assets/h5p/voc_list/content/9_en.json
rename to mc_frontend/src/assets/h5p/voc_list/content/callidus/9_en.json
diff --git a/mc_frontend/src/assets/i18n/de.json b/mc_frontend/src/assets/i18n/de.json
index 455bcd613e4a471524ca127b7ed2fed2ef3841c6..eaf09abe257097cb38e08d642747aba3a5d6f0b5 100644
--- a/mc_frontend/src/assets/i18n/de.json
+++ b/mc_frontend/src/assets/i18n/de.json
@@ -287,6 +287,8 @@
   "SEARCH": "Suche",
   "SEARCH_REGEX_MISSING": "Bitte Suchanfrage eingeben...",
   "SEMANTICS": "Semantik",
+  "SEQUENCES": "Übungssequenzen",
+  "SEQUENCES_POTSDAM": "Sequenzen der Uni Potsdam",
   "SHARE": "Teilen",
   "SHOW_TEXT": "Text anzeigen",
   "SHOW_TEXT_TITLE": "Ausgewählte Textpassage",
diff --git a/mc_frontend/src/assets/i18n/en.json b/mc_frontend/src/assets/i18n/en.json
index 925c289cab41e1fff290622d523975b834b4b0c8..6b32f07c19e29ab87ee8d7704609fde9a56abc7b 100644
--- a/mc_frontend/src/assets/i18n/en.json
+++ b/mc_frontend/src/assets/i18n/en.json
@@ -287,6 +287,8 @@
   "SEARCH": "Search",
   "SEARCH_REGEX_MISSING": "Please provide search query...",
   "SEMANTICS": "Semantics",
+  "SEQUENCES": "Exercise Sequences",
+  "SEQUENCES_POTSDAM": "Sequences by Potsdam University",
   "SHARE": "Share",
   "SHOW_TEXT": "Show text",
   "SHOW_TEXT_TITLE": "Selected Text",
diff --git a/mc_frontend/src/configMC.ts b/mc_frontend/src/configMC.ts
index df09def754c37a0b9eaca84d760be9ce24f573bf..99728e09f8c6227712f373c32d6d8df0ad817dd3 100644
--- a/mc_frontend/src/configMC.ts
+++ b/mc_frontend/src/configMC.ts
@@ -33,6 +33,7 @@ export default {
     pageUrlDocSoftware: '/doc-software',
     pageUrlDocVocUnit: '/doc-voc-unit',
     pageUrlEmbed: '/embed',
+    pageUrlExercise: '/exercise',
     pageUrlExerciseList: '/exercise-list',
     pageUrlExerciseParameters: '/exercise-parameters',
     pageUrlHome: '/home',
@@ -41,6 +42,7 @@ export default {
     pageUrlKwic: '/kwic',
     pageUrlPreview: '/preview',
     pageUrlRanking: '/ranking',
+    pageUrlSequences: '/sequences',
     pageUrlShowText: '/show-text',
     pageUrlSemantics: '/semantics',
     pageUrlSources: '/sources',