diff --git a/CHANGES.md b/CHANGES.md
index 6afa782a07..991226cae8 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -11,6 +11,7 @@ Improvements 🙌:
 
 Bugfix 🐛:
  - Double bottomsheet effect after verify with passphrase
+ - EditText cursor jumps to the start while typing fast (#2469)
 
 Translations 🗣:
  -
diff --git a/vector/src/main/java/im/vector/app/core/extensions/EditText.kt b/vector/src/main/java/im/vector/app/core/extensions/EditText.kt
index 05b70def3d..33e7199334 100644
--- a/vector/src/main/java/im/vector/app/core/extensions/EditText.kt
+++ b/vector/src/main/java/im/vector/app/core/extensions/EditText.kt
@@ -57,3 +57,15 @@ fun EditText.setupAsSearch(@DrawableRes searchIconRes: Int = R.drawable.ic_searc
         return@OnTouchListener false
     })
 }
+
+/**
+ * Update the edit text value, only if necessary and move the cursor to the end of the text
+ */
+fun EditText.setTextSafe(value: String?) {
+    if (value != null && text.toString() != value) {
+        setText(value)
+        // To fix jumping cursor to the start https://github.com/airbnb/epoxy/issues/426
+        // Note: there is still a known bug if deleting char in the middle of the text, by long pressing on the backspace button.
+        setSelection(value.length)
+    }
+}
diff --git a/vector/src/main/java/im/vector/app/features/form/FormEditTextItem.kt b/vector/src/main/java/im/vector/app/features/form/FormEditTextItem.kt
index 12538d314a..68e2e6b371 100644
--- a/vector/src/main/java/im/vector/app/features/form/FormEditTextItem.kt
+++ b/vector/src/main/java/im/vector/app/features/form/FormEditTextItem.kt
@@ -26,6 +26,7 @@ import com.google.android.material.textfield.TextInputLayout
 import im.vector.app.R
 import im.vector.app.core.epoxy.VectorEpoxyHolder
 import im.vector.app.core.epoxy.VectorEpoxyModel
+import im.vector.app.core.extensions.setTextSafe
 import im.vector.app.core.platform.SimpleTextWatcher
 
 @EpoxyModelClass(layout = R.layout.item_form_text_input)
@@ -65,9 +66,7 @@ abstract class FormEditTextItem : VectorEpoxyModel<FormEditTextItem.Holder>() {
         holder.textInputLayout.error = errorMessage
 
         // Update only if text is different and value is not null
-        if (value != null && holder.textInputEditText.text.toString() != value) {
-            holder.textInputEditText.setText(value)
-        }
+        holder.textInputEditText.setTextSafe(value)
         holder.textInputEditText.isEnabled = enabled
         inputType?.let { holder.textInputEditText.inputType = it }
 
diff --git a/vector/src/main/java/im/vector/app/features/form/FormEditTextWithButtonItem.kt b/vector/src/main/java/im/vector/app/features/form/FormEditTextWithButtonItem.kt
index eadae3ba0c..08fc435e11 100644
--- a/vector/src/main/java/im/vector/app/features/form/FormEditTextWithButtonItem.kt
+++ b/vector/src/main/java/im/vector/app/features/form/FormEditTextWithButtonItem.kt
@@ -26,6 +26,7 @@ import com.google.android.material.textfield.TextInputLayout
 import im.vector.app.R
 import im.vector.app.core.epoxy.VectorEpoxyHolder
 import im.vector.app.core.epoxy.VectorEpoxyModel
+import im.vector.app.core.extensions.setTextSafe
 import im.vector.app.core.platform.SimpleTextWatcher
 
 @EpoxyModelClass(layout = R.layout.item_form_text_input_with_button)
@@ -61,9 +62,7 @@ abstract class FormEditTextWithButtonItem : VectorEpoxyModel<FormEditTextWithBut
         holder.textInputLayout.hint = hint
 
         // Update only if text is different
-        if (holder.textInputEditText.text.toString() != value) {
-            holder.textInputEditText.setText(value)
-        }
+        holder.textInputEditText.setTextSafe(value)
         holder.textInputEditText.isEnabled = enabled
 
         holder.textInputEditText.addTextChangedListener(onTextChangeListener)
diff --git a/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/RoomAliasEditItem.kt b/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/RoomAliasEditItem.kt
index 041a5c5c51..2a30545a47 100644
--- a/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/RoomAliasEditItem.kt
+++ b/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/RoomAliasEditItem.kt
@@ -27,6 +27,7 @@ import com.google.android.material.textfield.TextInputLayout
 import im.vector.app.R
 import im.vector.app.core.epoxy.VectorEpoxyHolder
 import im.vector.app.core.epoxy.VectorEpoxyModel
+import im.vector.app.core.extensions.setTextSafe
 import im.vector.app.core.platform.SimpleTextWatcher
 
 @EpoxyModelClass(layout = R.layout.item_room_alias_text_input)
@@ -62,9 +63,7 @@ abstract class RoomAliasEditItem : VectorEpoxyModel<RoomAliasEditItem.Holder>()
         holder.textInputLayout.error = errorMessage
 
         // Update only if text is different and value is not null
-        if (value != null && holder.textInputEditText.text.toString() != value) {
-            holder.textInputEditText.setText(value)
-        }
+        holder.textInputEditText.setTextSafe(value)
         holder.textInputEditText.isEnabled = enabled
         holder.textInputEditText.addTextChangedListener(onTextChangeListener)
         holder.homeServerText.text = homeServer