91³Ô¹ÏÍø

Watch CBS News

Former Lanier Christian Academy coach charged in surreptitious recording case

Criminal investigators with the Hall County Sheriff's Office have charged Joel Ernest Lulinski, 52, of Cleveland, with multiple felony counts after he allegedly used his cell phone to record underneath the clothing of minors at Lanier Christian Academy.

Lulinski, a former physical education teacher and football coach at the Flowery Branch private school, faces 27 counts of the felony crime of using or installing a device to record underneath or through an individual's clothing under certain circumstances. 

According to authorities, all of the victims are female students at the academy and were under the age of 16 at the time of the incidents.

The investigation began on April 2, 2026, when one of the victims reported her suspicions to school officials. The officials immediately contacted a Hall County Sheriff's Office deputy who was working extra duty at the school. 

The report was quickly passed on to the agency's Criminal Investigations Bureau, which launched a probe into Lulinski's activities.

Over the following 12 days, investigators determined that Lulinski had used his cell phone on multiple occasions to take inappropriate and surreptitious photos or videos of minors during normal school activities.

Lulinski was questioned by investigators on Thursday, April 16, before being taken into custody at Hall County Sheriff's Headquarters. 

He has been transported to the Hall County Jail, where he is currently being held on a $175,500 bond.

The Hall County Sheriff's Office says the investigation remains ongoing.

School response

Lanier Christian Academy issued a press release on April 16, 2026, addressing the situation. The school reported that on Thursday afternoon, April 2, it received a report alleging inappropriate conduct by an employee. LCA contacted the Hall County Sheriff's Office within three hours of receiving the information, fully complying with Georgia law.

Joel Lulinski had been employed as a teacher and coach at the school since 2019, undergoing background checks prior to hiring and at regular intervals during his employment. The ongoing investigation led to his arrest by the Hall County Sheriff's Office.

LCA officials stated, "While this news is devastating for the victims and heartbreaking for our school community, we are grateful this was reported. As a school family, we are shocked and grieved by these events."

They added, "We realize there will be questions and concerns, and we want to address them promptly and with care." Counseling services are being made available for students and families. LCA is cooperating fully with the investigation and working with law enforcement and legal counsel to review student safety protocols.

A spokesperson for LCA said, "At times like this, we are grateful that our hope remains in Christ, and that His grace is sufficient (2 Corinthians 12:9), sustaining (Isaiah 43:1-3), and steadfast (Romans 5:1-5)."

The school stated that questions regarding the criminal investigation and charges are being handled by the Hall County Sheriff's Office.

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });