91³Ô¹ÏÍø

Watch CBS News

Statewide firefighter shortage impacts Southeast Michigan communities

With summer heating up, firefighters are bracing for a surge in calls while managing critical staffing levels, with one city in Metro Detroit facing some of the worst in the entire state. 

"Whether you're in Traverse City or down here in Southfield, it's about having a conversation about staffing," said Matthew Sahr, president of the Michigan Professional Fire Fighters Union.

"Our population is exploding; our business is huge. More people would help us provide better service to our residents and visitors," said Lt. James Tack, Jr., of the Southfield Fire Department.

With nearly 75,000 residents, the Southfield Fire Department says it gets close to 20,000 emergency calls a year but only has 105 people on the force.

"When I got hired in 20 years ago, we had 105 people, and we were doing about 6,000 calls a year. Fast forward 20 years, and we're still at about the same number of people, but we're doing almost triple call volume," said Tack, Jr.

CBS News Detroit took a closer look and found that Michigan has half the number of career firefighters as neighboring states, pushing legislators here at home to create a bill to address the staffing issue.

"We don't have Republican or Democrat issues. We have firefighter issues, and those issues relate directly back to the residents that we serve," said Sahr.

As president of the Michigan Professional Fire Fighters Union, Sahr says Senate Bill 319 wouldn't mandate staffing levels, but it would require cities to at least discuss them during union bargaining.

"This makes no mandates, and we know that not every community can afford more staffing," said Sahr.

Tack says his already strained teams are doing their best to serve the community, but could really use more help.

"If you need anything, we are always available to you," said Tack. 

Currently in the state House, the Michigan Professional Fire Fighters Union hopes to get the bill passed and on the governor's desk by the end of the year.

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