a:6:{i:0;s:13321:"				<div class="h1"><h1>Singapore 5Nights / 6Days Return Airfare Ex - New Delhi Tour</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.highspiritadventures.co.in/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.highspiritadventures.co.in/tour-packages.htm" title="Tour Packages">Tour Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>Singapore 5Nights / 6Days Return Airfare Ex - New Delhi Tour</p>
				<br />
				
								
						<script language="javascript"> 
							function topDestinationToggle(showHideDiv, switchTextDiv) {
							var ele = document.getElementById(showHideDiv);
							var text = document.getElementById(switchTextDiv);
							if(ele.style.display == "block") {
								ele.style.display = "none";
							  text.innerHTML = "View More &#9660;";
							}
							else {
							  ele.style.display = "block";
							  text.innerHTML = "View Less &#9650;";
							}
							}
		                </script>
											<script type="text/javascript">			
					(function($){	
					  $(function(){
						$('[id^=detailslider]').each(function(){
							$(this).DG_Slider({
								auto: true, mode:'fade', pager:true, pagerType:'short',controls:true
							});
						})
				
						$('a[rel=gall]').fancybox()
					  });	
					}(jQuery))
					</script>
					
					<br />
					<div class="data">
					<table class="w100 formTable bdr0 imgWidth">
					<tr>
					<td class="p10px">
					<table class="w100 packageForm">
											<tr>
						<td class="b p5px w125px vat">Duration </td>
						<td class="p5px pl0px vat">
						5 Nights / 6 Days 
						</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Destination Covered </td>
						<td class="p5px pl0px vat">Singapore</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Price (Starting From) </td>
						<td class="p5px pl0px vat"><span class="dif">On Request</span></td>
						</tr>
												<tr>
						<td></td>
						<td>
						<p>
						<form name="frmpackagedetail" id="frmpackagedetail" method="post" action="http://www.highspiritadventures.co.in/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Singapore 5Nights / 6Days Return Airfare Ex - New Delhi Tour - Tour Package"/>
						<input type="hidden" name="allocate_type" value="tour"/>
						<a href="#" onclick="document.getElementById('frmpackagedetail').submit();" class="button p7px pl12px pr12px c5px b large dib mt10px">Book Your Tour</a>
						<input type="hidden" name="pkg_slno" value="74661"/>
						</form>
						</p>
						</td>
						</tr>
											</table>
					</td>
											<td class="p10px vat imgWidth150 w150px lh0">
						<div class="demo-wrap">
						<ul class="lsn m0px p0px" >
															<li class="bdr bw3px c5px p1px"><div class="dt"><p class="ac vam dtc w150px h150px"><a rel="gall" data-fancybox="showZoomImage" href="https://ttw.wlimg.com/package-images/photo-big/dir_15/445618/133258.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_15/445618/133258.jpg"  width="150" height="150"    alt="Singapore 5Nights / 6Days Return Airfare Ex - New Delhi Tour" title="Singapore 5Nights / 6Days Return Airfare Ex - New Delhi Tour" /></a></p></div></li>
															</ul>
						</div>
						</td>
											</tr>
					</table>
					</div>
					<br />
					
					4.5% Govt service tax<br />
Singapore Night Safari Tour<br />
City Tour Of Singapore<br />
Universal Studios Singapore<br />
Airport Transfers Are On SIC Basis<br />
All Transfers And Sightseeings On SIC Basis<br />
Singapore Visa<br />
SENTOSA SUNSET TOUR (CC, WOT, IOS & MADAME TUSSAUDS)<br />						<div class="headHr">
			            <p class="p7px b pl10px xlarge">Tour Itinerary</p>
			            </div>
			            
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 1:</b> Arrival & welcome
								</p>
								<p class="aj">Singapore Night Safari Tour<br />
<br />
3 star accomodation (Value Hotel Thomson or similar) with breakfast.<br />
<br />
Pick up from the hotel (18:00 Hrs) and Pick up from Night Safari (21:30 Hrs)<br />
<br />
Hop onboard the tram and psyche yourself for a 40-minute journey of wild animal encounters! Journey from the Himalayan foothills to wild Equitorial Africa, this tram ride offers live commentary. Get a chance to come up-close with lions, tigers, tapirs, deer and more! Set in a forest clearing, the Creatures of the Night Show a 20-minute animal presentation will introduce you to nocturnal animals, from the elusive owl to nimble binturongs to intuitive civets.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 2:</b> City Tour of Singapore
								</p>
								<p class="aj">3 star accomodation (Value Hotel Thomson or similar) with breakfast.<br />
<br />
Pick up time from Hotel (10:30 Hrs &13:30 Hrs) and Duration (4 Hrs)<br />
<br />
The Singapore city tour will cover Orchard Road, Suntec City and the Fountain of Wealth. Stop at the Merlion Park. Followed by an orientation tour of the Fullerton Hotel & Esplanade. Stop at Singapore Flyer (ticket optional). Pass by Marina Bay Sands and the Helix Bridge, Little India area and China Town. Visit the Thian Hock Temple. Explore the city by driving round the Civic District, pass by Padang, the Cricket Club, the historic Parliament House, the Supreme Court and City Hall. Next, stop at the Merlion Park and enjoy the impressive views of Marina Bay. Do not miss out on this great photo opportunity with the Merlion, a mythological creature that is part lion and part fish. Then proceed to Singapore Flyer with a stop (entrance optional). Visit the Thian Hock Keng Temple, one of Singapore`s oldest Buddhist-Taoist temples, before driving past Chinatown. Stop by a local handicraft center and observe craftsmen at work up-close. You can also enjoy the panoramic view of Marina Bay Sands and walk to the Helix Bridge. Our final stop at Little India will charm you with the scent of joss sticks, jasmine and spices.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 3:</b> Universal Studios Singapore
								</p>
								<p class="aj">3 star accomodation (Value Hotel Thomson or similar) with breakfast.<br />
<br />
Pick Up From The Hotel (09:30 Hrs) and Duration (07 Hrs)<br />
<br />
Start your journey to Hollywood movie theme park - Universal Studios forms part of Resorts World™ Sentosa. Among the park`s many rides and attractions are Battlestar Galactica™, the world`s tallest pair of dueling roller coasters and Far Far Away Castle™, the first castle from the world of Shrek where you can experience the amazing Shrek 4-D™ attraction. One of the biggest spectacles in live entertainment is based on the movie Waterworld™. The action comes surging to life in a tidal wave of death-defying stunts, explosions and thrilling action. Enjoy Jurassic Park Rapids Adventure™, Madagascar: A Crate Adventure™ and Revenge of the Mummy™, TRANSFORMERS The Ride and many more. Live The Movies at the many exclusive attractions found only at the region’s first Hollywood movie theme park, Universal Studios Singapore. Featuring movie-themed rides and attractions, which are unique to Singapore, thrill seekers and families will be the first to experience many new rides and shows based on blockbuster hits. The young and young at heart will be entertained by Shrek and gang on an incredible 4-D adventure in the world’s first Far Far Away Castle. Thrill seekers can face warrior mummies on Revenge of the Mummy a psychological thrill ride in total darkness. Other highlights include Madagascar, New York, Hollywood, Sci Fi City and The Lost World. This Hollywood movie theme park forms part of Resort World™ Sentosa. Enter the thrilling world of movie magic as you Ride the Movies® on roller coasters and other movie-thembed attractions. Be dazzled and delighted by an immersive entertainment experience that brings the silver screen to life. Among the park`s many rides and attractions is Far Far Away Castle™ - the first castle from the world of Shrek where you can experience the amazing Shrek 4-D Adventure™ attraction. One of the biggest spectacles in live entertainment is based on the movie Waterworld™. The action comes surging to life in a tidal wave of death-defying stunts, explosions and thrilling action. Enjoy Jurassic Park Rapids Adventure™, Madagascar: A Crate Adventure™ and Revenge of the Mummy™ and many more.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 4:</b> Sentosa Sunset Tour (Cc, Wot, Ios & Madame Tussauds)
								</p>
								<p class="aj">3 star accomodation (Value Hotel Thomson or similar) with breakfast.<br />
<br />
Cable Car We will visit a peaceful and calm island just a short scenic cable car ride from Mount Faber. Wings of Time Wings of time show that brings you a mesmerizing show with a live cast, dramatic effects and pyrotechnics. Water jets, flame bursts, lasers and captivating music make this a one-of-a-kind entertainment spectacle that`s fun for everyone. Images of Singapore Fun, interactive and theatrical, Images of Singapore LIVE takes you on a journey to uncover the nation’s extraordinary story. Madame Tussauds Millions and millions of people have flocked through the doors of Madame Tussauds since they first opened over 200 years ago and it remains just as popular as it ever was. There are many reasons for this enduring success, but at the heart of it all is good, old-fashioned curiosity.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 5:</b> Day at leisure
								</p>
								<p class="aj">You have a free day today. After breakfast, you are free to visit places of your choice by yourself to make your trip memorable. While you are finalizing your travel plan, we would be happy to suggest the places you should visit on this day. Although you have an option to book it through us or visit these place by yourself.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 6:</b> Day at leisure
								</p>
								<p class="aj">You have a free day today. After breakfast, you are free to visit places of your choice by yourself to make your trip memorable. While you are finalizing your travel plan, we would be happy to suggest the places you should visit on this day. Although you have an option to book it through us or visit these place by yourself.<br />
<br />
Departure with sweet memories.<br />
This is your last day of the trip. After breakfast, check out from the hotel as per the timings mentioned in the voucher. We suggest that you should keep this day light and check your flight timings before hand. You will be transferred to airport from the pick up location as mentioned in the voucher (If Applicable).</p>
								</td>
								</tr>
								</table>					
								</div>						<br />
												 <p class="headHr p7px b pl10px xlarge">Tour Detail</p>
			             <div class="data p15px aj">
										
						<p class="large b mb5px dif">Inclusions :</p>
						<ul>
															<li>Hotel</li>
															</ul>
						<br />
											
						<p class="large b mb5px dif">Terms &amp; Conditions :</p>* Some Advance Percentage of total booking amount 
* Airfare/Transport fare to be paid full at one time in advance.~^#^~* Upon cancellation, refund will be made after deducting the Retention Amount. 
* Retention Amount varies as per the number of days left before your package start date. ~^#^~												</div>
												
						<div class="ac mb10px">
						<form name="frmpackagedetail" id="frmpackagedetail" method="post" action="http://www.highspiritadventures.co.in/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Singapore 5Nights / 6Days Return Airfare Ex - New Delhi Tour - Tour Package"/>
						<input type="hidden" name="allocate_type" value="tour"/>
						<a href="#" onclick="document.getElementById('frmpackagedetail').submit();" class="button p7px pl12px pr12px c5px b large dib mt10px">Book Your Tour</a>
						<input type="hidden" name="pkg_slno" value="74661"/>
						</form>
						</div>
						
						";i:1;s:99:"Book Singapore 5Nights / 6Days Return Airfare Ex - New Delhi Tour - 5 Nights / 6 Days Tour Packages";i:2;s:157:"book singapore 5nights / 6days return airfare ex - new delhi tour - 5 nights / 6 days tour packages, beach and islands tour packages, singapore tour packages";i:3;s:211:"Book Singapore 5Nights / 6Days Return Airfare Ex - New Delhi Tour - 5 Nights / 6 Days tour packages from High Spirit Adventures - Get attractive 5 Nights / 6 Days Beach and Islands  tour packages for  Singapore.";i:4;s:695:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Singapore"        
		                 },
		      "description": "4.5% Govt service tax
Singapore Night Safari Tour
City Tour Of Singapore
Universal Studios Singapore
Airport Transfers Are On SIC Basis
All Transfers And Sightseeings On SIC Basis
Singapore Visa
SENTOSA SUNSET TOUR (CC, WOT, IOS & MADAME TUSSAUDS)",
		      "name": "Singapore 5Nights / 6Days Return Airfare Ex - New Delhi Tour",
		      "telephone": "+91-8629029169"
		    }
		    </script>
			";i:5;N;}