diff --git a/resources/assets/javascripts/chunks/wysiwyg.js b/resources/assets/javascripts/chunks/wysiwyg.js
index 6f6544ed185e3ef2965126d7a5db8fa8ac66c7fb..580c12d1b7e8659b8674f86e321b3932ae23f3c3 100644
--- a/resources/assets/javascripts/chunks/wysiwyg.js
+++ b/resources/assets/javascripts/chunks/wysiwyg.js
@@ -53,7 +53,6 @@ import Mathematics from 'ckeditor5-math/src/math';
 import StudipA11YDialog, { updateVoiceLabel } from '../cke/studip-a11y-dialog/a11y-dialog.js';
 import StudipBlockQuote from '../cke/studip-quote/StudipBlockQuote.js';
 import StudipUpload from '../cke/StudipUpload.js';
-import StudipWikiLink from '../cke/wiki-link/wiki-link.js';
 import SpecialCharactersEmojiFood from '../cke/special_characters/SpecialCharactersEmojiFood.js';
 import SpecialCharactersEmojiNature from '../cke/special_characters/SpecialCharactersEmojiNature.js';
 import SpecialCharactersEmojiObjects from '../cke/special_characters/SpecialCharactersEmojiObjects.js';
@@ -123,7 +122,6 @@ ClassicEditor.builtinPlugins = [
     Underline,
     FileRepository,
     StudipA11YDialog,
-    StudipWikiLink,
 ];
 
 const customColorPalette = [
diff --git a/resources/assets/javascripts/cke/StudipUpload.js b/resources/assets/javascripts/cke/StudipUpload.js
index 58297da914bfe4b513585c2a6d6999e2b1fda39e..e1d0eceee13212bfd818cd57e6764291164ddc42 100644
--- a/resources/assets/javascripts/cke/StudipUpload.js
+++ b/resources/assets/javascripts/cke/StudipUpload.js
@@ -35,7 +35,9 @@ class StudipUploadAdapter {
 }
 
 export default function StudipUpload(editor) {
-    editor.plugins.get('FileRepository').createUploadAdapter = (loader) => {
-        return new StudipUploadAdapter(loader);
-    };
+    if (editor.plugins.has('FileRepository')) {
+        editor.plugins.get('FileRepository').createUploadAdapter = (loader) => {
+            return new StudipUploadAdapter(loader);
+        };
+    }
 }
diff --git a/resources/assets/javascripts/cke/studip-quote/StudipBlockQuote.js b/resources/assets/javascripts/cke/studip-quote/StudipBlockQuote.js
index b1fc65d89e4ea6e1dc7e6e9138601872cdc3c58c..8b0b739ea80f30592e30de217f0f50f9881dd5e8 100644
--- a/resources/assets/javascripts/cke/studip-quote/StudipBlockQuote.js
+++ b/resources/assets/javascripts/cke/studip-quote/StudipBlockQuote.js
@@ -134,4 +134,8 @@ class RemoveStudipQuoteCommand extends Command {
             });
         }
     }
+
+    static get pluginName() {
+        return 'StudipBlockQuote';
+    }
 }
diff --git a/resources/assets/javascripts/lib/wysiwyg.js b/resources/assets/javascripts/lib/wysiwyg.js
index 17e76ce0637c01806193ef002f5fd647064594c4..c14a0bf58e16eb9ae6cf8272e4b9e9bfcd09021b 100644
--- a/resources/assets/javascripts/lib/wysiwyg.js
+++ b/resources/assets/javascripts/lib/wysiwyg.js
@@ -2,6 +2,7 @@
  * wysiwyg.js - Replace HTML textareas with WYSIWYG editor.
  */
 import parseOptions from './parse_options.js';
+import WikiLink from '../cke/wiki-link/wiki-link.js';
 
 const wysiwyg = {
     // NOTE keep this function in sync with Markup class
@@ -59,8 +60,24 @@ function replaceTextarea(textarea) {
     setEditor(textarea, {});
     const $textarea = textarea instanceof jQuery ? textarea : $(textarea);
 
-    // fetch ckeditor configuration
-    const options = $textarea.attr('data-editor') ? parseOptions($textarea.attr('data-editor')) : null;
+    let options = {};
+    if ($textarea.attr('data-editor')) {
+        const parsed = parseOptions($textarea.attr('data-editor'));
+
+        if (parsed.removePlugins) {
+            options.removePlugins = parsed.removePlugins.split(",")
+        }
+
+        if (parsed.extraPlugins) {
+            const pluginMap = { WikiLink };
+            options.extraPlugins = parsed.extraPlugins.split(",").reduce((memo, plugin) => {
+                if (plugin in pluginMap) {
+                    memo.push(pluginMap[plugin]);
+                }
+                return memo;
+            }, []);
+        }
+    }
 
     return STUDIP.loadChunk('wysiwyg')
         .then(loadMathJax)
@@ -70,10 +87,7 @@ function replaceTextarea(textarea) {
         .then(emitLoadEvent);
 
     function createEditor(ClassicEditor) {
-        // TODO: Das ist einfach nur gehackt.
-        const config = { removePlugins: options?.extraPlugins === 'studip-wiki' ? [] : ['WikiLink'] };
-
-        return ClassicEditor.create(textarea, config);
+        return ClassicEditor.create(textarea, options);
     }
 
     function setEditorInstance(ckeditor) {
diff --git a/templates/wiki/edit.php b/templates/wiki/edit.php
index eb6b356510ba1c555ba72159fdb0b4b7dd300367..3e42108a39d5f2ebbce11b9442e6cda1efe94d40 100644
--- a/templates/wiki/edit.php
+++ b/templates/wiki/edit.php
@@ -12,7 +12,7 @@
         <input type="hidden" name="cmd" value="show">
 
         <br>
-        <textarea name="body" class="wiki-editor add_toolbar wysiwyg size-l" data-editor="extraPlugins=studip-wiki"
+        <textarea name="body" class="wiki-editor add_toolbar wysiwyg size-l" data-editor="extraPlugins=WikiLink"
         ><?= wysiwygReady($body) ?></textarea>
     </fieldset>