Avel services

Aviation stakeholders urge MPs to reject proposed tax on air travel services

Kenya Association of Travel Agents (KATA) Chairman Joseph Kithitu. KATA is among aviation agencies opposed to a proposed tax on air travel services. (Photo: File/Farhiya Hussein)

Read this story aloud

Listen to the clean text version of this article

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

Both IATA and KATA have urged MPs to reconsider the proposed VAT imposition, arguing that it would undermine the Kenyan tourism sector’s growth

Stakeholders in Kenya’s aviation sector have opposed the proposed introduction of a 16 per cent Value Added Tax (VAT) on several services within the industry, urging Members of Parliament to reconsider the move.
The proposed VAT would affect a wide range of services, including aircraft services, spare parts, air ticketing, and certain tourism-related activities, raising concerns about its potential negative impact on domestic travel and the broader tourism sector.
Among the services set to be taxed are aircraft with an unladen weight exceeding 2,000kgs but not exceeding 15,000kgs, direction-finding compasses, aircraft appliances, and spare parts imported by aircraft operators.

More To Read

  • CA, KCAA harmonise Aircraft Radio License renewals to boost compliance, safety

Additionally, services related to the leasing and chartering of aircraft (excluding helicopters), as well as air ticketing services provided by travel agents, would also face the new tax.
The International Air Transport Association (IATA) has strongly advocated for the retention of the current VAT exemptions, arguing that the proposed changes could undermine the growth of domestic and regional travel.
Significant investment risks

Latest Stories

  • Protest victims decry exclusion from government compensation programme despite registration
  • Nyaribari Chache MP Zaheer Jhanda summoned as police widen probe into Kisii political violence
  • Machakos Mitumba Market traders suffer heavy losses after midnight fire
  • Kenyans urged to join Saba Saba march to honour victims of alleged abductions, killings

During their presentation before the National Assembly’s Finance Committee on Wednesday, IATA officials noted that the high cost of acquiring aircraft already adds significant investment risks, discouraging potential investors.
“If all aircraft remain exempt from VAT, we can expect an increase in domestic travel volumes, which will lead to higher collections from air passenger service charges. Additionally, VAT earnings from hotels, meals, and accommodation services will see a sustainable increase, benefitting the Kenya Revenue Authority (KRA),” IATA representatives stated.
Similarly, the Kenya Association of Travel Agents (KATA) voiced its opposition, stressing that the VAT proposal could disrupt the entire tourism value chain.
KATA warned that increasing the cost of both domestic and international travel would reduce the affordability of trips for tourists, diminishing Kenya’s competitiveness in the regional market.
“This will significantly raise operating costs for the air travel sector and, by extension, the cost of travel within Kenya and abroad,” KATA representatives said.
The association also pointed out that many businesses in the tourism industry rely heavily on air travel services, which are often facilitated by local travel agencies. These agencies play a crucial role in the broader tourism ecosystem, supporting various stakeholders in the industry.
In addition, KATA highlighted that Kenya is already facing stiff competition from other safari destinations like South Africa, Zimbabwe, Botswana, and Tanzania, which have adopted more favourable tax and fee structures for intra-Africa travel.
Both IATA and KATA have urged MPs to reconsider the proposed VAT imposition, arguing that it would undermine the Kenyan tourism sector’s growth and the aviation industry’s ability to thrive.
They further noted that many other African countries have created legislative frameworks designed to reduce travel and tourism costs, thus promoting a competitive advantage in the region.

Other Topics To Read

Top Stories Today

  • Nyaribari Chache MP Zaheer Jhanda summoned as police widen probe into Kisii political violence
  • Protest victims decry exclusion from government compensation programme despite registration
  • 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

`;
}

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


Captain Riyad Mahrez announces retirement after Algeria World Cup exit2026 FIFA World Cup
|Bashir Mbuthia
|1 day ago

Nyaribari Chache MP Zaheer Jhanda summoned as police widen probe into Kisii political violenceNews
|Lucy Mumbi
|49 minutes ago

Quiet revolution behind foldable smartphones and why they’re making a comebackTechnology
|Margaret Wanjiru
|2 hours ago

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

16 CITAM Woodley pupils stable after bee attack during Lake Baringo tourNews
|Rachael Mutabasi
|1 day ago

AFRICOM outlines its African-led, US-enabled strategy to address security threats across the continentAfrica
|Mary Wambui
|1 day ago

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

Machakos Mitumba Market traders suffer heavy losses after midnight fireNews
|Lucy Mumbi
|1 hour ago

Sudanese army intensify offensive to retake strategic city of Kurmuk on Ethiopia borderRegional
|Addis Standard
|20 hours ago

From mixing dirty whites to overloading the machine: 6 common laundry mistakesLifestyle
|Margaret Wanjiru
|1 day ago

Share.
Leave A Reply

Exit mobile version