public final Date convertNepaliToGregorianDate(final NepaliDate nepaliDate) {

			int nepaliMonthToCheck = nepaliDate.getMonthNumber();
			int nepaliYearToCheck = nepaliDate.getYear();
			int gregorianDayOfYear = 0; //we will add all the days that went by since the 1st. 
			//January and then we can get the gregorian Date
			int gregorianYear;
			GregorianCalendar gregorianCalendar = new GregorianCalendar(); // = GregorianCalendar.getInstance();


			//get the correct year
			if (nepaliMonthToCheck > 9
					|| (nepaliMonthToCheck == 9 && nepaliDate.getDay() >= NEPALI_CALENDAR_DATA.get(nepaliYearToCheck).get(0))) {
				gregorianYear = nepaliDate.getYear() - 56;
			} else {
				gregorianYear = nepaliDate.getYear() - 57;
			}

			//first we add the amount of days in the actual Nepali month as the day of year in the gregorian one
			//because at least this days are gone since the 1st. Jan. 
			if (nepaliDate.getMonthNumber() != 9) {
				gregorianDayOfYear =  nepaliDate.getDay();
				nepaliMonthToCheck--;
			}

			//now we loop throw all nepali month and add the amount of days to gregorianDayOfYear 
			//we do this till we reach Paush (9th month). 1st. January always falls in this month  
			while (nepaliMonthToCheck != 9) {

				if (nepaliMonthToCheck <= 0) {
					nepaliMonthToCheck = 12;
					nepaliYearToCheck--;

				}				

				gregorianDayOfYear += NEPALI_CALENDAR_DATA.get(nepaliYearToCheck).get(nepaliMonthToCheck);
				nepaliMonthToCheck--;

			}

			//If the date that has to be converted is in Paush (month no. 9) we have to do some other calculation
			if (nepaliDate.getMonthNumber() == 9) {

				//add the days that are passed since the first day of Paush and substract the amount of days that lie between
				//1st. Jan and 1st Paush
				gregorianDayOfYear += nepaliDate.getDay() - NEPALI_CALENDAR_DATA.get(nepaliDate.getYear()).get(0) + 1;


				//for the first days of Paush we are now in negative values, because in the end of the gregorian year we substract
				//365 / 366 days (P.S. remember math in school + - gives -)
				if (gregorianDayOfYear <= 0) {
					if (gregorianCalendar.isLeapYear(gregorianYear)) {
						gregorianDayOfYear = 366 + gregorianDayOfYear;
					} else {
						gregorianDayOfYear = 365 + gregorianDayOfYear;

					}
				}


			} else {
				gregorianDayOfYear += NEPALI_CALENDAR_DATA.get(nepaliYearToCheck).get(9) 
						- NEPALI_CALENDAR_DATA.get(nepaliYearToCheck).get(0) + 1;
			}


			gregorianCalendar.set(GregorianCalendar.YEAR, gregorianYear);			
			gregorianCalendar.set(GregorianCalendar.HOUR_OF_DAY, 0);
			gregorianCalendar.set(GregorianCalendar.MINUTE, 0);
			gregorianCalendar.set(GregorianCalendar.SECOND, 0);
			gregorianCalendar.set(GregorianCalendar.MILLISECOND, 0);
			gregorianCalendar.set(GregorianCalendar.DAY_OF_YEAR, gregorianDayOfYear);



			return gregorianCalendar.getTime();

		}