diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDelegate.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDelegate.java
index b068f66..99c481e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDelegate.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDelegate.java
@@ -294,11 +294,11 @@
 			// create or update servlet ref
 			Servlet servlet = JSFUtils12.findJSFServlet(webApp);// check to see
 																// if already
-																// present
-			if (servlet != null) {
-				// remove old mappings
-				JSFUtils12.removeURLMappings(webApp, servlet);
-			}
+// No longer removing any old mappings on install - see 194919 															// present
+//			if (servlet != null) {
+//				// remove old mappings
+//				JSFUtils12.removeURLMappings(webApp, servlet);
+//			}
 			
 			servlet = JSFUtils12
 					.createOrUpdateServletRef(webApp, config, servlet);
@@ -326,10 +326,12 @@
 			org.eclipse.jst.j2ee.webapplication.Servlet servlet = JSFUtils11.findJSFServlet(webApp);// check to see
 																// if already
 																// present
-			if (servlet != null) {
-				// remove old mappings
-				JSFUtils11.removeURLMappings(webApp, servlet);
-			}
+			
+// No longer removing any old mappings on install - see 194919 
+//			if (servlet != null) {
+//				// remove old mappings
+//				JSFUtils11.removeURLMappings(webApp, servlet);
+//			}
 			
 			servlet = JSFUtils11
 					.createOrUpdateServletRef(webApp, config, servlet);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils11.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils11.java
index 3bb373b..4660bc6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils11.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils11.java
@@ -214,16 +214,38 @@
 		Iterator it = urlMappingList.iterator();
 		while (it.hasNext()) {
 			String pattern = (String) it.next();
-			ServletMapping mapping = WebapplicationFactory.eINSTANCE
-					.createServletMapping();
-			mapping.setServlet(servlet);
-			mapping.setName(servlet.getServletName());
-			mapping.setUrlPattern(pattern);
-			webApp.getServletMappings().add(mapping);
+			if (!(doesServletMappingExist(webApp, servlet, pattern))){
+				ServletMapping mapping = WebapplicationFactory.eINSTANCE
+						.createServletMapping();
+				mapping.setServlet(servlet);
+				mapping.setName(servlet.getServletName());
+				mapping.setUrlPattern(pattern);
+				webApp.getServletMappings().add(mapping);
+			}
 		}
 	}
 	
 
+	private static boolean doesServletMappingExist(final WebApp webApp, final Servlet servlet,
+			final String pattern) {	
+		
+		List mappings = webApp.getServletMappings();
+		String servletName = servlet.getServletName();
+		if (servletName != null) {
+			for (int i=mappings.size()-1;i>=0;--i){
+				ServletMapping mapping = (ServletMapping)mappings.get(i);
+				if (mapping != null && 
+						mapping.getServlet() != null && 
+						mapping.getServlet().getServletName() != null &&
+						mapping.getServlet().getServletName().equals(servletName) &&
+						mapping.getUrlPattern().equals(pattern)) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
 	/**
 	 * Removes servlet-mappings for servlet using servlet-name.
 	 * @param webApp
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils12.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils12.java
index f288729..192c141 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils12.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils12.java
@@ -175,20 +175,43 @@
 			Servlet servlet) {
 		
 		if (urlMappingList.size() > 0) {
-			ServletMapping mapping = WebFactory.eINSTANCE.createServletMapping();
-			mapping.setServletName(servlet.getServletName());
-			webApp.getServletMappings().add(mapping);
+			ServletMapping mapping = findServletMapping(webApp, servlet);
+			if (mapping == null){
+				mapping = WebFactory.eINSTANCE.createServletMapping();
+				mapping.setServletName(servlet.getServletName());
+				webApp.getServletMappings().add(mapping);
+			}
 			// Add patterns
 			Iterator it = urlMappingList.iterator();
 			while (it.hasNext()) {
 				String pattern = (String) it.next();
-				UrlPatternType urlPattern = JavaeeFactory.eINSTANCE.createUrlPatternType();
-				urlPattern.setValue(pattern);				
-				mapping.getUrlPatterns().add(urlPattern);							
+				if (!(doesServletMappingPatternExist(webApp, mapping, pattern))){
+					UrlPatternType urlPattern = JavaeeFactory.eINSTANCE.createUrlPatternType();
+					urlPattern.setValue(pattern);				
+					mapping.getUrlPatterns().add(urlPattern);
+				}
 			}
 		}
 	}
 	
+	private static ServletMapping findServletMapping(final WebApp webApp, final Servlet servlet) {
+		for (Iterator it=webApp.getServletMappings().iterator();it.hasNext();){
+			ServletMapping mapping = (ServletMapping)it.next();
+			if (mapping.getServletName().equals(servlet.getServletName()))
+				return mapping;
+		}
+		return null;
+	}
+
+	private static boolean doesServletMappingPatternExist(final WebApp webApp, final ServletMapping mapping,
+			final String pattern) {	
+		for (Iterator it=mapping.getUrlPatterns().iterator();it.hasNext();){
+			if(pattern.equals(((UrlPatternType)it.next()).getValue()))
+				return true;
+		}
+		return false;
+	}
+	
 	/**
 	 * Removes servlet-mappings for servlet using servlet-name for >= 2.5 WebModules.
 	 * @param webApp
