a:6:{i:0;s:21188:"				<div class="h1"><h1>Kerala Backwater Tour 07 Night / 08 Days </h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.chaturveditravels.com/" title="Home">Home</a> 
				
								
				<b class="ffv p2px">&rsaquo;</b>Kerala Backwater Tour 07 Night / 08 Days </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">CTT06/KERELA 7NIGHT/</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Duration </td>
						<td class="p5px pl0px vat">
						7 Nights / 8 Days 
						</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Destination Covered </td>
						<td class="p5px pl0px vat">Kochi, Kovalam, Thekkady, Alleppey, Munnar</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Price (Starting From) </td>
						<td class="p5px pl0px vat">
						INR 24999 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="Kerala Backwater Tour 07 Night / 08 Days  - 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="27754"/>
						</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_8/229281/56080.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_8/229281/56080.jpg"  width="150" height="150"    alt="backwater tour" title="backwater tour" /></a></p></div></li>
															</ul>
						</div>
						</td>
											</tr>
					</table>
					</div>
					<br />
					
					Any Airfare, Train fare, Overland Journey which is not mentioned in the Itinerary.<br />
Any personal nature items like Laundry, bar bills, table bills, camera fee, tips or any other item.<br />
Major Meals i.e. Lunch & Dinner<br />
Any Medical/rescue evacuation due to mishaps.<br />
Optional Activities mentioned in the itinerary<br />
Any other things that is not included in the “Package Cost Includes” Column.<b><b>Note:<br />
Any changes in Govt. taxes, Hotel Tariff, etc will be intimated before confirming the Package.<br />
Cost incidental to any change in the itinerary/ stay on account of flight cancellation due to bad weather, ill health, roadblocks and/or any factors beyond control.<br />
Government Service tax @ 3.09 Extra<br />
Every passenger is traveling on his own responsibility. The company will not be responsible for any loss of luggage or any accidents. We are not responsible for theft or damage to your luggage.<br />
Also note that Video & Audio systems are prohibited in commercial vehicles as per law and we do not guarantee for it always.<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> Cochin 
								</p>
								<p class="aj">On arrival meet and greet our representative would receive you and transfer to the hotel. Check into the hotel and get ready to explore Cochin. <br />
Kochi (colonial name Cochin) is a vibrant city situated on the south-west coast of the Indian peninsula in the breathtakingly scenic and prosperous state of Kerala, hailed as 'God's Own Country'. Its strategic importance over the centuries is underlined by the sobriquet Queen of the Arabian Sea. Informally, Cochin is also referred to as the Gateway to Kerala.<br />
A few popular attractions of Cochin are the Santa Cruz Basilica, The Dutch palace at Mattancherry and St. Francis' Church. Return back to the hotel and rest of the day free at leisure. Overnight stay at Cochin.</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> Cochin - Munnar Tour (130Km 4 Hrs Drive)
								</p>
								<p class="aj">After breakfast checkout from hotel and Proceed to Munnar enjoying the scenic beauty & the marvelous waterfalls, high mountains with the low flying clouds passing by. <br />
Munnar is situated at the confluence of three mountain streams - Muthirapuzha, Nallathanni and Kundala, and perched about 1600 m above sea level, the hill station of Munnar once used to be the summer resort of the erstwhile British administration in south India. This hill station is marked by vast expanses of tea plantations, colonial bungalows, rivulets, waterfalls and cool weather. It is also an ideal destination for trekking and mountain biking.<br />
On arrival check in to the hotel & Rest of the day at Leisure. Overnight stay at Munnar.</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> Munnar
								</p>
								<p class="aj">After morning breakfast start for full day sightseeing tour of Munnar. Here visit to Mattupetty Lake & Dam, Echo Point, Kundale Lake, Blossom Garden, Rajamalai, Tea Plantation and Eravikulam Wildlife Sanctuary. Enjoy and relax near the tea gardens and appreciated the beauty of nature as you share romantic talks. Later return back on time to the hotel and enjoy the stimulating hot tea sitting outside in the garden. Rest of the day free at leisure. Overnight stay at Munnar.<br />
</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> Munnar - Thekkady (120 km-4 hrs)
								</p>
								<p class="aj">Morning after breakfast check out from hotel and depart for Thekkady by road. En route visit the panoramic Western Ghat hills covered with spice plantations and an occasional view of waterfalls and streams, several types of spice plantations like cardamom, vanilla, pepper, cinnamon and clove. <br />
Thekkady in India’s largest wildlife sanctuary is a dream destination for any tourist visiting India . The 120 years old 'Surki' dam built across Peryiar, Poorna in Vedic parlance, is a major tourist attraction. This sanctuary is spread over an area of 777 Sq.Kms, surrounded by an artificial lake over an area of 25 Sq.Kms. The Country's sole Tiger reserve, Thekkady, with its bountiful treasures of tropical flora and fauna is the ultimate reservoir of many an endangered species and a rich tribal culture. Thekkady is a pleasant heaven on earth for those who love nature in its wild manifestations.<br />
On arrival at Thekkady, check into hotel. Rest of the day free at leisure. Overnight at hotel in Thekkady.</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> Thekkady - Houseboat - Alleppey
								</p>
								<p class="aj">Morning after breakfast check out from hotel & process to Alleppey.<br />
Alleppey or Alappuzha is the Venice of the East; It is famous for its boat races, backwater holidays, beaches, marine products and coir industry. Alappuzha beach is a popular picnic spot. The pier, which extends into the sea here, is over 137 years old. Entertainment facilities at the Vijaya Beach Park add to the attraction of the beach. There is also an old lighthouse nearby which is greatly fascinating to visitors.<br />
Enjoy the magic of backwater by going on a Houseboat (Kettuvallam) cruise across the backwaters. Houseboat cruise is the best way to explore the beauty of backwaters Rest of the day at leisure on the House Boat. Enjoy your evening on the sundeck away from polluted cities and maddening crowd. Rest of the day free at leisure. Overnight stay at House Boat.</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> Alleppey - Kovalam (180 Km-5 hrs)
								</p>
								<p class="aj">Morning after breakfast check out from hotel and transfer you to Kovalam.<br />
Kovalam is an internationally renowned beach with three adjacent crescent beaches. It has been a favorite haunt of tourists, Sunbathing, swimming, herbal body toning massages, special cultural programmers and catamaran cruising are some of them. The tropical sun acts so fast that one can see the faint blush of coppery tan on the skin in a matter of minutes. Life on the beach begins late in the day and carries on well into the night. The beach complex includes a string of budget cottages, Ayurvedic health resorts, and convention facilities, shopping zones, swimming pools, Yoga and Ayurvedic massage centres.<br />
On arrival at Kovalam check into Hotel. Rest of the day at leisure on the beach at Kovalam enjoy the scene of Arabian waves embracing virgin sands in Kerala -Gods own country. Rest of the day free at leisure. Overnight stay at Kovalam.</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 7:</b> Kovalam - Trivendrum - Kovalam
								</p>
								<p class="aj">Morning after breakfast we take you for a day sightseeing of Trivandrum.<br />
Trivandrum is an ancient city with tradition dating back to 1000 BC. Thiruvananthapuram became the capital of Raja of Travancore in 1750. The name is derived from 'Tiru Ananta Puram', the abode of the Sacred serpent Ananta, upon whose coils Vishnu lies in the main temple.<br />
It is a peaceful attractive city built across seven hills; the city's old quarter clusters around the temple, while along the busy Mahatma Gamdhi Road are colonial mansions, churches and modern high-rises. Thiruvananthapuram had managed to retain some of the ambience characteristics of Kerala such as red tiled roofs, narrow winding lanes and intimate corner cafes.<br />
Visit: The Napier Museum, Kuthiramalika Museum, Sri Padmanabha Temple afternoon go to the beach for relaxation. Return back to the hotel and rest of the day free at lesuire. Overnight stay at Hotel, Kovalam.</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 8:</b> Kovalam - Trivandrum (30 kms-1 hrs)
								</p>
								<p class="aj">After breakfast check out from hotel & Depart as per schedule to the Airport/ Railway station at Trivandrum.</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>Sightseeing</li>
																		<li>Transfers</li>
															</ul>
						<br />
												<p class="large b mb5px dif">Exclusions :</p> <ul><li>Any Airfare, Train fare, Overland Journey which is not mentioned in the Itinerary.</li><li>
Any personal nature items like Laundry, bar bills, table bills, camera fee, tips or any other item.</li><li>
Major Meals i.e. Lunch & Dinner</li><li>
Any Medical/rescue evacuation due to mishaps.</li><li>
Optional Activities mentioned in the itinerary</li><li>
Any other things that is not included in the “Package Cost Includes” Column.Note:</li><li>
Any changes in Govt. taxes, Hotel Tariff, etc will be intimated before confirming the Package.</li><li>
Cost incidental to any change in the itinerary/ stay on account of flight cancellation due to bad weather, ill health, roadblocks and/or any factors beyond control.</li><li>
Government Service tax @ 3.09 Extra</li><li>
Every passenger is traveling on his own responsibility. The company will not be responsible for any loss of luggage or any accidents. We are not responsible for theft or damage to your luggage.</li><li>
Also note that Video & Audio systems are prohibited in commercial vehicles as per law and we do not guarantee for it always.</li></ul><br />
											
						<p class="large b mb5px dif">Terms &amp; Conditions :</p>~^#^~~^#^~<p>Tour Terms and Conditions Per person rates (Rs) - Applicable on 2/3 persons staying together sharing the same room Package rates are subject to change without prior notice Meal plan: EP- accommodation only, CP-accommodation with breakfast, MAP- accommodation with breakfast, lunch or dinner, AP-accommodation with breakfast, lunch &amp; dinner The packages can not be combined with any other offer. The above package is not valid during national holidays, festivals &amp; long weekends 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 Package does not includes Meals not mentioned in the itinerary. Package does not include entry fees to monuments and places anything not mentioned in the package includes. Porte rage at hotels and airports, tips, insurance, laundry, liquors, wine, mineral water, telephone charges all items of personal nature. Any cost arising due to natural calamities like landslides, roadblocks, etc. (to be borne by the clients directly on the spot). Any increase in taxes or fuel leading to an increase in surface transportation &amp; land arrangements, which may come into effect prior to departure. 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. PLEASE NOTE STANDARD CHECK IN TIME IS 1400 HRS &amp; CHECK OUT TIME IS 0900 HRS. 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 CUSTOMER&#39;S OPTION TO MAKE PAYMENTS THROUGH DEBIT CLEARING Particulars Details Company Name CHATURVEDI TRAVELS &amp; TOURS Beneficiary Name CHATURVEDI TRAVELS &amp; TOURS Beneficiary&#39;s Office Address 29, WHITE HOUSE, CITY CENTER , GWALIOR 474001 Beneficiary&#39;s Bank Name ICICI BANK LIMITED Beneficiary&#39;s Bank Address CITY CENTER , GWALIOR 474001 Beneficiary&#39;s Bank A/c No. 019705004795 IFSC Code of the bank branch of the Beneficiary - For RTGS Transfer ICIC0000197 IFSC Code of the bank branch of the Beneficiary - For NEFT Transfer ICIC0000197 PAN NUMBER AFIPC8313B Type of Bank A/c ( Current A/c / Saving A/c or Cash Credit A/c) Current A/c Certified that the particulars furnished above are correct as per our records. 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. Our rates are based on the prevailing rates as negotiated by us with the hotels. 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 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. 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. Reservation Policy: 1. Confirmation of Hotel Rooms / House boat is subject to the availability. 2. 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. Cancellation Policy:- 1. Cancellation of the tour packages IS NON REFUNDABLE / Hotel Booking / Transportation or Non Utilization of the same: 100 % Retention... Terms &amp; Conditions:- 1. The above itinerary is suggested Tour Plan. The Company is responsible for only those services which are charged from the guest. 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. 2. Check in and Check out Timing of the Hotel will be according to the timing of the respective Hotels. 3. Company is not responsible for compensating any loss or additional cost incurred by the guest while taking the tour. 4. Company is not responsible, nor liable for any damage, loss or injury caused to any passenger while taking the tour. 5. Dollar rates are applicable only to foreign nationals &amp; Indians possessing foreign passports, while the INR package rates will be applicable to Indian nationals 6. All the disputes are subject to Gwalior Jurisdiction only. 7. 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="Kerala Backwater Tour 07 Night / 08 Days  - 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="27754"/>
						</form>
						</div>
						
						";i:1;s:80:"Book Kerala Backwater Tour 07 Night / 08 Days  - 7 Nights / 8 Days Tour Packages";i:2;s:171:"book kerala backwater tour 07 night / 08 days  - 7 nights / 8 days tour packages, forts and palaces tour packages, kochi, kovalam, thekkady, alleppey, munnar tour packages";i:3;s:231:"Book Kerala Backwater Tour 07 Night / 08 Days  - 7 Nights / 8 Days tour packages from Chaturvedi Travels and Tours - Get attractive 7 Nights / 8 Days Forts and Palaces  tour packages for  Kochi, Kovalam, Thekkady, Alleppey, Munnar.";i:4;s:1479:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Kochi, Kovalam, Thekkady, Alleppey, Munnar"        
		                 },
		      "description": "Any Airfare, Train fare, Overland Journey which is not mentioned in the Itinerary.
Any personal nature items like Laundry, bar bills, table bills, camera fee, tips or any other item.
Major Meals i.e. Lunch & Dinner
Any Medical/rescue evacuation due to mishaps.
Optional Activities mentioned in the itinerary
Any other things that is not included in the “Package Cost Includes” Column.<b><b>Note:
Any changes in Govt. taxes, Hotel Tariff, etc will be intimated before confirming the Package.
Cost incidental to any change in the itinerary/ stay on account of flight cancellation due to bad weather, ill health, roadblocks and/or any factors beyond control.
Government Service tax @ 3.09 Extra
Every passenger is traveling on his own responsibility. The company will not be responsible for any loss of luggage or any accidents. We are not responsible for theft or damage to your luggage.
Also note that Video & Audio systems are prohibited in commercial vehicles as per law and we do not guarantee for it always.",
		      "name": "Kerala Backwater Tour 07 Night / 08 Days ",
		      "telephone": "+91-9826355115"
		    }
		    </script>
			";i:5;N;}