diff --git a/plugins/org.eclipse.jst.servlet.ui/plugin.xml b/plugins/org.eclipse.jst.servlet.ui/plugin.xml
index ad762bc..58fd819 100644
--- a/plugins/org.eclipse.jst.servlet.ui/plugin.xml
+++ b/plugins/org.eclipse.jst.servlet.ui/plugin.xml
@@ -490,5 +490,17 @@
   		class="org.eclipse.jst.servlet.ui.internal.navigator.FacetedProjectPropertyTester">
 	</propertyTester>
   </extension>
+  <extension
+        point="org.eclipse.ui.ide.projectConfigurators">
+     <projectConfigurator
+           class="org.eclipse.jst.servlet.ui.internal.wizard.ServletProjectConfigurator"
+           label="Java Web">
+        <activeWhen>
+           <hasFileRecursively
+                 filename="web.xml">
+           </hasFileRecursively>
+        </activeWhen>
+     </projectConfigurator>
+  </extension>
 
 </plugin>
diff --git a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/ServletProjectConfigurator.java b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/ServletProjectConfigurator.java
new file mode 100644
index 0000000..1a8ba7b
--- /dev/null
+++ b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/ServletProjectConfigurator.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Red Hat Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * - Mickael Istria (Red Hat Inc.) - initial implementation
+ *******************************************************************************/
+package org.eclipse.jst.servlet.ui.internal.wizard;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.Set;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ProjectScope;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jst.j2ee.project.facet.IJ2EEModuleFacetInstallDataModelProperties;
+import org.eclipse.jst.j2ee.web.project.facet.WebFacetInstallDataModelProvider;
+import org.eclipse.jst.servlet.ui.internal.plugin.ServletUIPlugin;
+import org.eclipse.ui.wizards.datatransfer.ProjectConfigurator;
+import org.eclipse.ui.wizards.datatransfer.RecursiveFileFinder;
+import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class ServletProjectConfigurator implements ProjectConfigurator {
+
+	public boolean canConfigure(IProject project, Set<IPath> ignoredDirectories, IProgressMonitor monitor) {
+		try {
+			RecursiveFileFinder finder = new RecursiveFileFinder("web.xml", ignoredDirectories); //$NON-NLS-1$
+			project.accept(finder);
+			return finder.getFile() != null;
+		} catch (CoreException ex) {
+			ServletUIPlugin.log(ex);
+			return false;
+		}
+	}
+
+	@Deprecated
+	public IWizard getConfigurationWizard() {
+		return null;
+	}
+
+	public void configure(IProject project, Set<IPath> ignoredDirectories, IProgressMonitor monitor) {
+		try {
+			if (!ProjectFacetsManager.isProjectFacetDefined(project.getName())) {
+				IFacetedProject facetedProject = ProjectFacetsManager.create(project, true, monitor);
+				IProjectFacet JAVA_FACET = ProjectFacetsManager.getProjectFacet("jst.java"); //$NON-NLS-1$
+		
+				ProjectScope ps = new ProjectScope(project);
+				IEclipsePreferences JDPprojectNode = ps.getNode(JavaCore.PLUGIN_ID);
+				String compilerCompliance = JDPprojectNode.get(JavaCore.COMPILER_COMPLIANCE, "1.7"); //$NON-NLS-1$
+				if (!facetedProject.hasProjectFacet(JAVA_FACET)) {
+					facetedProject.installProjectFacet(JAVA_FACET.getVersion(compilerCompliance), null, monitor);
+				}
+			}
+			
+			IFacetedProject facetedProject = ProjectFacetsManager.create(project, true, monitor);
+
+			IProjectFacet WEB_FACET = ProjectFacetsManager.getProjectFacet("jst.web"); //$NON-NLS-1$
+			if (!facetedProject.hasProjectFacet(WEB_FACET)) {
+				DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+				DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+				RecursiveFileFinder finder = new RecursiveFileFinder("web.xml", ignoredDirectories); //$NON-NLS-1$
+				project.accept(finder);
+				InputStream webXmlStream = finder.getFile().getContents();
+				Document doc = dBuilder.parse(webXmlStream);
+				webXmlStream.close();
+	
+				IDataModel aFacetInstallDataModel = DataModelFactory.createDataModel(new WebFacetInstallDataModelProvider());
+				aFacetInstallDataModel.setBooleanProperty(IJ2EEModuleFacetInstallDataModelProperties.ADD_TO_EAR, false);
+				String version = ((Element)doc.getElementsByTagName("web-app").item(0)).getAttribute("version"); //$NON-NLS-1$ //$NON-NLS-2$
+				if (version.isEmpty()) {
+					// TODO decide this according to JRE version : Java6 => servlet 2.5; Java 7 => servlet 3.1
+					version = "3.1"; //$NON-NLS-1$
+				}
+				facetedProject.installProjectFacet(WEB_FACET.getVersion(version), aFacetInstallDataModel, monitor);
+			}
+		} catch (Exception ex) {
+			ServletUIPlugin.log(ex);
+		}
+	}
+
+	public boolean shouldBeAnEclipseProject(IContainer container, IProgressMonitor monitor) {
+		return false; // TODO: can we make sure a dir is a JEE project?
+	}
+
+	public Set<IFolder> getDirectoriesToIgnore(IProject project, IProgressMonitor monitor) {
+		return null;
+	}
+
+	public Set<File> findConfigurableLocations(File root, IProgressMonitor monitor) {
+		return Collections.emptySet();
+	}
+}
