diff --git a/jami-android/app/src/main/java/cx/ring/fragments/JamiIdFragment.kt b/jami-android/app/src/main/java/cx/ring/fragments/JamiIdFragment.kt
index 6afb103fe36e6f4bffc485ba24b0aeb0e195cf43..f3e29dfbca70c26ff70ff8fc3670057d17631b3e 100644
--- a/jami-android/app/src/main/java/cx/ring/fragments/JamiIdFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/fragments/JamiIdFragment.kt
@@ -1,14 +1,15 @@
 package cx.ring.fragments
 
 import android.os.Bundle
+import android.text.Editable
 import android.text.InputFilter
+import android.text.TextWatcher
 import android.text.method.KeyListener
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.annotation.DrawableRes
 import androidx.appcompat.content.res.AppCompatResources
-import androidx.core.widget.doOnTextChanged
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
 import androidx.lifecycle.Lifecycle
@@ -21,6 +22,7 @@ import cx.ring.utils.ActionHelper.shareAccount
 import cx.ring.utils.KeyboardVisibilityManager.showKeyboard
 import cx.ring.utils.RegisteredNameFilter
 import cx.ring.viewmodel.JamiIdStatus
+import cx.ring.viewmodel.JamiIdUiState
 import cx.ring.viewmodel.JamiIdViewModel
 import dagger.hilt.android.AndroidEntryPoint
 import kotlinx.coroutines.launch
@@ -32,6 +34,15 @@ class JamiIdFragment : Fragment() {
     private lateinit var binding: JamiIdLayoutBinding
     private val jamiIdViewModel: JamiIdViewModel by viewModels({ requireParentFragment() })
 
+    private val textWatcher = object : TextWatcher {
+        override fun afterTextChanged(s: Editable?) {}
+
+        override fun beforeTextChanged(text: CharSequence?, start: Int, count: Int, after: Int) {}
+
+        override fun onTextChanged(text: CharSequence?, start: Int, before: Int, count: Int) =
+            jamiIdViewModel.textChanged(text?.toString()!!)
+    }
+
     // This var is used in a trick to get ellipsize to work. Allows to EditText.setEnabled.
     private lateinit var keyListener: KeyListener
 
@@ -47,9 +58,6 @@ class JamiIdFragment : Fragment() {
             binding = this
             jamiIdEditText.filters = arrayOf<InputFilter>(RegisteredNameFilter())
             keyListener = jamiIdEditText.keyListener!!
-            jamiIdEditText.doOnTextChanged { text, _, _, _ ->
-                jamiIdViewModel.textChanged(text.toString())
-            }
         }.root
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -58,18 +66,25 @@ class JamiIdFragment : Fragment() {
         // Observe the uiState and update the UI
         viewLifecycleOwner.lifecycleScope.launch {
             viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
+                var prevState: JamiIdUiState? = null
+
                 jamiIdViewModel.uiState.collect { uiState ->
 
+                    if (uiState.jamiIdStatus == prevState?.jamiIdStatus) return@collect
+                    prevState = uiState
+
                     when (uiState.jamiIdStatus) {
                         JamiIdStatus.USERNAME_NOT_DEFINED ->
                             setUsernameNotDefinedUiState(
                                 username = uiState.username
                             )
 
-                        JamiIdStatus.EDITING_USERNAME_INITIAL ->
+                        JamiIdStatus.EDITING_USERNAME_INITIAL -> {
+                            binding.jamiIdEditText.addTextChangedListener(textWatcher)
                             setEditingUsernameInitialUiState(
                                 typingUsername = uiState.editedUsername
                             )
+                        }
 
                         JamiIdStatus.EDITING_USERNAME_LOADING ->
                             setEditingUsernameLoadingUiState(
@@ -86,10 +101,12 @@ class JamiIdFragment : Fragment() {
                                 typingUsername = uiState.editedUsername
                             )
 
-                        JamiIdStatus.USERNAME_DEFINED ->
+                        JamiIdStatus.USERNAME_DEFINED -> {
+                            binding.jamiIdEditText.removeTextChangedListener(textWatcher)
                             setUsernameDefinedUiState(
                                 username = uiState.username
                             )
+                        }
 
                         else -> {
                             Log.w(TAG, "Unknown JamiIdStatus: ${uiState.jamiIdStatus}")
diff --git a/jami-android/app/src/main/java/cx/ring/fragments/WelcomeJamiFragment.kt b/jami-android/app/src/main/java/cx/ring/fragments/WelcomeJamiFragment.kt
index 47c7cd9f3ae254f2bbbd51a161a2ea850a2f6561..1b7d0b3d607dd50ddb610d6bf80b2f032724d7ea 100644
--- a/jami-android/app/src/main/java/cx/ring/fragments/WelcomeJamiFragment.kt
+++ b/jami-android/app/src/main/java/cx/ring/fragments/WelcomeJamiFragment.kt
@@ -31,7 +31,7 @@ class WelcomeJamiFragment : Fragment() {
     private val jamiIdViewModel by lazy { ViewModelProvider(this)[JamiIdViewModel::class.java] }
 
     companion object {
-        private val TAG = WelcomeJamiViewModel::class.simpleName!!
+        private val TAG = WelcomeJamiFragment::class.simpleName!!
     }
 
     override fun onCreateView(