91³Ô¹ÏÍø

Watch CBS News

Internal 2023 memo details how Baltimore could cut ties with BOPA

BALTIMORE -- A confidential memo from 2023 details how Baltimore could cut ties with the Baltimore Office of Promotion and the Arts (BOPA), according to our .

The memo, dated from January 2023, was drafted after ex-BOPA leader Donna Drew Sawyer resigned at Scott's request following the cancelation of the Martin Luther King Jr. Day Parade.

The memo laid out instability, low morale and possible collapse of BOPA if it didn't right the ship, the Banner reports. The mayor's office said the memo was "deliberative," according to the Banner.

The Banner reports the document suggested two possible plans for BOPA. "Option A" called for a review of all board members efficacy and giving the mayor's office control of the organization for one year until a new CEO was selected.

"Option B" would redirect all money the city gives the nonprofit to a wing of the mayor's office and other organizations to put on BOPA's signature events. Stripped of its core programming, BOPA would lose its quasi-governmental agency status under the plan, turning it into a private nonprofit that would have to raise funds independently of City Hall," the Banner reports.

New CEO

Rachel D. Graham was named the new CEO of BOPA earlier this year with a cloud of financial troubles hovering over the organization.

Financial troubles

Last month, BOPA asked the city to help them get back on track, while the mayor called for an independent forensic audit of BOPA's finances.

Graham and BOPA's financial team hired Marcum LLP, an outside accounting services firm, to help reconcile accounts and bring them up to date. The nonprofit will operate at a deficit for the rest of the year that could go up to $650,000.

Marcum LLP discovered that BOPA's financial problems began years ago. 

"Dating back currently as far as 2019, the organization has run at a deficit," Graham said. "In FY2019, the deficit was just under $1.1 million. FY20 the deficit was $53,756. There was a positive cash position in 2021, but we didn't do any programming in 2021."

Marcum representatives and BOPA leaders said they've spent months going through accounts and documents figuring out when and where the agency fell short. 

"We learned that there had been no reconciliation of our accounts since June of 2023 and our team had been operating essentially without a data-informed budget nor were they a part of the budget development process through most of FY2024," Graham said. 

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