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, IRMAA and NIIT 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).
A checking or savings account placed in any phase but the last is treated as a spending buffer. Year-end rebalancing never refills it, and it sits outside your target allocation entirely - your percentages describe the money being managed, and cash you have earmarked for spending is not that. It appears in your allocation chart as its own Spending Buffer slice that shrinks as it drains. This applies to cash accounts only: ordering Brokerage before Traditional before Roth is a tax decision, and those accounts keep being rebalanced and counted for the years they take to drain. If you want a cash account topped up rather than drained, put it in your last phase.
529 and HSA accounts never appear in the withdrawal order. Their balances are earmarked for qualified use: a 529 funds only the expenses that name it as their funding account (tax-free for an Education Expense, taxed and penalized on the earnings for any other type), and an HSA funds Healthcare and Long-Term Care expenses (both are qualified medical expenses under IRC 213(d)), each through its own withdrawal path. A 529 is never raided for general spending, so a year that could only be covered by a 529 fails honestly instead of looking funded. An HSA is different: real tax law lets you spend HSA money on anything, at a cost. When every general-purpose account is exhausted, the simulator taps HSAs as a last resort, taxing the withdrawal as ordinary income plus a 20% penalty before age 65 (at 65 and older the penalty disappears and the HSA behaves like a Traditional IRA for non-medical spending). These draws are labeled "HSA (last resort)" in the year-by-year view.
When a sourcing strategy is active
A sourcing strategy (Parameters → Withdrawal strategy) can reshape the order above in the years its rule fires. The configuration - which strategy, which accounts, which classes, and the levels you hold each class at - is documented on the Parameters page. What matters here is what the per-year algorithm does with it.
A strategy never strands your spending, and that is why equities can still be sold in a bear year. Sequence-risk defense spends cash and bonds first and refuses equities while its rule is active, but the fallback runs in two stages. First the engine walks your normal withdrawal order with the equity exclusion still applied, which covers ordinary spill-over years. Only if that is exhausted too does it walk the order again with nothing excluded, selling equities as a genuine last resort. The alternative would be a failed year declared while the portfolio still held six figures of stock, which is a worse answer than an unwanted sale.
When that last stage is reached, the year detail says so rather than repeating the promise: the "Which accounts, in what order" panel swaps its "no equities were sold" line for the honest one and records the amount. The check is made against the withdrawals that actually happened, not against a prediction, so draws that reach equities by another route - a required minimum distribution from an equity-only IRA, a tax gross-up, a mid-year top-up - are reported too.
Two other year-detail lines come from the same panel. Cushion held appears in a year a level stopped a draw part-way and pushed the rest onto the next source. Year-end rebalancing appears when the trade pass was held back from selling a protected class, which is the other half of the promise: refusing to sell equities for spending achieves nothing if rebalancing sells them in December anyway.
Reading the withdrawal annotations
In the year-by-year detail, each withdrawal row carries a one-line note explaining why the planner chose that account. The notes map straight onto the algorithm above:
- Pass 1 rows filled your target bracket's headroom from pre-tax accounts. The "Why this number?" link opens the "Why these withdrawals?" panel, which shows the math that sized the draw.
- Pass 2 rows covered the rest of the year's need from non-pre-tax accounts, penalty-free sources first.
- Pass 3 rows are the fallback: Passes 1 and 2 fell short, so the planner reached for any remaining account.
- A follow-up draw row records an extra draw the planner made later in the year, for example a dividend or ACA subsidy true-up. It is not part of the numbered passes and splits proportionally by balance.
- Without Tax-Efficient Withdrawals, rows instead name the phase of your withdrawal order that selected the account and note that draws split proportionally by balance within a phase.
- A warning appears on any account that is missing from your withdrawal order entirely (it is treated as a last resort).
Rows from simulations run before these annotations existed render without notes; re-run the simulation to see them.
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, IRMAA and NIIT 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.
- NIIT cap. The Net Investment Income Tax adds 3.8% on investment income once MAGI crosses $200,000 (single), $250,000 (married filing jointly) or $125,000 (married filing separately). The cap holds pre-tax draws and Roth conversions so MAGI stays at or below that line.
All three 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, and they never reduce your spending - whatever the cap holds back comes from Roth, brokerage or cash instead. When more than one is active, the lowest ceiling wins.
One known limit: year-end rebalancing runs after the withdrawal decision, and a rebalance sale inside a brokerage account realizes capital gains (see below). Those gains land after the cap has already sized the year's draw, so a rebalance-heavy year can still finish slightly over the threshold.
Rebalancing can realize capital gains
Withdrawals are not the only trades that get taxed. At the end of each year the simulator rebalances your portfolio back to its target allocation, and a rebalance sale inside a brokerage account is a real sale: selling appreciated shares realizes long-term capital gains, which show up in the next year's Taxes section like any other capital gain. The drill-down under the Long-term Capital Gains row attributes the tax to the account whose shares were sold. Exchanges inside retirement accounts, HSAs, and 529s stay tax-free.
Related
For sim-specific issues, open Plan Diagnostics from the Proof view. For everything else, reach out to support.