a:6:{i:0;s:13544:"				<div class="h1"><h1>Tour Kingdom of Bhutan</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.avashshergilltravel.in/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.avashshergilltravel.in/tour-packages.htm" title="Tour Packages">Tour Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>Tour Kingdom of Bhutan</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">
						5 Nights / 6 Days 
						</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Destination Covered </td>
						<td class="p5px pl0px vat">Thimphu, Paro</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.avashshergilltravel.in/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Tour Kingdom of Bhutan - 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="51213"/>
						</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/357911/100934.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_12/357911/100934.jpg"  width="150" height="150"    alt="Tour Kingdom of Bhutan" title="Tour Kingdom of Bhutan" /></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 Paro - Thimphu
								</p>
								<p class="aj">In the morning, board your flight to Paro. On arrival, you will meet our representative who will transfer you to your hotel in Thimphu.<br />
<br />
Thimphu: Capital to the tiny Himalayan kingdom of Bhutan, Thimphu is one of the smallest capitals in the world. For most part of its history, Bhutan has tried consciously to save its culture from the blunt influences of the western world. It is not that modernity has not reached this region, but they are being introduced in a phased and balanced manner that is unheard of at any place in the world. All these make Thimphu and other parts of the country a unique destination.<br />
<br />
Upon arrival, proceed for check-in at your hotel. After taking rest for some time visit :-<br />
<br />
Trashi Chhoe Dzong: Also called Fortress of the Glorious Religion situated on north of the city on west bank of the Wang Chhu. The Dzong was the site of the lavish formal coronation of the fifth King in 2008 and hosts the city's biggest annual bash, the colorful tsechu festivities. Opening times 5-6PM Mon-Fri, 8AM-6PM Sat & Sun.<br />
<br />
National Library: housing an extensive collection of priceless Buddhist manuscripts; the Institute for Zorig Chusum (commonly known as the Painting School) where students undergo a 6-year training course in Bhutan 13 traditional arts and crafts.<br />
<br />
Spend rest of the evening at leisure enjoy the warm dinner before you go to bed.</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> Sightseeing in Thimphu
								</p>
								<p class="aj">After breakfast, proceed for sight-seeing.<br />
<br />
Buddha View Point: Another place from where you can get a good overview of the Thimphu valley is from the Buddha point (Kuensel Phodrang). It is again a short drive from the town. You can pay your obeisance and offer prayers to the Buddha, the largest statue in the country and then walk around and take a glimpse of the valley.<br />
<br />
Simtokha Dzong: Monastery was built in 1627 by Zhabdrung NgawangNamgyal. It houses the Institute for Language and Cultural Studies. The carvings behind the prayer wheel in the courtyard are a major attraction of this temple.<br />
<br />
Memorial Chorten: also known as the Thimphu Chorten, is a chorten in Thimphu, Bhutan, located on Doeboom Lam in the southern-central part of the city near the main roundabout and Indian military hospital.<br />
<br />
Textile Museum: is worth a visit to get to know the living national art of weaving. Exhibitions introduce the major weaving techniques, styles of local dress and textiles made by women and men.<br />
<br />
Takin Mini Zoo: The Takin is the national animal of Bhutan, and looks like a cross between a cow and a goat. Legend has it that the animal was created by the great Buddhist yogi, Drupa Kunley, and it can be found only in Bhutan and nearby areas.<br />
<br />
In the evening, return to your hotel and rest overnight after a delicious delicious dinner.</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> Thimphu - Punakha - Thimphu (75 kilometres/2hrs one way)
								</p>
								<p class="aj">After breakfast today, proceed to Punakha for a day excursion.<br />
<br />
Dochula view point stop: The first stop after leaving Thimphu is Dochula pass at 3100m. Only about 45 minutes from Thimphu, it offers visitors their first glimpse of the Himalayan range. The road to Punakha branches left and curls its way down to the relatively low lands of the Punakha valley. As you are about to reach Punakha visit :-<br />
<br />
Chimi Lhakhang (Fertility Temple): Situated on a hillock in the center of the valley is the yellow-roofed Chimi Lhakhang, built in 1499 by the cousin of Lama Drukpa Kunley in his honour after he subdued the demoness of the nearby Dochu La with his 'magic thunderbolt of wisdom'. A wooden effigy of the lama's thunderbolt is preserved in the lhakhang, and childless women go to the temple to receive a blessing or empowerment from the saint. It's a pleasant 20 minute walk across fields from the road to the temple. It crosses an archery ground before making a short climb to the temple.<br />
<br />
Punakha Dzong: Majestically standing on an island between the confluence of the Pho Chhu and Mo Chhu rivers, the city's Dzong is one of the most photogenic of all Bhutan's ancient fortresses, and you will see pictures of it hanging in hotels and restaurants throughout the country. The Dzong is joined to the mainland by an arched wooden bridge and contains many precious relics from the days when successive kings reined the kingdom from this valley.<br />
<br />
You can also do river rafting on your own expense.<br />
<br />
In the evening, return to your hotel in Thimphu for 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> Thimphu - Paro (70 Kilometres in 1.5 hours)
								</p>
								<p class="aj">After breakfast this morning check-out of the hotel and proceed to Paro. Upon arrival at Paro, check into hotel and later go for sight-seeing.<br />
<br />
Drukgyal Ruin Dzong: This was a fortress and Buddhist monastery, now in ruins, located in the upper part of Paro valley. The Dzong was built by Tenzin Drukdra in 1649 at the behest of Shabdrung NgawangNamgyal to commemorate victory over an invasion from Tibet. In the early 1950s Drukgyal Dzong was almost completely destroyed by fire.<br />
<br />
Kichu Lhakhang: Built in 659 by the Tibetan King Songtsen Gampo. It is believed to be one of the 108 temples built to subdue a demoness residing in the Himalayas and is also one of the oldest Temples in Bhutan.<br />
<br />
National Museum of Paro: Housed inside the revamped Ta-Dzong building in Paro, National Museum of Bhutan is a cultural museum that has put on display the antique items gathered from different parts of the country.<br />
<br />
Rinpung Dzong: is a fortress-monastery that serves both as a civil administrative center and as a monastic home for a community of monks. Most Dzong's were built in the mid-1600s to protect the inhabited valleys from invasion by Tibet. The Paro Dzong was started in 1644 on the order of Shabdrung Ngawang Namgyal, the unifier of modern day Bhutan. Unlike most of the Dzong in Bhutan, it survived the massive 1897 earthquake mostly unscathed, though it was damaged by fire in 1907.<br />
<br />
In the evening, return to your hotel and rest overnight after a delicious dinner.</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> Sightseeing in Paro
								</p>
								<p class="aj">Morning after breakfast, hike up the hill to visit famous Tiger's nest temple.<br />
<br />
Taksang Monastery (Tiger's Nest Temple): The most famous of Bhutanese monasteries. It is said that Guru Rinpoche arrived here on the back of a tigress and meditated at this monastery hence it is called Tiger's Nest. Precariously perched on the edge of 1,200 meter cliff, this monastery creates an impressive sight, and is the unofficial symbol of Bhutan. It is about 2 hour up-hill hike or ride a horse from the parking lot to the monastery. If the full hike sounds a bit tough you can hike for 1 hour to the cafetaria, a wooden tea-house restaurant which offers a good view of the monastery. After visit to the monastery spend the evening at leisure in Paro town for some souvenir shopping and get a feel of local Paro town.<br />
<br />
In the evening, return to your hotel, enjoy your dinner and a comfortable 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 6:</b> Departure
								</p>
								<p class="aj">Departure</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>
															</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.avashshergilltravel.in/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Tour Kingdom of Bhutan - 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="51213"/>
						</form>
						</div>
						
						";i:1;s:61:"Book Tour Kingdom of Bhutan - 5 Nights / 6 Days Tour Packages";i:2;s:123:"book tour kingdom of bhutan - 5 nights / 6 days tour packages, forts and palaces tour packages, thimphu, paro tour packages";i:3;s:161:"Avash Shergill Travel offers Tour Kingdom of Bhutan - 5 Nights / 6 Days tour package, budget Forts and Palaces tour packages for Thimphu, Paro at exciting price.";i:4;s:406:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Thimphu, Paro"        
		                 },
		      "description": "",
		      "name": "Tour Kingdom of Bhutan",
		      "telephone": "91-8699559635"
		    }
		    </script>
			";i:5;N;}