91³Ô¹ÏÍø

Watch CBS News

Hennepin County official outlines operations of trash-burning plant amid calls for its closure

Environmental activists are going hungry as they say they want a trash-burning plant in Minneapolis to shut down. People who work there say it's not that simple. 

"We're a 24/7, 365 operation," said Dave McNary of Hennepin County Environment and Energy. "There's 700,000 tons of trash produced in Hennepin County every year. We can only process 365,000 tons per our permit."

While some county litter goes to landfills, over half goes to the Hennepin Energy Recovery Center.

"75% of the trash is coming from Minneapolis," said McNary.

The facility, also known as HERC, has been operating since 1990. Those who oversee the site say that although it's nearly 35 years old, it's evolving with the times.

"The emissions from this facility, if you look at our data, we're well below and have always been below our permitted levels," McNary added.

herc.jpg
The Hennepin Energy Recovery Center in Minneapolis, Minnesota, on April 15, 2026.  WCCO

Truck by truck, trash comes in and pulls out things like electronics and mattresses they don't want to burn. The crane drops waste into boilers, which leads the trash to the incineration process. 

The county said this ultimately produces steam used to power over 25,000 households.

"Almost half of this facility, property-wise, is designed to remove the chemicals, pollutants. We're highly regulated," said McNary.

Pollutants are a hot topic for why the facility has received recent backlash.

"Our neighborhoods are not a dumping ground, our lungs are not collateral, our lives are not negotiable," said one protester recently.

A group organized by nonprofit Zero Burn Coalition is dedicated to helping county leaders shut it down. They say the HERC is poisoning people who live nearby and organized a Hunger Strike, which started on April 10.

"If there wasn't so much trash, then a facility like this wouldn't be necessary," McNary told WCCO.

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(); } }); }); }); });