A loan recast, often referred to as a loan modification or restructuring, is a process where a lender agrees to change the terms of an existing loan. This typically involves adjusting the interest rate, payment schedule, or loan term to make payments more manageable for the borrower, especially during periods of financial hardship or when interest rates have fallen significantly. Unlike a refinance, which involves paying off an old loan with a new one (and often involves new closing costs and a credit check), a recast usually modifies the existing loan agreement without creating a new one.
When to Consider a Recast
Falling Interest Rates: If market interest rates have dropped substantially since you took out your loan, recasting can allow you to benefit from the lower rates without the full process of refinancing.
Improved Financial Situation: If your credit score has improved, you may qualify for a lower interest rate.
Payment Relief: If you're facing temporary financial difficulties, a recast might help adjust your monthly payments to a more affordable level.
Avoiding Refinance Costs: Recasting generally has lower fees than refinancing, making it a more cost-effective option in some scenarios.
How the Recast Loan Calculator Works
This calculator helps you estimate the potential savings from recasting your loan. It works by comparing your original loan's amortization schedule with a hypothetical new schedule based on the recast terms.
The calculation involves several steps:
Calculate Original Monthly Payment: Using the original loan amount, interest rate, and term, the standard mortgage payment formula is applied:
M = P [ i(1 + i)^n ] / [ (1 + i)^n – 1] Where:
M = Monthly Payment
P = Principal Loan Amount
i = Monthly Interest Rate (Annual Rate / 12)
n = Total Number of Payments (Loan Term in Years * 12)
Calculate Remaining Balance: The calculator determines the outstanding balance on the original loan after the specified "Time Elapsed Since Loan Origination." This is crucial because a recast typically applies to the remaining balance, not the original amount.
Calculate New Monthly Payment: Using the calculated remaining balance, the new interest rate, and the original loan term (often the remaining term after recasting, but for simplicity, this calculator assumes the original full term for comparison, focusing on the rate change impact), a new monthly payment is calculated using the same formula as above.
Calculate Total Savings: The difference between the total amount paid over the life of the loan with the original terms (from the point of recast) and the total amount paid with the recast terms (from the point of recast) is calculated. This includes the principal and interest saved.
By comparing these figures, you can see the potential financial benefit of recasting your loan.
Disclaimer: This calculator provides an estimate for informational purposes only. Actual savings may vary based on lender fees, specific loan terms, and amortization schedules. Consult with your lender for precise details.
function calculateLoanPayment(principal, annualRate, termInYears) {
var monthlyRate = annualRate / 100 / 12;
var numberOfPayments = termInYears * 12;
if (monthlyRate <= 0 || numberOfPayments <= 0) return 0; // Avoid division by zero or invalid calculations
var payment = principal * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / (Math.pow(1 + monthlyRate, numberOfPayments) – 1);
return payment;
}
function calculateRemainingBalance(principal, annualRate, termInYears, paymentsMade) {
var monthlyRate = annualRate / 100 / 12;
var numberOfPayments = termInYears * 12;
if (monthlyRate <= 0 || numberOfPayments = numberOfPayments) {
return 0;
}
// A more direct remaining balance formula from original principal:
// B = P * [ (1+i)^N – (1+i)^p ] / [ (1+i)^N – 1 ]
// Where N is total original payments, p is payments made.
// This formula calculates the present value of the remaining payments.
var remainingTermPayments = numberOfPayments – paymentsMade;
if (remainingTermPayments <= 0) return 0;
// Using the present value of remaining payments formula is more accurate for remaining balance
// PV = PMT * [1 – (1 + i)^-n] / i
// However, PMT needs to be the PMT for the *original* loan.
// Let's recalculate PMT first to ensure consistency
var originalMonthlyPayment = calculateLoanPayment(principal, annualRate, termInYears);
// Calculate remaining balance using the present value of the remaining payments
var remainingBalanceFormula = originalMonthlyPayment * (1 – Math.pow(1 + monthlyRate, -remainingTermPayments)) / monthlyRate;
// Ensure remaining balance is not negative due to calculation quirks
return Math.max(0, remainingBalanceFormula);
}
function calculateRecast() {
var originalLoanAmount = parseFloat(document.getElementById("originalLoanAmount").value);
var originalInterestRate = parseFloat(document.getElementById("originalInterestRate").value);
var originalLoanTerm = parseFloat(document.getElementById("originalLoanTerm").value);
var timeSinceLoanOrigination = parseFloat(document.getElementById("timeSinceLoanOrigination").value);
var newInterestRate = parseFloat(document.getElementById("newInterestRate").value);
var resultDiv = document.getElementById("result");
resultDiv.innerHTML = ''; // Clear previous results
// Input validation
if (isNaN(originalLoanAmount) || originalLoanAmount <= 0 ||
isNaN(originalInterestRate) || originalInterestRate <= 0 ||
isNaN(originalLoanTerm) || originalLoanTerm <= 0 ||
isNaN(timeSinceLoanOrigination) || timeSinceLoanOrigination < 0 ||
isNaN(newInterestRate) || newInterestRate = originalLoanTerm) {
resultDiv.innerHTML = "Time elapsed cannot be more than or equal to the loan term.";
resultDiv.style.backgroundColor = "#dc3545"; // Error color
return;
}
var monthlyRateOriginal = originalInterestRate / 100 / 12;
var totalOriginalPayments = originalLoanTerm * 12;
var originalMonthlyPayment = calculateLoanPayment(originalLoanAmount, originalInterestRate, originalLoanTerm);
// Calculate remaining balance
var paymentsMade = Math.floor(timeSinceLoanOrigination * 12);
var remainingBalance = calculateRemainingBalance(originalLoanAmount, originalInterestRate, originalLoanTerm, paymentsMade);
// Ensure remaining balance is not negative
remainingBalance = Math.max(0, remainingBalance);
// Calculate new monthly payment based on remaining balance and new rate
// The loan term for recasting is often the *remaining* term, but for comparing rate impact,
// we can use the original term's remaining duration for simplicity or calculate based on remaining term.
// Let's assume the loan duration remains the same for a direct rate comparison,
// meaning the monthly payment will decrease as the principal is lower and rate is lower.
// If the intent is to maintain the same end date, the term would be originalLoanTerm – timeSinceLoanOrigination.
// For this calculator, let's recalculate payment based on remaining balance, original rate and remaining term to show true potential savings.
var remainingTermYears = originalLoanTerm – timeSinceLoanOrigination;
var newMonthlyPayment;
if (newInterestRate 0) {
// Recast is beneficial, calculate new payment for remaining term
newMonthlyPayment = calculateLoanPayment(remainingBalance, newInterestRate, remainingTermYears);
} else if (remainingBalance === 0) {
newMonthlyPayment = 0; // Loan is already paid off
} else {
// New rate is higher or same, or remaining balance is zero. Recast not beneficial or no need.
// We still calculate the payment as if it were recast to show a hypothetical.
// If new rate is higher, savings would be negative (cost).
newMonthlyPayment = calculateLoanPayment(remainingBalance, newInterestRate, remainingTermYears);
}
// Ensure newMonthlyPayment is not NaN if remainingBalance was 0 or other edge cases
newMonthlyPayment = isNaN(newMonthlyPayment) ? 0 : newMonthlyPayment;
// Calculate total payments for the remaining term under original and recast terms
var remainingOriginalTotalInterest = 0;
var remainingOriginalTotalPayments = 0;
var currentBalanceForOriginal = remainingBalance;
var tempMonthlyRateOriginal = originalInterestRate / 100 / 12;
for (var i = 0; i < remainingTermYears * 12; i++) {
if (currentBalanceForOriginal <= 0) break;
var interestPayment = currentBalanceForOriginal * tempMonthlyRateOriginal;
var principalPayment = originalMonthlyPayment – interestPayment;
remainingOriginalTotalInterest += interestPayment;
remainingOriginalTotalPayments += originalMonthlyPayment;
currentBalanceForOriginal -= principalPayment;
if (currentBalanceForOriginal < 0) currentBalanceForOriginal = 0; // Ensure balance doesn't go below zero
}
var remainingRecastTotalInterest = 0;
var remainingRecastTotalPayments = 0;
var currentBalanceForRecast = remainingBalance;
var tempMonthlyRateNew = newInterestRate / 100 / 12;
var tempNewMonthlyPayment = calculateLoanPayment(remainingBalance, newInterestRate, remainingTermYears);
for (var i = 0; i < remainingTermYears * 12; i++) {
if (currentBalanceForRecast <= 0) break;
var interestPayment = currentBalanceForRecast * tempMonthlyRateNew;
var principalPayment = tempNewMonthlyPayment – interestPayment;
remainingRecastTotalInterest += interestPayment;
remainingRecastTotalPayments += tempNewMonthlyPayment;
currentBalanceForRecast -= principalPayment;
if (currentBalanceForRecast 0) {
savingsMessage = `You could save approximately $${totalSavings.toFixed(2)} over the remaining life of your loan!`;
} else if (totalSavings < 0) {
savingsMessage = `Recasting may increase your total payments by approximately $${(-totalSavings).toFixed(2)}.`;
} else {
savingsMessage = "Recasting your loan is estimated to have no significant impact on total payments.";
}
resultDiv.innerHTML = `
Original Monthly Payment: $${originalMonthlyPayment.toFixed(2)}
Remaining Balance: $${remainingBalance.toFixed(2)}
New Monthly Payment (Estimated): $${newMonthlyPayment.toFixed(2)}
${savingsMessage}
`;
resultDiv.style.backgroundColor = "var(–success-green)"; // Success color
}