diff --git a/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/CodeArea.java b/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/CodeArea.java
index 3ee442abc5..fd8f9d8772 100644
--- a/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/CodeArea.java
+++ b/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/CodeArea.java
@@ -438,12 +438,12 @@ public class CodeArea extends RichTextArea {
     /**
      * Replaces text in this CodeArea.
      * <p>
-     * The caret gets reset to the start of the document, selection gets cleared, and an undo event gets created.
+     * The caret gets reset to the start of the document and the selection gets cleared.
      * @param text the text string
      */
     public final void setText(String text) {

diff --git a/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/RichTextArea.java b/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/RichTextArea.java
index 7da3c96d3d..721ebc1efe 100644
--- a/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/RichTextArea.java
+++ b/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/RichTextArea.java
@@ -99,9 +99,11 @@ import jfx.incubator.scene.control.richtext.skin.RichTextAreaSkin;
  *
  *   RichTextArea textArea = new RichTextArea();
  *   // build the content
+ *   textArea.setUndoRedoEnabled(false);
  *   textArea.appendText("RichTextArea\n", heading);
  *   textArea.appendText("Example:\nText is ", StyleAttributeMap.EMPTY);
  *   textArea.appendText("monospaced.\n", mono);
+ *   textArea.setUndoRedoEnabled(true);
  * }</pre>
  * Which results in the following visual representation:

@@ -798,6 +800,32 @@ public class RichTextArea extends Control {
+    /**
+     * Indicates whether undo/redo functionality is enabled in the model.
+     * Returns {@code false} if the model is {@code null}.
+     * @return true if undo/redo functionality is enabled in the model
+     * @since 26
+     */
+    public final boolean isUndoRedoEnabled() {

+    /**
+     * Controls whether undo/redo functionality is enabled in the model.
+     * Setting the value to {@code false} clears existing undo/redo entries.
+     * This method does nothing if the model is {@code null}.
+     * @param on true to enable undo/redo
+     * @since 26
+     * @see #clearUndoRedo()
+     */
+    public final void setUndoRedoEnabled(boolean on) {

@@ -1132,14 +1160,14 @@ public class RichTextArea extends Control {
     /**
-     * Clears the document, creating an undo entry.
+     * Clears the document.
      *
      * @throws NullPointerException if the model is {@code null}
      * @throws UnsupportedOperationException if the model is not {@link StyledTextModel#isWritable() writable}
      */
     public final void clear() {

@@ -1897,14 +1925,13 @@ public class RichTextArea extends Control {
      * @param start the start text position
      * @param end the end text position
      * @param text the input text
-     * @param allowUndo when true, creates an undo-redo entry
      * @return the new caret position at the end of inserted text, or null if the change cannot be made
      * @throws NullPointerException if the model is {@code null}
      * @throws UnsupportedOperationException if the model is not {@link StyledTextModel#isWritable() writable}
      */
-    public final TextPos replaceText(TextPos start, TextPos end, String text, boolean allowUndo) {
+    public final TextPos replaceText(TextPos start, TextPos end, String text) {

@@ -1913,14 +1940,13 @@ public class RichTextArea extends Control {
      * @param start the start text position
      * @param end the end text position
      * @param in the input stream
-     * @param createUndo when true, creates an undo-redo entry
      * @return the new caret position at the end of inserted text, or null if the change cannot be made
      * @throws NullPointerException if the model is {@code null}
      * @throws UnsupportedOperationException if the model is not {@link StyledTextModel#isWritable() writable}
      */
-    public final TextPos replaceText(TextPos start, TextPos end, StyledInput in, boolean createUndo) {
+    public final TextPos replaceText(TextPos start, TextPos end, StyledInput in) {

diff --git a/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/model/BasicTextModel.java b/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/model/BasicTextModel.java
index 3161671467..476fbdae99 100644
--- a/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/model/BasicTextModel.java
+++ b/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/model/BasicTextModel.java
@@ -123,7 +123,7 @@ public class BasicTextModel extends StyledTextModel {
     /**
      * Inserts text at the specified position.
-     * This is a convenience shortcut for {@link #replace(StyleResolver, TextPos, TextPos, String, boolean)}.
+     * This is a convenience shortcut for {@link #replace(StyleResolver, TextPos, TextPos, String)}.
      *
      * @param p the insertion position
      * @param text the text to insert

diff --git a/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/model/StyledTextModel.java b/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/model/StyledTextModel.java
index f62ae75f30..f33f541783 100644
--- a/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/model/StyledTextModel.java
+++ b/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/model/StyledTextModel.java
@@ -68,8 +69,8 @@ import jfx.incubator.scene.control.richtext.TextPos;
  * <h2>Editing</h2>
  * The model supports editing when {@link #isWritable()} returns {@code true}.
  * Three methods participate in modification of the content:
- * {@link #replace(StyleResolver, TextPos, TextPos, String, boolean)},
- * {@link #replace(StyleResolver, TextPos, TextPos, StyledInput, boolean)},
+ * {@link #replace(StyleResolver, TextPos, TextPos, String)},
+ * {@link #replace(StyleResolver, TextPos, TextPos, StyledInput)},
  * {@link #applyStyle(TextPos, TextPos, StyleAttributeMap, boolean)}.
  * These methods decompose the main modification into operations with individual paragraphs
  * and delegate these to subclasses.
@@ -249,8 +250,8 @@ public abstract class StyledTextModel {
      * <p>
      * The methods that utilize the filtering are:
      * {@link #applyStyle(TextPos, TextPos, StyleAttributeMap, boolean)},
-     * {@link #replace(StyleResolver, TextPos, TextPos, StyledInput, boolean)}, and
-     * {@link #replace(StyleResolver, TextPos, TextPos, String, boolean)}.
+     * {@link #replace(StyleResolver, TextPos, TextPos, StyledInput)}, and
+     * {@link #replace(StyleResolver, TextPos, TextPos, String)}.
      * <p>
      * When this method returns {@code null}, no filtering is performed.
      * <p>
@@ -456,7 +470,7 @@ public abstract class StyledTextModel {
      * @param end end of the range
      * @param out {@link StyledOutput} to receive the stream
      * @throws IOException when an I/O error occurs
-     * @see #replace(StyleResolver, TextPos, TextPos, StyledInput, boolean)
+     * @see #replace(StyleResolver, TextPos, TextPos, StyledInput)
      */
     public final void export(TextPos start, TextPos end, StyledOutput out) throws IOException {

@@ -613,25 +627,26 @@ public abstract class StyledTextModel {
      * Replaces the given range with the provided plain text.
      * <p>
      * This is a convenience method which eventually calls
-     * {@link #replace(StyleResolver, TextPos, TextPos, StyledInput, boolean)}
+     * {@link #replace(StyleResolver, TextPos, TextPos, StyledInput)}
      * with the attributes provided by {@link #getStyleAttributeMap(StyleResolver, TextPos)} at the
      * {@code start} position.
+     * It creates an undo/redo entry if
+     * {@link #isUndoRedoEnabled()} returns {@code true}.
      *
      * @param resolver the StyleResolver to use
      * @param start start text position
      * @param end end text position
      * @param text text string to insert
-     * @param allowUndo when true, creates an undo-redo entry
      * @return the text position at the end of the inserted text, or null if the model is read only
      * @throws UnsupportedOperationException if the model is not {@link #isWritable() writable}
      */
-    public final TextPos replace(StyleResolver resolver, TextPos start, TextPos end, String text, boolean allowUndo) {
+    public final TextPos replace(StyleResolver resolver, TextPos start, TextPos end, String text) {

@@ -640,16 +655,21 @@ public abstract class StyledTextModel {
      * inserted in the beginning of the document, the style is taken from the following text segment.
      * <p>
      * After the model applies the requested changes, an event is sent to all the registered listeners.
+     * It creates an undo/redo entry if {@link #isUndoRedoEnabled()} returns {@code true}.
      *
      * @param resolver the StyleResolver to use, can be null
      * @param start the start text position
      * @param end the end text position
      * @param input the input content stream
-     * @param allowUndo when true, creates an undo-redo entry
      * @return the text position at the end of the inserted text, or null if the model is read only
      * @throws UnsupportedOperationException if the model is not {@link #isWritable() writable}
      */
-    public final TextPos replace(StyleResolver resolver, TextPos start, TextPos end, StyledInput input, boolean allowUndo) {
+    public final TextPos replace(StyleResolver resolver, TextPos start, TextPos end, StyledInput input) {

@@ -724,12 +744,13 @@ public abstract class StyledTextModel {
     /**
-     * Applies the style attributes to the specified range in the document.<p>
+     * Applies the style attributes to the specified range in the document.
+     * It creates an undo/redo entry if
+     * {@link #isUndoRedoEnabled()} returns {@code true}.
+     * <p>
      * Depending on {@code mergeAttributes} parameter, the attributes will either be merged with (true) or completely
      * replace the existing attributes within the range.  The affected range might be wider than the range specified
      * when applying the paragraph attributes.
-     * <p>
-     * This operation is undoable.
      *
      * @param start the start of text range
      * @param end the end of text range

@@ -817,6 +841,30 @@ public abstract class StyledTextModel {
+    /**
+     * Indicates whether undo/redo functionality is enabled.
+     * @return true if undo/redo functionality is enabled
+     * @defaultValue {@code true}
+     * @since 26
+     */
+    public final boolean isUndoRedoEnabled() {

+    /**
+     * Controls whether undo/redo functionality is enabled.
+     * Setting the value to {@code false} clears existing undo/redo entries.
+     * @param on true to enable undo/redo
+     * @see #clearUndoRedo()
+     * @since 26
+     */
+    public final void setUndoRedoEnabled(boolean on) {
