Close Menu
    Facebook X (Twitter) Instagram
    • Home
    • Contact Us
    • About Us
    • Privacy Policy
    • Terms Of Service
    • Advertisement
    Monday, July 6
    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»Travel»KWS offers tourism camps for lease to boost revenue
    Travel

    KWS offers tourism camps for lease to boost revenue

    Martin AkumaBy Martin AkumaJuly 6, 2026No Comments9 Mins Read
    Facebook Twitter Pinterest LinkedIn Tumblr Email
    Share
    Facebook Twitter LinkedIn Pinterest Email
    Post Views: 4

    KWS offers tourism camps for lease to boost revenue

    KWS offers tourism camps for lease to boost revenue

    A view of the Nairobi National Park. (Photo: KWS)

    Read this story aloud

    Listen to the clean text version of this article

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

    The invitation for bids, issued on Tuesday, calls upon investors to develop and manage tourism sites located within selected national parks under KWS management

    The Kenya Wildlife Service (KWS) has announced the availability of 13 tourism camps for leasing to private investors, part of a broader strategy to capitalise on its key assets for increased financial gains.
    The invitation for bids, issued on Tuesday, calls upon investors to develop and manage tourism sites located within selected national parks under KWS management.
    Several sites within Nairobi National Park are available for lease, including Rangers, the KWS Club House, and the Sebastian restaurant.

    More To Read

    • Senators order Governor Susan Kihika’s arrest for defying summons
    • Konza Technopolis gets wildlife conservancy status in major push for green smart city model
    • KWS probes suspected chemical discharge into Mlolongo-Athi Dam
    • KWS welcomes Chinese national’s conviction in ant smuggling case, signals tough stance on wildlife crime
    • Government warns of ecological risks in proposed Tsavo parks reclassification
    • Seizure of 2,000 ants at Nairobi airport highlights the hidden scale of insect trafficking

    The offering also includes sites in national parks like Amboseli, Meru, Aberdare, and Tsavo East and West.
    KWS emphasised that the concept entails a contractual arrangement where the user of the asset pays the owner for an agreed-upon period.
    This move aligns with KWS’s strategic plan for 2019–2024, which aims to boost total revenue to Sh12 billion annually by 2024, through strategies including asset leases, aircraft hires, and periodic reviews of conservation fees.

    Latest Stories

    • Peace team sounds alarm over gang attacks on worship centres and peaceful gatherings
    • 𝐄𝐚𝐬𝐭𝐥𝐞𝐢𝐠𝐡 𝐕𝐨𝐢𝐜𝐞 𝐚𝐭 𝐍𝐢𝐧𝐞 – Elderly care gap sparks calls for major overhaul of Social Protection Bill
    • Africa’s wildlife laws follow colonial model which separates people and animals: Why it’s not working
    • Mombasa governor releases impounded boda bodas, urges riders to reject political violence

    The announcement came shortly after the Privatisation Commission initiated the process of selling the government’s stake, worth Sh671 million, in five top Kenya Development Corporation (KDC)-controlled hotels.
    These are the Kenya Safari Lodges, which include popular destinations such as the Mombasa Beach Hotel, the Ngulia Safari Lodge, and the Voi Safari Lodge.
    Kenya Safari Lodges & Hotels Limited will grant its shareholders preemptive rights to acquire the remaining shares from KDC. Should they not exercise these rights, KDC will sell the shares through an open tender process.
    The sale of shares in Mt. Elgon Lodge Limited, Golf Hotel Limited, and Sunset Hotel will be conducted via open tender while the disposal of Kabarnet Hotels Limited will involve the sale of assets.

    Other Topics To Read

    Top Stories Today

    • Duale, Oduor accused of defying High Court order on KNDI appointments
    • Suspects held over Kisii Linda Mwananchi violence as court awaits case file
    • Peace team warns hired gangs threaten 2027 elections
    • Why Africa’s colonial-era wildlife laws are failing both people and nature
    • Mombasa governor orders release of impounded boda boda motorcycles
    • From rabies to Ebola: World’s most dangerous zoonotic diseases explained

    `;
    }

    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

    Bill tabled in National Assembly to merge three intellectual property agencies into single authorityNews
    |Lucy Mumbi
    |11 hours ago
    KRA removes excise duty on bottled water effective July 1
    KRA removes excise duty on bottled water effective July 1Business
    |Lucy Mumbi
    |8 hours ago
    Kenyans urged to join Saba Saba march to honour victims of alleged abductions, killings
    Kenyans urged to join Saba Saba march to honour victims of alleged abductions, killingsNews
    |Lucy Mumbi
    |1 day ago
    Three arrested after Linda Mwananchi convoy attacked in Kisii as police hunt for more suspects
    Three arrested after Linda Mwananchi convoy attacked in Kisii as police hunt for more suspectsNews
    |Lucy Mumbi
    |1 day ago
    Government extends security operation in Marsabit, declares multiple areas dangerous for 30 more days
    Government extends security operation in Marsabit, declares multiple areas dangerous for 30 more daysNorthern Kenya
    |Lucy Mumbi
    |1 day ago
    𝐄𝐚𝐬𝐭𝐥𝐞𝐢𝐠𝐡 𝐕𝐨𝐢𝐜𝐞 𝐚𝐭 𝐍𝐢𝐧𝐞 - Elderly care gap sparks calls for major overhaul of Social Protection Bill
    𝐄𝐚𝐬𝐭𝐥𝐞𝐢𝐠𝐡 𝐕𝐨𝐢𝐜𝐞 𝐚𝐭 𝐍𝐢𝐧𝐞 – Elderly care gap sparks calls for major overhaul of Social Protection BillVideos
    |Zawadi Charity
    |33 minutes ago
    Ebola, rabies, bird flu: The animal diseases that pose the biggest threat to humans
    Ebola, rabies, bird flu: The animal diseases that pose the biggest threat to humansHealth
    |Charity Kilei
    |1 hour ago
    Fresh cracks emerge in United Opposition over selection of 2027 flagbearer
    Fresh cracks emerge in United Opposition over selection of 2027 flagbearerPolitics
    |Barack Oduor
    |6 hours ago

    Kenya’s civic space downgraded to ‘repressed’ amid surge in rights violations – reportNews
    |Lucy Mumbi
    |12 hours ago
    2026 FIFA World Cup claims seven national team coaches
    2026 FIFA World Cup claims seven national team coachesInfographics
    |Charity Pancras
    |1 day ago

    boost Camps lease offers Tourism
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Martin Akuma
    • Website

    Related Posts

    Fake Uber scam targets Cape Town airport travellers

    July 6, 2026

    Why Pope Leo’s visit to Lampedusa matters for migrants, the church and global politics

    July 6, 2026

    IMO Unveils Regional Team to Boost Local Impact

    July 6, 2026
    Leave A Reply Cancel Reply

    Search
    Latest Post

    KWS offers tourism camps for lease to boost revenue

    July 6, 2026

    Brand g Vacations and BeOnd Unveil ‘Africa by Private Jet,’ a 14-Day Ultra Luxury Safari Across Five African Countries

    July 6, 2026

    UN agency moves Stellar blockchain payment initiative beyond pilot stage

    July 6, 2026

    Evers to lead trade mission to Ghana, South Africa

    July 6, 2026

    South Africa Eliminates All Pit Toilets Identified in 2018 School Audit | Law

    July 6, 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

    KWS offers tourism camps for lease to boost revenue

    Brand g Vacations and BeOnd Unveil ‘Africa by Private Jet,’ a 14-Day Ultra Luxury Safari Across Five African Countries

    UN agency moves Stellar blockchain payment initiative beyond pilot stage

    Most Popular

    Evers to lead trade mission to Ghana, South Africa

    South Africa Eliminates All Pit Toilets Identified in 2018 School Audit | Law

    Today’s World Cup 2026 Kickoff Times: Complete Central Time (CT) Schedule

    © 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.