The bus trip from hell: my journey from Kuala Lumpur to Singapore


I recently had one of the most worst travel days that I have ever experienced in 10+ years of solo travel, going from Kuala Lumpur, Malaysia to Singapore. It was so terrible that I wasn’t even mad about it. I think it just left me in a trancelike state for days, where I would suddenly look up and be like, “wait, did that really happen?”

To travel from Kuala Lumpur to Singapore, the most viable options are a 55-minute flight or a 5-hour bus journey. Being afraid of flying, and also in an attempt to be more eco-conscious, I chose to take the bus. Everyone I spoke to in Southeast Asia was incredulous that I would do this. “But flying is so much faster!” they all said. On the inside, I felt smug. Look at me, roughing it out in a long-distance bus. I’m not so spoiled and out-of-touch that I have to fly everywhere. A 55-minute flight? Give me a break. No wonder our planet is dying.

After experiencing the bus, let me just say — I take it all back. I understand completely now.


Here’s how the bus journey works, in theory: you get picked up from a meeting point in central Kuala Lumpur, usually a hotel near Berjaya Times Square. After about 4 hours, you reach the border and exit through Malaysian immigration. You cross the bridge and enter through Singapore immigration. The bus then takes you to a central dropoff point in Singapore. In theory — again, in theory — it should take 5 to 6 hours total.

For making the KL-SG trip, there are a lot of bus companies to choose from, at very affordable prices. Billion Stars, Starmart, Transtar, KKKL, to name a few. While doing research, I was alarmed to see that most of them had only one- or two-star reviews on Google Maps. And that’s from thousands of reviews over the years. It seemed that the most common complaints were 1) that the buses often broke down on the side of highways, and 2) the buses did not wait enough time for all passengers to pass through immigration and thus left them stranded without a ride at the customs checkpoint. This seemed less than ideal.

I ended up booking Luxury Coach, which, along with Aeroline, seem to be two of the only bus companies with decent reviews; their main selling point was that the driver would not abandon you at the border, which is apparently a lot to ask for these days. The only option was to leave from KL at 3pm, which meant that in theory we would arrive in Singapore by 8-9pm. The Luxury Coach website was buggy, so I booked a seat a few days in advance using the third-party website Easybook.

What I did that morning

The bus didn’t leave until 3pm, but when I checked out of my hotel that morning, I couldn’t leave my luggage with reception. I had booked a so-called ‘serviced apartment’ without realizing that it was an Airbnb-type rental – it was actually weirdly difficult to find a real hotel in Kuala Lumpur and not a serviced apartment, but I digress.

When I tried to find a storage locker in my area, that was also weirdly really difficult, even though I was staying near the KLCC/Petronas Towers, arguably the most famous landmark of Malaysia. Most of the baggage storage facilities in KL were temporarily closed, possibly an effect of the pandemic. There were two options that were somewhat close to me, but both had an average rating of around 1.5 stars, which was also concerning.

The only viable option was the lockers at KL Sentral, the main train station. After I checked out, I took a Grab for half an hour to KL Sentral and stored my bag there without incident. The cost was 30 ringgit for 24 hours.

Then I took a combination of light rail and monorail to Pavilion mall, at the suggestion of Abdulaziz, a friendly Grab driver whom I’d met the day before. The mall was magnificent, with a ridiculously luxurious Christmas display in center court, and also a Malaysian Santa.


I ate lunch at the mall and also had a coffee and pastry for further sustenance. At 1pm, I took the monorail back to KL Sentral to pick up my bag. It was around this time that the bus company sent me a WhatsApp message, advising me that the bus would be delayed; they said that they would keep me posted on the new departure time.

Since I now had some more time to kill, I decided to hang around the mall at KL Sentral (there is always a mall in KL; always) and do some more window-shopping. At 2pm, the bus company messaged again to say that the departure time had been pushed back from 3pm to 4:45pm, but at this point I was all mall’d out. I also knew that if I waited too long to leave, I could get stuck in afternoon rush traffic for hours. So I retrieved my luggage from the locker and took a taxi to the bus departure point.

Waiting for the bus

I arrived at the departure point, an aparthotel called Tribeca Serviced Suites, just after 2:30pm. There was no place to sign in or anything; it was literally just a location to wait for the bus. Since the bus was delayed, I went to the cafe inside the hotel, ordered a kettle of tea, and began working on a blog post.

At around 4:15pm, I decided that it was time to go outside to wait for the bus. The hotel lobby had become crowded with other passengers; the precious few tree trunks which served as seats had been snapped up quickly, and most people stood around with their luggage. I stood near the back and waited.


4:30 came around and went. Then 4:45. And then it was 5pm. My back and legs were beginning to hurt, so I went outside and sat down on the stone steps outside the hotel.


Around this time, the bus company sent another WhatsApp message, saying that the bus had been snared in heavy traffic coming back from Singapore and was extremely delayed. The new departure time would be around 6:15 to 6:30.

By this time, the cafe at the hotel had already closed for the day. Google Maps showed that there were a handful of restaurants two blocks away that were supposedly open, but I was too tired to drag my suitcase with me, as I didn’t know what the walking situation would look like, and I was also afraid of missing the bus when it came. So I stayed put. Some of the other passengers ordered food delivery via Grab while they waited.

At 6:30, the bus finally pulled up, and a fresh batch of passengers from Singapore disembarked. “How long did it take to get through immigration?” one of my fellow passengers asked someone who had just gotten off. The person smiled cryptically and said nothing.

On the bus, finally

The bus was about what I expected. There was a driver and also a host, who made brief announcements from time to time to let us know what to expect on the ride. The seats were packed in tightly, with the same leg room as an economy seat on a low-fare airline. Amenities included air conditioning, free Wi-Fi (which was spotty but mostly worked), and a free bottle of water. Luckily, there was no one sitting next to me, so I was able to stretch out comfortably.

Unfortunately, one key thing that the bus lacked was any charging ports for phones. This would prove problematic later on.

It took a while to get out of city traffic, but once we hit the highway, it was a smooth journey. The roads were lined with an endless expanse of lush, green tropical trees. And after it grew dark, I looked up and saw a clear smattering of stars in the night sky. It was the first time I’d seen stars in ages.


After about 2.5 hours on the road, we stopped at a rest area in southern Malaysia called R&R Pagoh Selatan Southbound, where we were given half an hour to use the restroom and eat if we needed to. It was 9pm, but the rest stop was overflowing with people – particularly families – and absolutely bustling. There was a large cafeteria in the middle, filled with hawker stalls selling different cuisines. There were fruit vendor stands and a mini-mart. There were also western restaurants like Pizza Hut, KFC and Subway.


The restrooms at the rest stop were free and relatively clean, though of course you had to BYOTP (bring your own toilet paper). I was not hungry at this point, so I didn’t eat anything – though in retrospect, if I’d known that I’d be on the road for another six hours, I would have fueled up with a big meal here.

After we left the rest stop, the roads took a turn for the worse. We sat on the highway, in a long line of blinking red lights, inching forward and stopping for hours. According to Google Maps, the traffic jam was caused by several accidents up ahead. Along the way, I saw at least two large buses that had broken down and caused an entire lane to be shut down.


At close to midnight, we finally reached the Malaysian border. The host told us to disembark with only our passports and valuables; there was no need to take our luggage out of the compartment under the bus.

Immigration on the Malaysian side was extremely efficient and quick. There were at least 6-7 counters open even though it was midnight, and I only stood in line for about 10 minutes before being waved through. When I walked out of the building, the bus was already sitting on the other side, waiting.

It was here that the host quietly left us: I didn’t realize he was gone until the bus started to move, and I saw him standing on the sidewalk, waving goodbye with a big smile. After he left, the Wi-Fi also vanished (it’s possible that he was the one carrying the Wi-Fi?), and we were on our way to Singapore

… and also to hell. This was genuinely the worst part of the entire journey.


After crossing the narrow channel that separates Malaysia and Singapore, we sat on a bridge leading to Tuas checkpoint for two hours. From the bridge, we could see the checkpoint. We could also see every single bus in front of us, a long, endless, unmoving chain. Every five minutes, another bus would go through the checkpoint, and we would roll forward for a couple feet.

My phone had dropped below 40% battery. I had tried to charge it economically throughout the day with my power bank, only giving it enough juice to go up to 50%, but now my power bank was also flashing red. I kept the phone on life support by keeping it on airplane mode, praying that it would still be alive by the time I got dropped off in Singapore and needed to book a ride to my hotel.

Honestly, the only thing that made this bearable was that I did not have to pee. I had gone twice while I was waiting at the hotel lobby for pickup, and also at the rest stop. I basically ate and drank nothing for the entirety of the bus ride, in order to avoid being trapped in a Malaysian highway traffic jam with a screaming bladder and no restrooms in sight. This was one of the smartest things I’d ever done in my life.

By the time our bus finally inched up to the checkpoint platform, it was 2am. And finally, I saw what was causing the huge traffic jam on the bridge. The buses were processed one by one. An officer would wave the next bus forward, let the passengers embark and take their luggage and proceed to immigration. Then the bus would proceed, and the next bus would be waved forward. Every single bus had to be vacated before the passengers on the next one could get off. No wonder this took forever.

We disembarked and grabbed our luggage from the underside compartment. I’m not exaggerating when I say that people literally ran into the customs building, I’m guessing because of the fear of being left behind by the bus. Inside, we put our bags through a scanner and then proceeded to the immigration counters, which I was surprised to discover were almost entirely automated. You scanned your passport, and the gates swung open to let you in. There was only one counter that was actually manned by humans, and it seemed to be for special cases – e.g., people who hadn’t realized that they had to submit the SG arrival card online prior to entering Singapore.

After passing through immigration, we proceeded into a large parking lot. There were free restrooms, which were in a much worse state compared to the Malaysian side. There was a huge screen up above showing which bus was parked in which parking space; you really needed to know your bus’s license plate number for this one, as the buses all looked incredibly similar. After waiting for 15 minutes, my bus’s license plate number still hadn’t shown up on the screen, so I decided to walk around the parking lot to look for it. I found the bus waiting in a parking space that, according to the screen, had been allotted to a different bus. Almost all of the other passengers were already onboard, and I quickly boarded, embarrassed that I had kept them waiting.

As we pulled out of the checkpoint and onto the Singaporean freeway, we saw a sign warning that passengers were not allowed to leave the checkpoint on their own; everyone was required depart via bus. I could only imagine how many people lost their sanity after being stuck in traffic and immigration for upwards of 3-4 hours for that sign to be erected.

Stranded in Singapore

It was now 3am. The bus was supposed to drop us off at the Concorde Hotel near Orchard Road, but I was staying at Funan, in a whole other part of town. Public transit had already stopped running. There were no cars on the road.

I noticed that along the way, the driver would randomly stop to let one or two people off. So once the bus got somewhat close to where I was staying and two people got off, I followed them off the bus.

I stood on the side of a completely empty and dark street, my phone about to die, frantically consulting Google Maps. It seemed I was about a half-hour walk from my hotel; I could probably walk, if there were no other options. It was Singapore, after all, so safety wasn’t too much of an issue, but still — the path entailed walking alongside a large public park for blocks, which didn’t seem like the best idea.

Using the last remaining gasps of my phone battery, I ordered a Grab. And as luck would have it, one came 5 minutes later. The guy dropped me off at my hotel, and as I started to get off, he said, “Cash payment.”

“What?” I said.

“In the app, you selected cash payment.”

I looked at my phone. It was true. This was bewildering, because in Thailand, Vietnam and Malaysia, I had used the same Grab app, which was tied to my credit card, without issue. But once I’d arrived in Singapore, for some reason, my ability to pay by credit card had vanished from the app.

Luckily, since I’d gone to the bank back home in Geneva and taken out some foreign currency in preparation for situations like this, I had 20 Singapore dollars in my bag. If I’d had to drag my suitcase around at 3am, looking for an ATM that accepted international cards, I think I’d have lost my final thread of sanity.

I arrived at the hotel dazed, hungry, and completely wiped out. My head hit the pillow and I slept until 11am.

It may be too soon to draw this conclusion, but this trip has permanently ruined my ability to tolerate long journeys. Just the idea of being on another bus or train for 10 hours straight sounds like hell now. Days later, I’m still feeling the effects of being stressed and exhausted and sleep-deprived for that long. The only thing that saved me was wearing compression socks the entire time. Seriously, everyone, get compression socks.


  1. This post has truly inspired me to write a flashback post about my worst-ever bus trip, between Belgrade and Budva in 2005. I shudder to recall the anguish of it. I think what sucks so profoundly about these types of situations is that you agreed to a 4-5 hr bus trip vs. almost the same investment of time – when all would be said and done – dealing with airport stress. You did *not* agree to lose almost 24 hrs in anxiety, uncertainty, delays, being on the spot, lugging stuff, getting frayed and worn down by having to react constantly on the fly, deprive yourself of basic needs, etc. But that is international travel sometimes even by air: a test of endurance that pushes you beyond snapping to where you’re just shutting down in disbelief. Thank goodness you at least get an amazing blog post out of it!,


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s