diff --git a/ios/MullvadVPN/Extensions/UIImage+Helpers.swift b/ios/MullvadVPN/Extensions/UIImage+Helpers.swift
index ebf11ea270a4..2c5a935a3885 100644
--- a/ios/MullvadVPN/Extensions/UIImage+Helpers.swift
+++ b/ios/MullvadVPN/Extensions/UIImage+Helpers.swift
@@ -26,4 +26,23 @@ extension UIImage {
 
         return resizedImage.withRenderingMode(renderingMode)
     }
+
+    func withAlpha(_ alpha: CGFloat) -> UIImage? {
+        UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
+        guard let context = UIGraphicsGetCurrentContext(), let cgImage = self.cgImage else { return nil }
+
+        let rect = CGRect(origin: .zero, size: self.size)
+
+        context.scaleBy(x: 1.0, y: -1.0) // Flip vertically
+        context.translateBy(x: 0, y: -rect.size.height)
+
+        context.setBlendMode(.normal)
+        context.setAlpha(alpha) // Set the alpha
+        context.draw(cgImage, in: rect)
+
+        let newImage = UIGraphicsGetImageFromCurrentImageContext()
+        UIGraphicsEndImageContext()
+
+        return newImage
+    }
 }
diff --git a/ios/MullvadVPN/View controllers/OutOfTime/OutOfTimeContentView.swift b/ios/MullvadVPN/View controllers/OutOfTime/OutOfTimeContentView.swift
index 843fd0cda4d8..b2a1715b887e 100644
--- a/ios/MullvadVPN/View controllers/OutOfTime/OutOfTimeContentView.swift	
+++ b/ios/MullvadVPN/View controllers/OutOfTime/OutOfTimeContentView.swift	
@@ -107,7 +107,6 @@ class OutOfTimeContentView: UIView {
     }
 
     func enableDisconnectButton(_ enabled: Bool, animated: Bool) {
-        disconnectButton.isEnabled = enabled
         UIView.animate(withDuration: animated ? 0.25 : 0) {
             self.disconnectButton.alpha = enabled ? 1 : 0
         }
diff --git a/ios/MullvadVPN/View controllers/OutOfTime/OutOfTimeViewController.swift b/ios/MullvadVPN/View controllers/OutOfTime/OutOfTimeViewController.swift
index a85b0de35c55..46cc42e190c9 100644
--- a/ios/MullvadVPN/View controllers/OutOfTime/OutOfTimeViewController.swift	
+++ b/ios/MullvadVPN/View controllers/OutOfTime/OutOfTimeViewController.swift	
@@ -149,7 +149,7 @@ class OutOfTimeViewController: UIViewController, RootContainment {
             .isSecured
         contentView.restoreButton.isEnabled = isInteractionEnabled
 
-        contentView.enableDisconnectButton(tunnelState.isSecured, animated: true)
+        contentView.updateDisconnectButton(tunnelState.isSecured, animated: true)
 
         if tunnelState.isSecured {
             contentView.setBodyLabelText(
@@ -265,7 +265,7 @@ class OutOfTimeViewController: UIViewController, RootContainment {
     }
 
     @objc private func handleDisconnect(_ sender: Any) {
-        contentView.disconnectButton.isEnabled = false
+        contentView.updateDisconnectButton(false, animated: false)
         interactor.stopTunnel()
     }
 }
diff --git a/ios/MullvadVPN/Views/AppButton.swift b/ios/MullvadVPN/Views/AppButton.swift
index 0ce8de9a47e1..022bd97b130b 100644
--- a/ios/MullvadVPN/Views/AppButton.swift
+++ b/ios/MullvadVPN/Views/AppButton.swift
@@ -119,9 +119,10 @@ class AppButton: CustomButton {
                 return updatedAttributeContainer
             }
 
-        let configurationHandler: UIButton.ConfigurationUpdateHandler = { button in
-            button.alpha = !button.isEnabled ? 0.5 : 1.0
+        let configurationHandler: UIButton.ConfigurationUpdateHandler = { [weak self] button in
+            guard let self else { return }
             button.configuration?.baseForegroundColor = button.state.customButtonTitleColor
+            updateButtonBackground()
         }
         configuration = config
         configurationUpdateHandler = configurationHandler
@@ -129,6 +130,12 @@ class AppButton: CustomButton {
 
     /// Set background image based on current style.
     private func updateButtonBackground() {
-        configuration?.background.image = style.backgroundImage
+        if isEnabled {
+            // Load the normal image and set it as the background
+            configuration?.background.image = style.backgroundImage
+        } else {
+            // Adjust the image for the disabled state
+            configuration?.background.image = style.backgroundImage.withAlpha(0.5)
+        }
     }
 }
diff --git a/ios/MullvadVPN/Views/CustomButton.swift b/ios/MullvadVPN/Views/CustomButton.swift
index 8c99ddb2cc6c..a956025f28e2 100644
--- a/ios/MullvadVPN/Views/CustomButton.swift
+++ b/ios/MullvadVPN/Views/CustomButton.swift
@@ -14,7 +14,7 @@ extension UIControl.State {
         case .normal:
             return UIColor.AppButton.normalTitleColor
         case .disabled:
-            return UIColor.AppButton.disabledTitleColor
+            return UIColor.AppButton.disabledTitleColor.withAlphaComponent(0.5)
         case .highlighted:
             return UIColor.AppButton.highlightedTitleColor
         default: