diff --git a/bundles/org.eclipse.jst.ws.jaxrs.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.jaxrs.core/META-INF/MANIFEST.MF
index f80823d..d56fa98 100644
--- a/bundles/org.eclipse.jst.ws.jaxrs.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.jaxrs.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %plugin.name
 Bundle-SymbolicName: org.eclipse.jst.ws.jaxrs.core;singleton:=true
-Bundle-Version: 1.0.500.qualifier
+Bundle-Version: 1.0.550.qualifier
 Bundle-Activator: org.eclipse.jst.ws.jaxrs.core.internal.JAXRSCorePlugin
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.100,4.0.0)",
diff --git a/bundles/org.eclipse.jst.ws.jaxrs.core/plugin.xml b/bundles/org.eclipse.jst.ws.jaxrs.core/plugin.xml
index 51ff208..f62c25b 100644
--- a/bundles/org.eclipse.jst.ws.jaxrs.core/plugin.xml
+++ b/bundles/org.eclipse.jst.ws.jaxrs.core/plugin.xml
@@ -23,7 +23,7 @@
     <project-facet-version facet="jst.jaxrs" version="1.0">
        <constraint>
         <and>
-          <requires facet="jst.web" version="[2.3"/>
+          <requires facet="jst.web" soft="true" version="[2.3"/>
           <requires
                 facet="jst.java"
                 version="[5.0">
@@ -36,7 +36,7 @@
     <project-facet-version facet="jst.jaxrs" version="1.1">
        <constraint>
         <and>
-          <requires facet="jst.web" version="[2.3"/>
+        <requires facet="jst.web" soft="true" version="[2.3"/>
           <requires
                 facet="jst.java"
                 version="[5.0">
@@ -49,7 +49,7 @@
     <project-facet-version facet="jst.jaxrs" version="2.0">
        <constraint>
         <and>
-          <requires facet="jst.web" version="[3.1"/>
+          <requires facet="jst.web" soft="true" version="[3.1"/>
           <requires
                 facet="jst.java"
                 version="[7.0">
@@ -64,7 +64,7 @@
     <project-facet-version facet="jst.jaxrs" version="2.0">
        <constraint>
         <and>
-          <requires facet="jst.web" version="[3.1"/>
+          <requires facet="jst.web" soft="true" version="[3.1"/>
           <requires
                 facet="jst.java"
                 version="[1.7">
diff --git a/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/Messages.java b/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/Messages.java
index 836f38b..d5de385 100644
--- a/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/Messages.java
+++ b/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/Messages.java
@@ -146,6 +146,11 @@
 	 * see messages.properties
 	 */
 	public static String JAXRSFacetUninstallDelegate_NonUpdateableWebXML;
+	
+	/**
+	 * see messages.properties
+	 */
+	public static String JAXRSFacetUninstallDelegate_ProjectErr;
 
 	static {
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/messages.properties b/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/messages.properties
index 43b38ab..a3d59cc 100644
--- a/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/messages.properties
+++ b/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/messages.properties
@@ -36,6 +36,7 @@
 JAXRSFacetInstallDelegate_NonUpdateableWebXML=JAX-RS Facet was not installed on ''{0}''.  The web.xml file needs to be updateable.
 JAXRSFacetUninstallDelegate_ConfigErr=''{0}'' : unable to de-configure web module for JAX-RS
 JAXRSFacetUninstallDelegate_NonUpdateableWebXML=JAX-RS Facet was not un-installed from ''{0}''.  The web.xml file needs to be updateable.
+JAXRSFacetUninstallDelegate_ProjectErr=''{0}'' : unable to evaluate project for JAX-RS
 
 ArchiveFileImpl_CannotCopyFile=Cannot copy file
 ArchiveFileImpl_CannotCloseFile=Cannot close file
diff --git a/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/project/facet/JAXRSFacetDelegateUtils.java b/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/project/facet/JAXRSFacetDelegateUtils.java
new file mode 100644
index 0000000..9ba6c38
--- /dev/null
+++ b/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/project/facet/JAXRSFacetDelegateUtils.java
@@ -0,0 +1,34 @@
+package org.eclipse.jst.ws.jaxrs.core.internal.project.facet;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jst.j2ee.web.project.facet.WebFacetUtils;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+
+/**
+ * Utility methods used by facet install / uninstall /version change delegates.
+ * 
+ * @author ian.trimble@oracle.com
+ */
+public class JAXRSFacetDelegateUtils {
+
+	/**
+	 * Tests if specified project is a dynamic web project;
+	 * 
+	 * @param project Project to be tested.
+	 * @return <code>true</code> if project is a dynamic web project, else <code>false</code>.
+	 * @throws CoreException On error during testing.
+	 */
+	public static boolean isDynamicWebProject(IProject project) throws CoreException {
+		boolean isWebProject = false;
+		if (project != null) {
+			final IFacetedProject facetedProject = ProjectFacetsManager.create(project);
+			if (facetedProject != null) {
+				isWebProject = facetedProject.hasProjectFacet(WebFacetUtils.WEB_FACET);
+			}
+		}
+		return isWebProject;
+	}
+
+}
diff --git a/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/project/facet/JAXRSFacetInstallDelegate.java b/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/project/facet/JAXRSFacetInstallDelegate.java
index 132f95c..e9f69e4 100644
--- a/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/project/facet/JAXRSFacetInstallDelegate.java
+++ b/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/project/facet/JAXRSFacetInstallDelegate.java
@@ -92,25 +92,28 @@
 						Messages.JAXRSFacetInstallDelegate_InternalErr);
 			}
 
-			// Before we do any configuration, verify that web.xml is available
-			// for update
-			IModelProvider provider = JAXRSUtils.getModelProvider(project);
-			if (provider == null) {
-				throw new JAXRSFacetException(NLS.bind(
-						Messages.JAXRSFacetInstallDelegate_ConfigErr, project
-								.getName()));
-			} else if (!(provider.validateEdit(null, null).isOK())) {
-				// checks for web.xml file being read-only and allows user to set writeable
-				if (!(provider.validateEdit(null, null).isOK())) {
-					throw new JAXRSFacetException(
-							NLS
-									.bind(
-											Messages.JAXRSFacetInstallDelegate_NonUpdateableWebXML,
-											project.getName())); //$NON-NLS-2$
+			final boolean isDynamicWebProject = JAXRSFacetDelegateUtils.isDynamicWebProject(project);
+
+			if (isDynamicWebProject) {
+				// Before we do any configuration, verify that web.xml is available
+				// for update
+				IModelProvider provider = JAXRSUtils.getModelProvider(project);
+				if (provider == null) {
+					throw new JAXRSFacetException(NLS.bind(
+							Messages.JAXRSFacetInstallDelegate_ConfigErr, project
+									.getName()));
+				} else if (!(provider.validateEdit(null, null).isOK())) {
+					// checks for web.xml file being read-only and allows user to set writeable
+					if (!(provider.validateEdit(null, null).isOK())) {
+						throw new JAXRSFacetException(
+								NLS
+										.bind(
+												Messages.JAXRSFacetInstallDelegate_NonUpdateableWebXML,
+												project.getName())); //$NON-NLS-2$
+					}
 				}
 			}
 
-			
 			if (((LibraryInstallDelegate) config
 					.getProperty(IJAXRSFacetInstallDataModelProperties.LIBRARY_PROVIDER_DELEGATE))
 					.getLibraryProviderOperationConfig() instanceof JAXRSUserLibraryProviderInstallOperationConfig
@@ -151,9 +154,12 @@
 					createSharedLibraries(project, fv, monitor, config);
 			}			
 
-			// Update web model if necessary
-			if (config.getBooleanProperty(IJAXRSFacetInstallDataModelProperties.UPDATEDD))
-				createServletAndModifyWebXML(project, config, monitor);
+			if (isDynamicWebProject) {
+				// Update web model if necessary
+				if (config.getBooleanProperty(IJAXRSFacetInstallDataModelProperties.UPDATEDD))
+					createServletAndModifyWebXML(project, config, monitor);
+			}
+
 			if (monitor != null) {
 				monitor.worked(1);
 			}
diff --git a/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/project/facet/JAXRSFacetUninstallDelegate.java b/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/project/facet/JAXRSFacetUninstallDelegate.java
index dfa679d..ca83d81 100644
--- a/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/project/facet/JAXRSFacetUninstallDelegate.java
+++ b/bundles/org.eclipse.jst.ws.jaxrs.core/src/org/eclipse/jst/ws/jaxrs/core/internal/project/facet/JAXRSFacetUninstallDelegate.java
@@ -57,26 +57,33 @@
 			}
 
 			try {
-				// Before we do any de-configuration, verify that web.xml is
-				// available for update
-				IModelProvider provider = JAXRSUtils.getModelProvider(project);
-				if (provider == null) {
-					throw new JAXRSFacetException(NLS.bind(
-							Messages.JAXRSFacetUninstallDelegate_ConfigErr,
-							project.getName()));
-				} else if (!(provider.validateEdit(null, null).isOK())) {
-					throw new JAXRSFacetException(
-							NLS
-									.bind(
-											Messages.JAXRSFacetUninstallDelegate_NonUpdateableWebXML,
-											project.getName()));
+
+				final boolean isDynamicWebProject = JAXRSFacetDelegateUtils.isDynamicWebProject(project);
+
+				if (isDynamicWebProject) {
+					// Before we do any de-configuration, verify that web.xml is
+					// available for update
+					IModelProvider provider = JAXRSUtils.getModelProvider(project);
+					if (provider == null) {
+						throw new JAXRSFacetException(NLS.bind(
+								Messages.JAXRSFacetUninstallDelegate_ConfigErr,
+								project.getName()));
+					} else if (!(provider.validateEdit(null, null).isOK())) {
+						throw new JAXRSFacetException(
+								NLS
+										.bind(
+												Messages.JAXRSFacetUninstallDelegate_NonUpdateableWebXML,
+												project.getName()));
+					}
 				}
 
 				// Remove JAXRS Libraries
 				( (JAXRSFacetUninstallConfig) config ).getLibrariesUninstallDelegate().execute( null );
 
-				// remove servlet stuff from web.xml
-				uninstallJAXRSReferencesFromWebApp(project, monitor);
+				if (isDynamicWebProject) {
+					// remove servlet stuff from web.xml
+					uninstallJAXRSReferencesFromWebApp(project, monitor);
+				}
 
 				if (monitor != null) {
 					monitor.worked(1);
diff --git a/bundles/org.eclipse.jst.ws.jaxrs.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.jaxrs.ui/META-INF/MANIFEST.MF
index 21ddc0e..92b3c8b 100644
--- a/bundles/org.eclipse.jst.ws.jaxrs.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.jaxrs.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %plugin.name
 Bundle-SymbolicName: org.eclipse.jst.ws.jaxrs.ui;singleton:=true
-Bundle-Version: 1.0.600.qualifier
+Bundle-Version: 1.0.650.qualifier
 Bundle-Activator: org.eclipse.jst.ws.jaxrs.ui.internal.JAXRSUIPlugin
 Bundle-Vendor: %PLUGIN_PROVIDER
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/messages.properties b/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/messages.properties
index a987b97..d0fc99e 100644
--- a/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/messages.properties
+++ b/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/messages.properties
@@ -15,7 +15,7 @@
 # 20100413   307552 ericdp@ca.ibm.com - Eric D. Peters, JAX-RS and Java EE 6 setup is incorrect
 ###############################################################################
 JAXRSFacetInstallPage_title=JAX-RS Capabilities
-JAXRSFacetInstallPage_description=Add JAX-RS capabilities to this Web Project
+JAXRSFacetInstallPage_description=Add JAX-RS capabilities to this Project
 JAXRSFacetInstallPage_JAXRSImplementationLibrariesFrame=JAX-RS &Implementation Library
 JAXRSFacetInstallPage_JAXRSServletLabel=Servlet Information
 JAXRSFacetInstallPage_Add2=&Add...
@@ -35,3 +35,4 @@
 JAXRSLibraryConfigControl_IncludeGroupLabel=Include library with this application
 JAXRSLibraryConfigControl_SharedLibButtonLabel=Shared Library
 JAXRSLibraryConfigControl_TooltipIncludeAsSharedLib=Include as shared library
+
diff --git a/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/project/facet/JAXRSFacetInstallPage.java b/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/project/facet/JAXRSFacetInstallPage.java
index 5edf8c1..dac8b2a 100644
--- a/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/project/facet/JAXRSFacetInstallPage.java
+++ b/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/project/facet/JAXRSFacetInstallPage.java
@@ -183,10 +183,11 @@
 				}
 				});
 
+
     servletInfoGroup = new ServletInformationGroup(composite, SWT.NONE);
     servletInfoGroup.setDataModel(model);
    	updateUpdateDDState(librariesInstallDelegate.getLibraryProvider().getId());
-
+   	servletInfoGroup.setVisible(isWebFacetSelected());
     addModificationListeners();
 
     return composite;
@@ -197,7 +198,9 @@
 	boolean nOopLibrary = libraryProviderID.equals(IJAXRSCoreConstants.NO_OP_LIBRARY_ID);
 	if (bUserLibrary || nOopLibrary) {
 		updateDDCheckBox.setVisible(isJEE6orGreater());
-	}  else
+	}  else if (!isWebFacetSelected() ) {
+		updateDDCheckBox.setVisible(false);
+	} else
 		updateDDCheckBox.setVisible(showUpdateDDCheckBox(libraryProviderID));
     if (updateDDCheckBox.getVisible()) {
     		boolean selected;
@@ -212,7 +215,21 @@
 	if (updateDDCheckBox.getVisible())
 		model.setBooleanProperty(IJAXRSFacetInstallDataModelProperties.UPDATEDD, updateDDCheckBox.getSelection());
 	else
-		model.setBooleanProperty(IJAXRSFacetInstallDataModelProperties.UPDATEDD, true);
+		model.setBooleanProperty(IJAXRSFacetInstallDataModelProperties.UPDATEDD, isWebFacetSelected());
+}
+
+@SuppressWarnings("rawtypes")
+private boolean isWebFacetSelected() {
+	Iterator it = this.context.getSelectedProjectFacets().iterator();
+	while (it.hasNext()) {
+		// find Web facet
+		IProjectFacetVersion pfv = (IProjectFacetVersion) it.next();
+		if (pfv.getProjectFacet().getId().equals("jst.web")) { //$NON-NLS-1$
+			return true;
+		}
+	}
+	return false;
+
 }
 
 	@SuppressWarnings("rawtypes")
@@ -302,31 +319,39 @@
         }
       }
     }
+    
 
-    String servletName = null;
-    if (root != null)
-      servletName = root.get(SETTINGS_SERVLET);
-    if (servletName == null || servletName.equals("")) { //$NON-NLS-1$
-      servletName = (String) model.getDefaultProperty(IJAXRSFacetInstallDataModelProperties.SERVLET_NAME);
-    }
-    servletInfoGroup.txtJAXRSServletName.setText(servletName);
+			String servletName = null;
+			if (root != null)
+				servletName = root.get(SETTINGS_SERVLET);
+			if (servletName == null || servletName.equals("")) { //$NON-NLS-1$
+				servletName = (String) model
+						.getDefaultProperty(IJAXRSFacetInstallDataModelProperties.SERVLET_NAME);
+			}
+			servletInfoGroup.txtJAXRSServletName.setText(servletName);
 
-    String servletClassname = null;
-    String libraryProviderID = "";
-	LibraryInstallDelegate librariesInstallDelegate = (LibraryInstallDelegate) getDataModel().getProperty(LIBRARY_PROVIDER_DELEGATE);
-	if (librariesInstallDelegate != null && librariesInstallDelegate.getLibraryProvider() != null)
-		libraryProviderID = librariesInstallDelegate.getLibraryProvider().getId();
-    if (root != null) {
-        servletClassname = root.get(libraryProviderID + SETTINGS_SERVLET_CLASSNAME);
-    }
-    if (servletClassname == null) { 
-      servletClassname = JAXRSLibraryProviderUtil.getServletClassName(libraryProviderID);
-      if (servletClassname == null)
-    	  servletClassname = (String) model.getDefaultProperty(IJAXRSFacetInstallDataModelProperties.SERVLET_CLASSNAME);
-    }
-    servletInfoGroup.txtJAXRSServletClassName.setText(servletClassname);
+			String servletClassname = null;
+			String libraryProviderID = "";
+			LibraryInstallDelegate librariesInstallDelegate = (LibraryInstallDelegate) getDataModel()
+					.getProperty(LIBRARY_PROVIDER_DELEGATE);
+			if (librariesInstallDelegate != null
+					&& librariesInstallDelegate.getLibraryProvider() != null)
+				libraryProviderID = librariesInstallDelegate
+						.getLibraryProvider().getId();
+			if (root != null) {
+				servletClassname = root.get(libraryProviderID
+						+ SETTINGS_SERVLET_CLASSNAME);
+			}
+			if (servletClassname == null) {
+				servletClassname = JAXRSLibraryProviderUtil
+						.getServletClassName(libraryProviderID);
+				if (servletClassname == null)
+					servletClassname = (String) model
+							.getDefaultProperty(IJAXRSFacetInstallDataModelProperties.SERVLET_CLASSNAME);
+			}
+			servletInfoGroup.txtJAXRSServletClassName.setText(servletClassname);
 
-    loadURLMappingPatterns(root);
+			loadURLMappingPatterns(root);
   }
 
   private void saveSettings()
@@ -576,7 +601,7 @@
 						Messages.JAXRSFacetInstallPage_ErrorNoWebAppDataModel,
 						e);
 			}
-		}
+		} 
 	}
 
   /*
diff --git a/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/project/facet/JAXRSLibraryPropertyPage.java b/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/project/facet/JAXRSLibraryPropertyPage.java
index 3e2bfd9..e8f36a8 100644
--- a/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/project/facet/JAXRSLibraryPropertyPage.java
+++ b/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/project/facet/JAXRSLibraryPropertyPage.java
@@ -29,6 +29,7 @@
 import java.util.List;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -46,11 +47,13 @@
 import org.eclipse.jst.ws.jaxrs.core.internal.IJAXRSCoreConstants;
 import org.eclipse.jst.ws.jaxrs.core.internal.Messages;
 import org.eclipse.jst.ws.jaxrs.core.internal.project.facet.IJAXRSFacetInstallDataModelProperties;
+import org.eclipse.jst.ws.jaxrs.core.internal.project.facet.JAXRSFacetDelegateUtils;
 import org.eclipse.jst.ws.jaxrs.core.internal.project.facet.JAXRSJ2EEUtils;
 import org.eclipse.jst.ws.jaxrs.core.internal.project.facet.JAXRSJEEUtils;
 import org.eclipse.jst.ws.jaxrs.core.internal.project.facet.JAXRSUtils;
 import org.eclipse.jst.ws.jaxrs.ui.internal.IJAXRSUIConstants;
 import org.eclipse.jst.ws.jaxrs.ui.internal.JAXRSUIPlugin;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
@@ -101,24 +104,31 @@
     	}
     }
     this.webXMLPath = new Path("WEB-INF").append("web.xml"); //$NON-NLS-1$ //$NON-NLS-2$
-    this.provider = JAXRSUtils.getModelProvider(getProject());
-    if (provider != null)
-    	this.webAppObj = provider.getModelObject();
-	if (doesDDFileExist(getProject(), this.webXMLPath)) {
-	    servletInfoGroup = new ServletInformationGroup((Composite) c, SWT.NONE);
-			servletInfoGroup.txtJAXRSServletName.addListener(SWT.Modify,
-					new Listener() {
-						public void handleEvent(Event arg0) {
-							updateValidation();
-						}
-					});
-			servletInfoGroup.txtJAXRSServletClassName.addListener(SWT.Modify,
-					new Listener() {
-						public void handleEvent(Event arg0) {
-							updateValidation();
-						}
-					});
-	    initializeValues();
+    try {
+		if(JAXRSFacetDelegateUtils.isDynamicWebProject(getProject())) {
+		this.provider = JAXRSUtils.getModelProvider(getProject());
+		if (provider != null)
+			this.webAppObj = provider.getModelObject();
+		if (doesDDFileExist(getProject(), this.webXMLPath)) {
+		    servletInfoGroup = new ServletInformationGroup((Composite) c, SWT.NONE);
+				servletInfoGroup.txtJAXRSServletName.addListener(SWT.Modify,
+						new Listener() {
+							public void handleEvent(Event arg0) {
+								updateValidation();
+							}
+						});
+				servletInfoGroup.txtJAXRSServletClassName.addListener(SWT.Modify,
+						new Listener() {
+							public void handleEvent(Event arg0) {
+								updateValidation();
+							}
+						});
+		    initializeValues();
+		}
+		}
+	} catch (CoreException e) {
+		JAXRSUIPlugin.log(IStatus.ERROR,NLS.bind(Messages.JAXRSFacetUninstallDelegate_ConfigErr,
+				getProject().getName()), e);
 	}
     return c;
   }
@@ -237,8 +247,13 @@
 		}
 	  
     // Update the servlet properties
-	if (doesDDFileExist(getProject(), webXMLPath)) {
-	    createServletAndModifyWebXML(getProject(), null, new NullProgressMonitor());
+	try {
+		if (JAXRSFacetDelegateUtils.isDynamicWebProject(getProject()) && doesDDFileExist(getProject(), webXMLPath)) {
+		    createServletAndModifyWebXML(getProject(), null, new NullProgressMonitor());
+		}
+	} catch (CoreException e) {
+		JAXRSUIPlugin.log(IStatus.ERROR,NLS.bind(Messages.JAXRSFacetUninstallDelegate_ConfigErr,
+				getProject().getName()), e);
 	}
     return true;
   }
@@ -284,13 +299,20 @@
 	protected IStatus performValidation() {
 		IStatus superValidation = super.performValidation();
 		if (superValidation.isOK())
-			if (doesDDFileExist(getProject(), this.webXMLPath))
-			  if (servletInfoGroup != null && !servletInfoGroup.isDisposed())
-				  return validateServletInfo(servletInfoGroup.txtJAXRSServletName.getText(), servletInfoGroup.txtJAXRSServletClassName.getText());
-			  else
-			    return Status.OK_STATUS; // superValidation is ok
-			else
-				return Status.OK_STATUS;
+			try {
+				if (JAXRSFacetDelegateUtils.isDynamicWebProject(getProject()) && doesDDFileExist(getProject(), this.webXMLPath))
+				  if (servletInfoGroup != null && !servletInfoGroup.isDisposed())
+					  return validateServletInfo(servletInfoGroup.txtJAXRSServletName.getText(), servletInfoGroup.txtJAXRSServletClassName.getText());
+				  else
+				    return Status.OK_STATUS; // superValidation is ok
+				else
+					return Status.OK_STATUS;
+			} catch (CoreException e) {
+				String errorMessage = NLS.bind(
+						Messages.JAXRSFacetUninstallDelegate_ProjectErr,
+						getProject().getName());
+				return createErrorStatus(errorMessage);
+			}
 		else {
 			return superValidation;
 		}
diff --git a/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/project/facet/JAXRSUserLibraryProviderInstallPanel.java b/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/project/facet/JAXRSUserLibraryProviderInstallPanel.java
index 321bb8b..f10f33c 100644
--- a/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/project/facet/JAXRSUserLibraryProviderInstallPanel.java
+++ b/bundles/org.eclipse.jst.ws.jaxrs.ui/src/org/eclipse/jst/ws/jaxrs/ui/internal/project/facet/JAXRSUserLibraryProviderInstallPanel.java
@@ -18,6 +18,7 @@
  *******************************************************************************/
 package org.eclipse.jst.ws.jaxrs.ui.internal.project.facet;
 
+
 import org.eclipse.jst.common.project.facet.core.libprov.ILibraryProvider;
 import org.eclipse.jst.common.project.facet.core.libprov.IPropertyChangeListener;
 import org.eclipse.jst.common.project.facet.core.libprov.LibraryInstallDelegate;
@@ -242,7 +243,6 @@
     });
     }
 
-    setDownloadCommandEnabled(false);
     initialize();
     return mainComp;
   }
