FIREproof Help

Guides, references, and concepts

Browse topics

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). An I Bonds account usually belongs right after the Brokerage, so its tax deferral runs as long as other money lasts.

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.

Reading a year's withdrawals

Open a year in Proof View and expand Withdrawals. The first line names your withdrawal strategy and whether Tax-Efficient Withdrawals ran; click it to see the order the year used. Below it, Needed this year is the figure from the first step of the algorithm above (hover its info icon for the arithmetic). Each numbered step is one draw the planner made, in the order it made them, with its subtotal on the right and the accounts it drew from underneath. The subtotal is the sum of those accounts.

Draws the planner did not make come after the numbered steps: required minimum distributions, 72(t) SEPP payments, and expenses you set to come from a specific account. An amber step with a warning icon is a last resort, such as an HSA tapped for ordinary spending. The icon beside each account says how that draw is taxed: as income, on the gain only, or tax-free. Click an account to see its taxable amount.

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 strategy panel (open it from the strategy line at the top of Withdrawals) 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.

Roth withdrawals before 59½

A Roth withdrawal before 59½ comes out in IRS order: your contributions first, then conversions (oldest first), then earnings. Contributions are tax-free and penalty-free. A conversion less than five years old carries the 10% penalty but no tax. Earnings are taxed as ordinary income and carry the 10% penalty; a Rule of 55 age waives the penalty but never the tax. Taxed earnings count toward the income that sets ACA subsidies and IRMAA.

A Roth 401(k) is treated as if you rolled it into a Roth IRA when you left the job, so it follows the same order. A withdrawal taken from the plan itself is split between contributions and earnings by balance, which costs more. After 59½ FIREproof treats every Roth withdrawal as qualified, assuming the account has met the five-year rule.

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 warning marks a Pass 3 row that may carry an early-withdrawal penalty.
  • 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. The slice never exceeds what the year still needs after dividends and other income, so a year those cover may leave headroom unfilled; a Roth conversion is how to fill it anyway. 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, lists any of these four effects that raised the tax on that year's pre-tax withdrawals, with the tax rate on the last dollar withdrawn. When your spending needed more than your target allowed, the panel explains why pre-tax withdrawals stopped where they did: the next dollar would have been taxed above your target. When the pre-tax withdrawal covered your spending, the effects raised the tax but every dollar stayed within your target.

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. In a low-spending year it also draws enough from pre-tax accounts to reach 100% of the poverty level, the minimum for a subsidy, and reinvests what you do not spend. It uses pre-tax money you can take without the 10% early-withdrawal penalty first, and reaches into a penalized account only when the subsidy it unlocks is worth more than the penalty.
  • 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, and how much a bracket-fill Roth conversion adds, so you don't accidentally cross a tier. Medicare bills each year's surcharge on your income from two years earlier, so the cap starts two years before anyone turns 65. Keeping income low then often means spending Roth money instead, which can cost more tax later, when required distributions start.
  • 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 when more than one is active the lowest ceiling wins. With Tax-Efficient Withdrawals on, a cap only lowers the ceiling on the year's pre-tax draw. With it off, the NIIT cap on its own keeps your withdrawal order and only limits how much comes from pre-tax accounts; once it reaches the ceiling, the next account in your order pays the rest. The IRMAA and ACA caps also change the order: each year they draw from pre-tax accounts first, up to the ceiling, ahead of your withdrawal order. The IRMAA cap draws only what the year still needs after dividends and other income. The ACA cap can draw more to reach the subsidy floor, and redeposits what the year did not need. So with the IRMAA cap on, a household that lists its brokerage first can pay income tax on pre-tax money in a year the brokerage would have covered at little or no tax. A cap never reduces your spending: whatever it holds back comes from Roth, brokerage or cash instead.

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 IRMAA or NIIT threshold.

The ACA cap goes further, because crossing 400% of the poverty level loses the whole subsidy. With it on, a brokerage rebalance or a bucket refill stops at the income room left under that line, and the rest waits for a later year. The year's detail says when this happens. The rebalance still runs in full when your mix is 10 points or more off target, or when less than $2,000 of subsidy is at stake, so a year can still cross the line in those cases.

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.

Paying the tax on a Roth conversion

A conversion moves money between two of your accounts, so it is not a withdrawal and never appears in this order. Its tax does: the conversion is income in the year it happens, and the tax on that income is paid the following year, as part of that year's spending need, from the withdrawal order above. A strategy saved from the Tax Strategy Explorer can limit how much is converted so the tax fits in accounts you name; it does not change where the payment is drawn from.

Related

Was this helpful?

For sim-specific issues, open Plan Diagnostics from the Proof view. For everything else, reach out to support.