diff --git a/src/core/js/ext_editmode_wysiwyg_text.js b/src/core/js/ext_editmode_wysiwyg_text.js
index e5840d65000204b441630380704740779977e4bb..4470619e84b450b7dfd324c80854d5dd967cd640 100644
--- a/src/core/js/ext_editmode_wysiwyg_text.js
+++ b/src/core/js/ext_editmode_wysiwyg_text.js
@@ -64,40 +64,9 @@ var ext_editmode_wysiwyg_text = function ($, logger, ClassicEditor, edit_mode, g
             logger.debug('Initialized editor for ' + getPropertyName(prop));
             // Manually implement saving the data since edit mode is not
             // a form to be submitted.
-            _callOnSave.push(() => { editor.updateSourceElement() });
-            //editor.model.document.on("change:data", (e) => {
-
-                //// console.log(editor.getData());
-                //// console.log(editor.sourceElement.value);
-                //console.log(editor.getData() != editor.sourceElement.value);
-                //if (editor.getData() != editor.sourceElement.value) {
-                    //console.log("Saving editor...");
-                    //editor.updateSourceElement();
-                //}
-            //});
-            // TODO(fspreck): Add an event listener to save also changes made in
-            // source mode. What event can we listen to? The following doesn't
-            // work either.
-            // document.body.addEventListener("input", e => {
-            //     console.log("Saving after input...");
-            //     editor.updateSourceElement();
-            // }, true);
-            //const sourceEditingPlugin = editor.plugins.get("SourceEditing");
-            //sourceEditingPlugin.on("change:isSourceEditingMode", (e, name, isSourceEditingMode) => {
-                //if (isSourceEditingMode) {
-                    //// Maybe this helps?
-                    //console.log("Entering source editing");
-                    //const [domSourceEditingElementWrapper] = sourceEditingPlugin._replacedRoots.values();
-                    //const textarea = domSourceEditingElementWrapper.querySelector('textarea');
-
-                    //// TODO(fspreck) this has to be more intelligent since it
-                    //// leads to an infinite update loop...
-                    //textarea.addEventListener("input", (e) => {
-                        //console.log("Input in source mode");
-                        //// sourceEditingPlugin._updateEditorData();
-                    //});
-                //}
-            //});
+            _callOnSave.push(() => {
+                editor.updateSourceElement()
+            });
         } catch (error) {
             logger.error(error.stack);
         }
@@ -105,8 +74,10 @@ var ext_editmode_wysiwyg_text = function ($, logger, ClassicEditor, edit_mode, g
 
     const proxySaveMethod = function (original) {
         const result = function (entity) {
-            _callOnSave.forEach(cb => {cb();});
-            if(typeof original === "function") {
+            _callOnSave.forEach(cb => {
+                cb();
+            });
+            if (typeof original === "function") {
                 return original(entity);
             }
             return undefined;
@@ -154,6 +125,12 @@ var ext_editmode_wysiwyg_text = function ($, logger, ClassicEditor, edit_mode, g
             logger.debug('Re-rendering ' + getPropertyName(e.target));
             ext_editmode_wysiwyg_text.insertEditorInProperty(e.target);
         }, true);
+
+        // Clear list of saving callbacks when leaving the edit mode (regardless
+        // of saving or cancelling)
+        document.body.addEventListener(edit_mode.end_edit.type, (e) => {
+            this._callOnSave = [];
+        }, true);
     };
 
     return {