Mt Kenya politics flare as Gachagua takes on Ichung’wah at David Kiaraho’s funeral service

Mt Kenya politics flare as Gachagua takes on Ichung’wah at David Kiaraho’s funeral service

President William Ruto during during a requiem mass for the late Ol Kalou MP David Kiaraho on April 8, 2026. (Photo: Handout)

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.

Former DP Rigathi Gachagua used a Nyandarua requiem mass to accuse Majority Leader Kimani Ichung’wah of betraying the Mt Kenya community, while urging President Ruto and mourners to maintain peace

Former Deputy President Rigathi Gachagua has strongly criticised National Assembly Majority Leader Kimani Ichung’wah and the Kikuyu Constituency MP, accusing him of misleading President William Ruto and betraying the Mt Kenya community.
Speaking on Wednesday, April 8, 2026, during a requiem mass for the late David Kiaraho in Nyandarua County, Gachagua recounted what he described as acts of betrayal by Ichung’wah and his allies, saying they insulted the community while claiming to represent it.
“Those people the President would have trouble with are people like Ichungwah if they came here. They are traitors to our community. They insulted us, saying we are tribal and that they are Kikuyu. I warned those young people before we even had a misunderstanding. I told them if you walk with them, they will dig a hole for you. Those like Ichungwah… I advised, I warned, the people of the mountain do not forgive betrayal. I told you that betrayal is not forgiven among our people. You chose to listen to Kimani Ichungwah. Now this community has rejected you, and I had told you. Ichungwah said Riggy G will be forgotten after two weeks. How many years now? We loved you, we respected you, and we elected you. Even if we have issues, we will resolve them when you are in front during elections. But while you are in office, continue working. Try whatever you can; we will deal with other matters later,” Gachagua said.

More To Read

  • Police launch manhunt for two ex-Nyandarua County officials over Ol Kalou unrest
  • Cabinet clears financing for Modogashe-Samatar and Rhamu-Mandera roads to speed up construction
  • 𝐄𝐚𝐬𝐭𝐥𝐞𝐢𝐠𝐡 𝐕𝐨𝐢𝐜𝐞 𝐚𝐭 𝐍𝐢𝐧𝐞 – Gatundu family demands justice after woman found dead
  • Ichung’wah: New anti-counterfeit law to criminalise fake medicine labelling
  • Teachers urge Ruto to confirm Evaleen Mitei as TSC CEO, citing reforms achieved during her tenure
  • Activists demand accountability over alleged police brutality and enforced disappearances

The former deputy president was allowed to address mourners in the presence of President William Ruto after initial uncertainty over whether he would be permitted to speak.
“Mr President, I have seen the newspapers saying there will be a confrontation here. But there will be no confrontation. This is a solemn occasion. We want it to be respectful because everyone here has good intentions. My people and I have come in peace. Let us give Kiaraho his respect,” he said.
During the address, Gachagua adopted a conciliatory tone, addressing issues affecting the wider Mt Kenya region while emphasising peace and unity.

Latest Stories

  • Machakos Mitumba Market traders suffer heavy losses after midnight fire
  • Kenyans urged to join Saba Saba march to honour victims of alleged abductions, killings
  • Quiet revolution behind foldable smartphones and why they’re making a comeback
  • Invisible peacebuilders: How ‘diplomacy works’ to prevent conflict

Other Topics To Read

Top Stories Today

  • Three arrested after Linda Mwananchi convoy attacked in Kisii as police hunt for more suspects
  • Machakos Mitumba Market traders suffer heavy losses after midnight fire
  • Kenyans urged to join Saba Saba march to honour victims of alleged abductions, killings
  • Quiet revolution behind foldable smartphones and why they’re making a comeback
  • Invisible peacebuilders: How ‘diplomacy works’ to prevent conflict
  • State extends security operation in Marsabit, declares multiple areas dangerous for 30 more days

`;
}

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


Messi is old, short and slow: How is he still dominating at the World Cup?Sports
|The Conversation
|23 hours ago

Government extends security operation in Marsabit, declares multiple areas dangerous for 30 more daysNorthern Kenya
|Lucy Mumbi
|2 hours ago

Iran begins six-day funeral for late Supreme Leader Ali KhameneiWorld
|DW News
|1 day ago

Serena Williams withdraws from Wimbledon doubles after knee injury, ending Venus reunion plansSports
|Bashir Mbuthia
|11 hours ago

Pope Leo XIV shines spotlight on Mediterranean migration crisisWorld
|Mary Wambui
|15 hours ago

Egypt end 92-year wait to reach World Cup last 16News
|Erick Kariuki
|1 day ago

Three arrested after Linda Mwananchi convoy attacked in Kisii as police hunt for more suspectsNews
|Lucy Mumbi
|2 hours ago

Mbappé fires France past Paraguay into World Cup quarter-finalsSports
|Erick Kariuki
|3 hours ago

Kenya reaffirms ties with Rwanda as it marks Liberation Day celebrationsRegional
|Bashir Mbuthia
|11 hours ago

What the World Cup hydration breaks reveal about who governs men’s footballSports
|The Conversation
|18 hours ago

Share.
Leave A Reply

Exit mobile version