diff --git a/src/core/js/ext_editmode_wysiwyg_text.js b/src/core/js/ext_editmode_wysiwyg_text.js
index 5f9a05210dd76c84784279b6452d0506f8fb7adb..e5840d65000204b441630380704740779977e4bb 100644
--- a/src/core/js/ext_editmode_wysiwyg_text.js
+++ b/src/core/js/ext_editmode_wysiwyg_text.js
@@ -39,6 +39,8 @@
  */
 var ext_editmode_wysiwyg_text = function ($, logger, ClassicEditor, edit_mode, getPropertyElements, getPropertyDatatype, getPropertyName) {
 
+    var _callOnSave = [];
+
     var insertEditorInProperty = async function (prop) {
         if (!(getPropertyDatatype(prop) === 'TEXT')) {
             // Ignore anything that isn't a list property, even LIST<TEXT>
@@ -62,16 +64,17 @@ 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.
-            editor.model.document.on("change:data", (e) => {
+            _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();
-                }
-            });
+                //// 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.
@@ -79,28 +82,42 @@ var ext_editmode_wysiwyg_text = function ($, logger, ClassicEditor, edit_mode, g
             //     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');
+            //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();
-                    });
-                }
-            });
+                    //// 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();
+                    //});
+                //}
+            //});
         } catch (error) {
             logger.error(error.stack);
         }
     }
 
+    const proxySaveMethod = function (original) {
+        const result = function (entity) {
+            _callOnSave.forEach(cb => {cb();});
+            if(typeof original === "function") {
+                return original(entity);
+            }
+            return undefined;
+        }
+        return result;
+    }
+
     var replaceTextAreas = function (entity) {
+        // on save, call callbacks
+        edit_mode.app.onBeforeInsert = proxySaveMethod(edit_mode.app.onBeforeInsert);
+        edit_mode.app.onBeforeUpdate = proxySaveMethod(edit_mode.app.onBeforeUpdate);
         const properties = getPropertyElements(entity);
         for (let prop of properties) {
             // TODO(fspreck): This will be replaced by a whitelist of properties