Jul
23

Cash in the bank without evicting your tenant

Author admin    Category Uncategorized     Tags

Property118

Cash in the bank without evicting your tenant

News of landlords facing longer possession delays and tougher council enforcement during the second half of 2026 has left many wondering whether now is finally the time to leave the private rented sector.

Since Section 21 was abolished on 1 May 2026, there has been a huge increase in the number of landlords searching for information about using Section 8 to regain possession.

For many, however, eviction is something they would rather avoid altogether. They have good tenants, don’t want the confrontation, or simply don’t want the time, cost and uncertainty that comes with possession proceedings.

But what if there was another option?

What if you could sell your property with the tenant still living there, achieve a great price and put cash in the bank without waiting for vacant possession?

That’s exactly what we do at Landlord Sales Agency.

One landlord came to us recently with a tenant whose rent had not been increased for years and was now significantly below market value.

The landlord had simply had enough of the PRS and wanted out. They didn’t want to increase the rent, they didn’t want to wait for the tenant to leave, and they certainly didn’t want to go through the eviction process.

Like many landlords, they felt every option presented its own set of problems. They were stuck between a rock and a hard place.

Using our database of more than 30,000 investors, landlords and owner-occupiers, we found a cash buyer looking for a turnkey investment. However, finding the buyer was only the beginning.

Unlike many companies selling tenanted properties, we speak directly with tenants because we know that understanding everyone’s position is often the key to getting a sale over the line.

After speaking with the tenant, it became clear they were happy to remain in the property and understood the rent had fallen well below current market levels. We were able to mediate discussions between the tenant and the incoming buyer, agreeing a new rent that everyone was comfortable with from the day the new landlord took ownership.

Crucially, this only worked because every party trusted us and they knew we weren’t there to take sides or pressure anyone into making decisions. Our role was simply to find a practical solution that genuinely worked for everyone involved.

The result was exactly that.

The tenant stayed in the home they wanted to remain in and the seller achieved the clean exit they wanted without the uncertainty of serving notice or waiting for vacant possession.

It really was a win for everyone.

The buyer wanted to complete within 28 days of having their offer accepted, so our work didn’t stop there. We chased solicitors, answered enquiries, resolved problems as they arose and kept every party moving towards completion.

Whether you own one buy-to-let or an entire portfolio, whether your properties are fully tenanted, below market rent, in need of refurbishment or simply no longer fit your future plans, we can help.

We never compromise on achieving the best possible sale price, regardless of how much work your property or portfolio needs. We typically achieve around 85-90% of vacant possession market value, and for that we cover the costs involved and remove the hassle that normally comes with selling investment property.

Be wary of anyone promising 100% market value. We believe in being completely transparent from the very beginning, which is why landlords continue to recommend us.

Landlord Sales Agency was founded by landlords, for landlords. We understand the challenges because we’ve faced them ourselves, and we’ve built our business around solving the problems that stop many landlords from selling.

Most landlords we speak to don’t actually want to evict their tenants. They simply want a straightforward exit that works for everyone.

If you’re thinking about selling one property or an entire portfolio, speak to Landlord Sales Agency today and find out how we could help you put cash in the bank while making the process easier for both you and your tenants.

(function(){var el=document.getElementById(“ts-607776b5-3f7b-431c-b5cc-fc304603fee3″);if(!el)return;var b=document.body,h=document.documentElement;var dark=b.classList.contains(“dark-mode”)||b.classList.contains(“dark”)||b.classList.contains(“night-mode”)||h.classList.contains(“dark”);if(!dark){var bg=window.getComputedStyle(b).backgroundColor,m=bg.match(/d+/g);if(m)dark=(m[0]*0.299+m[1]*0.587+m[2]*0.114)<128;}el.setAttribute("data-theme",dark?"dark":"light");if(window.turnstile&&el.childElementCount===0){try{window.turnstile.render(el,{sitekey:el.getAttribute("data-sitekey"),theme:el.getAttribute("data-theme")});}catch(e){}}})();

(function(){
var uid = “crm-form-ba09a29b”;
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":"c364951b-ecb0-4a12-bfa4-9dbe564310e8","type":"name","label":"Name"},{"id":"910107df-b8a8-4541-879f-541cef9449e4","type":"email","label":"Email"},{"id":"3b317ed9-d327-4fe2-b92e-67efede67e6d","type":"phone","label":"Phone"},{"id":"c6fae2f0-c335-452b-aa03-2cc066163d71","type":"textarea","label":"Please give us details of how we can help and the properties in question"},{"id":"34c27d9f-b3d1-4a6d-b720-24000e9fa468","type":"checkbox","label":"Privacy Policy"}];
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://p118-crm-api.accent.sh";

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/’ + “08ceeaae-4809-444e-ba0f-88da5836c463″ + ‘/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’, “08ceeaae-4809-444e-ba0f-88da5836c463″);
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 } ) );
} );
}
} );
})();

The post Cash in the bank without evicting your tenant appeared first on Property118.

View Full Article: Cash in the bank without evicting your tenant

Jul
23

The £7,000 hazard penalty will be decided by your records, not just your property

Author admin    Category Uncategorized     Tags

Property118

The £7,000 hazard penalty will be decided by your records, not just your property

Most readers will have seen the coverage of the new £7,000 penalty for Category 1 hazards. What has had far less attention is how the penalty is actually decided once a council officer has been through the property, and what the government’s new landlord and agent guide, published on 23 June 2026, actually asks of landlords.

Read the legislation and the guidance together and one thing stands out. Almost every stage turns on what you can show you did and when you did it, not just on the condition of the house on inspection day.

That should change how every landlord in England thinks about one unglamorous habit: how issues raised by tenants get logged.

Where the penalty actually comes from

It is worth being precise, because a lot of the commentary is not. The reformed HHSRS itself arrived through the Housing Health and Safety Rating System (England) (Amendment) Regulations 2026, in force from 23 June 2026, which cut the hazard list from 29 to 21 and replaced the A to J bands with High, Medium and Low. The new method applies to inspections commenced on or after 22 June 2026. Those regulations changed how hazards are assessed. They did not create the fine.

The penalty comes from the Renters’ Rights Act 2025. Paragraph 6 of Schedule 4 inserted a new section 6A into the Housing Act 2004, brought into force on 22 June 2026. It applies to Category 1 hazards found in privately rented homes, what the Act calls qualifying residential premises, and it expressly does not apply to the common parts of a block of flats.

Where it applies, the council may impose a penalty of up to £7,000 on the responsible person when it first takes enforcement action. That means the penalty can arrive alongside the first improvement notice, not only after one has been ignored. There is no built-in warning stage.

One detail to treat with care: some coverage has framed this as £7,000 per hazard. Whether a council can impose separate penalties for several hazards at the same property, or must treat them together, is the kind of question the enforcement guidance governs, so per-hazard figures are best read cautiously until that guidance is settled.

The two words that decide it

Section 6A does not allow a penalty simply because a serious hazard exists. The council must also be of the opinion that it would have been reasonably practicable for the responsible person to secure the removal of the hazard.

Those two words are where these cases will be won and lost. Reasonable practicability is a judgment about conduct over time. When did the landlord know, or when should they have known? What happened once they were told? How quickly were contractors instructed? Did access refusals or parts delays genuinely hold things up? None of that is answered by the state of the property. All of it is answered by records.

The procedure is a documents contest

The procedure reinforces this. Whatever the “on the spot” headlines suggest, a civil penalty of this kind is not issued without process. The council must first give a notice of intent, the recipient has a right to make written representations before any final notice, and a final notice carries a right of appeal to the First-tier Tribunal. Those are the standard safeguards that attach to financial penalties under the Housing Act 2004, and the exact procedural detail for this new power will be set out in the enforcement guidance.

Written representations and a tribunal appeal are, by their nature, paper exercises. The landlord who can produce a dated sequence showing the tenant’s report, the reply, the contractor instruction, the completion of works and any follow-up is arguing from strength at every stage. The landlord reconstructing events from memory, a text thread spread across two phones and a folder of undated photos is not.

What the guidance actually asks of you

The new landlord and agent guide is more constructive than the headlines suggest, and its practical suggestions all point the same way. You are not expected to become a trained HHSRS assessor. You are expected to keep homes free of Category 1 hazards, and the guide gives you tools for that. Appendix A contains a baseline indicators self-assessment checklist, from drainage and heating to guarding and fire safety, which you can walk through yourself. It is voluntary, but the guide describes it as a useful way to assess conditions and give tenants confidence, and anything below a baseline indicator is generally a deficiency worth assessing. A dated, completed checklist per property is itself a record of proactive management.

The guide also encourages negotiation before litigation. If you receive an improvement notice, you can contact the case officer, propose alternative works or a longer timescale, and ask for the notice to be varied. If negotiations conclude before the appeal deadline, you keep your right of appeal. The reasonable excuse defence puts the onus on you to show the steps you took: if a tenant refuses access, the guide points to applying to vary or suspend the notice, or seeking a court order for access. Every one of those routes works only if you can evidence what you did and when.

Councils can demand your documents, and altering them is worse than lacking them

Two document powers deserve attention. Under section 235 of the Housing Act 2004, a council can require a landlord or agent to produce documents such as the tenancy agreement and safety certificates. Failing to produce them without reasonable excuse is a criminal offence carrying a fine, and the guide notes that deliberately destroying or altering a requested document can attract an unlimited fine in the Crown Court. If a document does not exist, the guide’s advice is to explain why rather than stay silent.

Separately, the Renters’ Rights Act adds investigatory powers allowing councils to require documents from a wider group described as any “relevant person”, which extends beyond the landlord to those who have acted as agent, licensor or marketer in connection with the letting. Failing to comply with such a requirement without reasonable excuse is an offence. So “my agent deals with all that” is not insulation for a landlord, and managing a property is now a records liability for the agent.

At LLCR, we built the Property Issue Log for precisely this situation. Every repair, complaint and hazard sits on an append-only timeline that records the date an issue is said to have occurred separately from the date it was logged, and mistakes are fixed by visible corrections rather than edits, so the record stays honest about its own provenance. When a council asks questions, it produces an Issue Response Pack: a chronological, evidenced factual account of what was reported and how it was handled. It is deliberately not a legal defence and not an HHSRS assessment. It is the record a defence gets built from.

Not sure where your gaps are? LLCR’s free compliance checker runs through the legal requirements for your tenancy in minutes.

A partnership with Property118

Property118 and LLCR have agreed a partnership for this community.

Property118 reader signup click here

Code at checkout: PROPERTY118

Discount: 10% lifetime reduction on all Starter and Pro plans, monthly or annual. Stacks with founder pricing for the first year and continues to apply on standard pricing once founder slots are filled.

The penalty regime is new and untested, and how councils use it will only become clear over the next year. What is already clear from the legislation is the direction: enforcement decisions will be made on records.

So I am genuinely curious. How are you logging tenant reports today, and would it survive being pulled apart months later? Has anyone had an inspection under the new 21-hazard system yet? And for the agents reading: how are you keeping records your landlord clients could actually rely on if a section 114 notice arrived?

Tauhid Islam is a property law paralegal qualifying as a solicitor. He works on tenancy, possession, and compliance matters daily, and founded LLCR, Landlord Compliance Register, to give self-managing landlords in England a single place to track every deadline, certificate, and document the law requires of them.

This article is general information only and is not legal advice. It concerns the law of England. Enforcement practice varies between councils and the new penalty regime is untested, so landlords facing enforcement action should seek independent legal advice for their specific circumstances.

This article is for informational purposes only and does not constitute legal advice. Always seek independent legal advice for your specific situation.

The post The £7,000 hazard penalty will be decided by your records, not just your property appeared first on Property118.

View Full Article: The £7,000 hazard penalty will be decided by your records, not just your property

Categories

Archives

Calendar

July 2026
M T W T F S S
« Jun   Aug »
 12345
6789101112
13141516171819
20212223242526
2728293031  

Recent Posts

Quick Search

RSS More from Letting Links

Facebook Fan Page