Zuchu faces Sh500 million fine over copyright

Bongo Flava artiste Zuchu, could find herself paying Sh500 million for an alleged copyright breach involving gospel artist, Enock Jonas, it has been revealed.

This is after gospel artiste Jonas  claimed that Zuchu has taken part of his chorus and dance routine from his song 'Wema wa Mungu' which was released in 2012 better known as 'Zunguka'.

Information about the claims started to spread on social media through a letter written by a company involved in intellectual property rights issues, Gerpat Solution, where one its officials, Gerald Magubuka, said that their client went to complain to Zuchu for sampling his song.

According to Magabuka they have already served the artiste with a letter of intent to sue of which a copy has been taken to Cosota (Copyright society of Tanzania).

Speaking over the weekend, Enock Jonas said he was forced to take the step after negotiations with Zuchu's side failed, claiming he was told him that they are not pay him even Sh2 million for his claims.

He said the stance was made by one of the managers at WCB, Khamis Taletale (Babu Tale), after talking to him by phone on Tuesday.

On their part, Cosota through its Executive Secretary, Doreen Sinare, has acknowledged that the issue is on her desk and explained that what happened was that the artists wrote letters to each other, so for now they cannot say anything.


* * If no #mcl-market-ticker element exists, the widget inserts itself right * after this var sel = thisScript && thisScript.getAttribute("data-target"); if (sel) { var t = document.querySelector(sel); if (t) return t; } // 2) A dedicated mount element the host page provides. var el = document.getElementById(CONFIG.targetId); if (el) return el; // 3) Fallback: insert right after this script tag. el = document.createElement("div"); el.id = CONFIG.targetId; if (thisScript && thisScript.parentNode) { thisScript.parentNode.insertBefore(el, thisScript.nextSibling); } else { document.body.appendChild(el); } return el; } // ---- Data pipeline (identical logic to the standalone banner) ------------ function apiUrl(path) { if (!path) return path; if (/^https?:\/\//i.test(path)) return path; return CONFIG.apiBase + (path.charAt(0) === "/" ? "" : "/") + path; } function toNum(v) { var n = parseFloat(String(v == null ? "" : v).replace(/,/g, "")); return isFinite(n) ? n : null; } function fmtNum(v) { var n = parseFloat(String(v).replace(/,/g, "")); if (!isFinite(n)) return String(v == null ? "" : v); var d = Math.abs(n) >= 1 ? 2 : 4; return n.toLocaleString("en-US", { minimumFractionDigits: d, maximumFractionDigits: d }); } function changeClass(d) { if (d == null || Math.abs(d) < 1e-9) return "flat"; return d > 0 ? "up" : "down"; } function arrow(d) { if (d == null || Math.abs(d) < 1e-9) return "▬"; return d > 0 ? "▲" : "▼"; } async function fetchFiles(category, count) { var res = await fetch(apiUrl("/api/files?category=" + category)); if (!res.ok) throw new Error("list " + category + " " + res.status); var list = await res.json(); return Array.isArray(list) ? list.slice(0, count || 1) : []; } async function parseSheet(meta) { var res = await fetch(apiUrl(meta.url)); if (!res.ok) throw new Error("download " + res.status); var buf = await res.arrayBuffer(); var wb = XLSX.read(buf, { type: "array" }); return XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], { defval: "" }); } function buildStocks(rows) { var items = []; rows.forEach(function (r) { var sym = r["Symbol"] || r["symbol"]; if (!sym) return; var close = toNum(r["Close"]); if (close == null) return; var prev = toNum(r["Prev Close"] || r["Previous Close"]); var delta = prev != null ? close - prev : null; var pct = (delta != null && prev) ? (delta / prev) * 100 : null; items.push({ sym: sym, val: fmtNum(close), delta: delta, pct: pct }); }); return items; } function buildForex(rows, prevRows) { var pmean = {}; (prevRows || []).forEach(function (r) { if (r["Currency"]) pmean[r["Currency"]] = toNum(r["Mean"]); }); var items = []; rows.forEach(function (r) { var cur = r["Currency"]; if (!cur) return; var mean = toNum(r["Mean"]), buy = toNum(r["Buying"]), sell = toNum(r["Selling"]); if (buy == null && sell == null && mean == null) return; var pv = pmean[cur]; var ref = mean != null ? mean : (buy != null && sell != null ? (buy + sell) / 2 : (buy != null ? buy : sell)); var delta = pv != null ? ref - pv : null; var pct = (delta != null && pv) ? (delta / pv) * 100 : null; items.push({ sym: cur, buy: buy != null ? fmtNum(buy) : "—", sell: sell != null ? fmtNum(sell) : "—", delta: delta, pct: pct }); }); var order = CONFIG.majorCurrencies; items.sort(function (a, b) { var ia = order.indexOf(a.sym), ib = order.indexOf(b.sym); if (ia === -1) ia = 999; if (ib === -1) ib = 999; if (ia !== ib) return ia - ib; return a.sym < b.sym ? -1 : 1; }); return items; } function chgHTML(it) { var cls = changeClass(it.delta); if (it.delta == null) return ''; var pctTxt = it.pct != null ? (it.pct >= 0 ? "+" : "") + it.pct.toFixed(2) + "%" : ""; return '' + arrow(it.delta) + " " + pctTxt + ""; } function stockHTML(it) { return '' + it.sym + '' + it.val + "" + chgHTML(it) + ""; } function forexHTML(it) { return '' + it.sym + "" + '' + CONFIG.labels.buy + ' ' + it.buy + ' · ' + CONFIG.labels.sell + ' ' + it.sell + "" + chgHTML(it) + ""; } function pill(t, k) { return '' + t + ""; } function render(track, stocks, forex, dateLabel) { if ((!stocks || !stocks.length) && (!forex || !forex.length)) { track.innerHTML = '
' + CONFIG.labels.unavailable + "
"; track.style.animation = "none"; return; } var parts = []; if (stocks && stocks.length) { parts.push(pill(CONFIG.labels.stocks)); stocks.forEach(function (s) { parts.push(stockHTML(s)); }); } if (forex && forex.length) { parts.push(pill(CONFIG.labels.forex, "forex")); forex.forEach(function (f) { parts.push(forexHTML(f)); }); } if (dateLabel) parts.push('' + CONFIG.labels.updated + ": " + dateLabel + ""); var content = parts.join(""); track.innerHTML = content + content; // duplicated for a seamless loop requestAnimationFrame(function () { var dur = Math.max(20, Math.round((track.scrollWidth / 2) / CONFIG.pxPerSecond)); track.style.animation = "none"; void track.offsetWidth; track.style.animation = "mcl-scroll " + dur + "s linear infinite"; }); } async function load(track) { try { var results = await Promise.allSettled([fetchFiles("hisa", 1), fetchFiles("fedha", 2)]); var stocks = [], forex = [], dateLabel = ""; if (results[0].status === "fulfilled" && results[0].value.length) { var hf = results[0].value[0]; dateLabel = hf.date || ""; stocks = buildStocks(await parseSheet(hf)); } if (results[1].status === "fulfilled" && results[1].value.length) { var ff = results[1].value; var curRows = await parseSheet(ff[0]); var prevRows = ff[1] ? await parseSheet(ff[1]) : []; forex = buildForex(curRows, prevRows); if (!dateLabel) dateLabel = ff[0].date || ""; } render(track, stocks, forex, dateLabel); } catch (e) { if (!track.querySelector(".mcl-item")) { track.innerHTML = '
' + CONFIG.labels.unavailable + "
"; track.style.animation = "none"; } } } function mountAndRun() { injectStyle(); var mount = getMount(); mount.innerHTML = '
' + '
' + CONFIG.brand + "" + '' + CONFIG.live + "
" + '
' + CONFIG.labels.unavailable + "
"; var track = mount.querySelector(".mcl-track"); function go() { load(track); setInterval(function () { load(track); }, CONFIG.refreshMs); } if (window.XLSX) { go(); return; } var sc = document.createElement("script"); sc.src = "https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"; sc.onload = go; sc.onerror = function () { track.innerHTML = '
' + CONFIG.labels.unavailable + "
"; }; (document.head || document.documentElement).appendChild(sc); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", mountAndRun); } else { mountAndRun(); } })();