Index: src/main/java/org/wso2/carbon/ui/CarbonUIUtil.java
===================================================================
--- src/main/java/org/wso2/carbon/ui/CarbonUIUtil.java	(revision 91940)
+++ src/main/java/org/wso2/carbon/ui/CarbonUIUtil.java	(working copy)
@@ -54,13 +54,10 @@
      * Get a proxy object to the business logic implementation class.
      * <p/>
      * This proxy could be a handle to an OSGi service or a Web services client
-     * 
-     * @param clientClassObject
-     *            Web services client
-     * @param osgiObjectClass
-     *            OSGi service class
-     * @param session
-     *            The HTTP Session
+     *
+     * @param clientClassObject Web services client
+     * @param osgiObjectClass   OSGi service class
+     * @param session           The HTTP Session
      * @return Proxy object
      * @deprecated Do not use this method. Simply use the relevant client.
      */
@@ -99,11 +96,11 @@
                 CarbonUIServiceComponent.getConfigurationContextService().getServerConfigContext();
         return CarbonUtils.getServerURL(serverConfig, serverCfgCtx);
     }
-                              
+
     public static String getServerURL(ServletContext servletContext, HttpSession httpSession) {
         return CarbonUtils.getServerURL(servletContext, httpSession,
-                                        CarbonUIServiceComponent.
-                                                getConfigurationContextService().getServerConfigContext());
+                CarbonUIServiceComponent.
+                        getConfigurationContextService().getServerConfigContext());
     }
 
     public static boolean isSuperTenant(HttpServletRequest request) {
@@ -390,8 +387,9 @@
 
     /**
      * Method is used to retrive product xml params
+     *
      * @param key = product xml key
-     * @return  product xml value
+     * @return product xml value
      */
     public static Object getProductParam(String key) {
         return productParams.get(key);
@@ -400,4 +398,26 @@
     public static void setProductParam(String key, Object value) {
         productParams.put(key, value);
     }
+
+    /**
+     * Returns home page location for "Home" link in Carbon UI menu.
+     * If defaultHomePage property is available in product.xml this method will return it and if not it'll return
+     * default ../admin/index.jsp
+     *
+     * @return home page location
+     */
+    public static String getHomePage() {
+        Object homePage;
+        if ((homePage = getDefaultHomePageProductParam())
+                != null) {
+            return (String) homePage;
+        }
+
+        return CarbonConstants.CARBON_UI_DEFAULT_HOME_PAGE;
+
+    }
+
+    private static Object getDefaultHomePageProductParam() {
+        return getProductParam(CarbonConstants.PRODUCT_XML_WSO2CARBON + CarbonConstants.DEFAULT_HOME_PAGE);
+    }
 }
Index: src/main/java/org/wso2/carbon/ui/MenuAdminClient.java
===================================================================
--- src/main/java/org/wso2/carbon/ui/MenuAdminClient.java	(revision 91940)
+++ src/main/java/org/wso2/carbon/ui/MenuAdminClient.java	(working copy)
@@ -25,14 +25,9 @@
 import org.wso2.carbon.ui.deployment.beans.CarbonUIDefinitions;
 import org.wso2.carbon.ui.deployment.beans.Menu;
 import org.wso2.carbon.utils.ServerConstants;
-import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.MissingResourceException;
+import java.util.*;
 
 public class MenuAdminClient {
     private static Log log = LogFactory.getLog(MenuAdminClient.class);
@@ -461,7 +456,7 @@
 
     private void appendHomeLink(Locale locale) {
     	String homeText = CarbonUIUtil.geti18nString("component.home", "org.wso2.carbon.i18n.Resources", locale);
-        menuContent.append("<li><a href=\"../admin/index.jsp\" class=\"menu-home\">"+homeText+"</a></li>");
+        menuContent.append("<li><a href=\""+ CarbonUIUtil.getHomePage() +"\" class=\"menu-home\">"+homeText+"</a></li>");
     }
 
     /**
Index: src/main/java/org/wso2/carbon/ui/BreadCrumbGenerator.java
===================================================================
--- src/main/java/org/wso2/carbon/ui/BreadCrumbGenerator.java	(revision 91940)
+++ src/main/java/org/wso2/carbon/ui/BreadCrumbGenerator.java	(working copy)
@@ -30,7 +30,7 @@
 
 public class BreadCrumbGenerator {
 	private static Log log = LogFactory.getLog(BreadCrumbGenerator.class);
-	
+
 	/**
 	 * Generates breadcrumb html content.
 	 * Please do not add line breaks to places where HTML content is written.
@@ -44,30 +44,30 @@
 			,String jspFilePath
 			,boolean topPage
 			,boolean removeLastItem){
-		String breadcrumbCookieString = "";		
+		String breadcrumbCookieString = "";
 		//int lastIndexofSlash = jspFilePath.lastIndexOf(System.getProperty("file.separator"));
 		int lastIndexofSlash = jspFilePath.lastIndexOf("/");
 
 		StringBuffer content = new StringBuffer();
 		StringBuffer cookieContent = new StringBuffer();
 		HashMap<String,String> breadcrumbContents = new HashMap<String,String>();
-		HashMap<String, BreadCrumbItem> breadcrumbs = 
+		HashMap<String, BreadCrumbItem> breadcrumbs =
 			(HashMap<String, BreadCrumbItem>) request.getSession().getAttribute("breadcrumbs");
-		
+
 		String menuId = request.getParameter("item");
 		String region = request.getParameter("region");
 		String ordinalStr = request.getParameter("ordinal");
-		
+
 		if(topPage){
 			//some wizards redirect to index page of the component after doing some operations.
-			//Hence a map of region & menuId for component/index page is maintained & retrieved 
+			//Hence a map of region & menuId for component/index page is maintained & retrieved
 			//by passing index page (eg: ../service-mgt/index.jsp)
 			//This logic should run only for pages marked as toppage=true
 			if(menuId == null && region == null){
-				HashMap<String, String> indexPageBreadcrumbParamMap = 
+				HashMap<String, String> indexPageBreadcrumbParamMap =
 					(HashMap<String, String>) request.getSession().getAttribute("index-page-breadcrumb-param-map");
 				//eg: indexPageBreadcrumbParamMap contains ../service-mgt/index.jsp : region1,services_list_menu pattern
-				
+
 				if(indexPageBreadcrumbParamMap != null && !(indexPageBreadcrumbParamMap.isEmpty())){
 					String params = indexPageBreadcrumbParamMap.get(jspFilePath);
 					if(params != null){
@@ -75,12 +75,12 @@
 						menuId = params.substring(params.indexOf(",")+1);
 					}
 				}
-			}	
+			}
 		}
-        
+
 		if (menuId != null && region != null) {
 			String key = region.trim() + "-" + menuId.trim();
-			HashMap<String, String> breadcrumbMap = 
+			HashMap<String, String> breadcrumbMap =
 				(HashMap<String, String>) request.getSession().getAttribute(region + "menu-id-breadcrumb-map");
 
 			String breadCrumb = "";
@@ -90,14 +90,14 @@
 			if (breadCrumb != null) {
 				content.append("<table cellspacing=\"0\"><tr>");
 				String homeText = CarbonUIUtil.geti18nString("component.home", "org.wso2.carbon.i18n.Resources", request.getLocale());
-				content.append("<td class=\"breadcrumb-link\"><a href=\"../admin/index.jsp\">"+homeText+"</a></td>");
-				cookieContent.append(breadCrumb+"#");				
+                content.append("<td class=\"breadcrumb-link\"><a href=\"" + CarbonUIUtil.getHomePage() + "\">"+homeText+"</a></td>");
+				cookieContent.append(breadCrumb+"#");
 				generateBreadcrumbForMenuPath(content, breadcrumbs, breadCrumb,true);
-			}			
+			}
 		}else{
 			HashMap<String,List<BreadCrumbItem>> links = (HashMap<String,List<BreadCrumbItem>>) request
 			.getSession().getAttribute("page-breadcrumbs");
-			
+
 			//call came within a page. Retrieve the breadcrumb cookie
 			Cookie[] cookies = request.getCookies();
 			for (int a = 0; a < cookies.length; a++) {
@@ -109,30 +109,30 @@
 					//bringing back the #
 					breadcrumbCookieString = breadcrumbCookieString.replace("%23", "#");
 					if(log.isDebugEnabled()){
-						log.debug("cookie :"+cookie.getName()+" : "+breadcrumbCookieString);						
-					}					
+						log.debug("cookie :"+cookie.getName()+" : "+breadcrumbCookieString);
+					}
 				}
-			}		
-			
-			
+			}
+
+
 			if(links != null){
 				if(log.isDebugEnabled()){
-					log.debug("size of page-breadcrumbs is : "+links.size());					
+					log.debug("size of page-breadcrumbs is : "+links.size());
 				}
-				
+
 				content.append("<table cellspacing=\"0\"><tr>");
-				String homeText = CarbonUIUtil.geti18nString("component.home", "org.wso2.carbon.i18n.Resources", request.getLocale());				
-				content.append("<td class=\"breadcrumb-link\"><a href=\"../admin/index.jsp\">"+homeText+"</a></td>");
-				
+				String homeText = CarbonUIUtil.geti18nString("component.home", "org.wso2.carbon.i18n.Resources", request.getLocale());
+				content.append("<td class=\"breadcrumb-link\"><a href=\"" + CarbonUIUtil.getHomePage() + "\">"+homeText+"</a></td>");
+
 				String menuBreadcrumbs = "";
 				if(breadcrumbCookieString.indexOf("#") > -1){
-					menuBreadcrumbs = breadcrumbCookieString.substring(0, breadcrumbCookieString.indexOf("#"));					
+					menuBreadcrumbs = breadcrumbCookieString.substring(0, breadcrumbCookieString.indexOf("#"));
 				}
 				cookieContent.append(menuBreadcrumbs+"#");
-				
+
 				generateBreadcrumbForMenuPath(content, breadcrumbs,
 						menuBreadcrumbs,false);
-				
+
 				int clickedBreadcrumbLocation = 0;
 				if (ordinalStr != null) {
 					//only clicking on already made page breadcrumb link will send this via request parameter
@@ -142,13 +142,13 @@
 						// Do nothing
 						log.warn("Found String for breadcrumb ordinal");
 					}
-				}				
+				}
 
 				String pageBreadcrumbs = "";
 				if(breadcrumbCookieString.indexOf("#") > -1){
-					pageBreadcrumbs = breadcrumbCookieString.substring(breadcrumbCookieString.indexOf("#")+1);					
-				}				
-				StringTokenizer st2 = new StringTokenizer(pageBreadcrumbs,"*");	
+					pageBreadcrumbs = breadcrumbCookieString.substring(breadcrumbCookieString.indexOf("#")+1);
+				}
+				StringTokenizer st2 = new StringTokenizer(pageBreadcrumbs,"*");
 				String[] tokens = new String[st2.countTokens()];
 				int count = 0;
 				String previousToken = "";
@@ -156,14 +156,14 @@
 					String currentToken = st2.nextToken();
 					//To avoid page refresh create breadcrumbs
 					if(! currentToken.equals(previousToken)){
-						previousToken = currentToken;  
+						previousToken = currentToken;
 						tokens[count] = currentToken;
-						count++;						
+						count++;
 					}
 				}
-				
-				
-				//jspSubContext should be the same across all the breadcrumbs 
+
+
+				//jspSubContext should be the same across all the breadcrumbs
 				//(cookie is updated everytime a page is loaded)
 				List<BreadCrumbItem> breadcrumbItems = null;
 				if(tokens != null && tokens.length > 0){
@@ -171,77 +171,77 @@
 					//String jspSubContext = token.substring(0, token.indexOf("+"));
 					//breadcrumbItems = links.get("../"+jspSubContext);
 				}
-				
+
 				LinkedList<String> tokenJSPFileOrder = new LinkedList<String>();
 				LinkedList<String> jspFileSubContextOrder = new LinkedList<String>();
 				HashMap<String,String> jspFileSubContextMap = new HashMap<String,String>();
 				for(int a = 0;a < tokens.length;a++){
 					String token = tokens[a];
 					if(token != null){
-						String jspFileName = token.substring(token.indexOf("+")+1);	
+						String jspFileName = token.substring(token.indexOf("+")+1);
 						String jspSubContext = token.substring(0, token.indexOf("+"));
 						jspFileSubContextMap.put(jspFileName, jspSubContext);
 						tokenJSPFileOrder.add(jspFileName);
-						jspFileSubContextOrder.add(jspSubContext+"^"+jspFileName);						
+						jspFileSubContextOrder.add(jspSubContext+"^"+jspFileName);
 					}
 				}
-				
+
 				if(clickedBreadcrumbLocation > 0){
 					int tokenCount = tokenJSPFileOrder.size();
 					while (tokenCount > clickedBreadcrumbLocation) {
 						String lastItem = tokenJSPFileOrder.getLast();
 						if(log.isDebugEnabled()){
-							log.debug("Removing breacrumbItem : "+ lastItem);							
+							log.debug("Removing breacrumbItem : "+ lastItem);
 						}
 						tokenJSPFileOrder.removeLast();
 						jspFileSubContextOrder.removeLast();
 						tokenCount = tokenJSPFileOrder.size();
-					}					
+					}
 				}
-				
+
 				boolean lastBreadcrumbItemAvailable = false;
 				if(clickedBreadcrumbLocation == 0){
 					String tmp = getSubContextFromUri(currentBreadcrumbItem.getLink())+"+"+currentBreadcrumbItem.getId();
 					if(! previousToken.equals(tmp)){ //To prevent page refresh
 						lastBreadcrumbItemAvailable = true;
-					}						
+					}
 				}
-				
-				
+
+
 				if(tokenJSPFileOrder != null){
 					//found breadcrumb items for given sub context
 					for(int i = 0;i < jspFileSubContextOrder.size(); i++){
 						String token = tokenJSPFileOrder.get(i);
-						//String jspFileName = token.substring(token.indexOf("+")+1);						
+						//String jspFileName = token.substring(token.indexOf("+")+1);
 						//String jspSubContext = jspFileSubContextMap.get(jspFileName);
-						
-						String fileContextToken = jspFileSubContextOrder.get(i);						
-						String jspFileName = fileContextToken.substring(fileContextToken.indexOf("^")+1);						
+
+						String fileContextToken = jspFileSubContextOrder.get(i);
+						String jspFileName = fileContextToken.substring(fileContextToken.indexOf("^")+1);
 						String jspSubContext = fileContextToken.substring(0,fileContextToken.indexOf("^"));
-						
+
 						if(jspSubContext != null){
-							breadcrumbItems = links.get("../"+jspSubContext);							
-						}						
+							breadcrumbItems = links.get("../"+jspSubContext);
+						}
 						if(breadcrumbItems != null){
 							int bcSize = breadcrumbItems.size();
 							for (int a = 0; a < bcSize ; a++) {
 								BreadCrumbItem tmp = breadcrumbItems.get(a);
 								if(tmp.getId().equals(jspFileName)){
 									if(tmp.getLink().startsWith("#")){
-										content.append("<td class=\"breadcrumb-link\">&nbsp;>&nbsp;"+tmp.getConvertedText()+"</td>");										
+										content.append("<td class=\"breadcrumb-link\">&nbsp;>&nbsp;"+tmp.getConvertedText()+"</td>");
 									}else{
 										//if((a+1) == bcSize){
 										//if((a+1) == bcSize && clickedBreadcrumbLocation > 0){
-										if((((a+1) == bcSize) && !(lastBreadcrumbItemAvailable)) 
+										if((((a+1) == bcSize) && !(lastBreadcrumbItemAvailable))
 												|| removeLastItem){
-											content.append("<td class=\"breadcrumb-link\">&nbsp;>&nbsp;"+tmp.getConvertedText()+"</td>");	
+											content.append("<td class=\"breadcrumb-link\">&nbsp;>&nbsp;"+tmp.getConvertedText()+"</td>");
 										}else{
-											content.append("<td class=\"breadcrumb-link\">&nbsp;>&nbsp;<a href=\""+appendOrdinal(tmp.getLink(),i+1)+"\">"+tmp.getConvertedText()+"</a></td>");												
-										}																				
+											content.append("<td class=\"breadcrumb-link\">&nbsp;>&nbsp;<a href=\""+appendOrdinal(tmp.getLink(),i+1)+"\">"+tmp.getConvertedText()+"</a></td>");
+										}
 									}
-									cookieContent.append(getSubContextFromUri(tmp.getLink())+"+"+token+"*");																				
+									cookieContent.append(getSubContextFromUri(tmp.getLink())+"+"+token+"*");
 								}
-							}						
+							}
 						}
 					}
 				}
@@ -252,16 +252,16 @@
 					cookieContent.append(tmp+"*");
 					content.append("<td class=\"breadcrumb-link\">&nbsp;>&nbsp;"+currentBreadcrumbItem.getConvertedText()+"</td>");
 				}
-				content.append("</tr></table>");		
-			}			
+				content.append("</tr></table>");
+			}
 		}
 		breadcrumbContents.put("html-content", content.toString());
-		
+
 		String finalCookieContent = cookieContent.toString();
 		if(removeLastItem){
-			if(breadcrumbCookieString != null 
+			if(breadcrumbCookieString != null
 					&& breadcrumbCookieString.trim().length() > 0){
-				finalCookieContent = breadcrumbCookieString;				
+				finalCookieContent = breadcrumbCookieString;
 			}
 		}
 		breadcrumbContents.put("cookie-content", finalCookieContent);
@@ -269,7 +269,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param uri
 	 * @return
 	 */
@@ -281,14 +281,14 @@
 			tmp = tmp.replace("../", "");
 			int firstSlashLocation = tmp.indexOf("/");
 			String subContext = tmp.substring(0, firstSlashLocation);
-			return subContext;			
+			return subContext;
 		}else{
 			return "";
 		}
 	}
-	
+
 	/**
-	 * 
+	 *
 	 * @param url
 	 * @param ordinal
 	 * @return
@@ -299,12 +299,12 @@
 				return url + "&ordinal=" + ordinal;
 			} else {
 				return url + "?ordinal=" + ordinal;
-			}			
+			}
 		}else{
 			return "#";
 		}
 	}
-	
+
 	/**
 	 * Generates breadcrumb for menu navigation path
 	 * @param content
@@ -320,7 +320,7 @@
 			count++;
 			String token = st.nextToken();
 			BreadCrumbItem breadcrumbItem = (BreadCrumbItem) breadcrumbs.get(token);
-			if (breadcrumbItem != null) {						
+			if (breadcrumbItem != null) {
 				//if (count == tokenCount) {
 				//	content.append("<td class=\"breadcrumb-current-page\"><a href=\""+breadcrumbItem.getLink()+"\">"+breadcrumbItem.getConvertedText()+"</a></td>");
 				//} else {
@@ -330,7 +330,7 @@
 						if(count == tokenCount && (clickFromMenu)){//if last breadcrumb item, do not put the link
 							content.append("<td class=\"breadcrumb-link\">&nbsp;>&nbsp;"+breadcrumbItem.getConvertedText()+"</td>");
 						}else{
-							content.append("<td class=\"breadcrumb-link\">&nbsp;>&nbsp;<a href=\""+breadcrumbItem.getLink()+"\">"+breadcrumbItem.getConvertedText()+"</a></td>");							
+							content.append("<td class=\"breadcrumb-link\">&nbsp;>&nbsp;<a href=\""+breadcrumbItem.getLink()+"\">"+breadcrumbItem.getConvertedText()+"</a></td>");
 						}
 					}
 				//}
