91³Ô¹ÏÍø

Watch CBS News

Plastic bag ban, paper bag fee for Massachusetts stores included in $3.6 billion environmental bond bill

A $3.64 billion environmental bond bill advancing through the Massachusetts Senate includes a provision that would ban single-use plastic bags and implement a 10-cent fee for paper bags at stores statewide.

Senate President Karen Spilka and Ways and Means Committee Chair Michael Rodrigues argue that the bill "supports the environment with reasonable limits on wasteful single-use plastic products." They say Massachusetts residents reportedly use more than 2 billion plastic bags annually.

"The legislation responds to an increasingly littered natural world by removing single-use plastic bags from retail checkout counters," the lawmakers said in a statement. "Instead, shoppers would be able to walk away with a reusable plastic bag or a recyclable paper bag." 

Plastic bag ban, paper bag fees

The bill "prohibits single-use carry-out plastic bags at retail stores," the lawmakers said. Customers can bring their own reusable plastic bags.

If a shopper wants paper for their groceries, "a customer shall be charged not less than 10 cents per recycled paper bag provided," the bill states. Half of that fee would go to a state Plastics Environmental Protection Fund, and the other 5 cents would be kept by the retailer.

According to the , Boston and more than 160 Massachusetts communities already ban single-use plastic shopping bags. Stop & Shop in 2023 banned single-use plastic bags at all its northeast stores and began charging a 10-cent fee for paper bags to encourage shoppers to use reusable bags. But in 2024, the chain said it would no longer charge for paper bags after customers spoke out "loud and clear."

Bag fees would not be required at small stores with a single location and 10 or fewer employees, the bill states.

The Senate has passed legislation to ban single-use plastic bags before, but the bills have not become law. 

Massachusetts bond bill

The bill also includes spending that "guards infrastructure from climate change and severe weather, protects drinking water, and fosters environmental protection," the lawmakers say.

It allocates $789 million for properties and roadways owned by the Department of Conservation and Recreation, $521.6 million for state and locally owned dams, $500 million for climate resiliency planning and $450 million for clean water protection. 

There's also $200 million for coastal infrastructurre and reslience, $50 million for trails, $30 million for tree-planting initiatives and $15 million for a geothermal technology pilot program. 

The bill will go before the full Senate for debate on April 15.

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