a:6:{i:0;s:11016:"				<div class="h1"><h1>Georgia Tour Packages</h1></div>
				<p class="breadcrumb ar uu small"><a href="https://www.avanitravels.net/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="https://www.avanitravels.net/tour-packages.htm" title="Tour Packages">Tour Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>Georgia Tour Packages</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">Tbilisi</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="https://www.avanitravels.net/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Georgia Tour Packages - 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="95504"/>
						</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_10/277951/162273.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_10/277951/162273.jpg"  width="150" height="150"    alt="Georgia Tour Packages" title="Georgia Tour Packages" /></a></p></div></li>
															</ul>
						</div>
						</td>
											</tr>
					</table>
					</div>
					<br />
					
					Ancient history, unique culture and as yet little known for the tourist country - these factors make the travel to Georgia, especially exciting and memorable. Georgia is located in the central part of the Caucasus, one of the most significant region in the world. It is located at the crossroads of Europe and Asia, where traditionally crossed western and eastern civilizations, which unusually combined with local traditions that gave Georgia the name of the country's oldest non-recurring history, culture and civilization throughout the world.<br />
<br />
Return Airfare in Economy class Ex Delhi (seats and fare subject to availability) Accommodation for 5 nights on twin share basis.<br />
A/C transportation on private basis.<br />
English speaking guide as per itinerary.<br />
Meals as mentioned in the program<br />
Entrance fees as per itinerary.<br />
1 bottle of mineral water (0.5l) per person per day.<br />
Georgia tourist visa fees(visa subject to approval)<br />
Travel insuranceService tax @9% on total billing.<br />
Portage (1 USD per luggage)<br />
Alcoholic beverages<br />
All other services not mentioned above.<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> Airport(Tbilisi) - Tbilisi
								</p>
								<p class="aj">Arrive in Tbilisi. Meet at the airport and transfer to the hotel.<br />
Overnight at a hotel in Tbilisi.</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> Tbilisi
								</p>
								<p class="aj">Today we will explore the capital of Georgia, Tbilisi. Wonder in the old districts of the city which are structured like terraces, as well as take a walk in the narrow streets to enjoy colorful houses, patterned balconies and wonderful samples of modern architecture. We will start the tour from Metekhi church (13th century) facing the magnificent views over old Tbilisi. A stroll along winding little streets takes us to the main sights of the city. Afterwards take cable cars up to the ancient Narikala fortress (4th century) to enjoy the panoramic views of the whole town. Visit Tbilisi Mall for shopping. Overnight at a hotel in Tbilisi.</p>					
									<p><b>Meals : </b> Breakfast</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> Today we will explore the capital of Georgia, Tbilisi. Wonder in the old districts of the city which
								</p>
								<p class="aj">Today we travel in Kakheti region famous for being wine making area, as well as associated with welcoming hospitality. Here we can see both snowy Caucasus mountains and fertile valleys. Firstly we visit 18th century beautiful, small town of Sighnaghi which will impress us with its old fence and small houses with tile roofs and decorated balconies. From here we can see the picturesque views of Alazani valley and Great Caucasus mountains. Later visit traditional Georgian wine cellar, which is a kind of ethnographic museum, where we can find Georgian wine cellar characteristic features, as well as ancient things. Here we taste wine made by traditional way in Kvevri (clay vessel). This method of wine making is inscribed in UNESCO intangible heritage list. Here you will have a lunch also with homemade food (including Georgian Shashlik "Mtsvadi") and then continue to visit the estate and the beautiful garden of Georgian Dukes from the 19th century in Tsinandali. Afterwards drive back to Tbilisi. Overnight at a hotel in Tbilisi.</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> Tbilisi-Mtskheta-Gori-Uplistsikhe-Tbilisi
								</p>
								<p class="aj">Today we will visit the ancient capital and religious centre of Georgia Mtskheta (3000 years old) and see its historical places: Jvari church and impressive Svetitskhoveli Cathedral where the Robe of Christ is buried. Both Jvari and Svetitskhoveli are UNESCO World Heritage Sites. Then drive to visit the town of Gori and its historical place: Uplistsikhe Cave Town (1st millennium BC). Uplistsikhe is the place where the Great Silk Road used to pass. This is an old and interesting complex with dwelling quarters, wine-cellars, bakeries, a three-nave basilica church hewn out in rock and even an antic theatre. Afterwards return to Tbilisi. Overnight at a hotel in Tbilisi.</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> Tbilisi-Gudauri-Tbilisi
								</p>
								<p class="aj">In the morning we drive to visit Ananuri architectural complex (17th century), the two churches and the fortress overlook the Zhinvali water reservoir. The carvings on the churches are one of the best samples of the Georgian art. Then continue to North, towards Caucasus Mountains. Arrive in Gudauri ski resort and enjoy some free time to see beautiful Caucasus Mountains and snow (if available). Afterwards retun to Tbilisi.Overnight at a hotel in Tbilisi.</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> Tbilisi-Airport(Tbilisi)
								</p>
								<p class="aj">Transfer to the airport and 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">Exclusions :</p> <ul><li>Service tax @9% on total billing.</li><li>
Portage (1 USD per luggage)</li><li>
Alcoholic beverages</li><li>
All other services not mentioned above.</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="https://www.avanitravels.net/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Georgia Tour Packages - 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="95504"/>
						</form>
						</div>
						
						";i:1;s:60:"Book Georgia Tour Packages - 5 Nights / 6 Days Tour Packages";i:2;s:107:"book georgia tour packages - 5 nights / 6 days tour packages, heritage tour packages, tbilisi tour packages";i:3;s:137:"Avani Travels offers Georgia Tour Packages - 5 Nights / 6 Days tour package, budget Heritage tour packages for Tbilisi at exciting price.";i:4;s:1476:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Tbilisi"        
		                 },
		      "description": "Ancient history, unique culture and as yet little known for the tourist country - these factors make the travel to Georgia, especially exciting and memorable. Georgia is located in the central part of the Caucasus, one of the most significant region in the world. It is located at the crossroads of Europe and Asia, where traditionally crossed western and eastern civilizations, which unusually combined with local traditions that gave Georgia the name of the country's oldest non-recurring history, culture and civilization throughout the world.

Return Airfare in Economy class Ex Delhi (seats and fare subject to availability) Accommodation for 5 nights on twin share basis.
A/C transportation on private basis.
English speaking guide as per itinerary.
Meals as mentioned in the program
Entrance fees as per itinerary.
1 bottle of mineral water (0.5l) per person per day.
Georgia tourist visa fees(visa subject to approval)
Travel insuranceService tax @9% on total billing.
Portage (1 USD per luggage)
Alcoholic beverages
All other services not mentioned above.",
		      "name": "Georgia Tour Packages",
		      "telephone": "+91-9970119645"
		    }
		    </script>
			";i:5;N;}