> For the complete documentation index, see [llms.txt](https://www.bluegamma.io/documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.bluegamma.io/documentation/pricers/make-whole-calculator.md).

# Make-Whole Calculator

Estimate a make-whole or yield maintenance prepayment for a fixed-rate loan or bond in USD, GBP or EUR, using a standard convention or your own.

The **Make-Whole Calculator** estimates what a borrower pays to prepay a fixed-rate loan or bond under a make-whole or yield maintenance clause.

Open it from the sidebar under **Loan Payment → Make-Whole** (marked **Preview**), or search for "yield maintenance". The page prices a default loan as soon as it opens.

{% hint style="info" %}
Results are estimates; check them against your loan documents.
{% endhint %}

***

### 1. Choose the Currency and Convention

**Currency** (**USD**, **GBP** or **EUR**) filters **Convention** and picks its default. Each convention fills in the discount basis and spread:

| Convention                               | Discount curve        | Discount rate                 | Tenor reference       | Spread (bps) | Payoff                     |
| ---------------------------------------- | --------------------- | ----------------------------- | --------------------- | ------------ | -------------------------- |
| **CMBS Yield Maintenance** (USD default) | US Treasuries         | Single rate at matching tenor | Remaining maturity    | 0            | Rate-differential, floored |
| **US PP Make-Whole**                     | US Treasuries         | Single rate at matching tenor | Weighted-average life | 50           | Greater of par or PV       |
| **USD Public Corporate MW**              | US Treasuries         | Full curve                    | Not used              | 15           | Greater of par or PV       |
| **USD Mid-swaps PP**                     | USD Mid-swaps (SOFR)  | Single rate at matching tenor | Remaining maturity    | 50           | Greater of par or PV       |
| **Spens** (GBP default)                  | UK Gilts              | Single rate at matching tenor | Remaining maturity    | 0            | Greater of par or PV       |
| **GBP Mid-swaps PP**                     | GBP Mid-swaps (SONIA) | Single rate at matching tenor | Remaining maturity    | 50           | Greater of par or PV       |
| **EUR EMTN Make-Whole** (EUR default)    | German Bunds          | Full curve                    | Not used              | 50           | Greater of par or PV       |
| **EUR Mid-swaps PP**                     | EUR Mid-swaps (ESTR)  | Single rate at matching tenor | Remaining maturity    | 50           | Greater of par or PV       |
| **Custom**                               | Unchanged             | Unchanged                     | Unchanged             | Unchanged    | Greater of par or PV       |

**Spread (bps)** is the reinvestment spread. Editing it keeps the convention.

***

### 2. Check the Discount Basis

The **Discount basis** panel shows **Discount curve**, **Discount rate** and, for a single rate, **Tenor reference**. Changing any of them switches the convention to **Custom**.

For a single rate, **Override rate manually** replaces the curve rate with yours. On UK Gilts the field is **Reference Gilt GRY (manual override)**.

***

### 3. Enter the Loan

**Loan Principal** (default 10,000,000), **Coupon (%)** (5.75), **Day Count** (Actual/360, 30/360, Actual/365 or Act/Act ICMA), **First Payment Date** (3 years ago), **Prepayment Date** (today) and **Maturity Date** (10 years after the first payment).

**Amortisation Type** is **Bullet** (default), **Amortising** (with **Amortisation Term (months)** and an optional **Monthly Payment**) or **Custom schedule**. A custom schedule replaces the dates and term: paste **Start Date**, **End Date** and **Opening Balance** from Excel, one row per period. Each row starts where the last ended, balances only fall, and the last balance is repaid on its end date. Ambiguous dates such as 03/04/2027 are read day first. A preview with **Principal Repaid** flags problem rows.

Under CMBS Yield Maintenance, **Floor (% of balance)** sets the minimum premium (1% by default).

**Advanced options** has **Valuation Date** (a past day's closing curve) and **Curve Shock (bps)**. Click **Calculate Make-Whole**.

***

### 4. Read the Result

<figure><img src="https://3184259219-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmmQPefoflG1RwUnUKKBR%2Fuploads%2Fgit-blob-8dd5982ef4f7096f79aeec4a5a5a549da536dd02%2Fmake-whole-calculator-result.png?alt=media" alt="The Make-Whole Calculator on the CMBS Yield Maintenance convention, with the Discount basis panel and the result on the Costs tab, headed by Total payoff at prepayment"><figcaption></figcaption></figure>

The headline is **Total payoff at prepayment**. Under it is the curve rate used, before the spread, or a note that the full curve was used.

| Tab             | Rows                                                                                                                                                                                                                    |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Costs**       | **Outstanding Balance**, **Accrued Interest**, **Make-Whole Amount** (includes principal), **Total Payoff**, **Present value of remaining payments**, **Floor Amount**, **Premium over Floor** (not for CMBS), **DV01** |
| **Loan**        | **Prepayment Date**, **Premium as % of Balance**, **Remaining Payments**, **Next Payment Date**, **Maturity Date**, **Floor**                                                                                           |
| **Market data** | **Valuation Date**, **Curve Data Updated**, **Reinvestment Spread**                                                                                                                                                     |

Accrued Interest and Total Payoff show only between payment dates.

Below: **Prepayment Burndown** (quarterly later dates, up to 2 years), **Payment Discounting Breakdown** (each payment's **Discount Rate**, **Reinvestment Rate**, **Discount Factor** and **Present Value**) and the currency's government curve, also shown for mid-swaps. **Download PDF report** saves the estimate.

## How It Is Calculated

Payments are discounted to the prepayment date at the rate plus spread. A single rate is read at the remaining maturity or WAL (Σ years × principal ÷ Σ principal): Treasuries and mid-swaps interpolate between quoted tenors; Gilts and Bunds use the zero curve. **Full curve** discounts each payment at its own zero rate.

* **CMBS Yield Maintenance**: premium = max(Σ max(coupon − rate, 0) ÷ 12 × period opening balance × DF, floor × balance). **Make-Whole Amount** = balance + premium.
* **Other conventions**: **Total Payoff** = max(balance + accrued, PV). **Make-Whole Amount** = Total Payoff − accrued.

**DV01** is the premium's change for a 1bp rise in the curve. Totals exclude third-party fees.

## Related

* [Defeasance Calculator](/documentation/pricers/defeasance-calculator.md): US loan defeasance with Treasuries
* [Government Bond Curves](/documentation/methodology/government-bond-curves.md): how the government curves are built


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://www.bluegamma.io/documentation/pricers/make-whole-calculator.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
