a:6:{i:0;s:14522:"				<div class="h1"><h1>2 Nights Singapore Tour</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.chaturveditravels.com/" title="Home">Home</a> 
				
								
				<b class="ffv p2px">&rsaquo;</b>2 Nights Singapore 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">Tour Code </td>
						<td class="p5px pl0px vat">INTL02/2 Nights Sing</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Duration </td>
						<td class="p5px pl0px vat">
						2 Nights / 3 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">
						INR 46799 Per Person						</td>
						</tr>
												<tr>
						<td></td>
						<td>
						<p>
						<form name="frmpackagedetail" id="frmpackagedetail" method="post" action="http://www.chaturveditravels.com/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="2 Nights Singapore 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="28058"/>
						</form>
						</p>
						</td>
						</tr>
											</table>
					</td>
										</tr>
					</table>
					</div>
					<br />
					
					Visa for Singapore<br />
Travel insurance<br />
Items of personal nature viz, drinks, laundry, calls, etc.<br />
Meals anything not mentioned in the itinerary<br />
Peak season charges, if applicable<br />
Service tax of 3.09%  on the total package<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> Singapore Arrival
								</p>
								<p class="aj">Arrive at Singapore, after clearing the immigration, you will be met by our local representative and transferred to Hotel. Check in at the hotel .<br />
In the Evening take a tour of the world’s only ‘Night Safari’, The world’s first Night Safari  set in 40 hectares of secondary jungle will unfold the mystery and drama of the tropical jungle after dusk with stunning effect. See a myriad of nocturnal animals, from fierce predators to timid forest dwellers, in their natural habitat under subtle moon glow lighting. Roam the jungle in the complete safety and comfort of your  Tram  which takes you through the East and West Loop passing by a large reservoir and weaving through selected habitats designed specifically to replicate the natural environment from the Himalayan Foothills to the Southeast Asian Rainforest and Indian Subcontinent. On completion of the tram ride, your tour guide will lead you on a walking trail where you will be able to view some animals at closer quarters.<br />
Return back to hotel . Overnight in the hotel at Singapore.</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> Singapore
								</p>
								<p class="aj">After breakfast, proceed for the  Singapore city tour  explore the city by driving round the Civic District, passing by the Padang, Cricket Club, historic Parliament House, Supreme Court and City Hall. Next, stop at the MERLION PARK and enjoy the impressive views of Marina Bay. Do not miss out this picture-taking opportunity with The Merlin, a mythological creature that is part lion and part fish. Visit THIAN HOCK KENG TEMPLE, one of Singapore’s oldest Buddhist-Taoist temples, before driving past Chinatown. Stop by a LOCAL HANDICRAFT CENTRE and observe craftsmen at work up-close. Proceed to the NATIONAL ORCHID GARDEN, located within Singapore Botanic Gardens, which boasts a sprawling display of 60,000 orchid plants. Our final stop at LITTLE INDIA will entrance you with the scent of joss sticks, jasmine and spices.<br />
In the afternoon proceed for Sentosa Island tour.<br />
Sentosa - an island of peace and tranquility is just minutes away from the main Island of Singapore. On the island visit IMAGES OF SINGAPORE, where you’ll embark on journey to experience the colorful culture and vibrant heritage of Singapore, re-told through life-size figures, animatronics and special effects. End the tour with a scenic Cable Car Ride from Sentosa to Mount Faber where you can see the beautiful landscape of the city. Private chartered transportation between attractions will make your visit more comfortable. <br />
Return back to the hotel. Rest of the time free at leisure. Overnight in hotel at Singapore.</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> Singapore - Departure
								</p>
								<p class="aj">After breakfast. Rest of the day is free  at leisure or for shopping. Later transfer to airport to board a flight back to Home.</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>
																		<li>Transfers</li>
															</ul>
						<br />
												<p class="large b mb5px dif">Exclusions :</p> <ul><li>Visa for Singapore</li><li>
Travel insurance</li><li>
Items of personal nature viz, drinks, laundry, calls, etc.</li><li>
Meals anything not mentioned in the itinerary</li><li>
Peak season charges, if applicable</li><li>
Service tax of 3.09%  on the total package</li></ul><br />
											
						<p class="large b mb5px dif">Terms &amp; Conditions :</p>~^#^~~^#^~<p><strong>Tour Terms and Conditions</strong>

<p>Per person rates (Rs) - Applicable on 2/3 persons staying together sharing the same room<br />
Package rates are subject to change without prior notice<br />
Meal plan: EP- accommodation only, CP-accommodation with breakfast, MAP- accommodation with breakfast, lunch or dinner, AP-accommodation with breakfast, lunch &amp; dinner<br />
The packages can not be combined with any other offer. &nbsp;<br />
The above package is not valid during national holidays, festivals &amp; long weekends<br />
Chaturvedi Travels and Tours . Reserves the right to change/modify or terminate the offer any time at its own discretion and without any prior notice

<p><strong>Package does not includes</strong>

<p>Meals not mentioned in the itinerary.<br />
Package does not include entry fees to monuments and places<br />
anything not mentioned in the package includes.<br />
Porte rage at hotels and airports, tips, insurance, laundry, liquors, wine, mineral water, telephone charges<br />
all items of personal nature.

<p>Any cost arising due to natural calamities like landslides, roadblocks, etc. (to be borne by the clients directly on the spot).

<p>Any increase in taxes or fuel leading to an increase in surface transportation &amp; land arrangements, which may come into effect prior to departure.

<p>Rates are subject to change &amp; Rooms are subject to availability. Peak season / Holiday surcharge will be applicable in case if there are any events. No reservation has been made till date. This is just a quotation. Final costing will be given at the time of confirmation. The above rate is valid only for mentioned dates. The above is only an offer and not confirmation of your bookings. We shall proceed with your booking once we have receive the payment from you &amp; if we are not able to get the original hotels, shall provide equivalent/ alternative hotels. You are requested to make advance payment (50 % of the total tour cost) by credit card along with 2 % bank charges OR bank transfer to initiate with the bookings. Balance payment can be made 15 days prior to your tour starting date. On receipt of full payment we will send you the travel vouchers.

<p>Please Note Standard Check In Time Is 1400 Hrs &amp; Check Out Time Is 0900 Hrs.

<p>Please Reconfirm The Aboe Package With Payment Details At The Earliest. Kindly Deposit The Package Cost In Our Account At The Earliest. Please Find Our Account Details Given Below

<p>Customer&#39;S Option To Make Payments Through Debit Clearing

<p>Particulars<br />
&nbsp;&nbsp; &nbsp;<br />
<strong>Details</strong>

<p>Company Name Chaturvedi Travels &amp; Tours

<p>Beneficiary Name Chaturvedi Travels &amp; Tours

<p>Beneficiary&#39;S Office Address

<p>29, White House, City Center , Gwalior 474001

<p>Beneficiary&#39;S Bank Name Icici Bank Limited

<p>Beneficiary&#39;S Bank Address

<p>City Center , Gwalior 474001 &nbsp;

<p>Beneficiary&#39;S Bank A/C No. 019705004795

<p>Ifsc Code Of The Bank Branch Of The Beneficiary - For Rtgs Transfer Icic0000197

<p>Ifsc Code Of The Bank Branch Of The Beneficiary - For Neft Transfer Icic0000197

<p>Pan Number Afipc8313B

<p>Type Of Bank A/C ( Current A/C / Saving A/C Or Cash Credit A/C) Current A/C

<p>Certified That The Particulars Furnished Above Are Correct As Per Our Records.

<p>In Keeping With Our Heightened Security Procedures We Request You To Carry A Photo-Identity To Present At Chech-In. Foreign Nationals Will Requireto Present The Passport And Valid Visa While Indian Nationals Can Present Any One Of These: Passport, Driving License, Voter Id Card Or Pan Card.&nbsp; &nbsp;

<p>Our Rates Are Based On The Prevailing Rates As Negotiated By Us With The Hotels.&nbsp; Hotels Retain The Right To Modify The Rates Without Notice. In Case Of Such Changes The Rates Quoted Before The Modification, Can Be Changed By Us According To The Modifications By Hotels. All Hotel Bookings Are Based On Usual Check In And Check Out Time Of The Hotels Until Unless Indicated In The Itinerary

<p>We Shall Not Be Responsible For Any Delays &amp; Alterations In The Program Or Expenses Incurred - Directly Or Indirectly - Due To Natural Hazards, Flight Cancellations, Accident, Breakdown Of Machinery Or Equipments, Breakdown Of Transport, Weather, Sickness, Landslides, Political Closures Or Any Untoward Incidents.

<p>We Shall Not Be Responsible For Any Loss, Injury Or Damage To Person, Property, Or Otherwise In Connection With Any Accommodation, Transportation Or Other Services, Resulting - Directly Or Indirectly - From Any Act Of God, Dangers, Fire, Accident, Breakdown In Machinery Or Equipment, Breakdown Of Transport, Wars, Civil Disturbances, Strikes, Riots, Thefts, Pilferages, Epidemics, Medical Or Custom Department Regulations, Defaults, Or Any Other Causes Beyond Our Control.

<p><strong>Reservation Policy:</strong><br />
Confirmation Of Hotel Rooms / House Boat Is Subject To The Availability.<br />
Confirmation Of The Packages Is Subject To Receipt Of 100% Payment I.E..., 70 % Of The Payment As Advance At Time Of Booking &amp; Balance 30 % Before 15 Days Of Departure.

<p><strong>Cancellation Policy:-</strong><br />
Cancellation Of The Tour Packages Is Non Refundable / Hotel Booking / Transportation Or Non Utilization Of The Same: 100 % Retention...

<p><strong>Terms &amp; Conditions:-</strong><br />
The Above Itinerary Is Suggested Tour Plan. The Company Is Responsible For Only Those Services Which Are Charged From The Guest.&nbsp; All Other Services Which Are Not Paid By The Guest To The Company Are Suggested Services And Company Is Nowhere Bound To Provide That Service Or Pay The Cost For The Same.<br />
Check In And Check Out Timing Of The Hotel Will Be According To The Timing Of The Respective Hotels.<br />
Company Is Not Responsible For Compensating Any Loss Or Additional Cost Incurred By The Guest While Taking The Tour.<br />
Company Is Not Responsible, Nor Liable For Any Damage, Loss Or Injury Caused To Any Passenger While Taking The Tour.<br />
Dollar Rates Are Applicable Only To Foreign Nationals &amp; Indians Possessing Foreign Passports, While The Inr Package Rates Will Be Applicable To Indian Nationals

<p>All The Disputes Are Subject To Gwalior Jurisdiction Only.<br />
Any Claim Related To The Package Must Be Brought To The Notice Of The Company Within A Week.												</div>
												
						<div class="ac mb10px">
						<form name="frmpackagedetail" id="frmpackagedetail" method="post" action="http://www.chaturveditravels.com/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="2 Nights Singapore 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="28058"/>
						</form>
						</div>
						
						";i:1;s:62:"Book 2 Nights Singapore Tour - 2 Nights / 3 Days Tour Packages";i:2;s:120:"book 2 nights singapore tour - 2 nights / 3 days tour packages, beach and islands tour packages, singapore tour packages";i:3;s:165:"Chaturvedi Travels and Tours offers 2 Nights Singapore Tour - 2 Nights / 3 Days tour package, budget Beach and Islands tour packages for Singapore at exciting price.";i:4;s:627:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Singapore"        
		                 },
		      "description": "Visa for Singapore
Travel insurance
Items of personal nature viz, drinks, laundry, calls, etc.
Meals anything not mentioned in the itinerary
Peak season charges, if applicable
Service tax of 3.09%  on the total package",
		      "name": "2 Nights Singapore Tour",
		      "telephone": "+91-9826355115"
		    }
		    </script>
			";i:5;N;}