a:6:{i:0;s:14629:"				<div class="h1"><h1>Port Blair with Return Trip to Havelock Island Tour</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.kwik2travels.co.in/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.kwik2travels.co.in/travel-packages.htm" title="Travel Packages">Travel Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>Port Blair with Return Trip to Havelock Island 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">kw0015</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Duration </td>
						<td class="p5px pl0px vat">
						3 Nights / 4 Days 
						</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Destination Covered </td>
						<td class="p5px pl0px vat">Port Blair</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Price (Starting From) </td>
						<td class="p5px pl0px vat">
						INR 8999 Per Person						</td>
						</tr>
												<tr>
						<td></td>
						<td>
						<p>
						<form name="frmpackagedetail" id="frmpackagedetail" method="post" action="http://www.kwik2travels.co.in/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Port Blair with Return Trip to Havelock Island 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="29039"/>
						</form>
						</p>
						</td>
						</tr>
											</table>
					</td>
											<td class="p10px vat imgWidth150 w150px lh0">
						<div class="demo-wrap">
						<ul class="lsn m0px p0px" id="detailslider1">
															<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_10/288293/57682.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_10/288293/57682.jpg"  width="150" height="150"    alt="Port Blair with Return Trip to Havelock Island Tour" title="Port Blair with Return Trip to Havelock Island Tour" /></a></p></div></li>
																		<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_10/288293/57683.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_10/288293/57683.jpg"  width="150" height="150"    alt="Port Blair with Return Trip to Havelock Island Tour" title="Port Blair with Return Trip to Havelock Island Tour" /></a></p></div></li>
																		<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_10/288293/57684.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_10/288293/57684.jpg"  width="150" height="150"    alt="Port Blair with Return Trip to Havelock Island Tour" title="Port Blair with Return Trip to Havelock Island Tour" /></a></p></div></li>
																		<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_10/288293/57685.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_10/288293/57685.jpg"  width="150" height="150"    alt="Port Blair with Return Trip to Havelock Island Tour" title="Port Blair with Return Trip to Havelock Island Tour" /></a></p></div></li>
															</ul>
						</div>
						</td>
											</tr>
					</table>
					</div>
					<br />
					
					Package valid only for Indian nationals.<br />
Air tickets and hotels are subject to availability.<br />
It is mandatory for guests to present valid photo identification at the time of check-in.<br />
The identification proofs accepted are Driving License, Voters Card, Passport, Ration Card. Without valid ID the guest will not be allowed to check in. Note- PAN Cards will not be accepted as a valid ID card.<br />
All transfers and sightseeing are as per the Itinerary/package and in case of Air Conditioned vehicles, It will be switched off in the hills.<br />
The inclusion of extra bed with a booking is facilitated with a folding cot or a mattress as an extra bed.<br />
Early check-in or late check-out is subject to availability and may be chargeable by the hotel. The standard check-in time is 1300hrs and the standard check-out time is 1000hrs.<br />
Any kind of personal expenses (Laundry, room service etc..) or optional tours/ extra meals are not inclusive in the package cost.<br />
The hotel reserves the right of admission. Accommodation can be denied to guests posing as a couple if suitable proof of identification is not presented at check-in. Via.com will not be responsible for any check-in denied by the hotel due to the aforesaid reason.<br />
In case of non-availability of above mentioned hotels similar category hotel will be provided.Air Fare / Train fare.<br />
Personal expenses such as laundry, telephone calls, tips & gratuity, mineral water, soft & hard drinks, rafting, rock climbing, paragliding, joy ride (Toy Train), porterage.<br />
Additional sightseeing or extra usage of vehicle, other than mentioned in the itinerary.<br />
Entrance Fees & Guide charges.<br />
Any cost arising due to natural calamities like, landslides, road blockage, political disturbances (strikes), etc (to be borne by the client, which is directly payable on the spot).<br />
Any increase in taxes or fuel price, leading to increase in cost on surface transportation & land arrangements, which may come into effect prior to departure.<br />
Travel Insurance.<br />
Anything which is not include in the inclusion.19-1131-03<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> Arrive To Port Blair
								</p>
								<p class="aj">Our representative will meet and assist you at the Veer Savarkar Airport. Board the waiting vehicles, drive to your hotel and check in. First half of the day is at leisure. Later in the afternoon visit Cellular jail followed by light and sound show. The Cellular Jail has a pride of place in India’s freedom struggle. Many a stalwart were imprisoned here. Declared a national memorial, this three storey prison constructed by Britishers in 1906, is a pilgrimage destination for freedom fighters. This colossal edifice has mutely witnessed the most treacherous of inhumane atrocities borne by the convicts, who were mostly freedom fighters. The day draws to a gentle close with the Sound and Light Show at the historic Cellular Jail which gives you a vivid experience of its strong association with the freedom fighters and their struggle for independence. Overnight stay at the Hotel.</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> Port Blair - Ross Island - North Bay Island (Coral Island)
								</p>
								<p class="aj">Today after breakfast embark on a day long three island cruise. One of the most sought after activities. It covers a panorama of seven arbours that include North Bay and Ross Island. It leaves a lasting impression. Visit Ross Island. Once the administrative headquarters of the British and capital of these Islands, the island is now under the Indian Navy. It stands now as a ruin of the bygone days with the old structures almost in debris. There is a small museum named Smritika, it holds photographs and the other antiques of the Britishers relevant to these islands. Thailand is famous for friendly flocks of Deer and lush green walking trails. North Bay, the water lovers may enjoy snorkelling or take a glass bottom boat ride (Optional on direct payment) in its shallow waters with a chance to see corals up close also has mesmerizing picnic spots with natural picturesque environments Return to the hotel. Overnight stay at the Hotel.</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> Port Blair - Havelock Island - Port Blair
								</p>
								<p class="aj">Today after breakfast you will transfer to Jetty. Head to Havelock Island on board Cruise connecting the two islands! Havelock, about 54 kilometers northeast of Port Blair, the Island is a hidden jewel. Few Indians know of this stunning beach destination in their own backyard while heading for Phuket (in Thailand) across the waters of Andaman Sea. Havelock is a serene tropical island encompassing about 86 square kilometers. It’s clear waters are rated among the best in the world for Snorkelling and scuba diving. Close to 1000 different species of marine life inhabit the waters of the Andaman Islands. Scuba divers can see nudi branches, sea slugs and snails, varieties of ghost pipe fish, jaw fish and a number of different crustaceans of all shapes and sizes. With its serene beaches, 40 meters visibility underwater, colorful coral reefs and ‘far from the maddening crowd’ appeal, Havelock Island has emerged as a dream destination among discerning travelers Arrive at Havelock Jetty, you are met and assisted by Our representative. Board the waiting vehicles for trip to Radhanagar Beach (or Beach No. 7) is the jewel in the crown of Havelock Island. Located on the western side of the island, it stands away from the cluster. The glorious white sand beach shot to global fame when Time magazine (in 2004) rated it as the finest in Asia. With lush tropical forest rising on a hill to one side, the draw of this white sand beach has steadily grown in the legion of avid beach buffs. The popularity of this beach has triggered cruises from across the Andaman Sea. travelers cruise over a few days from Thailand to experience the magic of this beach in particular. A wide beach that runs over a few kilometers, Radhanagar is simply stunning. It lends itself to a variety of activities. Evening return to Port Blair. Overnight stay at the Hotel.</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> Depart Port Blair - Airport Dropping
								</p>
								<p class="aj">Dropping to Airport with memories of an ultimate holiday at Andaman Islands.</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>Meals</li>
																		<li>Sightseeing</li>
																		<li>Transfers</li>
															</ul>
						<br />
												<p class="large b mb5px dif">Exclusions :</p> <ul><li>Air Fare / Train fare.</li><li>
Personal expenses such as laundry, telephone calls, tips & gratuity, mineral water, soft & hard drinks, rafting, rock climbing, paragliding, joy ride (Toy Train), porterage.</li><li>
Additional sightseeing or extra usage of vehicle, other than mentioned in the itinerary.</li><li>
Entrance Fees & Guide charges.</li><li>
Any cost arising due to natural calamities like, landslides, road blockage, political disturbances (strikes), etc (to be borne by the client, which is directly payable on the spot).</li><li>
Any increase in taxes or fuel price, leading to increase in cost on surface transportation & land arrangements, which may come into effect prior to departure.</li><li>
Travel Insurance.</li><li>
Anything which is not include in the inclusion.</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.kwik2travels.co.in/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Port Blair with Return Trip to Havelock Island 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="29039"/>
						</form>
						</div>
						
						";i:1;s:90:"Book Port Blair with Return Trip to Havelock Island Tour - 3 Nights / 4 Days Tour Packages";i:2;s:149:"book port blair with return trip to havelock island tour - 3 nights / 4 days tour packages, beach and islands tour packages, port blair tour packages";i:3;s:194:"Book Port Blair with Return Trip to Havelock Island Tour - 3 Nights / 4 Days tour packages from Kwik2 Travels - Get attractive 3 Nights / 4 Days Beach and Islands  tour packages for  Port Blair.";i:4;s:2489:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Port Blair"        
		                 },
		      "description": "Package valid only for Indian nationals.
Air tickets and hotels are subject to availability.
It is mandatory for guests to present valid photo identification at the time of check-in.
The identification proofs accepted are Driving License, Voters Card, Passport, Ration Card. Without valid ID the guest will not be allowed to check in. Note- PAN Cards will not be accepted as a valid ID card.
All transfers and sightseeing are as per the Itinerary/package and in case of Air Conditioned vehicles, It will be switched off in the hills.
The inclusion of extra bed with a booking is facilitated with a folding cot or a mattress as an extra bed.
Early check-in or late check-out is subject to availability and may be chargeable by the hotel. The standard check-in time is 1300hrs and the standard check-out time is 1000hrs.
Any kind of personal expenses (Laundry, room service etc..) or optional tours/ extra meals are not inclusive in the package cost.
The hotel reserves the right of admission. Accommodation can be denied to guests posing as a couple if suitable proof of identification is not presented at check-in. Via.com will not be responsible for any check-in denied by the hotel due to the aforesaid reason.
In case of non-availability of above mentioned hotels similar category hotel will be provided.Air Fare / Train fare.
Personal expenses such as laundry, telephone calls, tips & gratuity, mineral water, soft & hard drinks, rafting, rock climbing, paragliding, joy ride (Toy Train), porterage.
Additional sightseeing or extra usage of vehicle, other than mentioned in the itinerary.
Entrance Fees & Guide charges.
Any cost arising due to natural calamities like, landslides, road blockage, political disturbances (strikes), etc (to be borne by the client, which is directly payable on the spot).
Any increase in taxes or fuel price, leading to increase in cost on surface transportation & land arrangements, which may come into effect prior to departure.
Travel Insurance.
Anything which is not include in the inclusion.19-1131-03",
		      "name": "Port Blair with Return Trip to Havelock Island Tour",
		      "telephone": "+91-9329116616"
		    }
		    </script>
			";i:5;N;}