a:6:{i:0;s:11418:"				<div class="h1"><h1>4 Days TUTC Chamba Luxury Camp Thiksey Ladakh Tour</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.kashmirhilltours.com/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.kashmirhilltours.com/tour-packages.htm" title="Tour Packages">Tour Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>4 Days TUTC Chamba Luxury Camp Thiksey Ladakh 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">
						3 Nights / 4 Days 
						</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Destination Covered </td>
						<td class="p5px pl0px vat">Leh Ladakh</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.kashmirhilltours.com/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="4 Days TUTC Chamba Luxury Camp Thiksey Ladakh 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="109347"/>
						</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_12/356661/180843.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_12/356661/180843.jpg"  width="150" height="150"    alt="4 Days TUTC Chamba Luxury Camp Thiksey Ladakh Tour" title="4 Days TUTC Chamba Luxury Camp Thiksey Ladakh Tour" /></a></p></div></li>
															</ul>
						</div>
						</td>
											</tr>
					</table>
					</div>
					<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 at Leh- Check into the Chamba Camp, Thiksey
								</p>
								<p class="aj">The Ladakh Camping Trip starts with your arrival this morning, into Leh. Meet our representative at the airport. Get assistance for transfer to your residence, The Chamba Camp, Thiksey. As you drive to your destination soak in the serene views of the mountains. At the camp you will be welcomed according to the traditional rituals of Ladakh. Check-in to your luxury tent after your check-in formalities are completed by our Guest Relations hostess.<br />
<br />
There are no scheduled activities for today. It is as medically mandated that you relax and undergo minimal exertion. On the day of arrival you need to be able to acclimatize to the rare oxygen levels at this high-altitude. Explore the camp grounds. The camp enjoys scenic location. The ThikseyMonastery can be seen looming in the background.<br />
<br />
In the evening, anexcursion specialist at Chamba Camp, Thiksey will meet with you to discuss the itinerary. You will be advisedand helpedto plan your excursions and make changes if required, to suit your interests, choices and leisure. Enjoy a delicious traditional dinner and take rest in your comfy tent.</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> Explore the treasures of Leh
								</p>
								<p class="aj">Start the day late. There are no plans for the morning. Enjoy a leisurely breakfast and walk around the camp site.Feel blessed in the aura of unmatched beauty and serenity, making you unwind and relax. Or, if you are an early riser, set out on our optional bird watching sojourn. Our camp naturalist accompanies you.Spot and identify a variety of birds of the Trans Himalayan region. This afternoon following lunch, proceed on a tour of Leh. The capital town of Ladakh is located approximately 19 kilometres (1 hr) from your camp. The sightseeing tour comprises popular landmarks. Start the tour with the magnificent Leh Palace. It was built by King Sengge Namgyal in the 17th century. the palace has nine storeys', some of which are in ruins. Here you can exploredisplays of beautiful Ladakhi architecture. From the palace continue by foot to the LAMO (Ladakh Arts & Media Organisation) Centre. The short walking tour passes through some enchanting old houses. The LAMO centre is housed in one of the most important heritage houses, theMunshi (Togoche) House.It is situated at the foot of the Leh Palace. Following a tour of the house, attend a short presentation by a Ladakhi scholar on the architectural heritage of the old city. Enjoy a panoramic view from the terrace of the Munshi House as you sip the special Ladakhi tea with light snacks.<br />
<br />
The Heritage exploration tour moves to the bazaar. Walk through the bustling bazaar where you can view the traditional handicrafts and handlooms. Buy some souvenirs for your hoe reminding of the old City. The tour concludes at the Shanti Stupa.Perched upon a great location overseeingLeh, it offersspectacular views of the stone strewn landscape. Watch the setting sun, as you relish a hot cup of traditional Ladakhi butter tea. Return to your camp for a delicious dinner and an overnight stay.</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> Explore Thiksey and Hemis Monastery
								</p>
								<p class="aj">Get up and ready for an early morning. Sip warm tea or coffee, following which you visit to the Thiksey monastery. The serene monasterystands about a kilometre from your camp. This beautiful monastery houses a two storeystatue of the Maitreya Buddha seated on a lotus. Pay regards. The monastery is blessed with a remarkable view of the valley. At the monastery, you will have the opportunity to participate in the Morning Prayer ceremony at sunrise. Continue on a guided tour of the monastery.Visit the beautiful prayer room which has manyhandwritten and painted books. Also visit the temple dedicated to goddess Tara with her 21 images placed in glass-covered wooden shelves. Pay your regards to the small shrines devoted to the guardian divinities including Cham-Sing, the protector deity of Thiksey.<br />
<br />
Return to the camp for a leisurely breakfast. The rest of the morning is free. You can choose to relax and take in the unspoiled beauty around you. Or take up the opportunity to indulge in our optional cycling trip in the vicinity of the Thiksey village and its surroundings. Or else you could also choose to drive to the Saboo village for a séance session with the Oracle.<br />
<br />
[Note: This optional excursion will be confirmed a day prior subject to the oracle willing to give an audience]<br />
<br />
This afternoon, proceed to the Hemis Monastery. Explore the jewel in the crown of the Drukpa lineage. The Hemis Monastery is the oldest monastic institution of Ladakh, situated about 20 kilometres (1 hr) from Thiksey. Built in a secluded valley, the monastery belongs to the Drukpa School or the Dragon Order of Mahayana Buddhism. Explore the many fascinatingfacades of this institution. The monastery dates back to the 13th century. It was established under the patronage of King SengeNamygal. Here young lamas are taught literature, history, philosophy, yoga and tantra. The monastery halls are adorned with beautiful statues and mural paintings. After a well spent day return to the camp for dinner and overnight stay.</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> Departure Leh
								</p>
								<p class="aj">Start the day with a leisurely breakfast. Today you bid farewell to the breathtaking mountainous terrain of Ladakh. Get an assisted transfer to the Leh airport.Board your flight to your onward destination wit cherished memories of your holiday.</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>Sightseeing</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.kashmirhilltours.com/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="4 Days TUTC Chamba Luxury Camp Thiksey Ladakh 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="109347"/>
						</form>
						</div>
						
						";i:1;s:89:"Book 4 Days TUTC Chamba Luxury Camp Thiksey Ladakh Tour - 3 Nights / 4 Days Tour Packages";i:2;s:138:"book 4 days tutc chamba luxury camp thiksey ladakh tour - 3 nights / 4 days tour packages, camping tour packages, leh ladakh tour packages";i:3;s:196:"Book 4 Days TUTC Chamba Luxury Camp Thiksey Ladakh Tour - 3 Nights / 4 Days tour packages from Blue Hills Tours & Travels - Get attractive 3 Nights / 4 Days Camping  tour packages for  Leh Ladakh.";i:4;s:432:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Leh Ladakh"        
		                 },
		      "description": "",
		      "name": "4 Days TUTC Chamba Luxury Camp Thiksey Ladakh Tour",
		      "telephone": "+91-9469000836"
		    }
		    </script>
			";i:5;N;}