Why KNUT leadership race is as fierce as national politics
Why KNUT leadership race is as fierce as national politics
Read this story aloud
Listen to the clean text version of this article
Ready
6 min listen
Audio reading is not supported on this browser.
On Thursday, delegates from all 110 KNUT branches converged at the college for a Special Delegates Conference to oversee nominations, which, according to the KNUT constitution, must be conducted a day before the election and at the same venue
For Kenyans not acquainted with much of the goings-on in the teaching profession, the Kenya National Union of Teachers (KNUT) may appear to be just another trade union championing the welfare and rights of its members.
However, KNUT means much more to teachers, as reflected in the high-stakes rivalry and intrigues surrounding its national elections scheduled for Friday, April 3, at the Tom Mboya Labour College in Kisumu.
The election will determine the union’s leadership, financial stability, and bargaining power against the Teachers Service Commission (TSC), with demands for a 60 per cent pay rise and improved teacher welfare at the centre.
More To Read
- Teachers’ professional demographics
- Majority of teachers living paycheck to paycheck, struggling with burnout – KNUT report
- Ruto’s promise of 50 teaching jobs to Akorino church sparks fresh debate on political patronage
- KNUT elections go largely uncontested as Oyuu retains Secretary General seat
- Employment court dismisses Wilson Sossion’s bid to halt KNUT polls
Collins Oyuu vs Wilson Sossion
Ahead of the election, the Union is set to conduct nominations on Thursday, as the contest between incumbent Secretary General (SG) Collins Oyuu and the possible comeback of his predecessor, Wilson Sossion, intensifies.
A day earlier, the Employment and Labour Relations Court dismissed an application by Sossion seeking to halt the process.
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
Sossion, who had expressed interest in vying, had sought conservatory orders restraining KNUT officials from contesting the positions of secretary general and deputy secretary general pending the hearing and determination of his petition.
He also sought to stop the Union from holding nominations until all 110 branches, 47 county councils, and eight regional councils had conducted elections and were properly constituted.
In his main petition, which is still pending determination, Sossion moved to court seeking orders to restrain KNUT officials, their agents, or any person acting under their authority from barring him from contesting in the forthcoming elections.
The former SG argued that his petition would be rendered ineffective if the orders were not granted and that denying them would not be in the public interest.
“After a holistic review of the case, the court was persuaded that the core foundation of the application, that is nomination and eligibility, is well provided for by the constitution of the association,” Justice Jacob Gakeri ruled.
“Public interest is not in favour of granting the conservatory orders sought, and as a consequence, that application was not allowed.”
Despite a Court of Appeal ruling that Sossion was wrongfully deregistered as a teacher, Oyuu has maintained that the KNUT constitution renders him ineligible to vie.
Speaking to The Eastleigh Voice, Elimu Bora Working Group Policy Advisor Boaz Waruku said the KNUT’s elections are usually high-stakes contests, comparable to governorship or presidential races in their influence.
“In those positions, you lead teachers across the country, and everybody gets interested. The government gets interested in who becomes the person to negotiate for the teachers’ welfare,” said Waruku.
Waruku added that the elections are crucial in determining how aggressively the union negotiates future Collective Bargaining Agreements (CBAs) with the TSC, particularly with demands for a 60 per cent pay raise.
KNUT election, constitution
Teachers have been pushing for a change in leadership to address issues such as promotion bottlenecks, poor medical schemes, and protection of union membership against the TSC.
The election is thus expected to decide whether the union continues with its current management style or returns to the aggressive, militant approach of former leadership.
According to the KNUT constitution, nominations must be conducted a day before the election and at the same venue.
Delegates will nominate candidates for several positions, including national chairperson, first vice national chairperson, second vice national chairperson, secretary general, deputy secretary general, assistant secretary general, national treasurer, deputy national treasurer, assistant national treasurer, two national women representatives, three trustees, and representatives for persons with disabilities (PWDs).
The leadership team constitutes the National Executive Council (NEC), the Union’s top decision-making organ.
The current NEC leadership includes Oyuu as SG, Patrick Karinga as national chairperson, Hesbon Otieno as deputy SG, John Ndiku as national treasurer, Aggrey Namisi as second national vice chairperson, and Lenox Mshila as assistant SG.
Other NEC members are Alex Dunga, Eunice Bosco, Olando Kwach, and Elli Korinko.
The NEC works alongside branch executive secretaries across the country to manage the union’s affairs and negotiate collective bargaining agreements with the TSC.
The KNUT constitution stipulates that any elected official at the branch level who wishes to vie for a national position must resign before submitting nomination papers. Oyuu issued the election notice on March 13, at least two weeks before the conference.
“All branches are therefore directed to prepare and appoint delegates to the special conference through properly constituted branch executive committee meetings, as provided for in the KNUT constitution,” he directed branch executive secretaries.
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 celebrationsRegional
|Bashir Mbuthia
|6 hours ago
DP Kindiki hails cooperatives as key to Kenya’s economic transformationNews
|Rachael Mutabasi
|12 hours ago
Pope Leo XIV shines spotlight on Mediterranean migration crisisWorld
|Mary Wambui
|10 hours ago
Eight arrested in Marsabit over Sh1.2 million SIM swap fraudNorthern Kenya
|Bashir Mbuthia
|13 hours ago
Colombia beats Ghana to complete World Cup round of 16 lineupSports
|XINHUA
|20 hours ago
Clean mobility gains ground in trucks and buses, but fossil fuels still dominate at 94 per cent – reportClimate Change
|Alfred Onyango
|7 hours ago
Captain Riyad Mahrez announces retirement after Algeria World Cup exit2026 FIFA World Cup
|Bashir Mbuthia
|1 day ago
Google to ban chrome extensions that ‘jailbreak’ AI chatbotsNews
|Margaret Wanjiru
|15 hours ago
Over 1,000 Sudanese return home from Egypt under ongoing repatriation programmeSouth Sudan
|Bashir Mbuthia
|7 hours ago
Busia school named among global finalists for 2026 education prizeEducation
|Bashir Mbuthia
|11 hours ago
