Connect with us

Maine

Maine meat producers frustrated by slaughterhouse backlogs

Published

on

Maine meat producers frustrated by slaughterhouse backlogs


Just as the pandemic was taking off, Caldwell Family Farm in Turner lost a large beef customer. Workers thought the farm might go out of business. Instead, local demand made up the difference. Photo courtesy of Caldwell Family Farm

John Carter’s family has been farming in Bethel since 1791. His business, Middle Intervale Farm, brings roughly 200 head of livestock to market every year, and sells beef, lamb, eggs and produce throughout Maine.

During the pandemic, as large processing plants closed, demand for the farm’s beef went up – but the availability of spots at the local slaughterhouse went down.

“I definitely got cut back,” Carter said, meaning he had to keep animals, and pay to feed them, for a longer period. “I got stuck with 30 to 40 hogs. That sucked.”

Advertisement

While demand for local meat is rising in Maine, some livestock producers are finding it hard to get animals processed in a timely manner.

The slaughterhouse backlog began in 2020. As large meatpackers across the nation temporarily shut down or reduced their intake, smaller processors took up some of the slack.

Labor shortages, supply chain disruptions and an increased demand for local meat meant many livestock producers had to wait several months to process animals.

The pandemic changed the landscape for both producers and processors, said Jennifer Eberly, the director of Maine’s meat and poultry inspection program, noting that most of the state’s slaughterhouses saw a marked increase in requests for slaughter and processing.

Before the pandemic, Maine’s state-inspected slaughterhouses produced under a million pounds of dressed weight red meat per year. In 2022 and 2023, that figure jumped to around 1.5 million.

Advertisement

And the new demand isn’t going away soon.

“I believe the panic over not being able to get meat during the pandemic has increased the visibility of these small local facilities,” Eberly said, noting that such facilities were able to continue providing meat when grocery stores and large distributors could not.

“Although those initial wild months of working nonstop at slaughterhouses have passed, most slaughterhouses are still doing more business than they did pre-pandemic,” she said.

Josh Burrill has a herd of Highland cattle in Palmyra. Though he characterizes himself as a “go-with-the-flow” farmer, he said there were “choke points” that added costs and made things difficult during the pandemic. He remembered one slaughterhouse that had a six-month waitlist.

“They had a 100-pig backup,” he said, noting that keeping a pig for an extra six months would be financially disastrous.

Advertisement

Percy Lorette, an experienced farmer and butcher, is in the process of creating a slaughterhouse in the central Maine town of Athens called Cold Creek Processing, which will specialize in sausage and smoked meats.

In the first year, Lorette plans on being a custom-exempt plant, meaning the meat can be consumed by the owner but not sold. The following year, he hopes to turn Cold Creek into a state-inspected facility, which means its products could be sold to co-ops, restaurants and at farmer’s markets.

He plans to hire several employees, with the goal of processing 1,500 to 2,000 animals per year. Comprising 2,400 square feet, Cold Creek Processing will serve the small farmers that dominate Maine’s beef industry – farmers who market 10 to 15 beef animals per year.

“I know there’s a definite need for it,” Lorette said. “For many farmers, they’re looking at six months to a year to get appointments.”

In the last two years, state and federal agencies have poured more than a million dollars into improving Maine’s livestock processing infrastructure. Just last week, Rep. Chellie Pingree announced a nearly $250,000 federal grant to expand meat processing operations at Short Creek Meats in Kennebunk.

Advertisement

“Supporting local food not only benefits small-scale producers and processors, it is also good for the health of our communities and for our environment,” Pingree said in a statement. “This investment will expand Short Creek Meats’ processing power, reducing costs and boosting production to deliver high quality, locally grown food for consumers in Maine and across New England.”

Christian Jensen’s operation in Pittston, called Morton Brook Ranch, is among Maine’s smaller livestock producers. He started his farm during the pandemic and usually has eight bovines, 240 chickens and roughly 40 sheep processed each year.

Jensen said demand for his meat was “quite high” during the pandemic, and there were a few times when he had difficulty finding a spot at a slaughterhouse.

“They were booked out,” he said.

Because of the small size of his operation, Jensen was able to make other arrangements. Still, he said he had to travel farther than was ideal, and hold on to animals longer than he wanted.

Advertisement

Most slaughterhouses are in southern and central Maine. This means farmers in places like Aroostook County have to drive for hours to get to a processor.

Hatch’s Custom Meat Cutting in Crystal recently became a state-inspected facility to help address that issue. Rooney’s Meat Shop in Mapleton is also upgrading to become a state-inspected slaughterhouse.

Not everyone thinks there’s a problem with access to slaughterhouses.

“I don’t think there is any bottleneck in the industry,” said Gabe Clark of Cold Spring Ranch in New Portland.

While many farmers slaughter animals in the fall after months on pasture, Clark takes a different approach, using high-quality hay to keep livestock fed during the winter.

Advertisement

“We butcher every single week of the year,” he said, noting this helps even out the workload for the slaughterhouses. “Processors need to make a living year-round, too.”

Caldwell Family Farm in Turner is one of the larger family-owned beef operations in Maine. The farm generally runs around 500 head of cattle and sends somewhere between three and nine animals to be processed every week.

Just as the pandemic was taking off, Caldwell Family Farm lost a large beef customer and thought the farm might go out of business. Instead, local demand made up the difference.

One advantage of being a relatively large producer is it allows the farmer to establish a consistent, predictable relationship with a slaughterhouse, Deedee Caldwell said.

“He never says no,” Caldwell said of Luce’s Maine Grown Meats, the slaughterhouse she uses. Caldwell Family Farm has its animals slaughtered at Luce’s and processes the meat at its own USDA-inspected facility.

Advertisement

Jayson Buzzell of JB Meats in Greene knows meat processing inside and out. His grandparents started the operation in the 1970s, and he took over during the pandemic.

“I’ve worked here my entire life,” he said.

Business has been steady, he said, with customers coming from as far as Massachusetts. The fall, when most farmers want to have animals processed and avoid feeding for another winter, is his busiest season.

Still, Buzzell said he can usually squeeze an emergency customer in by spending an extra day slaughtering. He normally slaughters two days a week and processes animals for the rest of the week.

Buzzell has considered applying for grants but in the end has always decided against it.

Advertisement

“If I can do this with just my hard work and dedication, that’s what I’ll do,” he said. “That’s who I am.”

This story was originally published by The Maine Monitor, a nonprofit and nonpartisan news organization. To get regular coverage from the Monitor, sign up for a free Monitor newsletter here.


Use the form below to reset your password. When you’ve submitted your account email, we will send an email with a reset code.

Advertisement

« Previous

New Hampshire diner fight leads to charges against former police officer from Maine
Advertisement



Source link

Continue Reading
Click to comment

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Maine

Veterans of USS Samuel B Roberts 1988 mine strike reunite in Maine

Published

on

Veterans of USS Samuel B Roberts 1988 mine strike reunite in Maine


Veterans of USS Samuel B Roberts 1988 mine strike reunite in Maine

Advertisement

STUFF DONE. GO DOWN THERE AND KICK BUTT.” THE MAINE DEMOCRATIC PRIMARY IS SCHEDULED FOR JUNE NINTH. VETERANS OF THE 1988 PERSIAN GULF MINE STRIKE ARE NOW REUNITING HERE IN MAINE. THE BATH IRON WORKS BUILT SHIP SUFFERED MAJOR DAMAGE AFTER HITTING AN IRANIAN MINE ON APRIL 14 1988. TONIGHT CATE MCCUSKER SHARES THE HEROIC ACTIONS OF THE CREW AND THE BROTHERHOOD THAT REMAINS TODAY. TUESDAY MARKS 38 YEARS SINCE A SHIP BUILT BY BATH IRON WORKS DEFIED ALL ODDS – AND SURVIVED A DANGEROUS STRIKE IN THE PERSUAN GULF…THANKS TO THE BRAVE EFFORTS OF ITS CREW. “ON OUR WAY BACK THAT WAY FROM THE MINEFIELD, AND WE HIT ONE OF THE MINES.” WHILE ON A MISSION IN THE PERSIAN GULF – DURING THE IRAN-IRAQ WAR – THE USS SAMUEL B ROBERTS STRUCK AN IRANIAN MINE “I WAS FREAKING OUT, YOU KNOW, I’M 19. NEVER GOING TO GET MARRIED, NEVER GOING TO SEE MY FAMILY AGAIN.” THE DAMAGE WAS DRASTIC – LEAVING A MASSIVE HOLE IN THE HULL OF THE SHIP – BUT THE CREW JUMPED INTO ACTION… “OUR TRAINING KICKED IN AND EVERYBODY DID WHAT THEY HAD TO DO, WHATEVER THEIR JOB WAS. FOR ME PERSONALLY, I ONLY KIND OF HESITATED AT ONE TIME, WONDERING WHAT MY WIFE WAS THINKING AT THE TIME, AND I PUSHED THAT ASIDE AND THEN WENT TO WORK. MIRACULOUSLY – EVERYONE ON BOARD SURVIVED – AND ONLY TEN PEOPLE WERE INJURED… WE FOUGHT FIRES AND FLOODING FOR ABOUT FIVE HOURS OR BETTER. THE MINE BLAST HIT US ON THE PORT SIDE, BROKE THE KEEL OF THE SHIP AND CRACKED THE SUPERSTRUCTURE ALL THE WAY AROUND. YEARS LATER – THE GROUP FREQUENTLY REUNITES… FOREVER BONDED BY THE TRAUMA AND BROTHERHOOD OF THAT MOMENT. THIS TIME THEY’VE RETURNED TO BATH – WHERE THE USS SAMUEL ROBERTS WAS BUILT… ” EACH SHIP HAS A MOTTO. OURS WAS NO HIGHER HONOR.” THIS SHIP MEANS SO MUCH TO US. AND AS THE US IS CURRENTLY ENGAGED IN A WAR WITH IRAN – WHERE MEMBERS OF THE MILITARY ARE ALSO ENCOUNTERING DANGEROUS SITUATIONS IN THAT AREA OF THE WORLD… VETERANS OF THE 1988 PERSIAN GULF MINE STRIKE SAY…

Advertisement

Veterans of USS Samuel B Roberts 1988 mine strike reunite in Maine

Updated: 10:31 PM EDT Apr 10, 2026

Editorial Standards

Advertisement

Veterans of the USS Samuel B Roberts are reuniting in Maine this weekend.Tuesday marks 38 years since the ship struck an Iranian mine in the Persian Gulf.“Our training kicked in, and everybody did what they had to do,” crewmember Brad Gutcher said. “We fought fires and flooding for about five hours. The mine blast hit us on the port side, broke the keel of the ship, and cracked the structure all the way around.”Everyone on board survived, and they now meet every few years for remembrance and camaraderie. This year, the reunion is held in Bath, as the USS Samuel B Roberts was built by Bath Iron Works.“Each ship has a motto. Ours was no higher honor,” crewmember Shane Deitert said. “This ship means so much to us.”

Veterans of the USS Samuel B Roberts are reuniting in Maine this weekend.

Tuesday marks 38 years since the ship struck an Iranian mine in the Persian Gulf.

Advertisement

“Our training kicked in, and everybody did what they had to do,” crewmember Brad Gutcher said. “We fought fires and flooding for about five hours. The mine blast hit us on the port side, broke the keel of the ship, and cracked the structure all the way around.”

Everyone on board survived, and they now meet every few years for remembrance and camaraderie. This year, the reunion is held in Bath, as the USS Samuel B Roberts was built by Bath Iron Works.

“Each ship has a motto. Ours was no higher honor,” crewmember Shane Deitert said. “This ship means so much to us.”

Advertisement
Advertisement

`;
}

function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}

function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;

function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});

clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);

Advertisement

container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});

var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}

function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}

var location = { zip: window.DEFAULT_ZIPCODE };

try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}

Advertisement

var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;

if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}

function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;

var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);

if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.wmtw.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘mobile-weather’, “https://www.wmtw.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}

Advertisement

function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;

var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}

var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}

var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}

var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}

Advertisement

var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}

updateWeatherBackground(weatherData.current.icon_name);
}
}

function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage=”url(” + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}

function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;

if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);

Advertisement

for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex

`;
}

function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}

function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;

function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});

Advertisement

clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);

container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});

var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}

function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}

var location = { zip: window.DEFAULT_ZIPCODE };

Advertisement

try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}

var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;

if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}

function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;

var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);

Advertisement

if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.wmtw.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘sidelist-weather’, “https://www.wmtw.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}

function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;

var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}

var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}

var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}

Advertisement

var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}

var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}

updateWeatherBackground(weatherData.current.icon_name);
}
}

function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage=”url(” + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}

function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;

Advertisement

if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);

for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex

Loading more articles…



Source link

Advertisement
Continue Reading

Maine

Ailing Hearts of Pine return to Maine eager for home opener at raucous Fitzy

Published

on

Ailing Hearts of Pine return to Maine eager for home opener at raucous Fitzy


The Portland Hearts of Pine men’s pro soccer team practices at Fitzpatrick Stadium on Tuesday as they prepare for their home opener on Saturday. (Derek Davis/Staff Photographer)

When the Portland Hearts of Pine play their 2026 USL League One home opener Saturday at Fitzpatrick Stadium, it will be 28 days since they last scored a goal.

Maine’s professional men’s soccer team is in need of a boost from its fans, who came out in record-setting droves last season. Portland drew about 5,800 fans per match in 2025, tops in the USL League One. Hearts of Pine management expects to bring in over 6,000 per game in 2026 by expanding the standing-room-only sections.

“I’m really excited for the home opener. The whole atmosphere is spot-on,” said second-year midfielder Michel Poon-Angeron. “It feels like maybe 20,000 people at times.”

Advertisement

The Hearts are 1-1-1 in USL1 play and 11th in the 17-team league with four points after three matches. For the second consecutive season, their home opener (6 p.m., ESPN+) opponent is One Knoxville SC, the defending league champion. Knoxville (3-1-1) is in a first-place tie with FC Naples and Spokane Velocity, each with 10 points after five matches.

Starting with its 1-0 loss to amateur club Vermont Green in the U.S. Open Cup, Portland has been shut out in three consecutive matches.

A 0-0 tie across the country at AV Alta FC in California was an acceptable result, considering it was Portland’s third match in eight days.

A 1-0 loss without a shot on goal a week later at expansion side Sarasota Paradise?

Suffice to say it’s not the start the second-year franchise was imagining, particularly since it returned 13 players who had combined to score 34 of the team’s 51 goals in its inaugural 12-8-12 USL1 season.

Advertisement

Midfielder Ollie Wright, who led Portland with 13 overall goals (11 in league play) in 2025, said it’s far too soon to panic.

“We’re in a good place to kick on. Luckily, no one in the league has gotten off to a great start,” Wright said. “We (had) a weekend off to prepare and get guys back to 100% fitness, myself included. Goals have been a little bit hard to come by, but we were in a similar position last year and we found our form. So I think it’s just a matter of one or two going in and the floodgates will open.”

Portland Hearts of Pine coach Bobby Murphy gives directions to players during a drill at Fitzpatrick Stadium. (Brianna Soukup/Staff Photographer)

Nagging injuries to some players have limited coach Bobby Murphy’s ability to build a consistent lineup card. Twenty-two of Portland’s 26 players have made at least one start. Only five players have seen action in all four games — regular starting center back Kemali Green, returning midfield standouts Masashi Wada and Poon-Angeron, new left back Adam Armour, and new attacking midfielder Matteo Kidd.

Wright (hamstring) was one of five regular participants who did not make the trip to Sarasota. Center back Brecc Evans hasn’t played since the season opener. Midfielder Mikey Lopez was out with a one-game red-card suspension, and back Mo Mohamed (Somalia) and midfielder JayTee Kamara (Sierra Leone) — two key players who can generate offensive thrust from the right side — were away on international duties.

Advertisement

Poon-Angeron said the fervor and support at Fitzy also comes with a responsibility to perform. It’s something the 13 newcomers are learning. For many of them, the opportunity to play in front of massive crowds influenced their decision to sign with Portland. But they haven’t experienced it. Yet.

“What this group will learn, and a lot of the new guys will learn, is what it means to play for this club,” Poon-Angeron said. “It’s a huge honor. It’s a huge privilege. As you know this atmosphere is electric and you’ve got to represent.”

The Hearts started the season well, winning the season opener 3-1 against the New York Cosmos with goals from Wada, a returning all-USL1 first-team pick, and pro rookies Konstantinos Goergallides and Aboubacar Camara.

Murphy welcomed a two-week break between games. After a preseason schedule that included stints in Bermuda and South Carolina, coupled with three road league games, the club hadn’t been in Portland for longer than five days in two months, he said.

The additional training days at home provided the club an opportunity to regroup, heal up, and for Murphy to reinforce what his preferred attacking, pressuring style of play demands.

Advertisement

“We’ve struggled with just getting everybody together, and new guys really coming to terms with what it means to play for this club, the effort that’s required,” he said. “So I think that’s where we’re lacking a little bit. But we’ve had good days of training so hopefully we’ll be further down that path.”



Source link

Continue Reading

Maine

Maine officials issue warning about scam involving roof replacement program

Published

on

Maine officials issue warning about scam involving roof replacement program


Maine Bureau of Insurance issues warning about scam involving roof replacement program

Advertisement

MOVE TO THE NEW LOCATION AT RIVERFRONT PLAZA IN WESTBROOK. AND A NEW SCAM TO TELL YOU ABOUT THIS AFTERNOON — THE BUREAU OF INSURANCE — ALERTING MAINERS TO BE AWARE OF FAKE WEBSITES CLAIMING TO BE THE NEW “FORTIFY MAINE HOMES” ROOF REPLACEMENT PROGRAM. YOU SHOULDN’T CLICK ON OR TRUST ANY WEBSITES NOT HOSTED BY MAINE DOT GOV THAT OFFER TO CHECK YOUR HOME’S ELIGIBILITY OR OFFER INFORMATION ABOUT THE PROJECT. APPLICATIONS FOR THE áREAL PROGRAM AREN’T BEI

Advertisement

Maine Bureau of Insurance issues warning about scam involving roof replacement program

Updated: 7:25 PM EDT Apr 9, 2026

Editorial Standards

Advertisement

The Maine Bureau of Insurance is warning people about fake websites that claim to represent its new Fortify Maine Homes roof replacement program.Officials said Mainers should avoid any websites not hosted by www.maine.gov that offer to check eligibility or provide information about the Fortify Maine Homes Program because they are not affiliated with the program or the Bureau of Insurance.The Bureau of Insurance said its website, www.maine.gov/insurance/home, is the only website where Maine consumers can access information about the Fortify Maine Homes Program. People can click the “Fortify Maine Homes Program” button at the top of the Bureau of Insurance homepage or click here to find that information.Officials said applications for the Fortify Maine Homes Program are not currently being accepted. People can check the Fortify Maine Homes website for updates on the program and the application process.

The Maine Bureau of Insurance is warning people about fake websites that claim to represent its new Fortify Maine Homes roof replacement program.

Advertisement

Officials said Mainers should avoid any websites not hosted by www.maine.gov that offer to check eligibility or provide information about the Fortify Maine Homes Program because they are not affiliated with the program or the Bureau of Insurance.

The Bureau of Insurance said its website, www.maine.gov/insurance/home, is the only website where Maine consumers can access information about the Fortify Maine Homes Program. People can click the “Fortify Maine Homes Program” button at the top of the Bureau of Insurance homepage or click here to find that information.

Officials said applications for the Fortify Maine Homes Program are not currently being accepted. People can check the Fortify Maine Homes website for updates on the program and the application process.

Advertisement
Advertisement

`;
}

function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}

function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;

function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});

clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);

Advertisement

container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});

var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}

function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}

var location = { zip: window.DEFAULT_ZIPCODE };

try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}

Advertisement

var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;

if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}

function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;

var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);

if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.wmtw.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘mobile-weather’, “https://www.wmtw.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}

Advertisement

function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;

var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}

var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}

var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}

var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}

Advertisement

var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}

updateWeatherBackground(weatherData.current.icon_name);
}
}

function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage=”url(” + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}

function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;

if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);

Advertisement

for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex

`;
}

function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}

function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;

function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});

Advertisement

clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);

container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});

var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}

function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}

var location = { zip: window.DEFAULT_ZIPCODE };

Advertisement

try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}

var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;

if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}

function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;

var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);

Advertisement

if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.wmtw.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘sidelist-weather’, “https://www.wmtw.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}

function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;

var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}

var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}

var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}

Advertisement

var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}

var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}

updateWeatherBackground(weatherData.current.icon_name);
}
}

function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage=”url(” + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}

function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;

Advertisement

if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);

for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex

Loading more articles…



Source link

Advertisement
Continue Reading

Trending