Understanding the FHSA

finance
tax
allocation
Published

April 20, 2023

The FHSA does not combine the benefits of the TFSA and RRSP. It has unique advantages that make it completely different from any other registered account.

Combining the Benefits

The Globe and Mail1, TD2, CIBC3, and Questrade4, have all claimed that the FHSA combines the benefits of the TFSA and RRSP.

It is true that like the RRSP, contributions are deductable, and like the TFSA, withdrawals are tax free. But the FHSA does not combine these features except by coincidence. What is being observed is that while both the TFSA and RRSP are subject to income tax, the FHSA is not.

Imagine there are two bullies at school. One beats you up in the morning and one beats you up in the afternoon. A new kid comes along who never beats you up. Would you describe him as combining the benefits of the two bullies?

Rather than trying to understand the FHSA in relation to the existing accounts, advisers should emphasize its unique value. But first they have to understand the benefits of the RRSP and TFSA.

The RRSP and TFSA

Both the RRSP and TFSA provide the same benefit: tax free capital gains.5 With the TFSA tax is paid on the income when it is earned and withdrawals are untaxed. The RRSP instead defers the income tax until the funds are withdrawn.

For a constant tax rate, the final after tax value of both accounts will be identical and will be equivalent to the capital gains tax that would have been paid if the investments were held in a taxable account.6

When the tax rate is not constant, the percent difference in return between an RRSP and TFSA is completely attributable to the change in tax rates:

\[ \begin{align} \text{RRSP Return} &= (\text{Savings} \, (1+r)^t) \cdot (1-\text{Future Tax Rate}) \\ \text{TFSA Return} &= (\text{Savings} \, (1-\text{Current Tax Rate})) \cdot (1+r)^t \end{align} \] \[ \begin{align} \%\Delta &= \frac{\text{RRSP Return}}{\text{TFSA Return}} - 1 \\ &= \frac{1-\text{Future Tax Rate}}{1-\text{Current Tax Rate}}-1 \\ &= \frac{\text{Current Tax Rate} - \text{Future Tax Rate}}{1-\text{Current Tax Rate}} \end{align} \]

Some investors may predict paying a lower tax rate when the funds are withdrawn, in that case the RRSP will provide superior returns to the TFSA. Other investors may anticipate that their tax rate will rise, making the TFSA superior.

There are several factors that contribute to one’s future tax rates and not all of them are controllable or even predictable. Government policy will ultimately determine your tax rate.7

The FHSA

The FHSA is different and much more powerful.

In addition to the capital gains benefit of the TFSA and RRSP, the FHSA allows the investor to permanently avoid paying income tax on the principal. This full absolution of income tax on deposits is equivalent to the absolute best case scenario of withdrawing from an RRSP at a future tax rate of 0% or contributing to a TFSA at a current rate of 0%.

While your future income tax rates are subject to unpredictable government policy, the decision to purchase a residence in Canada is substantially in your control. Even if you fail to make a qualifying purchase within the 15 year time limit there is limited downside as the FHSA can be converted to an RRSP without penalty.

The Difference

So what is the extent of this benefit? On a $40,000 deposit, at 30% income tax the immediate savings amount to $12,000. Those savings then grow as part of your investment without being subject to capital gains. At 5% annual growth for 10 years the FHSA will save $22,000 in tax. A TFSA would have saved only $2,600.8

This is obviously a massive difference. For most investors the FHSA will provide a benefit unmatched by even the best case scenarios of any other registered account.

Experiment with this calculator to see which registered account provides the greatest benefit for your situation.

Calculator

Code
viewof pre_tax_savings = Inputs.number(
  [0, 200000000],
  {value: 40000, step: 500, label: "Pre-tax Savings:"}
);

viewof RRSP_match = Inputs.range(
  [0, 1],
  {value: 0, step: .01, label: "RRSP Match:"}
);

viewof max_RRSP_match = Inputs.number(
  [0, 100000],
  {value: 100000, step: 100, label: "Max RRSP Match"}
);

viewof RESP_match = Inputs.number(
  [0, 1],
  {value: .2, step: .01, label: "RESP Match:"}
);

viewof max_RESP_match = Inputs.number(
  [0, 100000],
  {value: 7200, step: 100, label: "Max RESP Match:"}
);

viewof annual_return = Inputs.range(
[0, 2],
{value: .05, step: .005, label: "Annual Return:"}
);

viewof years = Inputs.range(
[1, 100],
{value: 10, step: 1, label: "Years Invested:"}
);

viewof current_tax = Inputs.range(
[0, 1],
{value: .3, step: .01, label: "Current Income Tax Rate:"}
);

viewof future_tax = Inputs.range(
[0, 1],
{value: .3, step: .01, label: "Future Income Tax Rate:"}
);

viewof ben_future_tax = Inputs.range(
[0, 1],
{value: 0, step: .01, label: "Beneficiary's Future Income Tax Rate:"}
);
Code
html`<style>svg { font-size: 12px !important }`
Code
Plot.plot({
  x: {
    grid: false,
    label: "Account",
  },
  marks: [
    Plot.axisY({label: null, ticks: 0}),
    Plot.barY(line_data, Plot.selectLast({x: "account", y: "value", fill: "account"})),
    Plot.text(
      line_data, 
      Plot.selectLast({
        x: "account", 
        y: "value",
        z: "account",
        text: (d) => (
          d.value.toLocaleString("en-US", {style: "currency", currency: "USD" })
        ),
        dy: -6,
        lineAnchor: "bottom"
      })
    ),
  ],
})
Code
Plot.plot({
  y: {
    grid: true,
    label: "Account Value",
  },
  x: {
    grid: false,
    label: "Year",
  },
  color: {legend: true},
  marks: [
    Plot.axisX({ticks: d3.min([years, 15]), tickFormat: (year) => year.toFixed(0)}),
    Plot.line(line_data, { x: "year", y: "value", stroke: "account" }),
    Plot.text(line_data, Plot.selectLast({
      x: "year",
      y: "value",
      z: "account",
      text: (d) => d.value.toLocaleString("en-US", { style: "currency", currency: "USD" }),
      dy: -6,
      dx: -25
    }))
  ],
})
Code
line_data = {
  // Deposit
  let current_year = new Date().getFullYear()
  let Taxable = (pre_tax_savings * (1 - current_tax))
  let TFSA = (pre_tax_savings * (1 - current_tax))
  let RRSP = (pre_tax_savings) + d3.min([pre_tax_savings * RRSP_match, max_RRSP_match])
  let RESP = (pre_tax_savings * (1 - current_tax)) + d3.min([pre_tax_savings * RESP_match, max_RESP_match])
  let FHSA = (pre_tax_savings)
  let temp = [
    {year: current_year, account: "Taxable", value: Taxable},
    {year: current_year, account: "TFSA", value: TFSA},
    {year: current_year, account: "RRSP", value: RRSP},
    {year: current_year, account: "RESP", value: RESP},
    {year: current_year, account: "FHSA", value: FHSA},
  ];

  // Grow
  for (var i = 1; i < years; i++) {
    Taxable = Taxable * (1 + annual_return)
    TFSA = TFSA * (1 + annual_return)
    RRSP = RRSP * (1 + annual_return)
    RESP = RESP * (1 + annual_return)
    FHSA = FHSA  * (1 + annual_return)
    temp.push({year: current_year + i, account: "Taxable", value: Taxable})
    temp.push({year: current_year + i, account: "TFSA", value: TFSA})
    temp.push({year: current_year + i, account: "RRSP", value: RRSP})
    temp.push({year: current_year + i, account: "RESP", value: RESP})
    temp.push({year: current_year + i, account: "FHSA", value: FHSA})
  }

  // Withdraw
  Taxable = Taxable * (1 + annual_return)
  Taxable = Taxable - (Taxable - pre_tax_savings * (1 - current_tax)) * .5 * future_tax
  TFSA = TFSA * (1 + annual_return)
  RRSP = RRSP * (1 + annual_return) * (1 - future_tax)
  RESP = RESP * (1 + annual_return) * (1 - ben_future_tax)
  FHSA = FHSA  * (1 + annual_return)
  temp.push({year: current_year + years, account: "Taxable", value: Taxable})
  temp.push({year: current_year + years, account: "TFSA", value: TFSA})
  temp.push({year: current_year + years, account: "RRSP", value: RRSP})
  temp.push({year: current_year + years, account: "RESP", value: RESP})
  temp.push({year: current_year + years, account: "FHSA", value: FHSA})
  return temp
}

Footnotes

  1. https://www.theglobeandmail.com/investing/personal-finance/household-finances/article-rollout-of-fhsa-remains-inconsistent-one-month-in/↩︎

  2. https://www.td.com/ca/en/personal-banking/personal-investing/learn/tax-free-first-home-savings-account↩︎

  3. https://www.cibc.com/en/personal-banking/investments/fhsa.html↩︎

  4. https://developer.questrade.com/learning/investment-concepts/fhsa-101/fhsa-101↩︎

  5. As the TFSA and RRSP both provide the same benefit it should be apparent that the FHSA cannot combine those benefits to provide anything new.↩︎

  6. For a fuller treatment of the relationship between the RRSP and TFSA see this blog post from retail-investor.org.↩︎

  7. The deferral mechanism of the RRSP is often erroneously considered a benefit in the current period even though it is offset by the future tax liability.↩︎

  8. This is a simplification that ignores annual deposit limits↩︎