a:6:{i:0;s:11449:"				<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.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>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.highspiritadventures.co.in/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="71747"/>
						</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/129360.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_15/445618/129360.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 Thiksey Monastery 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 explore displays 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 overseeing Leh, it offers spectacular 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 monastery stands about a kilometre from your camp. This beautiful monastery houses a two storey statue 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 manyhand written 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 fascinating facades of this institution. The monastery dates back to the 13th century. It was established under the patronage of King Senge Namygal. 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.highspiritadventures.co.in/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="71747"/>
						</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:143:"book 4 days tutc chamba luxury camp thiksey ladakh tour - 3 nights / 4 days tour packages, hill station tour packages, leh ladakh tour packages";i:3;s:197:"Book 4 Days TUTC Chamba Luxury Camp Thiksey Ladakh Tour - 3 Nights / 4 Days tour packages from High Spirit Adventures - Get attractive 3 Nights / 4 Days Hill Station  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-8629029169"
		    }
		    </script>
			";i:5;N;}