Index: src/org/mifos/application/holiday/business/HolidayBO.hbm.xml
===================================================================
--- src/org/mifos/application/holiday/business/HolidayBO.hbm.xml	(revision 12248)
+++ src/org/mifos/application/holiday/business/HolidayBO.hbm.xml	(working copy)
@@ -32,13 +32,20 @@
                        and lvl.localeId = :LOCALE_ID
                        and holidayBO.repaymentRuleId = repaymentRule.id
 		               and holidayBO.holidayPK.holidayFromDate >= :START_OF_YEAR
-                       and holidayBO.holidayPK.holidayFromDate <= :END_OF_YEAR
+                       and holidayBO.holidayPK.holidayFromDate <= :END_OF_YEAR
+                       order by holidayBO.holidayPK.holidayFromDate
    	       ]]>
 	</query>
 	<query name="holiday.getHoildaysByFlag">
 			<![CDATA[from org.mifos.application.holiday.business.HolidayBO holidayBO
 	                  where holidayBO.holidayChangesAppliedFlag = :FLAG
 			]]>
+	</query>
+	
+	<!-- Select distinct years(added for defect 1354)  -->
+	<query name="holiday.getDistinctYears">
+			<![CDATA[select distinct(holidayBO.holidayThruDate)
+					from org.mifos.application.holiday.business.HolidayBO holidayBO
+   	       ]]>
 	</query>
-
 </hibernate-mapping>
\ No newline at end of file
Index: src/org/mifos/application/holiday/business/service/HolidayBusinessService.java
===================================================================
--- src/org/mifos/application/holiday/business/service/HolidayBusinessService.java	(revision 12248)
+++ src/org/mifos/application/holiday/business/service/HolidayBusinessService.java	(working copy)
@@ -66,4 +66,14 @@
 			throw new ServiceException(pe);
 		}
 	}
+	
+	// for defect 1354 [Start]
+	public List<HolidayBO> 	getDistinctYears() throws ServiceException {
+		try {
+			return new HolidayPersistence().getDistinctYears();
+		} catch (PersistenceException pe) {
+			throw new ServiceException(pe);
+		}
+	}
+	// for defect 1354 [End]
 }
Index: src/org/mifos/application/holiday/persistence/HolidayPersistence.java
===================================================================
--- src/org/mifos/application/holiday/persistence/HolidayPersistence.java	(revision 12248)
+++ src/org/mifos/application/holiday/persistence/HolidayPersistence.java	(working copy)
@@ -99,5 +99,12 @@
 					NamedQueryConstants.PRODUCT_VALIDATESTATE, queryParameters);
 		return count;
 	}
-
-}
\ No newline at end of file
+	
+	// for defect 1354 [Start]
+	public List<HolidayBO> getDistinctYears() 
+	throws PersistenceException {		
+		Map<String, Object> parameters = new HashMap<String, Object>();		
+		return executeNamedQuery("holiday.getDistinctYears", parameters);
+	}
+	// for defect 1354 [End]
+}
Index: src/org/mifos/application/holiday/struts/action/HolidayAction.java
===================================================================
--- src/org/mifos/application/holiday/struts/action/HolidayAction.java	(revision 12248)
+++ src/org/mifos/application/holiday/struts/action/HolidayAction.java	(working copy)
@@ -1,7 +1,11 @@
 package org.mifos.application.holiday.struts.action;
 
-import java.util.Calendar;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -78,9 +82,41 @@
 		UserContext userContext = (UserContext) SessionUtils.getAttribute(
 				Constants.USER_CONTEXT_KEY, request.getSession());
 		
-		SessionUtils.setCollectionAttribute(HolidayConstants.HOLIDAYLIST1, getHolidays(Calendar.getInstance().get(Calendar.YEAR), userContext.getLocaleId()),request);
-		SessionUtils.setCollectionAttribute(HolidayConstants.HOLIDAYLIST2, getHolidays(Calendar.getInstance().get(Calendar.YEAR)+1, userContext.getLocaleId()),request);
+		// for defect 1354 [Start]
+		List years = getDistinctYears();
+		Set distinctYears = null; 
+		if(years != null && years.size() != 0)
+		{	
+			List temp = new ArrayList();
+			Iterator iter = years.iterator();
+
+			while (iter.hasNext()) 
+			{				
+				String date = iter.next().toString();
+				date = date.substring(0, 4);
+				temp.add(date);
+			}
+			
+			distinctYears = new HashSet(temp);
+		}
 		
+		int i = 1;
+		if(distinctYears != null && distinctYears.size() != 0)
+		{
+			//int i = 1;
+			Iterator iter = distinctYears.iterator();
+			while (iter.hasNext()) 
+			{
+				String year = (String) iter.next();
+				int intYear = Integer.parseInt(year); 
+				SessionUtils.setCollectionAttribute("holidayList" + i, getHolidays(intYear, userContext.getLocaleId()),request);
+				request.getSession().setAttribute("year" + i, intYear);
+				i++;
+			}			
+		}
+		request.getSession().setAttribute("noOfYears", i-1);
+		// for defect 1354 [End]		
+		
 		return mapping.findForward("view_organizational_holidays");
 	}
 	
@@ -160,11 +196,51 @@
 		UserContext userContext = (UserContext) SessionUtils.getAttribute(
 				Constants.USER_CONTEXT_KEY, request.getSession());
 		
-		SessionUtils.setCollectionAttribute(HolidayConstants.HOLIDAYLIST1, getHolidays(Calendar.getInstance().get(Calendar.YEAR), userContext.getLocaleId()),request);
-		SessionUtils.setCollectionAttribute(HolidayConstants.HOLIDAYLIST2, getHolidays(Calendar.getInstance().get(Calendar.YEAR)+1, userContext.getLocaleId()),request);
+		// for defect 1354 [Start]
+		List years = getDistinctYears();
+		Set distinctYears = null; 
+		if(years != null && years.size() != 0)
+		{	
+			List temp = new ArrayList();
+			Iterator iter = years.iterator();
+
+			while (iter.hasNext()) 
+			{				
+				String date = iter.next().toString();
+				date = date.substring(0, 4);
+				temp.add(date);
+			}
+			
+			distinctYears = new TreeSet(temp);
+		}
+		
+		int i = 1;
+		if(distinctYears != null && distinctYears.size() != 0)
+		{
+			//int i = 1;
+			Iterator iter = distinctYears.iterator();
+			while (iter.hasNext()) 
+			{
+				String year = (String) iter.next();
+				int intYear = Integer.parseInt(year); 
+				SessionUtils.setCollectionAttribute("holidayList" + i, getHolidays(intYear, userContext.getLocaleId()),request);
+				request.getSession().setAttribute("year" + i, intYear);
+				i++;				
+			}			
+		}
+		
+		//SessionUtils.setAttribute("noOfYears", i-1, request);
+		request.getSession().setAttribute("noOfYears", i-1);
+		// for defect 1354 [End]
 				
 		return mapping.findForward(ActionForwards.get_success.toString());
 	}
+	
+	// added for defect 1354
+	private List<HolidayBO> getDistinctYears() throws Exception{
+		List returnValues = getHolidayBizService().getDistinctYears();
+		return returnValues;
+	}
 
 	@TransactionDemarcate(joinToken = true)
 	public ActionForward getEditStates(ActionMapping mapping, ActionForm form,
Index: src/org/mifos/doc-root/application/holiday/jsp/view_organizational_holidays.jsp
===================================================================
--- src/org/mifos/doc-root/application/holiday/jsp/view_organizational_holidays.jsp	(revision 12248)
+++ src/org/mifos/doc-root/application/holiday/jsp/view_organizational_holidays.jsp	(working copy)
@@ -92,48 +92,49 @@
             </tr>    
           </table>
           
-          <c:forEach var="item" begin="1" end="2">
-	        <%pageContext.setAttribute("holidayList", "holidayList" + pageContext.getAttribute("item"));%>
-	        
-            <span class="fontnormalbold">
-			  <mifos:mifoslabel name="holiday.labelHolidaysForYear" bundle="HolidayUIResources"/>
-			  <%=(Calendar.getInstance().get(Calendar.YEAR)+Integer.parseInt(pageContext.getAttribute("item").toString())-1)%>
-    	    </span>
-            <br><br>
-            <table width="98%" border="0" cellpadding="3" cellspacing="0">
-              <tr>
-              <font class="fontnormalRedBold">
-				<html-el:errors	bundle="HolidayUIResources" /> 
-			  </font>
-                <td width="11%" class="drawtablehd">
-               		 <mifos:mifoslabel name="holiday.HolidayFromDate" bundle="HolidayUIResources"/>
-                </td>
-                <td width="11%" class="drawtablehd">
-               		 <mifos:mifoslabel name="holiday.HolidayThruDate" bundle="HolidayUIResources"/>
-                </td>
-                <td width="28%" class="drawtablehd">
-                	<mifos:mifoslabel name="holiday.HolidayName" bundle="HolidayUIResources"/>
-				</td>
-				<td width="50%" class="drawtablehd">
-                	<mifos:mifoslabel name="holiday.HolidayRepaymentRule" bundle="HolidayUIResources"/>
-				</td>
-              </tr>
-              <c:forEach var="holidayItem" items="${session:getFromSession(sessionScope.flowManager,requestScope.currentFlowKey, holidayList)}" >
-	              <tr>
-	                <td width="11%" class="drawtablerow">${holidayItem.holidayPK.holidayFromDate}</td>
-	                <td width="11%" class="drawtablerow">${holidayItem.holidayThruDate}&nbsp;</td>
-	                <td width="28%" class="drawtablerow">${holidayItem.holidayName}</td>
-	                <td width="50%" class="drawtablerow">${holidayItem.repaymentRule}</td>
-	              </tr>
-              </c:forEach>           
-              <tr>
-                <td width="11%" class="drawtablerow">&nbsp;</td>
-                <td width="11%" class="drawtablerow">&nbsp;</td>
-                <td width="28%" class="drawtablerow">&nbsp;</td>
-                <td width="50%" class="drawtablerow">&nbsp;</td>
-              </tr>
-             
-            </table>            
+           <c:forEach var="item" begin="1" end="<%= Integer.parseInt(request.getSession().getAttribute("noOfYears").toString())%>">
+	        <%pageContext.setAttribute("holidayList", "holidayList" + pageContext.getAttribute("item"));%>
+	        
+	        
+            <span class="fontnormalbold">
+			  <mifos:mifoslabel name="holiday.labelHolidaysForYear" bundle="HolidayUIResources"/>
+			  <%= request.getSession().getAttribute("year" + pageContext.getAttribute("item")) %>
+    	    </span>
+            <br><br>
+            <table width="98%" border="0" cellpadding="3" cellspacing="0">
+              <tr>
+              <font class="fontnormalRedBold">
+				<html-el:errors	bundle="HolidayUIResources" /> 
+			  </font>
+                <td width="11%" class="drawtablehd">
+               		 <mifos:mifoslabel name="holiday.HolidayFromDate" bundle="HolidayUIResources"/>
+                </td>
+                <td width="11%" class="drawtablehd">
+               		 <mifos:mifoslabel name="holiday.HolidayThruDate" bundle="HolidayUIResources"/>
+                </td>
+                <td width="28%" class="drawtablehd">
+                	<mifos:mifoslabel name="holiday.HolidayName" bundle="HolidayUIResources"/>
+				</td>
+				<td width="50%" class="drawtablehd">
+                	<mifos:mifoslabel name="holiday.HolidayRepaymentRule" bundle="HolidayUIResources"/>
+				</td>
+              </tr>
+              <c:forEach var="holidayItem" items="${session:getFromSession(sessionScope.flowManager,requestScope.currentFlowKey, holidayList)}" >
+	              <tr>
+	                <td width="11%" class="drawtablerow">${holidayItem.holidayPK.holidayFromDate}</td>
+	                <td width="11%" class="drawtablerow">${holidayItem.holidayThruDate}&nbsp;</td>
+	                <td width="28%" class="drawtablerow">${holidayItem.holidayName}</td>
+	                <td width="50%" class="drawtablerow">${holidayItem.repaymentRule}</td>
+	              </tr>
+              </c:forEach>           
+              <tr>
+                <td width="11%" class="drawtablerow">&nbsp;</td>
+                <td width="11%" class="drawtablerow">&nbsp;</td>
+                <td width="28%" class="drawtablerow">&nbsp;</td>
+                <td width="50%" class="drawtablerow">&nbsp;</td>
+              </tr>
+             
+            </table>            
             </c:forEach>
             <br>
           </td>
Index: test/org/mifos/application/holiday/business/service/TestHolidayBusinessService.java
===================================================================
--- test/org/mifos/application/holiday/business/service/TestHolidayBusinessService.java	(revision 12248)
+++ test/org/mifos/application/holiday/business/service/TestHolidayBusinessService.java	(working copy)
@@ -48,4 +48,11 @@
 		assertNotNull(repaymentRules);
 		assertEquals(3, repaymentRules.size());
 	}
+	
+	// for defect 1354 [Start]
+	public void testGetDistinctYears() throws Exception {
+		List<HolidayBO> distinctYears = new HolidayBusinessService().getDistinctYears();
+		assertNotNull(distinctYears);		
+	}
+	 //  for defect 1354 [End]
 }
Index: test/org/mifos/application/holiday/persistence/TestHolidayPersistence.java
===================================================================
--- test/org/mifos/application/holiday/persistence/TestHolidayPersistence.java	(revision 12248)
+++ test/org/mifos/application/holiday/persistence/TestHolidayPersistence.java	(working copy)
@@ -96,5 +96,11 @@
 		TestObjectFactory.cleanUpHolidays(holidays);
 		holidayEntity = null;
 	}
-
+	
+	// for defect 1354 [Start]
+	public void testGetDistinctYears() throws Exception {
+		List<HolidayBO> distinctYears = new HolidayPersistence().getDistinctYears();
+		assertNotNull(distinctYears);		
+	}
+	// for defect 1354 [End]
 }
Index: test/org/mifos/application/holiday/struts/action/TestHolidayAction.java
===================================================================
--- test/org/mifos/application/holiday/struts/action/TestHolidayAction.java	(revision 12248)
+++ test/org/mifos/application/holiday/struts/action/TestHolidayAction.java	(working copy)
@@ -1,8 +1,5 @@
 package org.mifos.application.holiday.struts.action;
 
-import java.util.List;
-
-import org.mifos.application.holiday.business.HolidayBO;
 import org.mifos.application.holiday.util.resources.HolidayConstants;
 import org.mifos.application.util.helpers.ActionForwards;
 import org.mifos.framework.MifosMockStrutsTestCase;
@@ -51,15 +48,8 @@
 		addRequestParameter(Constants.CURRENTFLOWKEY, flowKey);
 		actionPerform();
 		verifyNoActionErrors();
-		verifyForward(ActionForwards.get_success.toString());
-		assertNotNull(SessionUtils.getAttribute(HolidayConstants.HOLIDAYLIST1,
-				request));
-		assertNotNull(SessionUtils.getAttribute(HolidayConstants.HOLIDAYLIST2,
-				request));
-		assertEquals(0, ((List<HolidayBO>) SessionUtils.getAttribute(
-				HolidayConstants.HOLIDAYLIST1, request)).size());
-		assertEquals(0, ((List<HolidayBO>) SessionUtils.getAttribute(
-				HolidayConstants.HOLIDAYLIST2, request)).size());
+		verifyForward(ActionForwards.get_success.toString());		
+		assertNull(SessionUtils.getAttribute("noOfYears", request));		
 	}
 
 }
