diff --git a/Sources/InputField/InputField.swift b/Sources/InputField/InputField.swift
index f0be951d47dbeeecebeb8abd5a3d56eb13c6e31c..47fda0152029c2ad3959cb2ff067bdb1bffaf981 100644
--- a/Sources/InputField/InputField.swift
+++ b/Sources/InputField/InputField.swift
@@ -153,7 +153,13 @@ public final class InputField: UIView {
   }
 
   public func update(placeholder: String) {
-    field.placeholder = placeholder
+    field.attributedPlaceholder = NSAttributedString(
+      string: placeholder,
+      attributes: [
+        .font: Fonts.Mulish.semiBold.font(size: 14.0),
+        .foregroundColor: Asset.neutralDisabled.color
+      ]
+    )
   }
 
   public func update(status: ValidationStatus) {
diff --git a/Sources/SettingsFeature/Controllers/SettingsDeleteController.swift b/Sources/SettingsFeature/Controllers/SettingsDeleteController.swift
index e9b48cb44dc6265e9908c69d7c2a0de5e447b639..33642c127af725e10d2d8496219446b776f1f5d6 100644
--- a/Sources/SettingsFeature/Controllers/SettingsDeleteController.swift
+++ b/Sources/SettingsFeature/Controllers/SettingsDeleteController.swift
@@ -1,7 +1,6 @@
 import UIKit
 import Shared
 import Combine
-import Defaults
 import Dependencies
 import AppResources
 import AppNavigation
@@ -11,8 +10,6 @@ import ScrollViewController
 public final class SettingsDeleteController: UIViewController {
   @Dependency(\.navigator) var navigator
 
-  @KeyObject(.username, defaultValue: "") var username: String
-
   private lazy var screenView = SettingsDeleteView()
   private lazy var scrollViewController = ScrollViewController()
 
@@ -31,8 +28,6 @@ public final class SettingsDeleteController: UIViewController {
     setupScrollView()
     setupBindings()
 
-    screenView.update(username: username)
-
     screenView.setInfoClosure { [weak self] in
       guard let self else { return }
       self.presentInfo(
@@ -55,21 +50,40 @@ public final class SettingsDeleteController: UIViewController {
 
   private func setupBindings() {
     screenView
-      .cancelButton
-      .publisher(for: .touchUpInside)
+      .inputField
+      .textPublisher
+      .sink { [unowned self] in
+        viewModel.didEnterText($0)
+      }.store(in: &cancellables)
+
+    viewModel
+      .statePublisher
+      .map(\.username)
       .receive(on: DispatchQueue.main)
       .sink { [unowned self] in
-        dismiss(animated: true)
+        screenView.inputField.update(placeholder: $0)
+      }.store(in: &cancellables)
+
+    viewModel
+      .statePublisher
+      .map(\.isButtonEnabled)
+      .receive(on: DispatchQueue.main)
+      .dropFirst()
+      .sink { [unowned self] in
+        screenView.confirmButton.isEnabled = $0
+        screenView.inputField.update(
+          status: $0 ? .valid("") : .invalid("")
+        )
       }.store(in: &cancellables)
 
     screenView
       .inputField
-      .textPublisher
+      .returnPublisher
+      .receive(on: DispatchQueue.main)
       .sink { [unowned self] in
-        screenView.update(
-          status: $0 == username ?
-            .valid("") : .invalid("")
-        )
+        if screenView.confirmButton.isEnabled {
+          viewModel.didTapDelete()
+        }
       }.store(in: &cancellables)
 
     screenView
@@ -82,6 +96,7 @@ public final class SettingsDeleteController: UIViewController {
     screenView
       .cancelButton
       .publisher(for: .touchUpInside)
+      .receive(on: DispatchQueue.main)
       .sink { [unowned self] in
         navigationController?.popViewController(animated: true)
       }.store(in: &cancellables)
diff --git a/Sources/SettingsFeature/ViewModels/SettingsDeleteViewModel.swift b/Sources/SettingsFeature/ViewModels/SettingsDeleteViewModel.swift
index 2bf7d1f01165b8ebf02a1d5a0667a4ca7bc3b77b..e2a1912aa5cd68fc032ac2e54de0a1bc571ede70 100644
--- a/Sources/SettingsFeature/ViewModels/SettingsDeleteViewModel.swift
+++ b/Sources/SettingsFeature/ViewModels/SettingsDeleteViewModel.swift
@@ -1,4 +1,5 @@
 import AppCore
+import Combine
 import Defaults
 import Keychain
 import Foundation
@@ -7,6 +8,12 @@ import AppResources
 import XXMessengerClient
 
 final class SettingsDeleteViewModel {
+  struct ViewState: Equatable {
+    var input = ""
+    var username: String
+    var isButtonEnabled = false
+  }
+
   @Dependency(\.keychain) var keychain
   @Dependency(\.app.bgQueue) var bgQueue
   @Dependency(\.app.dbManager) var dbManager
@@ -14,19 +21,34 @@ final class SettingsDeleteViewModel {
   @Dependency(\.app.hudManager) var hudManager
   @KeyObject(.username, defaultValue: nil) var username: String?
 
-  private var isCurrentlyDeleting = false
-  
-  func didTapDelete() {
-    guard isCurrentlyDeleting == false else { return }
-    isCurrentlyDeleting = true
+  var statePublisher: AnyPublisher<ViewState, Never> {
+    stateSubject.eraseToAnyPublisher()
+  }
+
+  private let stateSubject: CurrentValueSubject<ViewState, Never>
+
+  init() {
+    @KeyObject(.username, defaultValue: nil) var username: String?
+    self.stateSubject = .init(.init(username: username!))
+  }
+
+  func didEnterText(_ string: String) {
+    stateSubject.value.input = string
+    stateSubject.value.isButtonEnabled = string == stateSubject.value.username
+  }
 
+  func didTapDelete() {
     hudManager.show()
 
     bgQueue.schedule { [weak self] in
       guard let self else { return }
-
       do {
-        try self.cleanUD()
+        try self.messenger.ud.tryGet().permanentDeleteAccount(
+          username: .init(
+            type: .username,
+            value: self.stateSubject.value.username
+          )
+        )
         try self.messenger.destroy()
         try self.keychain.destroy()
         try self.dbManager.removeDB()
@@ -47,10 +69,4 @@ final class SettingsDeleteViewModel {
       }
     }
   }
-  
-  private func cleanUD() throws {
-    try messenger.ud.get()!.permanentDeleteAccount(
-      username: .init(type: .username, value: username!)
-    )
-  }
 }
diff --git a/Sources/SettingsFeature/Views/SettingsDeleteView.swift b/Sources/SettingsFeature/Views/SettingsDeleteView.swift
index 7ac68bccbbd95c0f299936ba726744fc3e26023b..8fd9bfab69b0db85fdc968bab03f0ecb1d7c05dc 100644
--- a/Sources/SettingsFeature/Views/SettingsDeleteView.swift
+++ b/Sources/SettingsFeature/Views/SettingsDeleteView.swift
@@ -99,19 +99,4 @@ final class SettingsDeleteView: UIView {
   func setInfoClosure(_ closure: @escaping () -> Void) {
     didTapInfo = closure
   }
-
-  func update(username: String) {
-    inputField.update(placeholder: username)
-  }
-
-  func update(status: InputField.ValidationStatus) {
-    inputField.update(status: status)
-
-    switch status {
-    case .valid:
-      confirmButton.isEnabled = true
-    case .invalid, .unknown:
-      confirmButton.isEnabled = false
-    }
-  }
 }