diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_AccountStorageUI.cs b/Assets/PerfectWorld/Scripts/Managers/EC_AccountStorageUI.cs
new file mode 100644
index 0000000000..5c62e189dd
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_AccountStorageUI.cs
@@ -0,0 +1,126 @@
+using BrewMonster;
+using BrewMonster.Scripts;
+using BrewMonster.UI;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace BrewMonster.Scripts.Managers
+{
+ ///
+ /// Money-only account warehouse UI. C++ uses Win_Storage3, but this Unity port keeps it
+ /// separate from so normal warehouse item logic cannot leak in.
+ ///
+ public class EC_AccountStorageUI : AUIDialog
+ {
+ [SerializeField] private Button closeButton;
+ [SerializeField] private Button depositMoneyButton;
+ [SerializeField] private Button withdrawMoneyButton;
+ [SerializeField] private Text accountMoneyTextLegacy;
+ [SerializeField] private TMPro.TextMeshProUGUI accountMoneyTextTMP;
+
+ private static EC_AccountStorageUI s_instance;
+
+ public override void Awake()
+ {
+ base.Awake();
+ s_instance = this;
+ ResolveButtons();
+ WireButtons();
+ }
+
+ private void OnDestroy()
+ {
+ if (s_instance == this)
+ s_instance = null;
+ }
+
+ public static void RefreshMoneyStatic()
+ {
+ s_instance?.RefreshMoney();
+ }
+
+ public void RefreshAll()
+ {
+ RefreshMoney();
+ }
+
+ void ResolveButtons()
+ {
+ var buttons = GetComponentsInChildren