Inside RetireOdds

The Tax Engine Got Serious (So the Odds Could Get Honest)

RetireOdds now taxes each withdrawal by what it actually is, prices ACA and IRMAA inside every simulated path, and covers all 50 states.

By · July 11, 2026
Family photo

Early on, our plan would pull money out of a Roth account, an account we had already paid tax on years before, and tax it in the simulation the same way it taxed a 401(k) withdrawal. Mayur caught it by accident, comparing two withdrawal streams that should have looked nothing alike and finding them nearly identical. A dollar out of a Roth and a dollar out of a traditional 401(k) are not remotely the same event to the IRS, and a retirement model that treats them the same isn't approximating reality, it's ignoring the single biggest lever most retirees actually have: which account to draw from. That gap is most of what this update closes.

Withdrawals taxed as what they are

Bucket-aware taxation is now the default for every simulation, not an option to dig up in settings. A withdrawal from a taxable account is taxed as a capital gain. A withdrawal from a tax-deferred account is taxed as ordinary income. A withdrawal from a Roth is taxed as nothing, because it already was. Required minimum distributions are forced on schedule rather than left to a spending rule that might ignore them. It sounds obvious written out like that, and it's exactly the thing a flat withdrawal-tax assumption erases.

RetireOdds — tax view.
RetireOdds — tax view.

Roth conversions get the same treatment: each simulated path computes its own conversion tax against its own buckets, and that tax is paid from the right pocket instead of a shared average.

Two cliffs the model now actually sees

Two thresholds matter enormously to real households and get missed by models that only look at withdrawal totals.

The ACA subsidy cliff — the 400-percent-of-poverty-line threshold — is priced inside each individual simulated path, not calculated once against an average outcome. A good market year that pushes a path's income over the line costs that path its subsidy, and the model registers it, because good years are exactly when this tends to happen and exactly when a simplified model would miss it.

An average year never triggers a cliff. Only a specific year does, and a plan has to be tested year by year to find out.

Medicare IRMAA is billed the way Medicare actually bills it: off a two-year income lookback, not off the same year's income. A high-income year shows up as a premium surcharge two years later, which is also when it's easiest to forget where the bill came from.

Family photo

Smaller pieces, same standard

A handful of other corrections went in alongside the two big ones. Social Security claiming adjustments now use the claimant's own full retirement age pulled from the SSA's birth-year tables, instead of one age applied to everyone. Dividends and interest generate real tax drag, including the net investment income tax where it applies, without ever getting double-counted as extra portfolio return on top of that. State income tax now covers all 50 states plus DC, including the handful — Illinois, Pennsylvania, Mississippi among them — that exempt retirement-plan distributions outright. And real and nominal dollars are never mixed within a calculation; a number is in one frame or the other, always labeled.

None of this is tax advice, and it never will be — it's modeling, built to be as honest as a simulation can be about what the tax code actually does to a withdrawal, a conversion, or a good year in the market. The constants behind it are pinned to the current tax year and checked against primary sources, and we'd rather the odds you see be a little more sobering and a lot more true.

Key takeaways

  • Withdrawals are now taxed by account type by default: capital gains from taxable, ordinary income from tax-deferred, nothing from Roth, with RMDs forced on schedule.
  • The ACA subsidy cliff and Medicare IRMAA (on its real two-year lookback) are priced inside each simulated path, not just an average outcome.
  • Social Security claiming now uses each claimant's own full retirement age from SSA's birth-year tables.
  • State tax coverage spans all 50 states plus DC, including states that exempt retirement-plan distributions.

This is modeling, not tax advice — run your own plan and see how the buckets actually shake out.

See your own odds.

Put your real numbers in and run a 1,000-path Monte Carlo simulation — free to start.

Create your free account →

RetireOdds publishes educational content to help you make informed decisions. It is not financial, investment, or tax advice. Figures are illustrative. Consult a qualified professional about your situation.