91³Ô¹ÏÍø

Watch CBS News

Fox River Trolley Museum in South Elgin is a living history museum

The Fox River Trolley Museum offers a one-of-a-kind experience, a ride by the river enjoying a piece of history.

It doesn't look like your usual museum because it's not. There's no building, just 27 vintage rail cars built as far back as 1887.

"We're a living history museum," said Jeff Bennett, chief car officer and conductor. "[In the 1890s] you had to walk to work. There weren't cars, horses were for farming. With the advent of trolleys, you could live in Geneva but work in Elgin. That was a huge game-changer. I would say it invented commuting."

You'll find amazing craftsmanship on these rail cars, but there's one thing you won't find.

"We're out in the beautiful summer weather and these don't have air conditioning," Bennett said. "We can use 40 windows as our cooling device."

Train rides take you by the Fox River, and back in time.

"When the railroad was being laid out, this was all farm land. And we go over several bridges [built] so farm animals could get to the river to get water," he explained. "You take one of these cars down the line, you ride next to the river, it's a feeling you're not going to get anywhere else."

People visiting the museum the day we were there said they liked the ambiance of the train, the wind through the windows and the history that was shared. Jay Kellner said he had never had the opportunity to cruise down the Fox River in that way.

"It was a nice perspective," he said.

There are even vintage CTA cars, like ones used to carry commuters on Chicago's Northwest Side, on the museum train.

"It served 50 years on the Chicago Elevated, the same tracks that are in use today," said Bennett. "It's been here at the museum coming up just as long as it was in regular service."

But the train's snazzy looks didn't come easy. It underwent a major renovation several years ago that took 13,000 hours of work done almost completely by volunteers.

"The roof, floor, window, paint, pretty much everything," Bennett said. "When we do them, we don't spare any details. The labor of love that has gone into that train, every time I look at it I smile."

And no vintage CTA car would be complete without a sign that warns "No smoking. No spitting."

The heyday of the trolley came to an end when the automobile era began.

"When it started changing was when Henry Ford took off with his model T and Model A, and as more people could afford an automobile, fewer people needed a public mode of transportation," Bennett said. "The final demise was the onset of expressways. Now all of a sudden everybody could just go where they wanted, didn't have to wait for the next train."

That's where the Fox River Trolly Museum comes in.

"A huge part of what we do is interpreting history, demonstrating history," Bennett said. "Here in South Elgin we just love that we can keep this alive, keep history alive."

And he has his own history there.

"I can remember every summer, my grandparents bringing me out. My first visit was when I was four years old. So for, 40 years later, to be in charge of their wellbeing, to be able to operate them, be able to pass on the history to the next generation, it's just amazing," he said. "I love every part of what I do.


Do you know someone a person or place that brings you joy? We want to share your story. 

Send us your "Eye on Chicago" ideas using the form below (or ):

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