Calculate commercial mortgage prepayment penalties and yield differentials.
Usually 1% of the loan balance.
Calculation Results
Understanding Yield Maintenance in Commercial Real Estate
Yield maintenance is a prepayment premium used by commercial lenders to ensure they receive the same economic return they would have enjoyed had the borrower held the loan to its full maturity. It is primarily used in fixed-rate commercial mortgages, CMBS (Commercial Mortgage-Backed Securities), and life insurance company loans.
How the Calculation Works
The math behind a yield maintenance penalty involves comparing the interest rate on the existing loan (the Note Rate) to the current market yield for a US Treasury security with a maturity date similar to the remaining term of the loan. This is known as the "Benchmark Treasury Yield."
Interest Differential: The difference between the loan's note rate and the current Treasury yield.
Present Value Calculation: The calculator determines the present value of the remaining interest payments (based on the differential) discounted at the current Treasury rate.
The Floor: Most loan agreements include a "minimum floor," typically 1% of the outstanding principal balance. The borrower pays the greater of the yield maintenance calculation or the floor.
Example Scenario
Imagine a borrower with a $5,000,000 loan balance and a Note Rate of 5.5%. There are 60 months remaining on the loan. If current Treasury yields for a 5-year term have dropped to 3.5%, the lender is facing a 2% yield loss if the loan is prepaid. The yield maintenance penalty would be the present value of that 2% difference over the next 5 years.
Conversely, if Treasury rates have risen above the Note Rate, the calculation result will be negative or zero, and the borrower would typically only pay the 1% minimum penalty fee.
Strategic Considerations
Borrowers typically look at yield maintenance when considering a refinance or a sale of the property. Because these penalties can be significant—sometimes reaching 10-20% of the loan amount in low-interest environments—it is crucial to calculate these costs before committing to a transaction. Chatham Financial and other advisory firms often help borrowers navigate these costs during the defeasance or prepayment process.
function calculateYieldMaintenance() {
var balance = parseFloat(document.getElementById('loanBalance').value);
var noteRate = parseFloat(document.getElementById('noteRate').value);
var treasuryYield = parseFloat(document.getElementById('treasuryYield').value);
var months = parseFloat(document.getElementById('remainingMonths').value);
var minPercent = parseFloat(document.getElementById('minPenaltyPercent').value);
if (isNaN(balance) || isNaN(noteRate) || isNaN(treasuryYield) || isNaN(months) || isNaN(minPercent)) {
alert("Please enter valid numerical values for all fields.");
return;
}
// Convert annual rates to monthly
var monthlyNoteRate = (noteRate / 100) / 12;
var monthlyTreasuryRate = (treasuryYield / 100) / 12;
// Calculate Monthly Payment Difference
// This logic assumes an Interest-Only calculation for simplicity of the yield differential
// which is the industry standard for yield maintenance estimates.
var monthlyInterestNote = balance * monthlyNoteRate;
var monthlyInterestTreasury = balance * monthlyTreasuryRate;
var monthlyDifference = monthlyInterestNote – monthlyInterestTreasury;
var yieldMaintenancePenalty = 0;
if (monthlyDifference > 0) {
if (monthlyTreasuryRate === 0) {
yieldMaintenancePenalty = monthlyDifference * months;
} else {
// Present Value of an Annuity Formula
// PV = Pmt * [(1 – (1 + r)^-n) / r]
yieldMaintenancePenalty = monthlyDifference * ((1 – Math.pow(1 + monthlyTreasuryRate, -months)) / monthlyTreasuryRate);
}
} else {
yieldMaintenancePenalty = 0;
}
var minPenalty = balance * (minPercent / 100);
var finalPenalty = Math.max(yieldMaintenancePenalty, minPenalty);
var resultArea = document.getElementById('resultArea');
var totalPenaltyDiv = document.getElementById('totalPenalty');
var breakdownDiv = document.getElementById('penaltyBreakdown');
resultArea.style.display = 'block';
totalPenaltyDiv.innerHTML = "Estimated Penalty: $" + finalPenalty.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
var basis = (yieldMaintenancePenalty > minPenalty) ? "Yield Differential" : "Minimum Floor (1%)";
breakdownDiv.innerHTML = "Calculated Yield Maintenance: $" + yieldMaintenancePenalty.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + "" +
"Minimum Floor Penalty: $" + minPenalty.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + "" +
"Basis for Penalty: " + basis + "" +
"This represents approximately " + ((finalPenalty / balance) * 100).toFixed(2) + "% of your loan balance.";
}