Close Menu
    Facebook X (Twitter) Instagram
    • Home
    • Contact Us
    • About Us
    • Privacy Policy
    • Terms Of Service
    • Advertisement
    Sunday, July 5
    Facebook X (Twitter) Instagram Pinterest Vimeo
    ABS Africa TV
    • Breaking News
    • Trending
    • Africa News
    • World News
    • Features
    • Technology
    • Sports
    • Politics
    • More
      • Culture
      • Lifestyle
      • Travel
      • Business
      • Environment
      • Legal
      • Health
      • Cameroon
      • Ambazonia
      • AfroSingles
      • Environ/Climate
      • Editorial
      • The Leak Magazine
    • Donate
    Subscription
    ABS Africa TV
    Home»Politics»Fresh court petition seeks to nullify Atwoli’s re-election as COTU Secretary General
    Politics

    Fresh court petition seeks to nullify Atwoli’s re-election as COTU Secretary General

    Chukwu GodloveBy Chukwu GodloveJuly 5, 2026No Comments9 Mins Read
    Facebook Twitter Pinterest LinkedIn Tumblr Email
    Fresh court petition seeks to nullify Atwoli’s re-election as COTU Secretary General
    Share
    Facebook Twitter LinkedIn Pinterest Email
    Post Views: 23

    Fresh court petition seeks to nullify Atwoli’s re-election as COTU Secretary General

    Fresh court petition seeks to nullify Atwoli’s re-election as COTU Secretary General

    COTU Secretary General Francis Atwoli during the KPAWU quadrennial conference at Tom Mboya Labour College in Kisumu on Saturday, January 17, 2026. (Photo: Francis Atwoli/X)

    Read this story aloud

    Listen to the clean text version of this article

    Ready
    3 min listen
    Audio reading is not supported on this browser.

    The suit, filed by the Centre for Public Policy and Research, argues that the elections were conducted prematurely and in disregard of mandatory procedures set out by the Registrar of Trade Unions

    A fresh court petition has been filed challenging the re-election of Francis Atwoli as Secretary General of the Central Organisation of Trade Unions (COTU-K), with the petitioners seeking to have the March 14 election nullified over alleged violation of the trade union electoral framework.
    The suit, filed by the Centre for Public Policy and Research, argues that the elections were conducted prematurely and in disregard of mandatory procedures set out by the Registrar of Trade Unions.
    “These actions are unlawful and procedurally irregular, undermining the Labour Relations Act’s electoral framework. No valid election of COTU-K officials can occur without delegates properly elected by affiliate unions,” the organisation said in court papers.

    More To Read

    • COTU backs High Court decision allowing outsourced workers to unionise
    • COTU pushes for PAYE relief for workers earning up to Sh60,000
    • COTU boss Atwoli backs 12 per cent wage hike, warns employers to comply with gazetted directive
    • Ruto announces Sh250 million modern railway station and logistics hub for Luanda in Vihiga
    • SHA’s challenges are internal that can be resolved through better coordination – Atwoli
    • Watch: President William Ruto leads 61st Labour Day celebrations in Vihiga

    The petitioner argues that affiliate unions had not conducted branch and national elections, which are required to produce legitimate delegates to participate in the umbrella body’s elections.
    The new petition brings to four the number of cases filed in court challenging the election in which Atwoli was declared unopposed for a sixth term. Other petitions have been filed by the African Electoral Observation Group, Fazul Mahamed, and the Institute for Democratic Governance, all challenging Atwoli’s sixth term.
    According to the petition, a circular issued by the Registrar of Trade Unions on September 25, 2025, set out a clear election timetable requiring branch elections to be held between January 5 and March 31, 2026, followed by national union elections between April 1 and June 30, before umbrella bodies like COTU-K could conduct their elections by August 30, 2026.

    Latest Stories

    • Kenya reaffirms ties with Rwanda as it marks Liberation Day celebrations
    • Morocco continue historic rise with record-breaking World Cup victory against Canada
    • Serena Williams withdraws from Wimbledon doubles after knee injury, ending Venus reunion plans
    • Report records 83 harassment incidents against Christians in Israel over three months

    “COTU-K has no legal authority to conduct its elections until affiliate trade unions complete their branch and national-level polls, which produce the qualified delegates needed for a legitimate process. By skipping this sequence, the March 14 election is legally invalid,” the petitioner argues.
    The organisation also claims that membership registers were not updated as required before the elections.
    “That membership registers, both branch and national, remain un-updated. This constitutes a clear violation of the pre-election requirement of the circular, which explicitly conditions the validity of any election upon the prior updating of all membership records,” the organisation said.
    The petitioners now want the court to quash the elections held at Tom Mboya Labour College in Kisumu, arguing that without updated registers and properly elected delegates, the election that saw Atwoli declared unopposed for a sixth term was unlawful.

    Other Topics To Read

    Top Stories Today

    • Weekly new Ebola cases reach highest level since outbreak began: WHO
    • Kenya reaffirms ties with Rwanda as it marks Liberation Day celebrations
    • Serena Williams withdraws from Wimbledon doubles after knee injury, ending Venus reunion plans
    • Report records 83 harassment incidents against Christians in Israel over three months
    • Clean mobility gains ground in trucks and buses, but fossil fuels still dominate at 94 per cent – report
    • Over 1,000 Sudanese return home from Egypt under ongoing repatriation programme

    `;
    }

    return “;
    }

    function commentActionsMarkup(comment, canComment) {
    const likeLabel = comment.liked_by_me ? ‘Liked’ : ‘Like’;
    const likeCount = Number(comment.like_count || 0) > 0
    ? “
    : ”;

    const likeButton = canComment && comment.status === ‘approved’
    ? “
    : “;

    const replyButton = canComment && comment.status === ‘approved’
    ? “
    : ”;

    return `

    `;
    }

    function commentMarkup(comment, canComment, isReply = false) {
    const pendingBadge = comment.status && comment.status !== ‘approved’
    ? “
    : ”;

    const edited = comment.is_edited
    ? “
    : ”;

    const repliesHtml = Array.isArray(comment.replies) && comment.replies.length
    ? `

    `
    : “;

    return `

    `;
    }

    function replyFormMarkup(commentId) {
    return `

    `;
    }

    function setNotice(widget, message, type = ‘info’) {
    const notice = widget.querySelector(‘[data-role=”notice”]’);
    if (!notice) return;

    if (!message) {
    notice.hidden = true;
    notice.textContent = ”;
    notice.classList.remove(‘is-error’);
    return;
    }

    notice.hidden = false;
    notice.textContent = message;
    notice.classList.toggle(‘is-error’, type === ‘error’);
    }

    function setCount(widget, total) {
    const count = widget.querySelector(‘[data-role=”count”]’);
    if (!count) return;

    const num = Number(total || 0);
    count.textContent = num === 1 ? ‘1 comment’ : `${num} comments`;
    }

    function openReplyBox(widget, commentId) {
    widget.querySelectorAll(‘[data-role=”reply-box”]’).forEach(box => {
    box.hidden = true;
    box.innerHTML = ”;
    });

    const targetItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
    if (!targetItem) return;

    const replyBox = targetItem.querySelector(‘[data-role=”reply-box”]’);
    if (!replyBox) return;

    replyBox.hidden = false;
    replyBox.innerHTML = replyFormMarkup(commentId);

    const textarea = replyBox.querySelector(‘textarea’);
    if (textarea) textarea.focus();
    }

    function closeReplyBox(container) {
    if (!container) return;
    container.hidden = true;
    container.innerHTML = ”;
    }

    async function initCommentsWidget(widget) {
    const state = {
    articleId: Number(widget.dataset.articleId),
    loadUrl: widget.dataset.loadUrl,
    storeUrl: widget.dataset.storeUrl,
    commentsBaseUrl: widget.dataset.commentsBaseUrl,
    canComment: widget.dataset.canComment === ‘1’,
    page: 1,
    perPage: 10,
    sort: ‘newest’,
    total: 0,
    hasMore: false,
    busy: false
    };

    const list = widget.querySelector(‘[data-role=”list”]’);
    const loading = widget.querySelector(‘[data-role=”loading”]’);
    const empty = widget.querySelector(‘[data-role=”empty”]’);
    const loadMoreBtn = widget.querySelector(‘[data-role=”load-more”]’);
    const sortSelect = widget.querySelector(‘[data-role=”sort”]’);
    const composerForm = widget.querySelector(‘[data-role=”composer-form”]’);

    async function loadComments(reset = true) {
    if (state.busy) return;

    state.busy = true;
    setNotice(widget, ”);
    loading.hidden = false;

    if (reset) {
    state.page = 1;
    list.innerHTML = ”;
    empty.hidden = true;
    }

    try {
    const url = new URL(state.loadUrl, window.location.origin);
    url.searchParams.set(‘page’, state.page);
    url.searchParams.set(‘per_page’, state.perPage);
    url.searchParams.set(‘sort’, state.sort);

    const response = await requestJson(url.toString(), {
    method: ‘GET’,
    headers: {
    ‘Accept’: ‘application/json’,
    ‘X-Requested-With’: ‘XMLHttpRequest’
    }
    });

    const items = Array.isArray(response.data) ? response.data : [];
    const meta = response.meta || {};

    state.total = Number(meta.total || 0);
    state.hasMore = !!meta.has_more;

    setCount(widget, state.total);

    if (reset) {
    list.innerHTML = ”;
    }

    if (!items.length && reset) {
    empty.hidden = false;
    } else {
    empty.hidden = true;
    list.insertAdjacentHTML(
    ‘beforeend’,
    items.map(item => commentMarkup(item, state.canComment, false)).join(”)
    );
    }

    loadMoreBtn.hidden = !state.hasMore;
    } catch (error) {
    if (!list.children.length) {
    empty.hidden = false;
    empty.textContent = ‘Unable to load comments right now.’;
    }
    setNotice(widget, error.message || ‘Unable to load comments.’, ‘error’);
    } finally {
    loading.hidden = true;
    state.busy = false;
    }
    }

    async function submitTopLevelComment(form) {
    const textarea = form.querySelector(‘textarea[name=”content”]’);
    const button = form.querySelector(‘[data-role=”submit-comment”]’);

    if (!textarea) return;

    const content = textarea.value.trim();
    if (!content) return;

    const originalText = button ? button.textContent : ”;

    try {
    if (button) {
    button.disabled = true;
    button.textContent = ‘Posting…’;
    }

    const response = await requestJson(state.storeUrl, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({
    article_id: state.articleId,
    content: content,
    source_url: window.location.href
    })
    });

    textarea.value = ”;

    if (response?.data) {
    list.insertAdjacentHTML(
    ‘afterbegin’,
    commentMarkup(response.data, state.canComment, false)
    );
    empty.hidden = true;

    if ((response.data.status || ”) === ‘approved’) {
    state.total += 1;
    setCount(widget, state.total);
    }
    }

    setNotice(widget, response.message || ‘Comment posted successfully.’);
    } catch (error) {
    setNotice(widget, error.message || ‘Unable to post comment.’, ‘error’);
    } finally {
    if (button) {
    button.disabled = false;
    button.textContent = originalText || ‘Post comment’;
    }
    }
    }

    async function submitReply(form) {
    const commentId = Number(form.dataset.commentId || 0);
    const textarea = form.querySelector(‘textarea[name=”content”]’);
    const button = form.querySelector(‘.ev-comments__reply-submit’);

    if (!commentId || !textarea) return;

    const content = textarea.value.trim();
    if (!content) return;

    const originalText = button ? button.textContent : ”;

    try {
    if (button) {
    button.disabled = true;
    button.textContent = ‘Posting…’;
    }

    const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/reply`, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({
    article_id: state.articleId,
    content: content,
    source_url: window.location.href
    })
    });

    if (response?.data) {
    const parentItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
    if (parentItem) {
    const repliesWrap = parentItem.querySelector(‘.ev-comments__replies’);
    if (repliesWrap) {
    repliesWrap.insertAdjacentHTML(
    ‘beforeend’,
    commentMarkup(response.data, state.canComment, true)
    );
    }
    }
    }

    closeReplyBox(form.closest(‘[data-role=”reply-box”]’));
    setNotice(widget, response.message || ‘Reply posted successfully.’);
    } catch (error) {
    setNotice(widget, error.message || ‘Unable to post reply.’, ‘error’);
    } finally {
    if (button) {
    button.disabled = false;
    button.textContent = originalText || ‘Post reply’;
    }
    }
    }

    async function toggleLike(button) {
    const commentId = Number(button.dataset.commentId || 0);
    if (!commentId) return;

    const originalHtml = button.innerHTML;

    try {
    button.disabled = true;
    button.innerHTML = ‘Working…’;

    const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/like`, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({})
    });

    const liked = !!response?.data?.liked;
    const likeCount = Number(response?.data?.like_count || 0);

    button.classList.toggle(‘is-liked’, liked);
    button.innerHTML = `${liked ? ‘Liked’ : ‘Like’} ${likeCount > 0 ? “ : ”}`;
    } catch (error) {
    button.innerHTML = originalHtml;
    setNotice(widget, error.message || ‘Unable to update like.’, ‘error’);
    } finally {
    button.disabled = false;
    }
    }

    if (composerForm) {
    composerForm.addEventListener(‘submit’, function (e) {
    e.preventDefault();
    submitTopLevelComment(composerForm);
    });
    }

    if (sortSelect) {
    sortSelect.addEventListener(‘change’, function () {
    state.sort = this.value || ‘newest’;
    loadComments(true);
    });
    }

    if (loadMoreBtn) {
    loadMoreBtn.addEventListener(‘click’, function () {
    if (state.busy || !state.hasMore) return;
    state.page += 1;
    loadComments(false);
    });
    }

    widget.addEventListener(‘click’, function (e) {
    const likeBtn = e.target.closest(‘[data-action=”toggle-like”]’);
    if (likeBtn) {
    e.preventDefault();
    toggleLike(likeBtn);
    return;
    }

    const replyBtn = e.target.closest(‘[data-action=”toggle-reply”]’);
    if (replyBtn) {
    e.preventDefault();
    openReplyBox(widget, Number(replyBtn.dataset.commentId || 0));
    return;
    }

    const cancelReplyBtn = e.target.closest(‘[data-action=”cancel-reply”]’);
    if (cancelReplyBtn) {
    e.preventDefault();
    closeReplyBox(cancelReplyBtn.closest(‘[data-role=”reply-box”]’));
    }
    });

    widget.addEventListener(‘submit’, function (e) {
    const replyForm = e.target.closest(‘.ev-comments__reply-form’);
    if (replyForm) {
    e.preventDefault();
    submitReply(replyForm);
    }
    });

    loadComments(true);
    }

    document.addEventListener(‘DOMContentLoaded’, function () {
    document.querySelectorAll(‘.ev-comments’).forEach(initCommentsWidget);
    });
    })();

    Trending

    Kenya reaffirms ties with Rwanda as it marks Liberation Day celebrations
    Kenya reaffirms ties with Rwanda as it marks Liberation Day celebrationsRegional
    |Bashir Mbuthia
    |4 hours ago
    UK, France agree with Oman on multinational military mission to secure Strait of Hormuz
    UK, France agree with Oman on multinational military mission to secure Strait of HormuzNews
    |Mary Wambui
    |15 hours ago
    Egypt end 92-year wait to reach World Cup last 16
    Egypt end 92-year wait to reach World Cup last 16News
    |Erick Kariuki
    |19 hours ago
    South Africa, Egypt and Morocco emerge as Africa's leading hubs for the super rich
    South Africa, Egypt and Morocco emerge as Africa’s leading hubs for the super richBusiness
    |Alfred Onyango
    |13 hours ago
    Busia school named among global finalists for 2026 education prize
    Busia school named among global finalists for 2026 education prizeEducation
    |Bashir Mbuthia
    |9 hours ago
    Renewable energy boom cuts global fossil fuel bill by Sh62 trillion in 2025
    Renewable energy boom cuts global fossil fuel bill by Sh62 trillion in 2025Business
    |Alfred Onyango
    |20 hours ago
    Serena Williams withdraws from Wimbledon doubles after knee injury, ending Venus reunion plans
    Serena Williams withdraws from Wimbledon doubles after knee injury, ending Venus reunion plansSports
    |Bashir Mbuthia
    |4 hours ago
    Sudanese army intensify offensive to retake strategic city of Kurmuk on Ethiopia border
    Sudanese army intensify offensive to retake strategic city of Kurmuk on Ethiopia borderRegional
    |Addis Standard
    |12 hours ago
    Malian army reports attempted attacks on multiple military positions
    Malian army reports attempted attacks on multiple military positionsWorld
    |XINHUA
    |14 hours ago
    Weight-loss drug Wegovy approved in UK for MASH-related liver fibrosis
    Weight-loss drug Wegovy approved in UK for MASH-related liver fibrosisNews
    |Charity Kilei
    |12 hours ago

    court Fresh nullify petition seeks
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Chukwu Godlove

    Related Posts

    Kenya’s Gen Z: The misunderstood voices amid rising political divisions

    July 5, 2026

    Amnesty urges East African Court to probe activist Mwabili Mwagodi’s abduction

    July 5, 2026

    Ebonyi NDC deputy chairman, secretary, others defect to PDP

    July 4, 2026
    Leave A Reply Cancel Reply

    Search
    Latest Post

    Protectionism, taxes, fuel: The high cost of air travel in Africa

    July 5, 2026

    Garissa residents observe World Wetlands Day as leaders champion for environmental conservation

    July 5, 2026

    Agroprocessing, fintech and blue economy, East Africa’s next frontiers of growth – experts

    July 5, 2026

    Gauteng Warns of Rising Drug

    July 5, 2026

    Refusal of entry visa in a global sporting event and international law

    July 5, 2026

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    • Facebook
    • Twitter
    • Pinterest
    • Instagram
    • YouTube
    • TikTok
    ABS TV and ABS Network News is a leading Pan-African 24/7 broadcasting network delivering nonstop news, talk shows, lifestyle programs, and digital media content worldwide through Satellite, Streaming Platforms, and Roku TV.
     
    Based in the United States, we connect Africa to the world while empowering creators, journalists, and brands through innovative media and broadcasting services.
    Facebook X (Twitter) Pinterest WhatsApp Instagram

    Our Picks

    Travel

    Protectionism, taxes, fuel: The high cost of air travel in Africa

    Environment

    Garissa residents observe World Wetlands Day as leaders champion for environmental conservation

    Business

    Agroprocessing, fintech and blue economy, East Africa’s next frontiers of growth – experts

    Most Popular

    Health

    Gauteng Warns of Rising Drug

    Legal

    Refusal of entry visa in a global sporting event and international law

    Lifestyle

    Folagade Banks claims Nollywood record with 600-cast wedding scene

    © 2026 Copyright. All Rights Reserved by ABSAFRICATV
    • Privacy Policy
    • Terms of Services

    Type above and press Enter to search. Press Esc to cancel.

    We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it.