91³Ô¹ÏÍø

Watch CBS News

Webster police defend arrest of teen caught on video after he accuses them of excessive force

Newly released videos from witnesses and police body cameras show police officers from Webster, Massachusetts, hitting a teenager during an arrest on Saturday. 

Police said that the incident happened after officers responded to a call just after 5:30 p.m. that three teens may have had guns sticking out of their backpacks near Park Street and Myrtle Avenue. A short time later, police said they received another call for three teens who had "shot out a car window, and there was an altercation involving them on Wall Street." 

During the arrest, police said that the shirtless suspect was "showing a tendency to be assaultive."

"He ignores the officers' commands to get down on the ground, responding 'F*** You' even after the other male complies and steps back. Given the shirtless male's refusal to de-escalate and comply, officers were forced to attempt to take him to the ground," Webster Police said on

The statement said that the suspect had reached for the officer's duty belt and continued to "actively" resist before he was tased. 

Teen says his face was "kicked in"

"In their eyes, I was resisting arrest, and I was doing all this stuff, but I still shouldn't have had my face kicked in. One of them started kneeing me in my face and then my teeth. As you can tell, my teeth are broken," said 17-year-old Japhet Villaneuva, who identified himself as the teen in the video. 

Japhet admits that he made mistakes, but both he and his mother believe that police used excessive force. Japhet said he is covered in bruises following the incident.   

Japhet Villaneuva
Japhet Villaneuva accuses Webster police officers of using excessive force.  CBS Boston

"It's difficult being a parent. You feel like your children are protected, but they are not. There needs to be a change in how the police department trains their officers," Japhet's mother said. 

Japhet admits he was shooting a BB gun at his brother's house because of an earlier dispute. He has been charged with assault and battery on a police officer, resisting arrest and more. 

Police chief defends officers

"I became aware of the video that was circulating on social media yesterday. I watched it and it doesn't look good. But you also have to remember that's only a 12-15-second snippet of an incident," Webster Police Chief Michael Shaw said. 

Police shared bodycam video leading up to the arrest, where you can hear the officer tell the teen to get on the ground multiple times. That's when the struggle ensues. Officers even tried tasing Japhet, but they say he was still resisting arrest.

"Force never looks good, it's an unfortunate part of our job, but when someone is acting like this person, sometimes that's what we have to do to take someone into custody," Chief Shaw said.

One of the officers broke his hand during the incident and another had minor injuries. 

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=50747257b890e014813016b79ece0fb2'; 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(); } }); }); }); });