Withdrawal order and bracket-fill
How your account order, bracket-fill, and tax caps interact.
TL;DR. Each year, FIREproof draws from your accounts in the order you set. On top of that order, bracket-fill conversions and withdrawals can pre-fill cheap tax brackets ahead of where the order would normally go. ACA premium-subsidy caps and (when Feature 42 ships) IRMAA caps further constrain how much can be pulled from taxable sources in any single year.
The withdrawal order you set
The list in Account Withdraw Order defines a phased priority: accounts in the first phase are drained first, then the next phase, and so on. A typical order is Brokerage first (long-term capital gains rates), then Traditional (ordinary income), then Roth (tax-free, preserve compounding), with HSA and inherited accounts handled by their own rules.
How bracket-fill overlays the order
Bracket-fill lets you say: "any year my ordinary income would otherwise leave headroom in the 12% bracket, fill that headroom from Traditional accounts." Concretely, each year the engine pulls up to the bracket-fill amount from your pre-tax penalty-free accounts before it walks your withdrawal order, and then covers the rest of the year's spending by walking the order normally. Bracket-fill never re-orders your phases. It just grabs a Traditional slice off the top. If the bracket-fill amount is bigger than what's available in pre-tax penalty-free accounts, the engine takes what it can and the remaining spending is funded by your normal order.
Why the "12% bracket" isn't always 12%
Selecting 12% as your bracket-fill target doesn't mean the planner stops at the federal 12% ordinary-bracket ceiling. It means it stops where the real marginal cost of the next dollar of Traditional withdrawal would cross 12¢. The simulator walks the year's tax math at varying Traditional-draw levels and halts the moment the slope crosses your target — which can be a much smaller draw than the ordinary-bracket label suggests if any of these cliffs activate:
- LTCG stack-up. Every $1 of ordinary income pushes $1 of qualified dividends or long-term capital gains from the 0% LTCG bracket into the 15% one. A "12% bracket fill" can have a real cost of 12¢ ordinary + 15¢ LTCG = 27¢ per dollar of Traditional withdrawal in the displacement zone.
- Social Security "tax torpedo". Once combined income crosses the IRS Pub 915 thresholds ($25K / $34K for single filers, $32K / $44K for joint), each $1 of Trad can make 50¢ — and then 85¢ — of Social Security taxable. In the tier-2 zone, a 12% ordinary bracket effectively becomes 12% × 1.85 = 22.2%.
- Net Investment Income Tax (NIIT). When MAGI crosses $200K single / $250K MFJ / $125K MFS, a 3.8% surtax applies to investment income (interest, dividends, LTCG). The optimizer halts before pushing MAGI across this threshold if the surtax would push your effective rate above the target.
- OBBBA senior deduction phase-out. The $6,000-per-qualifying-spouse bonus deduction (tax years 2025–2028, applies once a filer is 65+) phases out 6¢ per $1 of MAGI above $75K single / $150K MFJ. Every Trad dollar inside the phase-out band costs ordinary-bracket rate plus 6% in lost deduction value.
The Proof View's "Why these withdrawals?" panel, expandable per year, shows which (if any) of these four effects drove the optimizer to halt earlier than the bracket ceiling, plus the realized effective marginal rate it stopped at.
ACA and IRMAA caps
- ACA cap. When you are pre-Medicare and on an ACA plan, drawing too much from pre-tax accounts can blow your premium subsidy. The engine can clamp pre-tax draws to keep MAGI inside the subsidy zone for that year.
- IRMAA cap. Once on Medicare, MAGI above certain thresholds adds Part B and Part D surcharges. An IRMAA cap will pull the same lever: shrink how much can be pulled from pre-tax accounts that year so you don't accidentally cross a tier.
Both caps stack with bracket-fill and with your withdrawal order. They only ever lower the ceiling on the year's pre-tax draw; they never rearrange phases.
Related
For sim-specific issues, open Plan Diagnostics from the Proof view. For everything else, reach out to support.