diff --git a/app/src/main/java/io/xxlabs/messenger/ui/dialog/textinput/TextInputDialog.kt b/app/src/main/java/io/xxlabs/messenger/ui/dialog/textinput/TextInputDialog.kt
index 41bb6bd0258cae30e8808199d1d048b44bc407c1..74f894a4672ed58d120a0a60eb602722b4f038e0 100644
--- a/app/src/main/java/io/xxlabs/messenger/ui/dialog/textinput/TextInputDialog.kt
+++ b/app/src/main/java/io/xxlabs/messenger/ui/dialog/textinput/TextInputDialog.kt
@@ -2,6 +2,7 @@ package io.xxlabs.messenger.ui.dialog.textinput
 
 import android.content.DialogInterface
 import android.os.Bundle
+import android.text.InputType
 import android.text.Spannable
 import android.text.SpannableStringBuilder
 import android.text.method.LinkMovementMethod
@@ -24,12 +25,16 @@ class TextInputDialog : XxBottomSheetDialog() {
     private val dialogUI: TextInputDialogUI by lazy {
         requireArguments().get(ARG_UI) as TextInputDialogUI
     }
+    private val isSensitive: Boolean by lazy {
+        requireArguments().getBoolean(ARG_SENSITIVE)
+    }
 
     override fun onCreateView(
         inflater: LayoutInflater,
         container: ViewGroup?,
         savedInstanceState: Bundle?
     ): View {
+
         binding = DataBindingUtil.inflate(
             inflater,
             R.layout.component_textinput_dialog,
@@ -45,11 +50,20 @@ class TextInputDialog : XxBottomSheetDialog() {
         }
 
         initClickListeners()
+        setInputPrivacy()
         binding.lifecycleOwner = viewLifecycleOwner
         binding.ui = dialogUI
         return binding.root
     }
 
+    private fun setInputPrivacy() {
+        if (isSensitive) {
+            binding.edittextDialogTextInput.editText?.apply {
+                inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
+            }
+        }
+    }
+
     private fun initClickListeners() {
         binding.edittextDialogPositiveButton.setOnClickListener {
             dismiss()
@@ -98,11 +112,12 @@ class TextInputDialog : XxBottomSheetDialog() {
 
     companion object Factory {
         private const val ARG_UI: String = "ui"
-
-        fun newInstance(dialogUI: TextInputDialogUI): TextInputDialog =
+        private const val ARG_SENSITIVE: String = "sensitive"
+        fun newInstance(dialogUI: TextInputDialogUI, isSensitive: Boolean = false): TextInputDialog =
             TextInputDialog().apply {
                 arguments = Bundle().apply {
                     putSerializable(ARG_UI, dialogUI)
+                    putBoolean(ARG_SENSITIVE, isSensitive)
                 }
             }
     }
diff --git a/app/src/main/res/layout/component_sensitive_textinput_dialog.xml b/app/src/main/res/layout/component_sensitive_textinput_dialog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4e0a8e43a896bbee8f2bb6555c1b8fbdbd522243
--- /dev/null
+++ b/app/src/main/res/layout/component_sensitive_textinput_dialog.xml
@@ -0,0 +1,94 @@
+<layout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+        <variable
+            name="ui"
+            type="io.xxlabs.messenger.ui.dialog.textinput.TextInputDialogUI" />
+    </data>
+
+    <androidx.cardview.widget.CardView
+        android:id="@+id/infoDialogRoot"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:cardCornerRadius="@dimen/bottom_sheet_dialog_corner_radius">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <TextView
+                android:id="@+id/edittext_dialog_title"
+                android:text="@{ui.title}"
+                android:layout_marginBottom="@dimen/registration_body_vertical_margin"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintBottom_toTopOf="@+id/edittext_dialog_body"
+                style="@style/dialog_title"
+                tools:text="@string/registration_username_info_title"/>
+
+            <TextView
+                android:id="@+id/edittext_dialog_body"
+                android:layout_marginBottom="@dimen/registration_body_vertical_margin"
+                app:layout_constraintTop_toBottomOf="@id/edittext_dialog_title"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintBottom_toTopOf="@+id/edittext_dialog_text_input"
+                tools:text="@string/registration_username_info_body"
+                style="@style/dialog_body" />
+
+            <com.google.android.material.textfield.TextInputLayout
+                android:id="@+id/edittext_dialog_text_input"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:hint="@{ui.inputHint}"
+                android:error="@{ui.inputError}"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/edittext_dialog_body"
+                app:layout_constraintBottom_toTopOf="@+id/edittext_dialog_positive_button"
+                tools:hint="Enter text here"
+                style="@style/registration_text_input">
+
+                <com.google.android.material.textfield.TextInputEditText
+                    style="@style/registration_text_input_edittext"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:imeOptions="actionDone"
+                    android:inputType="textPassword"
+                    android:maxLength="@{ui.maxInputLength}"
+                    android:afterTextChanged="@{ui::onTextInput}"/>
+            </com.google.android.material.textfield.TextInputLayout>
+
+            <io.xxlabs.messenger.support.view.SingleClickButton
+                android:id="@+id/edittext_dialog_positive_button"
+                style="@style/dialog_button"
+                android:layout_marginTop="@dimen/registration_body_vertical_margin"
+                android:text="@{ui.positiveLabel}"
+                android:textColor="@color/neutral_white"
+                android:background="@drawable/bg_btn_white"
+                android:backgroundTint="@color/brand_default"
+                android:layout_marginStart="@dimen/registration_horizontal_margin"
+                android:enabled="@{ui.positiveButtonEnabled}"
+                app:layout_constraintHorizontal_chainStyle="packed"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toStartOf="@id/edittext_dialog_negative_button"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/edittext_dialog_text_input" />
+
+            <io.xxlabs.messenger.support.view.SingleClickButton
+                android:id="@+id/edittext_dialog_negative_button"
+                android:text="@{ui.negativeLabel}"
+                android:layout_marginTop="@dimen/registration_body_vertical_margin"
+                android:layout_marginEnd="@dimen/registration_horizontal_margin"
+                android:layout_marginStart="0dp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toEndOf="@id/edittext_dialog_positive_button"
+                app:layout_constraintEnd_toEndOf="parent"
+                style="@style/dialog_button" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+    </androidx.cardview.widget.CardView>
+</layout>
\ No newline at end of file