Section 162 Incorporation Relief: a new claim requirement, not the end of the relief
Property118

Section 162 Incorporation Relief: a new claim requirement, not the end of the relief
A significant change has now taken effect for landlords and other business owners transferring a qualifying business to a company.
For transfers completed on or after 6 April 2026, Incorporation Relief under Section 162 TCGA 1992 no longer applies automatically. Instead, each relevant transferor must actively claim the relief through their Self Assessment tax return for the tax year in which the transfer takes place.
This is an important administrative change, but it is equally important to understand what has not changed.
Section 162 Incorporation Relief has not been abolished. A qualifying business can still be transferred to a company with the relevant capital gain rolled into the shares received. Property118’s Reassure Incorporation service also remains available.
The change means that greater attention must now be given to the claim, the supporting calculations and the evidence retained at the time of incorporation.
From automatic relief to an active claim
Before 6 April 2026, Section 162 relief arose automatically where the statutory conditions were satisfied. There was no standalone application for the relief and no requirement to ask HMRC to approve the incorporation.
The transaction still needed to be correctly implemented, calculated and reported. However, the legislation did not require the transferor to make a separate claim.
Under the new rules, the transferor must make the claim in their Self Assessment return. HMRC has said that claimants will be required to provide:
- brief details of the incorporation transaction;
- the relevant tax computations; and
- the type of business transferred.
The new requirement applies to transfers taking place from 6 April 2026. It does not retrospectively impose a new claim requirement on qualifying transfers completed before that date.
The earlier clearance approach
Property118’s experience of preparing evidence for HMRC goes back considerably further than the new rules.
In the earlier years of our incorporation work, detailed non-statutory clearance submissions were frequently prepared and sent to HMRC before transactions were implemented. These explained the proposed arrangements, the commercial background, the nature of the property business and the relevant interpretation of the tax legislation.
Those submissions were an additional evidential and professional safeguard. They were not the statutory mechanism through which Section 162 relief was obtained, because the relief itself remained automatic where its conditions were met.
HMRC’s non-statutory clearance service is intended for cases involving genuine uncertainty about how legislation applies. It is not a general confirmation service and HMRC will not provide clearance on questions of fact, such as whether particular activities amount to a business.
As advance clearance became less readily available for these matters, incorporations generally proceeded without an advance view from HMRC. The relevant evidence nevertheless remained important in the event of a subsequent enquiry.
What should now be prepared?
The documents formally required with the claim will depend upon HMRC’s reporting process. In addition, we consider it prudent to assemble and retain a comprehensive evidence file at the time of incorporation.
Depending upon the circumstances, this should include:
- professional valuations of the properties and other relevant business assets;
- mortgage statements showing the liabilities connected with the portfolio;
- evidence of the activities through which the property business was conducted;
- records of the commercial reasons for incorporating;
- executed legal and company documentation; and
- the calculations supporting the amount of relief claimed.
Not every document will necessarily be submitted with the tax return. However, evidence prepared contemporaneously is generally more persuasive than records reconstructed several years later after HMRC has opened an enquiry.
Where the FTT decision fits in
Property118’s recent First-tier Tribunal success remains highly relevant, but for a different reason.
The Tribunal considered whether the Substantial Incorporation Structure and Capital Account Restructure arrangements were notifiable under DOTAS. It allowed the appeals and cancelled HMRC’s decisions to allocate Scheme Reference Numbers.
In reaching its decision, the Tribunal examined the arrangements and their commercial context in considerable detail. That included the costs and practical disadvantages of immediate refinancing, the preservation of existing mortgage terms and the ability of landlords to retain access to capital accumulated within their businesses.
The FTT ruling provides valuable clarity about the DOTAS treatment of the arrangements. It does not, however, constitute a blanket determination that every individual client qualifies for Section 162 relief. Entitlement continues to depend upon the facts of each business and the proper implementation and documentation of each transfer.
That distinction reinforces the importance of the new claims process rather than diminishing the value of the Tribunal decision.
Experience matters under the new rules
Over more than a decade, Property118 and the professionals with whom we work have dealt with advance clearance submissions, completed incorporations, HMRC compliance checks, Discovery Assessments and a full ten-day FTT hearing.
We continue to engage with HMRC through established professional channels and to present clients’ positions clearly, transparently and with appropriate supporting evidence.
The new claim requirement introduces an additional compliance step. It does not remove the underlying relief or invalidate properly structured incorporation planning.
Our procedures are being adapted to ensure that the claim, calculations and evidence are addressed as an integral part of every relevant incorporation.
BOOK YOUR CONSULTATION TODAY
Sources and why they matter
Section 39, Finance Act 2026
This is the legislation introducing the requirement to claim Incorporation Relief. It amends Section 162 for transfers taking place from 6 April 2026.
HMRC: Incorporation Relief claims process
HMRC’s policy paper confirms that the claim must be made through the transferor’s Self Assessment return. It also identifies the information HMRC expects claimants to provide.
Section 162, Taxation of Chargeable Gains Act 1992
This is the underlying legislation providing Incorporation Relief. The new rules change the claims process, not the fundamental purpose of the relief.
Property 118 Limited & Anor v HMRC [2026] UKFTT 1111 (TC)
This is the official FTT judgment. The Tribunal examined SIS and CAR, their tax consequences and the commercial circumstances in which landlords used them. At paragraph 187, it allowed the appeals and cancelled HMRC’s decisions to allocate the Scheme Reference Numbers.
The judgment provides important clarity concerning DOTAS and supports the commercial rationale underlying the arrangements. It should be read alongside paragraph 196, which confirms that the DOTAS proceedings did not determine the separate tax position of each individual client.
HMRC: Non-Statutory Clearance Service
This explains the purpose and limitations of HMRC’s clearance service. In particular, HMRC states that it is not a general confirmation service and requires a genuine uncertainty about the application of legislation.
Property118: A Major CGT Bombshell Hidden in the 2025 Budget
This is Property118’s original report identifying the Budget announcement and explaining the practical implications of moving from automatic relief to an active claims process.
Why landlords continue to choose Property118
The landlords who engage Property118 are rarely searching for a clever tax scheme. More often, they are searching for clarity.
They want confidence that the business they have spent years building will continue to to prosper and reassurance that their business can continue beyond their own involvement.
Successful incorporations begin with a clear understanding of what the landlord is trying to achieve. The tax consequences are important and should never be ignored, but the most successful outcomes are almost always driven by commercial objectives rather than taxation alone.
That philosophy continues to guide everything we do today.
1. Property business details
Get your free PDF report
(function(){
var uid = “crm-form-263729fd”;
var form = document.getElementById(uid + ‘-form’);
var wrap = document.getElementById(uid);
var msg = wrap.querySelector(‘.crm-message’);
var totalPages = 1;
var curPage = 0;
// ── Conditional logic ────────────────────────────────────────────────
var condMap = {};
function getFieldValue(fieldId) {
var els = form.querySelectorAll(‘[name=”‘ + fieldId + ‘”], [name=”‘ + fieldId + ‘[]”]’);
if (!els.length) return ”;
var first = els[0];
if (first.type === ‘checkbox’ || first.type === ‘radio’) {
var checked = [];
els.forEach(function(el){ if (el.checked) checked.push(el.value); });
return checked.join(‘,’);
}
return first.value;
}
function evalRule(rule) {
var val = getFieldValue(rule.fieldId);
var cmp = rule.value;
switch (rule.operator) {
case ‘is': return val === cmp;
case ‘isnot': return val !== cmp;
case ‘greaterthan': return parseFloat(val) > parseFloat(cmp);
case ‘lessthan': return parseFloat(val) < parseFloat(cmp);
case 'contains': return val.indexOf(cmp) !== -1;
case 'startswith': return val.indexOf(cmp) === 0;
case 'endswith': return val.slice(-cmp.length) === cmp;
default: return false; // fail closed — mirror the CRM shared matcher
}
}
function applyConditionals() {
Object.keys(condMap).forEach(function(fieldId) {
var cond = condMap[fieldId];
var rules = cond.rules || [];
var match = cond.logicType === 'any'
? rules.some(evalRule)
: rules.every(evalRule);
var show = cond.actionType === 'show' ? match : !match;
var wrapper = form.querySelector('[data-field-id="' + fieldId + '"]');
if (!wrapper) {
var el = form.querySelector('[name="' + fieldId + '"], [name="' + fieldId + '[]"]');
if (el) wrapper = el.closest('.crm-field, .crm-half');
}
if (wrapper) wrapper.style.display = show ? '' : 'none';
});
}
form.addEventListener('change', applyConditionals);
form.addEventListener('input', applyConditionals);
applyConditionals();
// ── Required-field validation (Next + Submit) ────────────────────────
// Validate from the form's field config (id + type), NOT the [required]
// HTML attribute: a checkbox group can't carry a meaningful `required`
// (native means "tick every box"), so attribute checks skip it — which is
// why empty checkbox questions slipped past Next straight to submit.
var crmRequired = [{"id":"29a6d2dd-1824-4d07-ae3f-5e14607d1599","type":"number","label":"Gross annual rent"}];
function crmWrapper(id) {
var w = form.querySelector('[data-field-id="' + id + '"]');
if (!w) { var el = form.querySelector('[name="' + id + '"], [name="' + id + '[]"]'); if (el) w = el.closest('.crm-field, .crm-half'); }
return w;
}
function crmFilled(fld) {
var els = form.querySelectorAll('[name="' + fld.id + '"], [name="' + fld.id + '[]"]');
if (!els.length) return true;
if (['checkbox','radio','product','consent'].indexOf(fld.type) !== -1) { return Array.prototype.some.call(els, function(el){ return el.checked; }); }
return (els[0].value || '').trim() !== '';
}
function crmFirstInvalid(pageIdx) {
for (var i = 0; i < crmRequired.length; i++) {
var fld = crmRequired[i]; var w = crmWrapper(fld.id);
if (!w) continue;
if (w.style.display === 'none') continue;
if (pageIdx != null) { var pd = w.closest('[data-page]'); if (!pd || parseInt(pd.getAttribute('data-page')) !== pageIdx) continue; }
if (!crmFilled(fld)) return fld;
}
return null;
}
// Shows the error in a red box UNDER the field, matching the form's own
// .crm-message error styling, and scrolls to it.
function crmMarkError(w, text) {
if (!w) return;
var e = w.querySelector('.crm-inline-error');
if (!e) { e = document.createElement('div'); e.className = 'crm-inline-error'; w.appendChild(e); }
e.style.cssText = 'background:#fee2e2;color:#991b1b;padding:.55rem .75rem;border-radius:4px;margin-top:.4rem;font-size:.9rem';
e.textContent = text || 'Please answer this before continuing.';
}
function crmClearError(w) { if (!w) return; var e = w.querySelector('.crm-inline-error'); if (e) e.parentNode.removeChild(e); }
function crmReportInvalid(fld) {
var w = crmWrapper(fld.id);
var t = (['checkbox','product'].indexOf(fld.type) !== -1) ? 'Please select at least one option.' : (fld.type === 'radio' ? 'Please choose an option.' : 'Please fill this in.');
crmMarkError(w, t);
if (w && w.scrollIntoView) w.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
form.addEventListener('change', function(e){ var w = e.target && e.target.closest ? e.target.closest('.crm-field, .crm-half, [data-field-id]') : null; if (w) crmClearError(w); });
form.addEventListener('input', function(e){ var w = e.target && e.target.closest ? e.target.closest('.crm-field, .crm-half, [data-field-id]') : null; if (w) crmClearError(w); });
// ── Multi-page navigation ────────────────────────────────────────────
// ── Submit ────────────────────────────────────────────────────────────
var submitBtn = form.querySelector('button[type=submit]');
var btnText = submitBtn ? submitBtn.textContent : 'Submit';
var crmApiUrl = "https://crm-api.property118.com";
function collectFormData() {
var data = {};
for (var j = 0; j < form.elements.length; j++) {
var el = form.elements[j];
if (!el.name) continue;
if (el.type === 'file') continue; // handled by uploadFiles()
if (el.type === 'radio' && !el.checked) continue;
if (el.type === 'checkbox') {
if (!el.checked) continue;
var k = el.name.replace('[]','');
data[k] = data[k] ? data[k].concat([el.value]) : [el.value];
} else {
data[el.name] = el.value;
}
}
// Repeater fields: sub-inputs are named "[][]”.
// Group those flat keys into an array of row objects under the repeater
// id. Plain fields, checkbox “[]” arrays and single-bracket composites
// (name[first], address[city]) don’t match the double-bracket pattern, so
// ordinary submissions are unchanged.
var _repRe = /^(.+?)[(d+)][(.+)]$/;
var _repIds = {};
Object.keys( data ).forEach( function ( key ) {
var m = key.match( _repRe );
if ( ! m ) { return; }
var rid = m[1], row = parseInt( m[2], 10 ), sub = m[3];
_repIds[ rid ] = true;
if ( ! Array.isArray( data[ rid ] ) ) { data[ rid ] = []; }
if ( ! data[ rid ][ row ] || typeof data[ rid ][ row ] !== ‘object’ ) { data[ rid ][ row ] = {}; }
data[ rid ][ row ][ sub ] = data[ key ];
delete data[ key ];
} );
Object.keys( _repIds ).forEach( function ( rid ) {
if ( Array.isArray( data[ rid ] ) ) {
data[ rid ] = data[ rid ].filter( function ( r ) { return r && typeof r === ‘object'; } );
}
} );
// GF auto-substituted {user_agent} / {referer} on hidden fields
// at render time. We do the equivalent right before submit so
// fields whose default value carries these placeholders
// resolve to the browser’s actual values rather than being
// stored as literal “{user_agent}” / “{referer}” strings.
// The last ARTICLE the visitor read (set client-side on post views by
// P118_Article_Views). Used to attribute the enquiry to the article
// even after navigating away or with a stripped/absent referer.
var lastPost = ”;
try {
var lpm = document.cookie.match(/(?:^|;s*)p118_last_post=([^;]+)/);
if (lpm) lastPost = decodeURIComponent(lpm[1]);
} catch (e) {}
var subs = {
‘{user_agent}': navigator.userAgent || ”,
// Prefer the last article read; fall back to the (lossy) HTTP referer.
‘{referer}': lastPost || document.referrer || ”,
‘{last_post}': lastPost || ”,
‘{embed_url}': window.location.href || ”,
};
for (var name in data) {
if (!data.hasOwnProperty(name)) continue;
var v = data[name];
if (typeof v !== ‘string’) continue;
for (var tag in subs) {
if (v.indexOf(tag) !== -1) v = v.split(tag).join(subs[tag]);
}
data[name] = v;
}
// Agent/BDM attribution — read LIVE so it works even on a fully cached
// page (the browser always sees the real URL + cookie). URL ?ataid=/?cid=
// first, then the 30-day agent_id/cid cookies set by atat-tracking.php.
var _qp = new URLSearchParams(window.location.search);
var _ataid = _qp.get(‘ataid’) || (document.cookie.match(/(?:^|;s*)agent_id=([^;]+)/) || [])[1] || ”;
var _cid = _qp.get(‘cid’) || (document.cookie.match(/(?:^|;s*)cid=([^;]+)/) || [])[1] || ”;
if (_ataid) data.agent_id = decodeURIComponent(_ataid);
if (_cid) data.bdm_id = decodeURIComponent(_cid);
return data;
}
function uploadFiles(data) {
var fileInputs = form.querySelectorAll(‘input[type=file][data-crm-file-field]’);
var uploads = [];
fileInputs.forEach(function(el) {
if (!el.files || !el.files[0]) return;
var fd = new FormData();
fd.append(‘file’, el.files[0]);
var fieldName = el.name;
uploads.push(
fetch(crmApiUrl + ‘/public/forms/’ + “ffff0ec7-9df5-4d37-9e93-d9bb0b6b64fc” + ‘/upload’, { method: ‘POST’, body: fd })
.then(function(r) {
if (!r.ok) throw new Error(‘File upload failed (‘ + r.status + ‘)’);
return r.json();
})
.then(function(res) {
if (res.path) data[fieldName] = res.path;
else throw new Error(res.error || ‘File upload failed’);
})
);
});
return Promise.all(uploads).then(function() { return data; });
}
function submitFormData(data) {
var body = new FormData();
body.append(‘action’, ‘p118_crm_submit’);
body.append(‘form_id’, “ffff0ec7-9df5-4d37-9e93-d9bb0b6b64fc”);
body.append(‘data’, JSON.stringify(data));
// Embed-page context for GF-style merge tags ({embed_url},
// {embed_post:post_title}, {embed_post:ID}). Captured PHP-side
// at render time, then echoed to JS so the submit fetch can
// forward to V2 as request headers.
body.append(‘embed_url’, “”);
body.append(‘embed_post_id’, “0”);
body.append(‘embed_post_title’, “”);
return fetch(“https://www.property118.com/wp-admin/admin-ajax.php”, { method: ‘POST’, body: body, credentials: ‘same-origin’ })
.then(function(r){ return r.json(); })
.then(function(res){
var p = res.data || res;
if (p && p.success) {
if (p.confirmationType === ‘form’ && p.nextFormId) {
return swapInNextForm(p.nextFormId, p.prefill || {});
}
if (p.confirmationType === ‘redirect’ && p.confirmationRedirectUrl) {
window.location.href = p.confirmationRedirectUrl;
} else {
form.style.display = ‘none';
msg.className = ‘crm-message success';
msg.innerHTML = p.confirmationMessage || ‘Thank you for your submission.';
msg.style.display = ‘block';
}
} else {
throw new Error((p && p.error) || ‘Submission failed.’);
}
});
}
// Replace this whole form widget with another form, rendered server-side
// with the carried-over values seeded in. Inline injected via
// innerHTML won’t run, so we re-create each script node to execute it
// (this is what wires up the new form’s submit / conditional logic).
function swapInNextForm(nextFormId, prefill) {
var rbody = new FormData();
rbody.append(‘action’, ‘p118_crm_render_form’);
rbody.append(‘form_id’, nextFormId);
rbody.append(‘prefill’, JSON.stringify(prefill || {}));
return fetch(“https://www.property118.com/wp-admin/admin-ajax.php”, { method: ‘POST’, body: rbody, credentials: ‘same-origin’ })
.then(function(r){ return r.json(); })
.then(function(res2){
var pd = res2.data || res2;
if (!pd || !pd.html) { throw new Error((pd && pd.error) || ‘Could not load the next form.’); }
var frag = document.createElement(‘div’);
frag.innerHTML = pd.html;
var parent = wrap.parentNode;
var nodes = [];
while (frag.firstChild) {
var node = frag.firstChild;
parent.insertBefore(node, wrap);
nodes.push(node);
}
parent.removeChild(wrap);
function reexec(old) {
var s = document.createElement(‘script’);
for (var a = 0; a < old.attributes.length; a++) {
s.setAttribute(old.attributes[a].name, old.attributes[a].value);
}
if (!old.src) { s.textContent = old.textContent; }
old.parentNode.replaceChild(s, old);
}
nodes.forEach(function(n){
if (n.tagName === 'SCRIPT') { reexec(n); }
else if (n.querySelectorAll) {
var scripts = n.querySelectorAll('script');
for (var k = 0; k < scripts.length; k++) { reexec(scripts[k]); }
}
});
var first = nodes[0];
try { if (first && first.scrollIntoView) first.scrollIntoView({ behavior: 'smooth', block: 'start' }); } catch (e) {}
});
}
form.addEventListener('submit', function(e){
e.preventDefault();
// Validate required fields before submitting. Next only guards the pages
// before it, so the final page (and single-page forms) are checked here;
// jump to the first page that has a problem.
var vbad0 = crmFirstInvalid(null);
if (vbad0) { crmReportInvalid(vbad0); return; }
var data = collectFormData();
if (submitBtn) { submitBtn.disabled = true; submitBtn.textContent = 'Processing…'; }
msg.style.display = 'none';
// Standard form (no payment)
uploadFiles(data)
.then(function(d) { return submitFormData(d); })
.catch(function(err){
if (submitBtn) { submitBtn.disabled = false; submitBtn.textContent = btnText; }
msg.className = 'crm-message error';
msg.textContent = err.message;
msg.style.display = 'block';
});
});
// ── Repeater fields (add / remove rows) ──────────────────────────
form.querySelectorAll( '.crm-repeater' ).forEach( function ( rep ) {
var rowsWrap = rep.querySelector( '.crm-repeater-rows' );
var tpl = rep.querySelector( '.crm-repeater-template' );
var addBtn = rep.querySelector( '.crm-repeater-add' );
if ( addBtn && tpl && rowsWrap ) {
addBtn.addEventListener( 'click', function () {
var idx = parseInt( rep.getAttribute( 'data-next-index' ) || '1', 10 );
var tmp = document.createElement( 'div' );
tmp.innerHTML = tpl.innerHTML.split( '__ROW__' ).join( idx );
var row = tmp.firstElementChild;
if ( ! row ) { return; }
row.setAttribute( 'data-row', idx );
rowsWrap.appendChild( row );
rep.setAttribute( 'data-next-index', idx + 1 );
rep.dispatchEvent( new CustomEvent( 'crm-repeater-change', { bubbles: true } ) );
} );
}
if ( rowsWrap ) {
rowsWrap.addEventListener( 'click', function ( e ) {
var btn = e.target.closest ? e.target.closest( '.crm-repeater-remove' ) : null;
if ( ! btn ) { return; }
if ( rowsWrap.querySelectorAll( '.crm-repeater-row' ).length <= 1 ) { return; }
var r = btn.closest( '.crm-repeater-row' );
if ( r ) { r.remove(); }
rep.dispatchEvent( new CustomEvent( 'crm-repeater-change', { bubbles: true } ) );
} );
}
} );
})();
.p118-crm-form{–navy:#0b3d66;–pale:#f5f8fb;–line:#cfd9e3;–muted:#5b6775;max-width:980px;margin:24px auto;font-family:Arial,Helvetica,sans-serif;color:#1f2937}
.p118-crm-form .crm-field{margin-bottom:14px}
.p118-crm-form label{display:block;font-weight:700;color:var(–navy);margin-bottom:6px}
.p118-crm-form input[type=”number”],.p118-crm-form input[type=”text”],.p118-crm-form input[type=”email”],.p118-crm-form select{width:100%;min-height:44px;border:1px solid #aebdca;border-radius:7px;padding:10px 11px;background:#fff;font-size:16px;color:#1f2937;box-sizing:border-box}
.p118-crm-form input:focus,.p118-crm-form select:focus,.p118-crm-form button:focus{outline:3px solid rgba(21,93,145,.24);outline-offset:1px}
/* section headings */
.p118-crm-form .crm-section,.p118-crm-form h2,.p118-crm-form h3{color:var(–navy);font-size:20px;margin:22px 0 6px;padding-top:10px;border-top:1px solid var(–line)}
/* shareholder repeater rows as cards */
.p118-crm-form .crm-repeater-field>label{font-size:20px;border-top:1px solid var(–line);padding-top:10px;margin-top:22px}
.p118-crm-form .crm-repeater-rows{counter-reset:p118sh}
.p118-crm-form .crm-repeater-row{counter-increment:p118sh;position:relative;border:1px solid #b9c7d3;border-radius:10px;padding:52px 16px 16px;margin-top:12px;background:#fbfdff}
.p118-crm-form .crm-repeater-row::before{content:”Shareholder ” counter(p118sh);position:absolute;top:15px;left:16px;font-size:18px;font-weight:700;color:var(–navy)}
.p118-crm-form .crm-repeater-row-fields{display:grid;grid-template-columns:1fr;gap:12px}
.p118-crm-form .p118-btl-calc-btn{appearance:none;border:0;border-radius:8px;padding:13px 20px;font-size:16px;font-weight:700;cursor:pointer;background:var(–navy);color:#fff;margin:12px 0}
.p118-crm-form .crm-repeater-row .crm-field{margin-bottom:0}
.p118-crm-form .crm-repeater-row-fields input:not([type=”checkbox”]),.p118-crm-form .crm-repeater-row-fields select{width:100%;box-sizing:border-box}
/* single-checkbox booleans (salary optimisation, dividends, pension, non-resident toggles) */
.p118-crm-form .crm-repeater-row-fields .crm-choices label{display:flex;gap:9px;align-items:center;font-weight:400;min-height:44px;margin:0;cursor:pointer}
.p118-crm-form .crm-repeater-row-fields .crm-choices input[type=”checkbox”]{width:18px;height:18px;min-height:0;flex:0 0 auto;margin:0}
.p118-crm-form .crm-repeater-remove{position:absolute;top:12px;right:12px;background:#fff;color:#9f1239;border:1px solid #e6a6b8;border-radius:8px;padding:6px 10px;font-size:13px;font-weight:700;cursor:pointer}
.p118-crm-form .crm-repeater-add,.p118-crm-form button[type=”submit”]{appearance:none;border:0;border-radius:8px;padding:12px 17px;font-size:16px;font-weight:700;cursor:pointer}
.p118-crm-form .crm-repeater-add{background:#e6eef5;color:var(–navy);border:1px solid #b9cad9;margin-top:12px}
.p118-crm-form button[type=”submit”]{background:var(–navy);color:#fff}
/* consent + submit area */
.p118-crm-form .crm-consent-label{font-weight:400;display:flex;gap:8px;align-items:flex-start}
/* results */
.p118-btl-results{margin-top:20px}
.p118-btl-hint{background:var(–pale);border:1px dashed var(–line);border-radius:10px;padding:16px;color:var(–muted);font-size:15px}
.p118-btl-out{border:2px solid var(–navy);border-radius:12px;background:var(–pale);padding:18px}
.p118-btl-headline{font-weight:700;font-size:18px;margin:0 0 14px}
.p118-btl-headline.p118-pos{color:#17633a}
.p118-btl-headline.p118-neg{color:#9f1239}
.p118-btl-tablewrap{overflow-x:auto;margin-top:12px}
.p118-btl-table{width:100%;border-collapse:collapse;background:#fff;font-size:14px;min-width:640px}
.p118-btl-table th,.p118-btl-table td{border:1px solid #d6e0e8;padding:9px 10px;vertical-align:top}
.p118-btl-table th{background:var(–navy);color:#fff;text-align:left}
.p118-btl-table td+td{text-align:right;white-space:nowrap}
.p118-btl-table tr:nth-child(even) td{background:#f8fafc}
.p118-btl-table tr.p118-btl-strong td{font-weight:700}
.p118-btl-table td.p118-btl-net{text-align:right;white-space:nowrap}
/* summary cards */
.p118-btl-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:14px 0}
.p118-btl-card{background:#fff;border:1px solid var(–line);border-radius:10px;padding:15px;display:flex;flex-direction:column}
.p118-btl-cardlabel{display:block;color:var(–muted);font-size:13px;margin-bottom:7px}
/* margin-top:auto pins the value to the bottom of each (equal-height) card, so
all three values line up even when a label wraps to two lines */
.p118-btl-value{font-size:24px;font-weight:700;color:var(–navy);margin-top:auto}
.p118-btl-value.p118-pos{color:#17633a}
.p118-btl-value.p118-neg{color:#9f1239}
@media(max-width:760px){.p118-btl-summary{grid-template-columns:1fr}}
/* figures-used recap + warning notes */
.p118-btl-figures{background:#fff;border:1px solid var(–line);border-radius:10px;padding:15px;margin-top:15px}
.p118-btl-figures p{margin:6px 0 0;line-height:1.5}
.p118-btl-warning{background:#fff8e6;border:1px solid #e8cc80;border-radius:9px;padding:12px;margin-top:14px;font-size:14px;line-height:1.5}
/* “Estimated result” heading (override the section-heading border-top) */
.p118-btl-out .p118-btl-resulttitle{border-top:0;padding-top:0;margin:0 0 10px;color:var(–navy);font-size:21px}
/* static disclaimer notes, always visible below the form */
.p118-btl-notes{margin-top:18px}
.p118-btl-note{font-size:12px;color:var(–muted);line-height:1.5;margin-top:14px}
/* title + intro at the top (matches the standalone calculator) */
.p118-btl-header{margin-bottom:8px}
.p118-btl-title{color:var(–navy);font-size:28px;line-height:1.2;margin:0 0 10px}
.p118-btl-intro{line-height:1.55;margin:0 0 6px;color:#1f2937}
(function(){
‘use strict';
// ── Field ids (must match the seeded BTL Calculator form) ──────────────────
var F = {
year:’8ca5faab-7fd0-4263-ab16-c28cac2a33dd’,
rent:’29a6d2dd-1824-4d07-ae3f-5e14607d1599′,
interest:’a4cb8069-1050-4ccd-951f-d5aa4dea1cee’,
costMode:’3decd8c1-e458-4085-bb5c-fab26e71432b’,
costPct:’b6bf5767-e12f-4c46-aec2-06a7eba263f3′,
costAmt:’e9cb6264-8168-4b6d-81ff-c4ed51212e4f’,
associated:’aaa3b1a0-7c1d-4e01-aa7b-069a6335ff7d’,
extraction:’fdce52bf-c76f-449c-a63b-bce9e7906c6b’,
extractionPct:’8bd621d8-8eef-4114-9db9-d0f5f7c17963′,
shareholders:’c441faed-5bf9-4290-9335-37c9aba50a40′,
shName:’fe7f6621-acd1-42b9-b4fc-37ca29cbaf1a’,
shShare:’9df50ba8-ff5a-454a-9748-4bb9cb45f5c8′,
shResident:’e5601232-087b-4db0-8d4a-4b4a91cbbeb3′,
shOtherIncome:’3843a208-bb92-4b89-be11-9bd3088b57e9′,
shOtherDiv:’5609d332-3866-48ea-9ca1-4eb519005d46′,
shOptimise:’bce9079f-806e-4f61-b9ec-ea9591cd448f’,
shDividends:’b2b09c3b-0ef8-4ec5-8c29-686d2db85d8a’,
shPension:’5e6320c4-fd4b-4a97-93a0-f9048581c39a’,
// non-UK-resident only (shown when “UK tax resident?” = No)
shEntitledPa:’7c1de2f0-11aa-4b22-9c33-a1b2c3d40001′,
shApplyDivTax:’7c1de2f0-11aa-4b22-9c33-a1b2c3d40002′,
shApplySalaryTax:’7c1de2f0-11aa-4b22-9c33-a1b2c3d40003′,
name:’df54eedb-ec85-410c-b865-c14e5d5983c6′,
reportData:’c8e98065-9275-4fd9-9bbe-607e5eb8e588′
};
var repeater = document.querySelector(‘.crm-repeater[data-repeater-id=”‘ + F.shareholders + ‘”]’);
var mount = document.querySelector(‘.p118-btl-results’);
var reportField = document.querySelector(‘[name=”‘ + F.reportData + ‘”]’);
if (!repeater || !mount) { return; }
var form = repeater.closest(‘form’) || document;
// ── helpers to read the native fields ──────────────────────────────────────
function el(id){ return form.querySelector(‘[name=”‘ + id + ‘”]’); }
function val(id){ var e = el(id); return e ? e.value : ”; }
function num(id){ var v = parseFloat(val(id)); return isFinite(v) ? v : 0; }
function entered(id){ var e = el(id); return !!e && String(e.value).trim() !== ”; }
// read a sub-field inside a given repeater row by its child field id
function rowEl(row, childId){ var w = row.querySelector(‘[data-field-id=”‘ + childId + ‘”]’); return w ? w.querySelector(‘input,select,textarea’) : null; }
function rowVal(row, childId){ var e = rowEl(row, childId); return e ? e.value : ”; }
function rowNum(row, childId){ var v = parseFloat(rowVal(row, childId)); return isFinite(v) ? v : 0; }
function rowYes(row, childId, dflt){ var e = rowEl(row, childId); if (!e) return dflt; if (e.type === ‘checkbox’) return !!e.checked; return e.value === ‘yes'; }
function money(v){ return new Intl.NumberFormat(‘en-GB’,{style:’currency’,currency:’GBP’,maximumFractionDigits:0}).format(isFinite(v)?v:0); }
function percent(v){ return (isFinite(v)?v:0).toFixed(1).replace(‘.0′,”) + ‘%'; }
function escapeHtml(v){ return String(v||”).replace(/[&'”]/g,function(ch){return {‘&':’&’,”:’>’,”‘”:’'’,'”‘:’"’}[ch];}); }
// ── TAX ENGINE (unchanged — same maths as the standalone calculator) ───────
var TAX = {
‘2026’:{pa:12570,basicBand:37700,additionalThreshold:125140,generalRates:[0.20,0.40,0.45],propertyRates:[0.20,0.40,0.45],dividendRates:[0.1075,0.3575,0.3935],dividendAllowance:500,section24Rate:0.20,employeePT:12570,employeeUEL:50270,employeeMain:0.08,employeeUpper:0.02,employerST:5000,employerRate:0.15,ctLowerLimit:50000,ctUpperLimit:250000,ctSmallRate:0.19,ctMainRate:0.25,ctMarginalFraction:0.015},
‘2027’:{pa:12570,basicBand:37700,additionalThreshold:125140,generalRates:[0.20,0.40,0.45],propertyRates:[0.22,0.42,0.47],dividendRates:[0.1075,0.3575,0.3935],dividendAllowance:500,section24Rate:0.22,employeePT:12570,employeeUEL:50270,employeeMain:0.08,employeeUpper:0.02,employerST:5000,employerRate:0.15,ctLowerLimit:50000,ctUpperLimit:250000,ctSmallRate:0.19,ctMainRate:0.25,ctMarginalFraction:0.015}
};
function personalAllowance(ani,eligible,tax){ if(!eligible){return 0;} return Math.max(0,tax.pa-Math.max(0,ani-100000)/2); }
function allocateTax(amount,occupied,rates,zeroRateAllowance,tax){
amount=Math.max(0,amount);occupied=Math.max(0,occupied);zeroRateAllowance=Math.max(0,zeroRateAllowance||0);
var basicAvailable=Math.max(0,tax.basicBand-Math.min(occupied,tax.basicBand));
var basic=Math.min(amount,basicAvailable);var remaining=amount-basic;occupied+=basic;
var higherAvailable=Math.max(0,tax.additionalThreshold-Math.max(occupied,tax.basicBand));
var higher=Math.min(remaining,higherAvailable);remaining-=higher;var additional=Math.max(0,remaining);
var slices=[basic,higher,additional];var totalTax=0;
for(var i=0;i<3;i++){var free=Math.min(slices[i],zeroRateAllowance);zeroRateAllowance-=free;totalTax+=(slices[i]-free)*rates[i];}
return {tax:totalTax,occupied:occupied+higher+additional,slices:slices};
}
function computeIncomeTax(input,tax){
var other=Math.max(0,input.other||0),property=Math.max(0,input.property||0),dividends=Math.max(0,input.dividends||0);
if(input.applyDividendTax===false){dividends=0;}
var ani=other+property+dividends;var allowance=personalAllowance(ani,input.personalAllowance!==false,tax);var remainingPA=allowance;
var otherTaxable=Math.max(0,other-remainingPA);remainingPA=Math.max(0,remainingPA-other);
var propertyTaxable=Math.max(0,property-remainingPA);remainingPA=Math.max(0,remainingPA-property);
var dividendTaxable=Math.max(0,dividends-remainingPA);var occupied=0,total=0;
var a=allocateTax(otherTaxable,occupied,tax.generalRates,0,tax);total+=a.tax;occupied=a.occupied;
var b=allocateTax(propertyTaxable,occupied,tax.propertyRates,0,tax);total+=b.tax;occupied=b.occupied;
var c=allocateTax(dividendTaxable,occupied,tax.dividendRates,tax.dividendAllowance,tax);total+=c.tax;occupied=c.occupied;
return {tax:total,allowance:allowance,ani:ani,taxable:occupied};
}
function employeeNIC(salary,tax,statePensionAge,apply){ if(!apply||statePensionAge||salary<=tax.employeePT){return 0;} return Math.max(0,Math.min(salary,tax.employeeUEL)-tax.employeePT)*tax.employeeMain+Math.max(0,salary-tax.employeeUEL)*tax.employeeUpper; }
function employerNIC(salary,tax,apply){ if(!apply||salary<=tax.employerST){return 0;} return (salary-tax.employerST)*tax.employerRate; }
function corporationTax(profit,associated,tax){ if(profit<=0){return 0;} var divisor=associated+1,lower=tax.ctLowerLimit/divisor,upper=tax.ctUpperLimit/divisor; if(profit=upper){return profit*tax.ctMainRate;} return profit*tax.ctMainRate-(upper-profit)*tax.ctMarginalFraction; }
function personalScenario(state,shareholders){
var tax=TAX[state.year];var propertyProfitBeforeInterest=state.rent-state.costs;var totalTax=0,totalCredit=0,totalCash=state.rent-state.costs-state.interest;var rows=[];
shareholders.forEach(function(s){
var propertyProfit=Math.max(0,propertyProfitBeforeInterest*s.share);var interest=state.interest*s.share;
var base=computeIncomeTax({other:s.otherIncome,property:0,dividends:s.otherDividends,personalAllowance:s.personalAllowance,applyDividendTax:s.applyDividendTax},tax);
var full=computeIncomeTax({other:s.otherIncome,property:propertyProfit,dividends:s.otherDividends,personalAllowance:s.personalAllowance,applyDividendTax:s.applyDividendTax},tax);
var adjustedAboveAllowance=Math.max(0,full.ani-full.allowance);var creditBase=Math.min(interest,propertyProfit,adjustedAboveAllowance);
var credit=Math.max(0,creditBase*tax.section24Rate);var incremental=Math.max(0,full.tax-credit-base.tax);
totalTax+=incremental;totalCredit+=credit;
});
return {tax:totalTax,credit:totalCredit,cashAfterTax:totalCash-totalTax,combinedWealth:totalCash-totalTax};
}
function dividendAllocations(dividendPool,shareholders){
var participants=shareholders.filter(function(s){return s.receivesDividends;});var participatingShares=participants.reduce(function(sum,s){return sum+s.share;},0);var result={};
shareholders.forEach(function(s){result[s.index]=0;});if(dividendPool<=0||participatingShares<=0){return result;}
participants.forEach(function(s){result[s.index]=dividendPool*(s.share/participatingShares);});return result;
}
function companyScenario(state,shareholders,salaries){
var tax=TAX[state.year];var operatingProfit=state.rent-state.costs-state.interest;var employerNi=0,totalSalary=0;
shareholders.forEach(function(s,i){var salary=Math.max(0,salaries[i]||0);totalSalary+=salary;employerNi+=employerNIC(salary,tax,s.applySalaryTax);});
var preCT=operatingProfit-totalSalary-employerNi;if(preCT0){return null;}
var ct=corporationTax(preCT,state.associated,tax);var postCT=preCT-ct;var dividendPool=Math.max(0,postCT)*state.extractionPct;
var dividendByShareholder=dividendAllocations(dividendPool,shareholders);var personalTax=0,employeeNi=0,netCash=0,rows=[];
shareholders.forEach(function(s,i){
var salary=Math.max(0,salaries[i]||0);var dividend=dividendByShareholder[s.index]||0;
var base=computeIncomeTax({other:s.otherIncome,property:0,dividends:s.otherDividends,personalAllowance:s.personalAllowance,applyDividendTax:s.applyDividendTax},tax);
var taxableSalary=s.applySalaryTax?salary:0;
var full=computeIncomeTax({other:s.otherIncome+taxableSalary,property:0,dividends:s.otherDividends+dividend,personalAllowance:s.personalAllowance,applyDividendTax:s.applyDividendTax},tax);
var incomeTax=Math.max(0,full.tax-base.tax);var eni=employeeNIC(salary,tax,s.statePensionAge,s.applySalaryTax);
personalTax+=incomeTax;employeeNi+=eni;netCash+=salary+dividend-incomeTax-eni;
rows.push({name:s.name,resident:s.resident,salary:salary,dividend:dividend,incomeTax:incomeTax,employeeNi:eni,net:salary+dividend-incomeTax-eni});
});
var retained=postCT-dividendPool;var combinedWealth=retained+netCash;
return {operatingProfit:operatingProfit,employerNi:employerNi,employeeNi:employeeNi,ct:ct,dividendPool:dividendPool,personalTax:personalTax,retained:retained,combinedWealth:combinedWealth,rows:rows};
}
function salaryOptimisationLimit(s,state,tax){ if(!s.optimiseSalary||!s.personalAllowance){return 0;} var dividendsForAllowance=s.applyDividendTax?s.otherDividends:0;var allowance=personalAllowance(s.otherIncome+dividendsForAllowance,true,tax);var unusedAllowance=Math.max(0,allowance-s.otherIncome);var companyCashProfit=Math.max(0,state.rent-state.costs-state.interest);return Math.min(unusedAllowance,companyCashProfit); }
function candidateSalaries(s,state,tax){ var limit=salaryOptimisationLimit(s,state,tax);if(limit<=0){return [0];}var values=[0,Math.min(limit,tax.employerST),Math.min(limit,tax.employeePT),limit];var step=limit<=5000?50:100;for(var x=0;x<=limit;x+=step){values.push(x);}var unique={};values.forEach(function(v){v=Math.max(0,Math.min(limit,Math.round(v/10)*10));unique[v]=true;});return Object.keys(unique).map(Number).sort(function(a,b){return a-b;}); }
function optimiseSalaries(state,shareholders){
var tax=TAX[state.year];var salaries=shareholders.map(function(){return 0;});var best=companyScenario(state,shareholders,salaries);if(!best){return null;}
for(var pass=0;pass<8;pass++){var changed=false;
for(var i=0;ilocalBest.combinedWealth+0.01){localBest=result;localSalary=candidate;}});
if(localSalary!==salaries[i]){salaries[i]=localSalary;best=localBest;changed=true;}}
if(!changed){break;}}
for(var j=0;j<shareholders.length;j++){if(!shareholders[j].optimiseSalary){continue;}var current=salaries[j],limit=salaryOptimisationLimit(shareholders[j],state,tax);
for(var c2=Math.max(0,current-500);c2best.combinedWealth+0.01){best=result;salaries=trial;}}}
return best;
}
// ── read the form ──────────────────────────────────────────────────────────
function getState(){
var costMode=val(F.costMode)||’percent';var rent=num(F.rent);
var costs=costMode===’amount’?num(F.costAmt):rent*(num(F.costPct)/100);
var extractionMode=val(F.extraction)||’retain';
var extractionPct=extractionMode===’retain’?0:(extractionMode===’all’?1:num(F.extractionPct)/100);
return {year:val(F.year)||’2026′,rent:rent,interest:num(F.interest),costs:costs,associated:Math.max(0,Math.floor(num(F.associated))),extractionMode:extractionMode,extractionPct:Math.max(0,Math.min(1,extractionPct))};
}
function getShareholders(){
var rows=repeater.querySelectorAll(‘.crm-repeater-row’);
return Array.prototype.map.call(rows,function(row,index){
var resident=rowVal(row,F.shResident)!==’no';
return {index:index,name:(rowVal(row,F.shName)||”).trim()||(‘Shareholder ‘+(index+1)),share:Math.max(0,rowNum(row,F.shShare))/100,resident:resident,
otherIncome:Math.max(0,rowNum(row,F.shOtherIncome)),otherDividends:Math.max(0,rowNum(row,F.shOtherDiv)),
optimiseSalary:rowYes(row,F.shOptimise,true),receivesDividends:rowYes(row,F.shDividends,true),statePensionAge:rowYes(row,F.shPension,false),
// UK residents get full PA + UK dividend/PAYE treatment; for a non-resident
// read the three conditional fields (defaults match the original: PA off,
// dividend tax off, salary PAYE/NI on).
personalAllowance:resident?true:rowYes(row,F.shEntitledPa,false),
applyDividendTax:resident?true:rowYes(row,F.shApplyDivTax,false),
applySalaryTax:resident?true:rowYes(row,F.shApplySalaryTax,true),
entered:{share:String(rowVal(row,F.shShare)).trim()!==”}};
});
}
function personName(){
var f=form.querySelector(‘[name=”‘+F.name+'[first]”]’),l=form.querySelector(‘[name=”‘+F.name+'[last]”]’);
return ((f?f.value:”)+’ ‘+(l?l.value:”)).trim();
}
// ── render + report_data ────────────────────────────────────────────────────
function showMessage(msg){ mount.innerHTML=’
‘; if(reportField){reportField.value=”;} }
function recompute(){
var state=getState();var shareholders=getShareholders();
if(!entered(F.rent)||state.rent0.0001){ return showMessage(‘Ownership percentages must total 100% (currently ‘+percent(shareTotal*100)+’).’); }
var personal=personalScenario(state,shareholders);
var optimised=optimiseSalaries(state,shareholders);
if(!optimised){ return showMessage(‘No feasible salary combination for these figures.’); }
var diff=optimised.combinedWealth-personal.combinedWealth;var cls=diff>=0?’p118-pos':’p118-neg';
var headline=diff>=0?’The optimised company structure leaves an estimated ‘+money(diff)+’ more in combined cash and retained profit each year.':’Personal ownership leaves an estimated ‘+money(Math.abs(diff))+’ more cash each year.';
var nonResident=shareholders.some(function(s){return !s.resident;});
var html=’
Estimated result
‘+headline+’
‘+
‘
‘
‘+
‘
‘+
‘
‘+
‘
‘+
‘
| Metric | Personal ownership | Company (optimised) |
|---|---|---|
‘+
‘
| Shareholder | UK tax status | Salary | Dividend | Income Tax | Employee NI | Net received |
|---|---|---|---|---|---|---|
| ‘+money(r.net)+’ |
‘+
‘
Gross annual rent: ‘+money(state.rent)+’. Non-finance costs: ‘+money(state.costs)+’. Annual mortgage interest and other finance costs: ‘+money(state.interest)+’.
‘+
(nonResident?’
‘:”)+
‘
‘+
‘
‘+
‘
‘;
mount.innerHTML=html;
if(reportField){
reportField.value=JSON.stringify({
name:personName()||undefined,taxYear:state.year,rent:state.rent,costs:state.costs,interest:state.interest,
personal:{tax:personal.tax,credit:personal.credit,combinedWealth:personal.combinedWealth},
company:{operatingProfit:optimised.operatingProfit,ct:optimised.ct,nationalInsurance:optimised.employerNi+optimised.employeeNi,personalTax:optimised.personalTax,dividendPool:optimised.dividendPool,retained:optimised.retained,combinedWealth:optimised.combinedWealth,
shareholders:optimised.rows.map(function(r){return {name:r.name,resident:r.resident,salary:r.salary,dividend:r.dividend,incomeTax:r.incomeTax,employeeNi:r.employeeNi,net:r.net};})}
});
}
return true;
}
function cell(v){ return ‘
‘; }
function row2(label,a,b){ return ‘
‘; }
// ── two-step flow: “Calculate comparison” computes + reveals the report step ─
var revealed=false;
var resultsField=mount.closest(‘.crm-field’)||mount;
var submitWrap=form.querySelector(‘.crm-submit’);
// Everything AFTER the results mount is the “Get your free PDF report” step —
// hidden until the user calculates. (Submit lives outside the field flow on
// the WP render, so handle it explicitly too.)
var reportEls=[];var sib=resultsField.nextElementSibling;
while(sib){reportEls.push(sib);sib=sib.nextElementSibling;}
function setReportVisible(v){
reportEls.forEach(function(e){e.style.display=v?”:’none';});
if(submitWrap){submitWrap.style.display=v?”:’none';}
}
setReportVisible(false);
// Conditional inputs — show cost %/amount + extraction % based on the selects,
// like the original calculator. Runs on load + on every change.
function showField(id,show){ var e=el(id); var w=e?e.closest(‘.crm-field’):null; if(w){ w.style.display=show?”:’none'; } }
// Per shareholder row: the three UK-treatment fields are only relevant to a
// non-UK-resident, so reveal them only when that row’s “UK tax resident?” = No
// (exactly like the standalone calculator).
function toggleShareholderRow(row){
var nonRes = rowVal(row,F.shResident)===’no';
[F.shEntitledPa,F.shApplyDivTax,F.shApplySalaryTax].forEach(function(cid){
var w = row.querySelector(‘[data-field-id=”‘+cid+'”]’);
if(w){ w.style.display = nonRes ? ” : ‘none'; }
});
}
function toggleShareholderRows(){ Array.prototype.forEach.call(repeater.querySelectorAll(‘.crm-repeater-row’),toggleShareholderRow); }
// Checkbox fields can’t be default-checked via the field config, so seed each
// row’s defaults once (salary optimisation + dividend allocation + PAYE/NI on;
// everything else off). Marked so a user un-tick is never re-applied.
function initShareholderRow(row){
if(row.getAttribute(‘data-p118-init’)===’1′){return;}
row.setAttribute(‘data-p118-init’,’1′);
[F.shOptimise,F.shDividends,F.shApplySalaryTax].forEach(function(cid){
var e=rowEl(row,cid); if(e&&e.type===’checkbox’){e.checked=true;}
});
// “UK tax resident?” renders with a blank “— Select —”; default it to Yes.
var res=rowEl(row,F.shResident); if(res&&res.tagName===’SELECT’&&!res.value){res.value=’yes';}
}
function initShareholderRows(){ Array.prototype.forEach.call(repeater.querySelectorAll(‘.crm-repeater-row’),initShareholderRow); }
function toggleConditional(){
var cm=val(F.costMode)||’percent’, ex=val(F.extraction)||’retain';
showField(F.costPct, cm===’percent’);
showField(F.costAmt, cm===’amount’);
showField(F.extractionPct, ex===’partial’);
toggleShareholderRows();
}
initShareholderRows();
toggleConditional();
form.addEventListener(‘change’, toggleConditional);
var calcBtn=document.createElement(‘button’);
calcBtn.type=’button';calcBtn.className=’p118-btl-calc-btn';calcBtn.textContent=’Calculate comparison';
if(resultsField.parentNode){resultsField.parentNode.insertBefore(calcBtn,resultsField);}
calcBtn.addEventListener(‘click’,function(){ if(recompute()){ revealed=true; setReportVisible(true); } });
// Once the report step is showing, keep the figures live as they tweak inputs.
var t;
function schedule(){ if(!revealed){return;} clearTimeout(t); t=setTimeout(recompute,120); }
form.addEventListener(‘input’,schedule);
form.addEventListener(‘change’,schedule);
document.addEventListener(‘crm-repeater-change’,function(e){ if(repeater.contains(e.target)||e.target===repeater){ initShareholderRows(); toggleShareholderRows(); if(revealed){ schedule(); } } });
// Title + intro at the very top, matching the standalone calculator.
if (form && form.tagName === ‘FORM’ && !form.querySelector(‘.p118-btl-header’)) {
var header=document.createElement(‘div’);
header.className=’p118-btl-header';
header.innerHTML=’
Buy-to-let tax comparison calculator
Compare the estimated annual position where a residential property business is owned personally or through a limited company. Property information is entered first, followed by each owner or shareholder.
‘;
form.insertBefore(header, form.firstChild);
}
// Static disclaimers — always visible below the form (as in the standalone
// calculator). Appended outside the so the two-step reveal never hides them.
var notes=document.createElement(‘div’);
notes.className=’p118-btl-notes';
notes.innerHTML=’
This calculator is an indicative comparison for England, Wales and Northern Ireland. It does not calculate SDLT, CGT, ATED, Employment Allowance, pension contributions, student loans, Gift Aid, Marriage Allowance, High Income Child Benefit Charge, brought-forward losses or brought-forward finance costs. It does not model overseas tax or individual double-taxation treaties. Any salary must relate to genuine work performed for the company.
‘+
‘
If the company is structured with multiple classes of shares, it may be possible for the founders or directors to distribute profits in proportions that differ from the overall shareholdings. The structure may also allow the value of the founders’ shares to be frozen, with future growth allocated to other share classes to incentivise the next generation and support longer-term inheritance tax planning.
‘;
(form.parentNode||form).appendChild(notes);
showMessage(‘Enter your figures above, then press Calculate comparison.’);
})();
The post Section 162 Incorporation Relief: a new claim requirement, not the end of the relief appeared first on Property118.
View Full Article: Section 162 Incorporation Relief: a new claim requirement, not the end of the relief
London leads July’s UK rent growth
Property118

London leads July’s UK rent growth
Average rents across the UK rose to £1,369 a month in July, up 1.2% from £1,353 in June, according to the latest HomeLet figures.
The average was 4.3% higher than the £1,313 recorded in July last year.
Excluding Greater London, rents reached £1,170, a rise of 1.1% from June and 3.4% over the year.
London remained the most expensive region at £2,207 a month following a 1.2% monthly increase and 6% annual growth.
Strong tenant demand
The firm’s head of sales, Mike Dawson, said: “This month’s data reinforces the picture of a market where demand for good quality rental homes remains consistently strong.
“Rents are still nudging upwards in most regions, with London and the Midlands showing particularly notable annual growth.”
He added: “The HomeLet Rental Index gives agents and landlords an accurate view of achieved rents rather than asking prices, which is crucial when decisions need to be made quickly and confidently.”
Regional rent rises
Rents increased month on month in 11 of the 12 regions covered by the index during July.
Scotland recorded the largest movement at 2.6%, followed by the South East at 1.4%.
The North East and North West each posted monthly rises of 1.3%.
Northern Ireland was the only region to record a fall, with the average slipping 0.5% from June.
Annual growth leaders
Greater London recorded the strongest annual increase at 6%, compared with 5% in the June index.
The East Midlands followed with growth of 4.7%, while Scotland recorded a 4.1% rise.
North East rents were 4% higher than in July 2025.
The UK-wide annual increase accelerated from 3.4% in June to 4.3% in July.
The post London leads July’s UK rent growth appeared first on Property118.
View Full Article: London leads July’s UK rent growth
Categories
- Landlords (19)
- Real Estate (9)
- Renewables & Green Issues (1)
- Rental Property Investment (1)
- Tenants (21)
- Uncategorized (12,940)
Archives
- September 2026 (23)
- August 2026 (61)
- July 2026 (63)
- June 2026 (70)
- May 2026 (70)
- April 2026 (78)
- March 2026 (72)
- February 2026 (55)
- January 2026 (52)
- December 2025 (62)
- August 2025 (51)
- July 2025 (51)
- June 2025 (49)
- May 2025 (50)
- April 2025 (48)
- March 2025 (54)
- February 2025 (51)
- January 2025 (52)
- December 2024 (55)
- November 2024 (64)
- October 2024 (82)
- September 2024 (69)
- August 2024 (55)
- July 2024 (64)
- June 2024 (54)
- May 2024 (73)
- April 2024 (59)
- March 2024 (49)
- February 2024 (57)
- January 2024 (58)
- December 2023 (56)
- November 2023 (59)
- October 2023 (67)
- September 2023 (136)
- August 2023 (131)
- July 2023 (129)
- June 2023 (128)
- May 2023 (140)
- April 2023 (121)
- March 2023 (168)
- February 2023 (155)
- January 2023 (152)
- December 2022 (136)
- November 2022 (158)
- October 2022 (146)
- September 2022 (148)
- August 2022 (169)
- July 2022 (124)
- June 2022 (124)
- May 2022 (130)
- April 2022 (116)
- March 2022 (155)
- February 2022 (124)
- January 2022 (120)
- December 2021 (117)
- November 2021 (139)
- October 2021 (130)
- September 2021 (138)
- August 2021 (110)
- July 2021 (110)
- June 2021 (60)
- May 2021 (127)
- April 2021 (122)
- March 2021 (156)
- February 2021 (154)
- January 2021 (133)
- December 2020 (126)
- November 2020 (159)
- October 2020 (169)
- September 2020 (181)
- August 2020 (147)
- July 2020 (172)
- June 2020 (158)
- May 2020 (177)
- April 2020 (188)
- March 2020 (234)
- February 2020 (212)
- January 2020 (164)
- December 2019 (107)
- November 2019 (131)
- October 2019 (145)
- September 2019 (123)
- August 2019 (112)
- July 2019 (93)
- June 2019 (82)
- May 2019 (94)
- April 2019 (88)
- March 2019 (78)
- February 2019 (77)
- January 2019 (71)
- December 2018 (37)
- November 2018 (85)
- October 2018 (108)
- September 2018 (110)
- August 2018 (135)
- July 2018 (140)
- June 2018 (118)
- May 2018 (113)
- April 2018 (64)
- March 2018 (96)
- February 2018 (82)
- January 2018 (92)
- December 2017 (62)
- November 2017 (100)
- October 2017 (105)
- September 2017 (97)
- August 2017 (101)
- July 2017 (104)
- June 2017 (155)
- May 2017 (135)
- April 2017 (113)
- March 2017 (138)
- February 2017 (150)
- January 2017 (127)
- December 2016 (90)
- November 2016 (135)
- October 2016 (149)
- September 2016 (135)
- August 2016 (48)
- July 2016 (52)
- June 2016 (54)
- May 2016 (52)
- April 2016 (24)
- October 2014 (8)
- April 2012 (2)
- December 2011 (2)
- November 2011 (10)
- October 2011 (9)
- September 2011 (9)
- August 2011 (3)
Calendar
Recent Posts
- Could a new LLP tax judgment help landlords caught in HMRC’s Spotlight 63?
- Why the nonsense £65 landlord database tax is just the start
- One million landlords set to use tenant deposit alternatives
- Why September could be the month to rethink your property portfolio
- Rents look set to rise as tenant demand grows – RICS

admin