ADVERTISEMENT

PPA cancels contract for Zambo port passenger terminal building amid delays in completion

Published Sep 8, 2025 12:29 pm
The Philippine Ports Authority (PPA) cancelled the contract for the construction of the Zamboanga Port Passenger Terminal Building (PTB) in Zamboanga City amid complaints of prolonged delays and design misalignment.
PPA officials have been sending letters to the contractor of the project to expedite the construction amid concerns raised by passengers and other netizens over delays in the completion of the project.
On Monday, Sept. 8, PPA Assistant General Manager for Engineering (AGME) James Gantalao, announced the termination of the contract based on the decision of the agency’s leadership amid calls for transparency and updates in Zamboanga port project through social media posts and inquiries.
“Unfortunately, we had to terminate the contract because what we envisioned back in 2021 when the project was started no longer met current operational requirements,” said Gantalao.
The P485 million project was supposed to be completed in February 2023 but until now, the project remains under construction.
The delay was reportedly caused by several factors relating to Covid-19 pandemic that include substantial increases in the prices of construction materials and difficulties in mobilizing the required manpower.
Despite these challenges, the contractor proceeded with its implementation but at a very slow pace. Since then, the PPA has repeatedly issued formal notices and warning letters to the contractor to expedite the work.
Gantalao said inclement weather, location-specific challenges, and evolving design considerations made it necessary to halt the project under the existing arrangement especially since Zamboanga is one of the busiest and most strategic gateways in Mindanao.
Busy gateway
The Zamboanga Port is a major hub for passenger and cargo traffic and has been serving the Zamboanga Peninsula, Basilan, Sulu, and Tawi-Tawi, as well as neighboring Southeast Asian countries.
The port facilitates the movement of both domestic travelers and international cargo, including sardines, marine products, coconut, rubber, and aquaculture goods, making its modernization a critical priority for regional trade and economic growth.
The Passenger Terminal Building was originally designed to accommodate 3,500 passengers at any given time, making it one of the largest and most modern terminal buildings in Mindanao.
“The original goal since 2021 has always been to give passengers a terminal experience with spacious areas while waiting for their voyages, air-conditioned, comfortable seating and proper facilities,” said Gantalao.
Minimal damage
Since the construction of the project, Gantalao said the contractor only collected 18 percent of the total contract price.
He also clarified that the PPA did not pay neither down payment for the project nor mobilization payments.
"As a matter of policy, the PPA does not pay any down payment and has not released any advance payments to the contractor,” said Gantalao.
“ This ensures the public that sufficient funds will remain available to complete the project as planned, to give the riding public the best kind of services they deserve", he added.
ADVERTISEMENT
.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1561_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1562_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1563_widget.title }}

{{ articles_filter_1564_widget.title }}

.mb-article-details { position: relative; } .mb-article-details .article-body-preview, .mb-article-details .article-body-summary{ font-size: 17px; line-height: 30px; font-family: "Libre Caslon Text", serif; color: #000; } .mb-article-details .article-body-preview iframe , .mb-article-details .article-body-summary iframe{ width: 100%; margin: auto; } .read-more-background { background: linear-gradient(180deg, color(display-p3 1.000 1.000 1.000 / 0) 13.75%, color(display-p3 1.000 1.000 1.000 / 0.8) 30.79%, color(display-p3 1.000 1.000 1.000) 72.5%); position: absolute; height: 200px; width: 100%; bottom: 0; display: flex; justify-content: center; align-items: center; padding: 0; } .read-more-background a{ color: #000; } .read-more-btn { padding: 17px 45px; font-family: Inter; font-weight: 700; font-size: 18px; line-height: 16px; text-align: center; vertical-align: middle; border: 1px solid black; background-color: white; } .hidden { display: none; }
function initializeAllSwipers() { // Get all hidden inputs with cms_article_id document.querySelectorAll('[id^="cms_article_id_"]').forEach(function (input) { const cmsArticleId = input.value; const articleSelector = '#article-' + cmsArticleId + ' .body_images'; const swiperElement = document.querySelector(articleSelector); if (swiperElement && !swiperElement.classList.contains('swiper-initialized')) { new Swiper(articleSelector, { loop: true, pagination: false, navigation: { nextEl: '#article-' + cmsArticleId + ' .swiper-button-next', prevEl: '#article-' + cmsArticleId + ' .swiper-button-prev', }, }); } }); } setTimeout(initializeAllSwipers, 3000); const intersectionObserver = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const newUrl = entry.target.getAttribute("data-url"); if (newUrl) { history.pushState(null, null, newUrl); let article = entry.target; // Extract metadata const author = article.querySelector('.author-section').textContent.replace('By', '').trim(); const section = article.querySelector('.section-info ').textContent.replace(' ', ' '); const title = article.querySelector('.article-title h1').textContent; // Parse URL for Chartbeat path format const parsedUrl = new URL(newUrl, window.location.origin); const cleanUrl = parsedUrl.host + parsedUrl.pathname; // Update Chartbeat configuration if (typeof window._sf_async_config !== 'undefined') { window._sf_async_config.path = cleanUrl; window._sf_async_config.sections = section; window._sf_async_config.authors = author; } // Track virtual page view with Chartbeat if (typeof pSUPERFLY !== 'undefined' && typeof pSUPERFLY.virtualPage === 'function') { try { pSUPERFLY.virtualPage({ path: cleanUrl, title: title, sections: section, authors: author }); } catch (error) { console.error('ping error', error); } } // Optional: Update document title if (title && title !== document.title) { document.title = title; } } } }); }, { threshold: 0.1 } ); function showArticleBody(button) { const article = button.closest("article"); const summary = article.querySelector(".article-body-summary"); const body = article.querySelector(".article-body-preview"); const readMoreSection = article.querySelector(".read-more-background"); // Hide summary and read-more section summary.style.display = "none"; readMoreSection.style.display = "none"; // Show the full article body body.classList.remove("hidden"); } document.addEventListener("DOMContentLoaded", () => { let loadCount = 0; // Track how many times articles are loaded const offset = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Offset values const currentUrl = window.location.pathname.substring(1); let isLoading = false; // Prevent multiple calls if (!currentUrl) { console.log("Current URL is invalid."); return; } const sentinel = document.getElementById("load-more-sentinel"); if (!sentinel) { console.log("Sentinel element not found."); return; } function isSentinelVisible() { const rect = sentinel.getBoundingClientRect(); return ( rect.top < window.innerHeight && rect.bottom >= 0 ); } function onScroll() { if (isLoading) return; if (isSentinelVisible()) { if (loadCount >= offset.length) { console.log("Maximum load attempts reached."); window.removeEventListener("scroll", onScroll); return; } isLoading = true; const currentOffset = offset[loadCount]; window.loadMoreItems().then(() => { let article = document.querySelector('#widget_1690 > div:nth-last-of-type(2) article'); intersectionObserver.observe(article) loadCount++; }).catch(error => { console.error("Error loading more items:", error); }).finally(() => { isLoading = false; }); } } window.addEventListener("scroll", onScroll); });

Sign up by email to receive news.