diff --git a/xwiki-platform-core/xwiki-platform-ckeditor/xwiki-platform-ckeditor-ui/src/main/resources/CKEditor/InlineEditor.xml b/xwiki-platform-core/xwiki-platform-ckeditor/xwiki-platform-ckeditor-ui/src/main/resources/CKEditor/InlineEditor.xml
index 47f0b42d80b6162180da6778293252d9f323c50c..cfbe2307de5faafac50250ebf01457de91a58e71 100644
--- a/xwiki-platform-core/xwiki-platform-ckeditor/xwiki-platform-ckeditor-ui/src/main/resources/CKEditor/InlineEditor.xml
+++ b/xwiki-platform-core/xwiki-platform-ckeditor/xwiki-platform-ckeditor-ui/src/main/resources/CKEditor/InlineEditor.xml
@@ -296,6 +296,8 @@
     });
     $(document).on('xwiki:actions:beforeSave.contentEditor', function(event) {
       config.document[editor.mode === 'source' ? 'content' : 'renderedContent'] = editor.getData();
+      // Delete the document content field that is not used so that the in-place editor knows what to submit on save.
+      delete config.document[editor.mode === 'source' ? 'renderedContent' : 'content'];
       config.document.syntax = editor.config.sourceSyntax;
     });
     $(document).one('xwiki:actions:view.contentEditor', function(event, data) {
diff --git a/xwiki-platform-core/xwiki-platform-edit/xwiki-platform-edit-test/xwiki-platform-edit-test-docker/pom.xml b/xwiki-platform-core/xwiki-platform-edit/xwiki-platform-edit-test/xwiki-platform-edit-test-docker/pom.xml
index c9f1a90af6dd40ca9e56ee8d8a20ba2ad9e6c14b..3f86729754a5b1cc52c4295ac42194593c74f8dc 100644
--- a/xwiki-platform-core/xwiki-platform-edit/xwiki-platform-edit-test/xwiki-platform-edit-test-docker/pom.xml
+++ b/xwiki-platform-core/xwiki-platform-edit/xwiki-platform-edit-test/xwiki-platform-edit-test-docker/pom.xml
@@ -96,6 +96,12 @@
       <version>${project.version}</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.xwiki.platform</groupId>
+      <artifactId>xwiki-platform-ckeditor-test-pageobjects</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
   <build>
     <testSourceDirectory>src/test/it</testSourceDirectory>
diff --git a/xwiki-platform-core/xwiki-platform-edit/xwiki-platform-edit-test/xwiki-platform-edit-test-docker/src/test/it/org/xwiki/edit/test/ui/InplaceEditIT.java b/xwiki-platform-core/xwiki-platform-edit/xwiki-platform-edit-test/xwiki-platform-edit-test-docker/src/test/it/org/xwiki/edit/test/ui/InplaceEditIT.java
index 984ada0376e8c80b06d20814ad0fe25f80a563dd..fefc3585892d2610938d42980b1f192bc93aa844 100644
--- a/xwiki-platform-core/xwiki-platform-edit/xwiki-platform-edit-test/xwiki-platform-edit-test-docker/src/test/it/org/xwiki/edit/test/ui/InplaceEditIT.java
+++ b/xwiki-platform-core/xwiki-platform-edit/xwiki-platform-edit-test/xwiki-platform-edit-test-docker/src/test/it/org/xwiki/edit/test/ui/InplaceEditIT.java
@@ -28,7 +28,12 @@
 import org.junit.jupiter.api.Order;
 import org.junit.jupiter.api.Test;
 import org.openqa.selenium.Alert;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.xwiki.ckeditor.test.po.AutocompleteDropdown;
+import org.xwiki.ckeditor.test.po.CKEditor;
+import org.xwiki.ckeditor.test.po.RichTextAreaElement;
 import org.xwiki.edit.test.po.InplaceEditablePage;
 import org.xwiki.test.docker.junit5.TestReference;
 import org.xwiki.test.docker.junit5.UITest;
@@ -135,6 +140,53 @@ void editInplace(TestUtils setup, TestReference testReference)
 
     @Test
     @Order(2)
+    void saveFromSourceMode(TestUtils setup, TestReference testReference)
+    {
+        // Enter in-place edit mode.
+        InplaceEditablePage viewPage = new InplaceEditablePage().editInplace();
+        CKEditor ckeditor = new CKEditor("content");
+        RichTextAreaElement richTextArea = ckeditor.getRichTextArea();
+        richTextArea.clear();
+
+        // Insert a macro that is editable in-line.
+        richTextArea.sendKeys("/inf");
+        AutocompleteDropdown qa = new AutocompleteDropdown();
+        qa.waitForItemSelected("/inf", "Info Box");
+        richTextArea.sendKeys(Keys.ENTER);
+        qa.waitForItemSubmitted();
+
+        // The content is reloaded after the macro is inserted.
+        ckeditor.getRichTextArea();
+
+        // Switch to Source mode and save without making any change.
+        ckeditor.getToolBar().toggleSourceMode();
+        assertEquals("", ckeditor.getSourceTextArea().getText());
+        viewPage.saveAndView();
+
+        // Edit again and check the source.
+        viewPage.editInplace();
+        ckeditor = new CKEditor("content");
+        // Focus the rich text area to get the floating toolbar.
+        ckeditor.getRichTextArea().click();
+        ckeditor.getToolBar().toggleSourceMode();
+        WebElement sourceTextArea = ckeditor.getSourceTextArea();
+        assertEquals("{{info}}\nType your information message here.\n{{/info}}", sourceTextArea.getAttribute("value"));
+
+        // Modify the soure and save twice, without any change in between.
+        sourceTextArea.clear();
+        sourceTextArea.sendKeys("{{success}}test{{/success}}");
+        viewPage.save().saveAndView();
+
+        // Edit again and check the source.
+        viewPage.editInplace();
+        ckeditor = new CKEditor("content");
+        ckeditor.getRichTextArea().click();
+        ckeditor.getToolBar().toggleSourceMode();
+        assertEquals("{{success}}\ntest\n{{/success}}", ckeditor.getSourceTextArea().getAttribute("value"));
+    }
+
+    @Test
+    @Order(3)
     void editInPlaceWithMandatoryTitle(TestUtils setup, TestReference testReference) throws Exception
     {
         // First of all, test that we can save with an empty title.
@@ -172,7 +224,7 @@ void editInPlaceWithMandatoryTitle(TestUtils setup, TestReference testReference)
     }
 
     @Test
-    @Order(3)
+    @Order(4)
     void editInPlaceWithMandatoryVersionSummary(TestUtils setup, TestReference testReference) throws Exception
     {
         setup.loginAsSuperAdmin();
@@ -222,7 +274,7 @@ void editInPlaceWithMandatoryVersionSummary(TestUtils setup, TestReference testR
     }
 
     @Test
-    @Order(4)
+    @Order(5)
     void saveWithMergeReloadsEditor(TestUtils setup, TestReference testReference) throws Exception
     {
         // Enter in-place edit mode.
diff --git a/xwiki-platform-core/xwiki-platform-edit/xwiki-platform-edit-ui/src/main/resources/XWiki/InplaceEditing.xml b/xwiki-platform-core/xwiki-platform-edit/xwiki-platform-edit-ui/src/main/resources/XWiki/InplaceEditing.xml
index 0644fc5c8656acdcd329f5f8b74b2bc4d0c13356..93eff18478d10ba512ede583a980884f03bc3f36 100644
--- a/xwiki-platform-core/xwiki-platform-edit/xwiki-platform-edit-ui/src/main/resources/XWiki/InplaceEditing.xml
+++ b/xwiki-platform-core/xwiki-platform-edit/xwiki-platform-edit-ui/src/main/resources/XWiki/InplaceEditing.xml
@@ -873,7 +873,7 @@
 
     // Submit either the raw (source) content (no syntax conversion needed in this case) or the rendered content (HTML)
     // in which case we have to force the conversion to the document syntax on the server.
-    const submitRawContent = xwikiDocument.content !== xwikiDocument.originalDocument.content;
+    const submitRawContent = typeof xwikiDocument.renderedContent !== 'string';
     form.find('input[name="content"]').val(submitRawContent ? xwikiDocument.content : xwikiDocument.renderedContent);
     form.find('input[name="RequiresHTMLConversion"]').prop('disabled', submitRawContent);
     form.find('input[name="content_syntax"]').val(xwikiDocument.syntax).prop('disabled', submitRawContent);